Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Personal finance, daily tracking, blog, and food menu in one place.
Translation pending
FinancePython · TypeScriptGitHub @codingengarOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Finance tracking application
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A personal finance management application built with Next.js and FastAPI, designed to help you track expenses, manage budgets, and analyze your spending patterns.
EJ Finance is a full-stack financial tracking application that provides:
• Expense and income tracking
• Category management
• Account/payment method tracking
• Budget planning and monitoring
• Analytics and reporting
• Recurring transaction management
• Receipt attachment supportRead the full README ↗A personal finance management application built with Next.js and FastAPI, designed to help you track expenses, manage budgets, and analyze your spending patterns.
EJ Finance is a full-stack financial tracking application that provides:
render.yaml)EJFinance/
├── frontend/ # Next.js application (Dockerfile, docker-entrypoint.sh)
├── backend/ # FastAPI application (Dockerfile)
├── docker-compose.yml # Local full-stack development (db, backend, frontend)
└── README.md # This file
Run Docker commands from the repository root unless noted otherwise.
Local full-stack development using Docker Compose: PostgreSQL, FastAPI backend, and Next.js frontend.
docker-compose.yml at the repository root defines three services and two named volumes.
Startup order: db starts first and must pass its healthcheck. backend starts only after db is healthy. frontend starts after backend is up (no healthcheck on backend or frontend).
┌─────────────────────────────────────────────────────────────┐
│ docker compose (repo root) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ db │ │ backend │ │ frontend │ │
│ │ postgres:14 │──►│ FastAPI │──►│ Next.js dev │ │
│ │ :5432 │ │ :8000 │ │ :3000 │ │
│ │ healthcheck │ │ --reload │ │ 0.0.0.0 bind │ │
│ └──────────────┘ └──────────────┘ └─────────────────┘ │
│ │ │ │ │
│ postgres_data ./backend:/app ./frontend:/app │
│ (named volume) + env_file + frontend_node_ │
│ modules (named vol.) │
└─────────────────────────────────────────────────────────────┘
| Service | Container name | Image / build | Host URL |
|---|---|---|---|
| Frontend | ejfinance_frontend | build: ./frontend | http://localhost:3000 |
| Backend | ejfinance_backend | build: ./backend | http://localhost:8000 |
| API docs | — | — | http://localhost:8000/api/docs |
| Database | ejfinance_db | postgres:14 | localhost:5432 |
| Service | Ports | Depends on | Notes |
|---|---|---|---|
db | 5432:5432 | — | Healthcheck: pg_isready -U ejfinance_user (10s interval, 5s timeout, 5 retries) |
backend | 8000:8000 | db (service_healthy) | Command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload; bind mount ./backend:/app; env_file: ./backend/.env |
frontend | 3000:3000 | backend | Command: npm run dev -- --hostname 0.0.0.0; bind mount ./frontend:/app; node_modules on named volume |
Named volumes: postgres_data, frontend_node_modules (declared under top-level volumes:).
| Path | Purpose |
|---|---|
docker-compose.yml | Orchestrates all services, volumes, and networking |
backend/Dockerfile | Python 3.11 image; installs requirements.txt |
frontend/Dockerfile | Node 20 Alpine image; runs npm ci at build time; entrypoint syncs deps on start |
frontend/docker-entrypoint.sh | Runs npm ci and symlinks node_modules for Turbopack CSS resolution |
frontend/.dockerignore | Excludes node_modules, .next, etc. from frontend image |
postgres_data persists PostgreSQL data across restarts../backend is bind-mounted to /app with --reload for live code changes../frontend is bind-mounted to /app, but node_modules lives in a separate named volume (frontend_node_modules) so host and container dependencies do not conflict.Create backend/.env before starting. At minimum, set a secret key:
# backend/.env (example — adjust as needed)
SECRET_KEY=your-local-dev-secret-key
Compose loads env_file: ./backend/.env on the backend service, then applies inline environment entries. DATABASE_URL and DEBUG in compose override the same keys in .env. Other variables (e.g. SECRET_KEY) come from .env only unless you add them to compose.
Default database credentials (from compose):
| Variable | Value |
|---|---|
| User | ejfinance_user |
| Password | ejfinance_pass |
| Database | ejfinance_db |
| Connection (inside Docker) | postgresql://ejfinance_user:ejfinance_pass@db:5432/ejfinance_db |
See backend/README.md and Environment variables (Docker) for more.
docker compose up -d --build
Wait until db is healthy and backend is running (docker compose ps — backend has no healthcheck), then run migrations and seed default categories:
docker compose exec backend alembic upgrade head
docker compose exec backend python scripts/init_db.py
# Start all services (foreground, with logs)
docker compose up
# Start all services (detached)
docker compose up -d
# Start only database + API (no frontend)
docker compose up -d db backend
# Stop all services (containers removed, volumes kept)
docker compose down
# Stop and remove volumes (⚠️ deletes database + frontend node_modules)
docker compose down -v
# Rebuild and recreate all services
docker compose up -d --build
# Rebuild only the frontend
docker compose up -d --build frontend
# Rebuild only the backend
docker compose up -d --build backend
docker compose restart frontend
docker compose restart backend
docker compose restart db
Restart alone does not reinstall dependencies. See Frontend node_modules and Backend Python packages below.
# All services
docker compose logs -f
# One service
docker compose logs -f frontend
docker compose logs -f backend
docker compose logs -f db
docker compose exec frontend sh
docker compose exec backend bash
docker compose exec db psql -U ejfinance_user -d ejfinance_db
The frontend uses a named volume for /app/node_modules. A plain restart or rebuild does not always refresh installed packages if the volume already exists.
package.json / lockfile changes)docker compose exec frontend npm ci
docker compose restart frontend
docker compose stop frontend
docker compose rm -f frontend
docker volume rm ejfinance_frontend_node_modules # confirm name with: docker volume ls | grep frontend
docker compose up -d --build frontend
On first start after removing the volume, Docker populates node_modules from the image built by npm ci in frontend/Dockerfile.
File watching inside Docker on macOS can be unreliable. If Next.js does not pick up changes, add this to the frontend service in docker-compose.yml:
environment:
- WATCHPACK_POLLING=true
Then recreate the frontend container:
docker compose up -d --force-recreate frontend
The frontend container sets:
NEXT_PUBLIC_API_URL=http://localhost:8000
Browser requests go to the host-mapped backend port, not the internal Docker service name.
Backend source is bind-mounted; Python packages are installed in the image at build time.
After changing backend/requirements.txt:
docker compose up -d --build backend
Or install into the running container (temporary until rebuild):
docker compose exec backend pip install -r requirements.txt
# Apply all pending migrations
docker compose exec backend alembic upgrade head
# Create a new migration (after model changes)
docker compose exec backend alembic revision --autogenerate -m "description"
# Roll back one migration
docker compose exec backend alembic downgrade -1
docker compose down
docker volume rm ejfinance_postgres_data # confirm name with: docker volume ls | grep postgres
docker compose up -d db backend
docker compose exec backend alembic upgrade head
docker compose exec backend python scripts/init_db.py
Values below match docker-compose.yml unless you override them locally.
db service (Postgres image)| Variable | Value |
|---|---|
POSTGRES_USER | ejfinance_user |
POSTGRES_PASSWORD | ejfinance_pass |
POSTGRES_DB | ejfinance_db |
backend service| Source | Variable | Value / notes |
|---|---|---|
environment | DATABASE_URL | postgresql://ejfinance_user:ejfinance_pass@db:5432/ejfinance_db (host db = compose service name) |
environment | DEBUG | True — set False for production-like behavior |
env_file | (see below) | ./backend/.env — merged first; keys above override duplicates |
frontend service| Variable | Value | Notes |
|---|---|---|
NEXT_PUBLIC_API_URL | http://localhost:8000 | Browser calls the host-mapped API port, not http://backend:8000 |
backend/.envSee backend/app/core/config.py for the full list. Common entries:
| Variable | Purpose |
|---|---|
SECRET_KEY | JWT signing key — required for auth |
ACCESS_TOKEN_EXPIRE_MINUTES | Token lifetime (default: 30) |
CORS_ORIGINS | Allowed frontend origins |
AZURE_STORAGE_* | Optional receipt storage |
| Problem | What to try |
|---|---|
| Port already in use | Stop conflicting processes or change host ports in docker-compose.yml |
| Backend cannot connect to DB | Ensure db is healthy: docker compose ps. Backend waits for DB healthcheck before starting |
| Frontend module not found | Run docker compose exec frontend npm ci and restart |
| Stale frontend deps after rebuild | Remove frontend_node_modules volume (see Frontend node_modules) |
| Changes not reflected (backend) | Confirm ./backend mount and --reload in compose command |
| Changes not reflected (frontend) | Enable WATCHPACK_POLLING=true on macOS |
| Permission errors on volumes | On Linux, check UID/GID mapping; Alpine frontend runs as root by default |
| Need a clean slate | docker compose down -v then full setup from First-time setup |
docker compose ps
docker compose top
This Compose setup is for local development only:
uvicorn with --reload (overrides image CMD)npm run dev with --hostname 0.0.0.0environment for convenienceFor production, use separate deployment targets (Render for the backend, Vercel for the frontend — see render.yaml) with strong secrets, managed PostgreSQL (Supabase), and production build commands — not this compose file as-is.
backend/README.md)frontend/README.md)[Add your license here]