Personal finance management, clear and multilingual.
Monthly budgets, savings goals, analytics and market tracking — all in a modern, responsive web app.
- Overview
- Features
- Tech Stack
- Prerequisites
- Installation
- Environment Variables
- Available Scripts
- Project Structure
- Internationalization
- License
StatEko is a budgeting web app that helps you take back control of your finances: build your budgets month by month, track your savings goals, visualize your spending trends, and keep an eye on the markets. The interface is fully translated (🇬🇧 / 🇫🇷 / 🇯🇵) and authentication is secure.
💡 This README is designed as a reusable template — adapt the name, badges, and sections for your other projects.
| Module | Description |
|---|---|
| 🔐 Authentication | Email + password sign-up / sign-in (bcrypt hashing), sessions handled by Auth.js v5 |
| 💰 Budgets | Detailed monthly budgets broken down by category (income, fixed costs, variable expenses, savings) |
| 🎯 Goals | Typed savings goals (travel, car, home, emergency…) with progress tracking and pinning |
| 📈 Analytics | Monthly overview, expense breakdown, and trends powered by ECharts |
| 🪙 Markets | Asset tracking with real-time prices (polled every 5 s) |
| 🌍 Multilingual | Per-language routing (/[lang]) — English, French, Japanese |
| 🎨 Modern UI | Responsive design with Tailwind CSS 4 and FontAwesome icons |
| Area | Technologies |
|---|---|
| Framework | Next.js 16 (App Router, Server Actions, route groups) |
| UI | React 19, Tailwind CSS 4, FontAwesome |
| Language | TypeScript 5 |
| Database | PostgreSQL 17 via Prisma 6 |
| Authentication | Auth.js v5 (next-auth) + @auth/prisma-adapter + bcryptjs |
| Visualization | Apache ECharts 6 |
| Validation | Zod 4 |
| Infra (dev) | Docker Compose (PostgreSQL) |
- Node.js 20.9+ (required by Next.js 16)
- Docker & Docker Compose (for the local PostgreSQL database)
- npm (or yarn / pnpm / bun)
# 1. Clone the repository
git clone https://github.com/Aidesu/project-01.git
cd project-01
# 2. Install dependencies
npm install
# 3. Configure your environment
cp .env.example .env # then fill in the variables (see below)
# 4. Start the PostgreSQL database
docker compose up -d
# 5. Apply Prisma migrations
npx prisma migrate dev
# 6. Start the development server
npm run devThe app is then available at http://localhost:3000.
Create a .env file at the root using the following keys:
| Variable | Description | Example |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | postgresql://user:password@localhost:5432/budget_db |
AUTH_SECRET |
JWT session signing secret | generated via openssl rand -base64 32 |
AUTH_TRUST_HOST |
Trusts the host in dev (useful behind a proxy / WSL) | true |
⚠️ The.envfile should never be committed — it is already listed in.gitignore.
| Command | Action |
|---|---|
npm run dev |
Starts the development server |
npm run build |
Builds the app for production |
npm run start |
Runs the built app |
npm run lint |
Lints the code with ESLint |
src/
├── app/
│ ├── (auth)/ # Sign-in / sign-up pages
│ ├── (main)/[lang]/ # Authenticated app, routed by language
│ │ ├── analytics/ # Dashboards & charts
│ │ ├── budgets/ # Budget management
│ │ ├── goals/ # Savings goals
│ │ ├── markets/ # Market tracking
│ │ └── accounts/ # Account settings
│ ├── (public)/ # Landing, about, terms
│ ├── actions/ # Server Actions (auth, budget, goal…)
│ └── api/ # Route handlers (auth, markets)
├── components/ # UI components (layouts, forms, graphics, ui…)
├── lib/
│ ├── i18n/ # Translation dictionaries (en, fr, ja)
│ └── validation/ # Zod schemas
├── services/ # Business logic (analytics, goal, market)
└── types/ # Shared types
prisma/
├── schema.prisma # Data model
└── migrations/ # Migration history
The app is translated into English, French, and Japanese. The language is carried by the /[lang] URL segment (e.g. /fr/budgets). Translations live in src/lib/i18n/dictionaries/ — adding a language is as simple as creating a new JSON file and registering it in dictionaries.ts.
Released under the MIT License. See the LICENSE file for details.
created by Carla Deafiaa