A professional, mobile-first personal finance management application built with Go and React.
- Multi-user Support: Secure registration and authentication with session-based cookies
- Multiple Account Types: Cash, Debit Card, Credit Card, Loan, Savings, Investment
- Transaction Tracking: Categorized transactions with detailed history
- Financial Overview: Assets vs Liabilities dashboard with net worth calculation
- Multi-currency Support: Track accounts in different currencies
- Mobile-first Design: Responsive UI optimized for mobile and desktop
- Backend: Go with Chi router and SQLite
- Frontend: React 18 + Vite + TailwindCSS + Framer Motion
- Deployment: Docker with GitHub Actions CI/CD
- Go 1.24+
- Node.js 20+
- npm or pnpm
# Clone the repository
git clone https://github.com/kengru/odin-wallet.git
cd odin-wallet
# Option 1: Build frontend and run Go server (single terminal, no HMR)
make dev-build
# Option 2: Run with hot-reload (requires 2 terminals)
# Terminal 1:
make dev-backend
# Terminal 2:
make dev-frontend# Start the backend (from root directory)
go mod download
go run cmd/server/main.go
# In a separate terminal, start the frontend
cd frontend
npm install
npm run dev| Command | Description |
|---|---|
make dev-build |
Build frontend and run Go server (single terminal) |
make dev-backend |
Run Go server only |
make dev-frontend |
Run Vite dev server with HMR |
make build |
Build production binary |
make run |
Run Go server (assumes frontend already built) |
make clean |
Remove build artifacts |
- Backend runs on
http://localhost:7009 - Frontend dev server runs on
http://localhost:5173(proxies API requests to backend)
# Pull the latest image
docker pull ghcr.io/kengru/odin-wallet:latest
# Run with persistent data volume
docker run -d \
--name odin-wallet \
-p 7009:7009 \
-v $(pwd)/wallet-data:/app/data \
-e SESSION_SECRET=your-secure-secret-here \
ghcr.io/kengru/odin-wallet:latestAccess the application at http://localhost:7009
# Build the Docker image
docker build -t odin-wallet .
# Run the container
docker run -d \
--name odin-wallet \
-p 7009:7009 \
-v $(pwd)/wallet-data:/app/data \
-e SESSION_SECRET=your-secure-secret-here \
odin-wallet| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 7009 |
SESSION_SECRET |
Secret key for session cookies (required in production) | dev-secret-change-in-production |
DB_PATH |
Path to SQLite database file | ./data/wallet.db |
| Type | Description | Balance Field |
|---|---|---|
| Cash | Physical cash tracking | current_balance |
| Debit Card | Bank debit/checking accounts | current_balance |
| Credit Card | Credit cards with limit tracking | credit_owed |
| Loan | Loans with payment tracking | loan_current_owed |
| Savings | Savings accounts with interest | current_balance + yearly_interest_rate |
| Investment | Investment accounts | current_balance + yearly_interest_rate |
Groceries, Dining, Transport, Utilities, Rent, Healthcare, Entertainment, Shopping, Subscriptions, Games, Travel, Education, Fitness, Personal, Gifts, Income, Transfer, Other
POST /api/auth/register- Register a new userPOST /api/auth/login- LoginPOST /api/auth/logout- LogoutGET /api/auth/me- Get current user
GET /api/accounts- List all accountsPOST /api/accounts- Create accountGET /api/accounts/:id- Get account detailsPUT /api/accounts/:id- Update accountDELETE /api/accounts/:id- Delete accountGET /api/overview- Get financial overview
POST /api/accounts/:id/transactions- Create transactionGET /api/accounts/:id/transactions- List account transactionsGET /api/transactions/recent- Get recent transactions across all accounts
wallet/
├── cmd/server/ # Go server entry point
├── internal/
│ ├── handlers/ # HTTP request handlers
│ ├── middleware/ # Auth middleware
│ ├── models/ # Data models
│ └── services/ # Business logic
├── pkg/database/ # SQLite initialization
├── frontend/
│ ├── src/
│ │ ├── api/ # API client
│ │ ├── components/ # React components
│ │ ├── contexts/ # React contexts
│ │ ├── pages/ # Page components
│ │ └── types/ # TypeScript types
│ └── ...
├── Dockerfile
├── .github/workflows/ # CI/CD
└── README.md
Private - Odin Company
Built with 💛 by Odin