Part of the Ego Hygiene ecosystem
Wealth is a small personal finance "operating system." It brings your income, spending and savings into one place so you can focus on decisions rather than spreadsheets. The goal is to reduce money stress and help you learn by doing.
It might be useful if you:
- want a clear overview of where your money goes
- deal with gig work or other unpredictable income
- are moving through a big life transition and need a simple plan
The project is still evolving, but the aim is to make budgeting approachable and to give you tools that grow with your situation.
This repository contains utilities, a minimal API and a starter UI. Below is the main stack.
| Layer | Technology |
|---|---|
| Frontend | React (Vite) |
| Backend | FastAPI |
| Auth | Keycloak or Google OAuth2 |
| Database | Postgres |
| CLI | Click-powered tools |
| Schema | Pydantic financial models |
The FastAPI service lives under services/api. It uses Keycloak for authentication and also supports Google OAuth2 login.
Set the following environment variables with your Google credentials:
GOOGLE_CLIENT_ID=<client id>
GOOGLE_CLIENT_SECRET=<client secret>Start the API for development with:
uvicorn services.api.main:app --reloadA Vite + React application is located in apps/ui. Install dependencies with pnpm:
cd apps/ui
pnpm installRun the development server:
pnpm devThe UI relies on VITE_API_BASE_URL and related variables to know where the API
and authentication services live. These values are read from the .env.* files
used by Docker Compose so each environment automatically points to the correct
services.
Several compose files make it easy to run the API and UI in different environments. The base configuration lives in docker-compose.base.yml, with environment-specific overrides for development, staging, demo and production.
Example usage for development:
docker-compose -f docker-compose.base.yml -f docker-compose.development.yml up --buildThe compose setup now includes an Apache service for the UI. In development it
exposes ports 8085 and 8086 for HTTP and HTTPS by default.
To use a different environment replace development with production, staging or demo and provide the matching .env.* file.
This project uses Changesets for versioning. When you make changes that should trigger a release, run:
pnpm changesetCommit the generated file inside .changeset/. Merging to main will trigger the release workflow which versions and publishes any packages.
MegaLinter checks formatting and common issues across all packages. Run it locally with:
task lintTo automatically fix problems run:
task lint:fixThe repository includes a small flake.nix describing the tooling used in
development. If you have Nix installed you can enter a
shell with all required packages using:
nix developThe dev container is configured to install Nix and use this flake, providing a
consistent setup across machines. The devtools feature verifies asdf and the
task command from the Nix packages, then installs MegaLinter so you can run
task lint directly inside the container.
Fast checks run automatically via pre-commit. The dev
container installs the tool and runs pre-commit install for you. If working
outside the container make sure pre-commit is available and run:
pre-commit installHooks like Black and Prettier will then execute before each commit.
The repository includes a gitleaks configuration. Scan for secrets locally with:
task secretsThe pre-commit hook also runs gitleaks using the .gitleaks.toml file.
This repository uses commitlint to enforce the
Conventional Commits specification.
After running pnpm install Husky installs a commit-msg hook that runs
commitlint automatically. Make sure your commit messages follow the standard so
the hook passes.
The documentation is built with Docusaurus. To run it locally:
cd docs
pnpm install
pnpm startChanges pushed to main will automatically build and publish the site to GitHub Pages.