Challenges
Sources behave differently: slow feeds, changed article URLs, mixed video formats. Duplicates are removed and full text is fetched in limited batches to stay polite to the sources.
Key decisions
Kept it to two containers (app + PostgreSQL) with no Node, Redis or external AI service, so it is cheap and simple to run and hand over.
Outcome
Runs end to end with real sources. Operator and troubleshooting guides written, and the project has been handed over to the client.