# What does a project need?
1. Source Code
- put packages inside a `src/` directory
2. Development Environment and Language Tools
- package manager: `uv`
- editor/lsp client: neovim
- lsp/type checker: `pyright` and `mypy` (looking into `ty`)
- linter/formatter: `ruff` (equivalent to `isort` and `black`)
- debugger: `pdb`
3. Tests and testing environment
- Docker and docker-compose to create and run tests in environment
4. CI
- github actions to run docker-compose service
- rerun sphinx+autodoc to regenerate API docs
- rerun static site generator
5. CD
- github actions?
5. API Documentation Generator
- Sphinx and autodoc
6. Other docs
- markdown in doc/ folder
- static site generator (Hugo or Mkdocs)
- hosted on github pages. updated via CI
- document installation, devops/maintenance commands, etc.
- generally a fan of documentation over makefiles
7. Package Management
- using `uv`
- pyproject.toml
8. Dependencies
- pyproject.toml
- requirements.txt