Thank you for your interest in contributing! Here's how to get started.
See DEVELOPMENT.md for local setup instructions.
Open an issue with:
- Description of the bug
- Steps to reproduce
- Expected vs actual behavior
- Environment (OS, Python version, etc.)
Open an issue describing the feature and its use case.
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes
- Add tests for new functionality
- Ensure all tests pass:
python -m pytest tests/ -v - Lint your code:
ruff check . && ruff format . - Commit with a descriptive message
- Push and open a PR
- Python: Follow PEP 8, enforced by ruff
- TypeScript: ESLint with Next.js config
- Commits: Use conventional commits (
feat:,fix:,docs:, etc.)
For significant changes, please open an issue first to discuss the approach.
tokenmeter/
├── backend/ # FastAPI proxy + API
├── frontend/ # Next.js dashboard
├── sdks/ # Python + Node.js SDKs
├── database/ # SQL schemas
├── infra/ # Terraform + Fly.io
├── tests/ # Backend tests
└── docs/ # Documentation
By contributing, you agree that your contributions will be licensed under the MIT License.