Lightweight full-stack app for weekly Technology news intelligence from Vietnamese sources (VnExpress, Thanh Nien, Tuoi Tre).
- Backend: FastAPI (
/backend) - Frontend: React + Vite (
/frontend)
- Python 3.11+
- Node.js 18+
uv(recommended for backend)
cd backend
cp .env.example .envSet your key in .env:
GEMINI_API_KEY=your_api_key_hereInstall + run:
uv sync
uv run uvicorn main:app --reload --host 127.0.0.1 --port 8000Backend URLs:
- API docs:
http://127.0.0.1:8000/docs - Health:
http://127.0.0.1:8000/api/health
cd frontend
npm install
npm run devFrontend URL:
http://localhost:5173
From backend docs (/docs) or cURL:
curl -X POST "http://127.0.0.1:8000/api/pipeline/run" \
-H "Content-Type: application/json" \
-d '{"topic":"technology","days":7,"prompt_version":"analyst_v2"}'Check status:
curl "http://127.0.0.1:8000/api/pipeline/status"Use prompt_version when running the pipeline:
structured_v1: strict structured outputanalyst_v2: richer analyst-style writingzero_shot: simple baseline
Where to mention prompt choice:
- In this README: list available options (this section).
- In each report: store which prompt was used for reproducibility.
Current behavior:
prompt_versionis returned by/api/pipeline/run.- report filename already includes it, e.g.
weekly_report_technology_analyst_v2.json.
Recommended report metadata block (optional):
{
"metadata": {
"prompt_version": "analyst_v2",
"generated_at": "2026-04-23T10:30:00+07:00",
"model": "gemini-2.5-flash-preview-04-17"
}
}- Processed data:
backend/data/processed/ - Reports:
backend/data/reports/
Current frontend is in demo mode (loads local JSON in frontend/public/demo) and does not call backend APIs yet.
Contributions are welcome. To keep changes aligned:
- Open an issue first and describe the problem/idea.
- Wait for maintainer feedback on scope.
- Submit a focused pull request linked to that issue.
Quick start:
- Create issue:
Issuestab ->New issue - Suggested labels:
bug,enhancement,documentation - Keep PRs small and include clear reproduction/validation steps
This project is licensed under the MIT License. See LICENSE.

