Personal and family finance management system with multi-currency support and automatic balance calculation.
- β Business Requirements - Complete
- β System Requirements - Complete
- β Database Schema - Complete (7 tables, production-ready)
- β Backend API - Complete (23 REST endpoints with JWT auth)
- β OpenAPI Documentation - Complete (Swagger UI available)
- β Frontend MVP - Complete (Full CRUD for Accounts, Categories, Transactions)
- π§ͺ Testing & QA - In Progress (Stage 5)
- π° Multi-currency support (RSD/EUR/USD with automatic conversion)
- π¦ Multiple account types (cash, bank, credit, savings, investment)
- π·οΈ Hierarchical categories (parent-child structure for income/expense)
- π Automatic balance calculation via database triggers
- π₯ Multi-user families with data isolation
- π JWT authentication with family-based access control
- π Transaction management with filters and pagination
- π Financial dashboard with monthly summary
- π± Responsive UI built with Vue.js 3 and Tailwind CSS
- π Advanced filtering by type, account, date range
- π Pagination for large transaction lists
- Language: Go 1.23+
- Router: Chi v5
- Database: PostgreSQL 16
- Query Builder: sqlc (type-safe SQL)
- Authentication: JWT tokens
- API Docs: Swagger/OpenAPI 2.0
- Framework: Vue.js 3 (Composition API)
- Styling: Tailwind CSS
- Form Validation: VeeValidate + Zod
- State Management: Pinia
- HTTP Client: Axios
- Build Tool: Vite
- UI Components: Custom component library
Located in Documentation/:
expense_tracker_brd.mdβ Business Requirements Documentexpense_tracker_srs_mvp.mdβ System Requirements (MVP)- PDF exports available in
Documentation/PDF/
Interactive Swagger UI: Available at /swagger/index.html when running the server
- OpenAPI 2.0 specification with full endpoint documentation
- Request/Response examples for all 23 endpoints
- Try it out functionality for testing endpoints directly
- Schema definitions for all DTOs
- Authentication flow documentation
Generated specification files in Documentation/swagger/:
swagger.json- OpenAPI specification (machine-readable)swagger.yaml- OpenAPI specification (human-readable)docs.go- Embedded Go documentation
Production-ready PostgreSQL schema with:
- 7 core tables: families, users, accounts, categories, transactions, exchange_rates, audit_log
- 5 triggers: automatic timestamp updates, balance calculation, audit logging
- 4 functions: balance recalculation, exchange rate lookup, audit trail
- 40+ indexes: optimized for common query patterns
- Complete rollback migrations: every migration has a corresponding drop script
See database/migrations/README.md for details.
# Apply all migrations (in order):
001 create families table.sql
002 create users table.sql
003 create accounts table.sql
004 create categories table.sql
005 create transactions table.sql
006 create exchange rates table.sql
007 create audit log table.sql
# Load demo data:
009 demo seed data.sqlDemo credentials:
- Email:
demo@example.com - Password:
Demo123!
The REST API includes 23 endpoints across 6 categories:
POST /api/v1/auth/login- User login with JWT
GET /health- Health checkGET /ready- Readiness probe
GET /api/v1/accounts- List all accountsPOST /api/v1/accounts- Create accountGET /api/v1/accounts/{id}- Get account detailsPATCH /api/v1/accounts/{id}- Update accountDELETE /api/v1/accounts/{id}- Delete accountGET /api/v1/accounts/{id}/balance- Get account balance
GET /api/v1/categories- List all categoriesPOST /api/v1/categories- Create categoryGET /api/v1/categories/{id}- Get category detailsPATCH /api/v1/categories/{id}- Update categoryDELETE /api/v1/categories/{id}- Delete category
GET /api/v1/transactions- List transactions (with filters & pagination)POST /api/v1/transactions- Create transactionGET /api/v1/transactions/{id}- Get transaction detailsPATCH /api/v1/transactions/{id}- Update transactionDELETE /api/v1/transactions/{id}- Delete transaction
GET /api/v1/reports/spending-by-category- Spending analysisGET /api/v1/reports/monthly-summary- Monthly financial summary
GET /api/v1/currencies/rates- Get exchange ratesGET /api/v1/currencies/convert- Convert currency
π Full documentation with examples: Visit /swagger/index.html after starting the server
Testing environment: https://api.test.expensetracker.digitlock.systems
Note: The application is currently undergoing quality assurance testing. Minor bugs and UI improvements are being addressed.
expense-tracker/
βββ Documentation/ # Business and system requirements
β βββ expense_tracker_brd.md
β βββ expense_tracker_srs_mvp.md
β βββ swagger/ # OpenAPI documentation
β β βββ docs.go # Generated Swagger docs
β β βββ swagger.json # OpenAPI 2.0 spec
β β βββ swagger.yaml # OpenAPI 2.0 spec (YAML)
β βββ *_SUMMARY.md # Development stage summaries
βββ database/
β βββ migrations/ # SQL migration files
βββ cmd/
β βββ server/ # Application entry point
βββ internal/
β βββ api/ # HTTP handlers and routing
β β βββ handlers/ # Request handlers (with Swagger annotations)
β β βββ middleware/ # Auth, logging, recovery
β βββ auth/ # JWT service
β βββ config/ # Configuration management
β βββ database/ # Database layer
β β βββ queries/ # SQL queries for sqlc
β β βββ sqlc/ # Generated type-safe code
β βββ dto/ # Data transfer objects (with Swagger tags)
β βββ repository/ # Business logic layer
βββ frontend/ # Vue.js 3 application
β βββ src/
β β βββ api/ # API client
β β βββ components/ # Reusable components
β β β βββ forms/ # Form components
β β β βββ modals/ # Modal dialogs
β β β βββ ui/ # Base UI components
β β βββ composables/ # Vue composables
β β βββ router/ # Vue Router config
β β βββ schemas/ # Zod validation schemas
β β βββ stores/ # Pinia stores
β β βββ types/ # TypeScript types
β β βββ views/ # Page components
β βββ public/
β βββ package.json
βββ .env # Environment variables
βββ go.mod # Go module definition
βββ sqlc.yaml # sqlc configuration
- Schema design
- Migration scripts
- Automatic balance calculation
- Audit logging
- Demo seed data
- Database package (Go + sqlc)
- REST API endpoints (23 endpoints)
- JWT authentication
- Business logic layer
- Input validation
- CORS configuration
- Family-based data isolation
- OpenAPI/Swagger specification
- Interactive API documentation (Swagger UI)
- Request/Response examples
- Authentication flow documentation
- Postman collection export
- Vue.js 3 setup with Vite
- API client with Axios
- Authentication UI (Login)
- Dashboard with financial summary
- Accounts management (full CRUD)
- Categories management (full CRUD with hierarchy)
- Transactions management (full CRUD with filters)
- Form validation with VeeValidate + Zod
- Responsive design with Tailwind CSS
- Reusable component library
- Manual testing (in progress)
- Bug fixes and improvements
- Unit tests (backend)
- Integration tests
- E2E tests (frontend)
- Performance optimization
- Security audit
- Docker containerization
- CI/CD pipeline
- Production deployment
- Monitoring and logging
- Backup strategy
This project is licensed under the MIT License.
See the LICENSE file for details.
Igor Kudinov
This project is part of my professional portfolio demonstrating:
- Requirements analysis and documentation
- Database design and implementation
- Backend development (Go)
- REST API design
- OpenAPI/Swagger documentation
- Type-safe code generation (sqlc)
- Frontend development (Vue.js 3)
- Full-stack application architecture
- DevOps and deployment
- GitHub Repository
- Portfolio: portfolio.digitlock.systems
- API Documentation: Available at
/swagger/index.htmlwhen running