A web-based budget management application to help users track expenses, set goals, and visualize their financial data.
This repository is a monorepo managed with npm workspaces and contains both the frontend and the backend applications.
habu/
├── apps/
│ ├── frontend/ # React + Vite app (@habu/frontend)
│ └── backend/ # Backend service (@habu/backend) — code to be added
├── package.json # Root workspace config & shared scripts
└── README.md
- Node.js (LTS recommended)
- npm 8+ (required for workspaces)
Install dependencies for all workspaces from the repo root:
npm installnpm run dev:frontend
# or simply
npm run devBy default the dev server listens on --host, so it is reachable on your local network as well.
Once the backend code has been added to apps/backend:
npm run dev:backend| Script | Description |
|---|---|
npm run dev |
Alias for dev:frontend. |
npm run dev:frontend |
Start the frontend Vite dev server. |
npm run dev:backend |
Start the backend dev server. |
npm run build |
Build all workspaces that define a build script. |
npm run build:frontend |
Build only the frontend. |
npm run build:backend |
Build only the backend. |
npm run lint |
Run lint in every workspace that defines it. |
npm run format |
Prettier-format the whole repo. |
npm run preview |
Preview the production frontend build. |
You can always target a single workspace directly:
npm run <script> --workspace @habu/frontend
npm run <script> --workspace @habu/backendThe frontend reads VITE_API_URL from apps/frontend/.env:
VITE_API_URL=http://localhost:3000/apiIf unset, it defaults to http://localhost:3000/api.
Frontend
- React 19
- TypeScript
- Vite 8
- React Router 7
- Axios
- shadcn/ui
- Tailwind CSS 4
- Zod + TanStack React Form
Backend
- Node.js + TypeScript
- Express
- PostgreSQL
- Drizzle ORM + Drizzle Kit
- JWT + bcrypt
- Docker Compose (local Postgres)