Thank you for your interest in contributing! ensuring code quality and consistency is our top priority.
- Fork the repository.
- Clone your fork locally.
- Install dependencies using
make installinbackend/.
We use Ruff for linting and formatting.
- Linting: Run
make lintbefore committing. - Formatting: Run
make formatto auto-fix style issues. - Type Hinting: We encourage type hints (MyPy).
- Create a branch for your feature:
git checkout -b feature/amazing-feature. - Commit your changes:
git commit -m "feat: Add amazing feature".- Please follow Conventional Commits.
- Push to the branch:
git push origin feature/amazing-feature. - Open a Pull Request.
- API Design: Follow RESTful conventions. Use
schemas/for Pydantic models. - API Responses: MUST follow
docs/API_RESPONSE_SPEC.md.- Backend: Use
create_structured_error()fromapp.core.responses. - Frontend: All API calls MUST use
apiFetchfromutils/apiClient(enforced by ESLint).
- Backend: Use
- Database: Use SQLAlchemy Async ORM. Changes require Alembic migrations.
- Async: All I/O bound operations (DB, HTTP, File) MUST be async.
- Services: Logic belongs in
services/, not API routers. - Port Management: STRICT RULE. Before adding any new service or port binding:
- Consult
docs/PORT_REGISTRY.mdto find an available port. - Register your new port in that document.
- NEVER hardcode ports; use environment variables with defaults matching the registry.
- Consult
- Add unit tests for new logic in
tests/. - Run
make testto ensure no regressions.