Thanks for your interest in contributing!
git clone https://github.com/hemati/tonnd.git
cd tonnd
cp .env.example .env
# Edit .env (see .env.example for instructions)
docker compose upFrontend: http://localhost:5173 | Backend: http://localhost:8080 | API Docs: http://localhost:8080/docs
# Backend
cd backend
python -m venv ../.venv
source ../.venv/bin/activate
pip install -r requirements.txt
uvicorn app:app --port 8080
# Frontend
cd frontend
npm install
npm run devRun these before committing:
# Backend
cd backend
ruff check . # Lint
ruff format . # Format
# Frontend
cd frontend
npm run lint # ESLint
npx tsc --noEmit # Type check- Fork the repo and create a feature branch from
main - Make your changes
- Run lint + type checks (see above)
- Test manually:
docker compose upand verify your changes work - Open a PR with a clear description of what you changed and why
Check the issues for open tasks. Good first issues are labeled accordingly.
- Backend: FastAPI with fastapi-users for auth, SQLAlchemy async for DB
- Frontend: React 18 + TypeScript, no state management library (React Query handles server state)
- Auth: JWT tokens stored in localStorage, Google OAuth optional
- Fitbit tokens: Encrypted at rest with Fernet
See AGENTS.md for the full architecture reference.