Report Generator is a full-stack research workflow for building long-form scientific or analytical reports from structured evidence instead of one-shot prompting.
It combines a React frontend with a FastAPI backend, SQLite persistence, source-quality checks, report-quality checks, versioned report runs, and export pipelines for Markdown, PDF, and DOCX.
- Create research projects from a topic or guiding question
- Generate a report outline and deep research questions with an LLM
- Ingest evidence from shared URLs, pasted text, and uploaded
.md,.txt, or.docxfiles - Normalize sources, preserve provenance, and archive research artifacts
- Run source QA before synthesis and report QC after generation
- Generate, revise, score, refine, and export report versions
- Frontend: React, TypeScript, Vite
- Backend: FastAPI, SQLAlchemy, SQLite
- LLM provider: OpenRouter
- Export formats: Markdown, PDF, DOCX
backend/ FastAPI app, database models, routers, services, tests, scripts
frontend/ React SPA used to manage the report workflow
start.sh Starts backend and frontend dev servers together
- Python 3.11+
- Node.js 20+
- npm 10+
- Create the backend virtual environment and install Python dependencies.
python3 -m venv venv
./venv/bin/pip install -r backend/requirements.txt- Install frontend dependencies.
cd frontend
npm install
cd ..- Create a local environment file.
cp .env.example .envSet at least:
OPENROUTER_API_KEYDEFAULT_MODEL(optional, defaults togoogle/gemini-2.5-flash-lite)DATABASE_URL(optional; defaults to local SQLite inbackend/data/app.db)
- Start both apps.
./start.shAfter startup:
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:8000 - API docs:
http://localhost:8000/docs
Backend:
cd backend
../venv/bin/uvicorn main:app --reload --host localhost --port 8000Frontend:
cd frontend
npm run dev -- --host localhostIf you need the frontend to talk to a non-default API URL, set VITE_API_BASE_URL before starting Vite.
Backend tests:
./venv/bin/pytestFrontend production build:
cd frontend
npm run build- Local databases, uploads, archives, exports, and LLM logs are stored under
backend/data/and are not meant to be committed. - The backend creates missing data directories automatically on startup.
backend/scripts/backfill_legacy_project.pycan be used to backfill legacy projects into the current storage model.
- Create a project
- Generate an outline
- Generate research questions
- Add evidence for each question
- Review source QA results
- Synthesize a report draft
- Run QC, scoring, and refinement
- Export the final report and supplement