Back
Editorial pipeline with human reviewOn hold
Professional project
Dixta — AI Content Automation
- Laravel
- Python
- Scrapling
- FastAPI
- DeepSeek
Problem
Tracking environmental and regulatory sources by hand scatters editorial work across searching, selecting, writing and distributing.
Context
A professional platform built at GreenSoft together with another developer, independent from the WhatsApp assistant. A Laravel core orchestrates the pipeline and a Python microservice handles extraction with Scrapling.
Objective
Turn configured sources into reviewable drafts while keeping human editorial control and pipeline traceability.
My role
- Built the first version of the platform and a large part of its evolution: scraping, candidate selection, draft generation and publishing.
- Hardened the Python extraction microservice: article validation, URL-based deduplication and browser rendering when a site requires it.
- Implemented draft validations and the review flow: nothing is published without a person approving it.
- Migrated the draft generator model to DeepSeek.
Architecture & decisions
- Laravel owns the database, queues, candidate selection, drafts and publishing; the FastAPI + Scrapling scraper is stateless.
- The normalized URL and its hash are the deduplication contract between both services.
- The generator model went through several stages: it started with local models and today it is DeepSeek. The Bitrix24 integration and the llama.cpp server were removed.
- The model must return a JSON object with fixed fields; if the result fails validation, the draft falls back to a deterministic template.
- Publishing is a separate action from approving: a draft goes through human review before it goes out.
Architecture flow
- 01Sources
- 02Python + Scrapling
- 03Laravel + queues + DeepSeek
- 04Human review
Solution
- Daily extraction from configured sources, with relevance and age filters.
- Article persistence and deduplication before spending inference.
- Draft generation with DeepSeek, validated and normalized before being shown.
- A panel to edit, regenerate, approve or reject each draft, with LinkedIn publishing only after approval.
Challenges & trade-offs
- Keeping extraction reliable across heterogeneous sources without coupling it to the database.
- Avoiding duplicates and irrelevant content before spending inference or editorial time.
- Separating automation from publishing: the model proposes and a person keeps the final decision.
Learnings
- Clear boundaries between orchestrator and scraper make each part easier to test, replace and deploy.
- Draft quality depends as much on selection and context as on the model used.
Result
It ran in production and is currently on hold. Sources, credentials and sensitive internal details are omitted.