A full-stack application for managing vacation budgets, trip expenses, and participant coordination. Built with NestJS backend, Next.js frontend, and Kubernetes-ready deployment infrastructure.
- Expense Tracking: Track expenses across different categories
- Trip Management: Create and manage vacation trips with detailed planning
- Participant Management: Manage trip participants with roles and responsibilities
- Activity Planning: Plan and track trip activities with scheduling
- Currency Support: Multi-currency support with real-time exchange rates
- Payment Management: Track payments and settlements between participants
- Email Notifications: Automated email notifications for participants
- Data Export: Generate reports and summaries for trips and expenses
- Backend: NestJS API with TypeScript
- Frontend: Next.js with React and TypeScript
- Database: PostgreSQL with Prisma ORM
- Cache: Redis for session management and caching
- Queue: BullMQ for background job processing
- Infrastructure: Kubernetes with Helm charts for deployment
- ERD: PostgreSQL Diagram on drawSQL
-
Clone and setup environment
git clone <repository-url> cd <repository-name> # Setup backend environment cd backend cp .env.example .env # Edit .env file with your values (see Environment Variables section below) cd .. # Setup frontend environment cd frontend cp .env.example .env.local # Edit .env.local file with your values cd ..
-
Build and start all services
docker compose up --build
-
Access the application
- Frontend: http://localhost:5002
- Backend API: http://localhost:5001
- API Documentation: http://localhost:5001/api
-
Backend Setup
cd backend npm install # Set up environment variables cp .env.example .env # Edit .env with your database and Redis configuration # Start database with Docker docker compose up db redis -d # Run database migrations npm run db:reset # Seed the database npm run seed # Start development server npm run start:dev
-
Frontend Setup
cd frontend npm install # Set up environment variables cp .env.example .env.local # Start development server npm run dev
# Build and start all services
docker compose up --build
# Run in detached mode
docker compose up -d
# View logs
docker compose logs -f
# Stop services
docker compose down
# Remove volumes (WARNING: This will delete all data)
docker compose down -v-
Install Helm chart
cd devops/helm helm install budzetownik . --namespace budzetownik --create-namespace
-
Development deployment
helm install budzetownik . -f values-dev.yaml --namespace budzetownik-dev --create-namespace -
Production deployment
helm install budzetownik . -f values-prod.yaml --namespace budzetownik-prod --create-namespace
cd devops/kubernetes
# Apply database resources
kubectl apply -f database/
# Apply backend resources
kubectl apply -f backend/
# Apply frontend resources
kubectl apply -f frontend/Create a .env file in the backend/ directory based on .env.example:
# Database Configuration
POSTGRES_USER=postgres
POSTGRES_PASSWORD=your_secure_password_here
POSTGRES_DB=budzetownik
POSTGRES_DB_TEST=budzetownik_test
# Database URLs
DATABASE_URL="postgresql://postgres:your_secure_password_here@db:5432/budzetownik"
DATABASE_URL_TEST="postgresql://postgres:your_secure_password_here@db_test:5432/budzetownik_test"
# Application Configuration
NODE_ENV=development
PORT=5001
EXPIRY_TIME_MS=3600000
# JWT Configuration
JWT_SECRET=your-jwt-secret-key
# Redis Configuration
REDIS_HOST=redis
REDIS_PORT=6379
# Email Configuration (Gmail example)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_FROM="Budzetownik <your-email@gmail.com>"
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-specific-passwordCreate a .env.local file in the frontend/ directory based on .env.example:
NEXT_PUBLIC_API_URL=http://localhost:5001If you encounter database connection issues:
-
Check if containers are running:
docker compose ps
-
View container logs:
docker compose logs backend docker compose logs db
-
Reset database volumes (WARNING: This deletes all data):
docker compose down -v docker compose up --build
If you need to reset the database:
# Stop containers
docker compose down
# Remove database volumes
docker volume rm $(docker volume ls -q | grep db)
# Start fresh
docker compose up --buildThis project is licensed under the MIT License.

