A secure financial management application with end-to-end encryption, built with Rust (Axum) backend and SvelteKit frontend.
- π Secure Authentication - JWT-based authentication with bcrypt password hashing
- π RSA Encryption - End-to-end encryption for sensitive data
- πΈ Expense Tracking - Track and categorize your expenses
- π Subscription Management - Monitor recurring subscriptions
- ποΈ SQLite Database - Lightweight and portable database
- π³ Docker Ready - Single unified container for easy deployment
- π± Responsive UI - Modern SvelteKit frontend with Tailwind CSS
- π API Documentation - Interactive Swagger UI
docker run -d \
--name financevault \
-p 8000:8000 \
-p 3000:3000 \
-v financevault_data:/data \
-e JWT_SECRET=$(openssl rand -hex 32) \
-e RUST_LOG=info \
ghcr.io/codemaster4711/financevault:latest# Download and run the start script
curl -O https://raw.githubusercontent.com/CodeMaster4711/FinanceVault/main/start-docker.sh
chmod +x start-docker.sh
./start-docker.sh# Create .env file with JWT secret
echo "JWT_SECRET=$(openssl rand -hex 32)" > .env
# Start with docker-compose
docker-compose up -d
# View logs
docker-compose logs -f- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- API Documentation: http://localhost:8000/swagger-ui
- Rust (nightly) - Backend development
- Node.js 20+ - Frontend development
- Docker - For containerized development
- SQLite - Database
cd backend
# Install dependencies
cargo build
# Run migrations
cargo run --bin migration
# Start development server
cargo runcd frontend
# Install dependencies
npm install
# Start development server
npm run dev# Build Docker image
docker build -t financevault:local .
# Run locally built image
docker run -d \
--name financevault \
-p 8000:8000 \
-p 3000:3000 \
-v financevault_data:/data \
-e JWT_SECRET=$(openssl rand -hex 32) \
financevault:local# Start container
docker start financevault
# Stop container
docker stop financevault
# View logs
docker logs -f financevault
# Restart container
docker restart financevault
# Remove container
docker rm -f financevault# Check container status
docker ps -a | grep financevault
# Access container shell
docker exec -it financevault /bin/bash
# View backend logs only
docker logs financevault 2>&1 | grep "\[BACKEND\]"
# View frontend logs only
docker logs financevault 2>&1 | grep "\[FRONTEND\]"| Variable | Required | Default | Description |
|---|---|---|---|
JWT_SECRET |
Yes | - | Secret key for JWT token generation (min 32 chars) |
RUST_LOG |
No | info |
Log level (debug, info, warn, error) |
DATABASE_URL |
No | sqlite:/data/finance.db |
Database connection string |
FRONTEND_URL |
No | http://localhost:3000 |
Frontend URL for CORS |
# Generate a secure random JWT secret
openssl rand -hex 32JWT_SECRET in production!
The application uses SQLite with automatic migrations. The database file is stored in /data/finance.db inside the container, which is persisted using Docker volumes.
# Create backup
docker cp financevault:/data/finance.db ./backup-$(date +%Y%m%d).db
# Restore backup
docker cp ./backup-20250104.db financevault:/data/finance.db
docker restart financevaultβββββββββββββββββββββββββββββββββββββββββββββββ
β Docker Container β
β β
β ββββββββββββββββ ββββββββββββββββββββ β
β β Frontend β β Backend β β
β β SvelteKit βββββΆβ Rust (Axum) β β
β β Port 3000 β β Port 8000 β β
β ββββββββββββββββ ββββββββββββββββββββ β
β β β
β ββββββββΌβββββββββ β
β β SQLite DB β β
β β /data/ β β
β βββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββ
# Backend tests
cd backend
cargo test
# Frontend tests
cd frontend
npm test
# Test Docker build
./test-docker.shPOST /api/register- Register new userPOST /api/login- Login userPOST /api/logout- Logout userGET /api/user- Get user profile
GET /api/expenses- List expensesPOST /api/expenses- Create expenseGET /api/expenses/:id- Get expensePUT /api/expenses/:id- Update expenseDELETE /api/expenses/:id- Delete expense
GET /api/subscriptions- List subscriptionsPOST /api/subscriptions- Create subscriptionGET /api/subscriptions/:id- Get subscriptionPUT /api/subscriptions/:id- Update subscriptionDELETE /api/subscriptions/:id- Delete subscription
We use Conventional Commits for semantic versioning.
See CONTRIBUTING.md for detailed guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Axum web framework
- Frontend powered by SvelteKit
- Database managed with SeaORM
- UI components from shadcn-svelte
- π Documentation
- π Report Bug
- π‘ Request Feature
Made with β€οΈ by the FinanceVault Team