H.O.M.E. (Household Operations, Management & Essentials) backend built with FastAPI.
A modular, scalable backend intended to help families manage household tasks in real-time.
⚠️ This project is under active development. Current implementation is an early prototype.
H.O.M.E. aims to provide a centralized backend system for managing everyday household activities. The system is designed to be modular and flexible, allowing different components to evolve independently while potentially interacting with each other in meaningful ways.
- Shopping – tracking items, generating lists, and possibly linking with recipes
- Recipes – storing and managing recipes, potentially connected to shopping lists
- Tasks – managing household chores and recurring activities
- Calendar – scheduling tasks, shopping trips, or events
- Finance - budgets, and spending patterns
These are planned or conceptual modules. Their existence and design may evolve over time as the project grows.
- Provide a clean, modular FastAPI backend
- Enable easy integration with multiple frontend clients (mobile, web)
- Support real-time features such as notifications and task updates
- Serve as a portfolio project demonstrating software architecture, API design, and scalable backend practices
This project uses (Python 3.13)[https://www.python.org/], and optionally, Make is recommended to simplify common tasks.
For package and project management, it uses (UV)[https://docs.astral.sh/uv/].
For linting and formatting, it uses (Ruff)[https://astral.sh/ruff],
both are powerful open-source projects written in Rust under the MIT License.
For static type checking, it uses (Pyright)[https://microsoft.github.io/pyright/#/].
For development, you don’t necessarily need Python installed on your system.
If you don’t have Python 3.13, UV will install it along with all other required dependencies.
To set up your development environment, follow these 3 steps:
- (Install UV)[https://docs.astral.sh/uv/getting-started/installation/]
$ uv sync$ uv run pre-commit install
Or, if you have Make, simply run:
make install-dev-dependenciesThis project uses several tools to make development easier and more consistent:
| Tool | Purpose |
|---|---|
| UV | Managing dependencies, virtual environments, and fixed requirements for reproducibility |
| Ruff | Linting and formatting Python code |
| Pyright | Static type checking |
| pre-commit | Automatically runs formatters and updates locked dependencies before commits |
| Podman | Local containerization |
| pytest / unittest | Running tests and measuring coverage |
| GitHub Actions | CI workflows for linting, type checking, testing, coverage, and building Docker images |
All common development tasks are exposed via make commands:
| Command | Description |
|---|---|
run |
Run the app locally with uvicorn --reload on PORT=8080 |
build |
Build a container image with dependencies exported to requirements.txt |
start-container |
Start the container in detached mode |
start-container-it |
Start the container interactively |
stop |
Stop the running container |
linter |
Run ruff check to lint Python code |
linter-fix |
Run ruff check --fix to automatically fix lint issues |
formatter |
Run ruff format to automatically format code |
type-checker |
Run pyright to check static types |
test |
Run all unit tests with unittest |
coverage |
Run tests with coverage reporting via pytest |
install-dev-dependencies |
Install all dependencies and pre-commit hooks for development |
The repository includes pre-commit hooks to automatically ensure code quality before every commit:
- Format all Python files in the commit (if under the
app/folder). - Update locked dependencies if
pyproject.tomlchanges.
✅
uv.lockis versioned in the repository to ensure reproducibility. You do not need to runuv lock --devunless you add or update dependencies.
These hooks run automatically before each commit.
You can also manually run them on all files:
pre-commit run --all-filesThe project is integrated with GitHub Actions to automatically run code quality checks, tests, type checking, coverage, and Docker builds on:
- Pushes to feature branches
- Pull requests to main
- Tag pushes for releases
- All Python dependencies (main + dev) are locked in
uv.lockfor reproducible environments. - Use
uv syncafter pulling updates to ensure your local environment matches the lock file. - Using the Makefile simplifies repetitive tasks and ensures consistent commands across all developers.