backend/ # FastAPI Python service (app/main.py entrypoint)
frontend/ # Next.js 15 / React 19 app
database/migrations/ # PostgreSQL schema migrations
backend/scripts/ # ETL and utility scripts
backend/tests/ # unit/, integration/
docs/ # Architecture, guides, and diagrams
All commands available via make:
make help # List everything
make dev # Start both servers
make test # Run backend tests
make lint # Lint both projects# Backend
make backend-dev # uvicorn app.main:app --reload --port 5555
make backend-test # pytest
make backend-lint # ruff check .
make backend-format # black .
make backend-typecheck # mypy app
make backend-migrate # Apply DB migrations
# Frontend
make frontend-dev # npm run dev (localhost:5556)
make frontend-lint # npm run lint
make frontend-typecheck # tsc --noEmit
# Infrastructure
make infra-up # docker-compose up -d
make infra-down # docker-compose down💡 Full reference: docs/makefile-commands.md
DATABASE_URL- PostgreSQL connection stringJWT_SECRET- Authentication secretLLM_PROVIDER-deepseekoropenaiDEEPSEEK_API_KEYorOPENAI_API_KEY- LLM API keyCHROMA_PERSIST_DIR- Vector DB storage pathRESEND_API_KEY- Email deliveryFROM_EMAIL- Must beservice@bestitconsulting.ca(verified Resend domain)
NEXT_PUBLIC_BACKEND_API_URL=http://localhost:5555
| Layer | Technologies |
|---|---|
| Frontend | Next.js 15, React 19, TypeScript, TailwindCSS 4, TanStack Query |
| Backend | FastAPI, SQLAlchemy (async), asyncpg, Pydantic v2 |
| Vector DB | ChromaDB 0.4+ |
| RAG | LangChain, SentenceTransformer embeddings |
| LLM | DeepSeek / OpenAI GPT-4 |
| Auth | JWT with bcrypt |
| Tool | Config |
|---|---|
| Python lint | ruff (pyproject.toml - line-length 100) |
| Python format | black (line-length 100) |
| Python types | mypy with pydantic plugin |
| JS/TS lint | ESLint (next/core-web-vitals) |
| JS/TS format | Prettier (semi: false, singleQuote: true, printWidth: 100) |
pytestwith markers:unit,integration,slow- Test files:
backend/tests/unit/andbackend/tests/integration/ - Run single test:
pytest backend/tests/unit/test_file.py
- Migrations live in
database/migrations/ - Apply manually via
psqlorpython backend/scripts/run_migrations.py - Docker:
docker exec -i auto-bidder-postgres psql -U postgres -d auto_bidder_dev < path/to/migration.sql
- Swagger UI: http://localhost:5555/docs
- ReDoc: http://localhost:5555/redoc
- Health check: http://localhost:5555/health
- LLM Provider: Default is DeepSeek; OpenAI is alternative. Set via
LLM_PROVIDERenv var. - Email: Always use
service@bestitconsulting.caas FROM address (verified domain). - ChromaDB: Per-user collections;
EMBED_MODEL=sentence-transformers/all-MiniLM-L6-v2 - Job Discovery: HuggingFace datasets by default (
USE_HF_DATASET=true)