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 app to control spendings and investments
Translation pending
FinanceTypeScript · JavaGitHub @1191830OnlineOwner 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
Loading the full README. The saved excerpt is shown below.
Personal finance tracker for a small set of accounts: transactions, per-category budgets,
investments, savings goals, and recurring transactions with automatic backfill. Accounts
are grouped into households — everyone in one shares the same data; an account not placed
in a household is private on its own.
Live at https://myfinance-lemon.vercel.app (backend on Render, database on Supabase —
see Deployment below).
• Backend: Java 17, Spring Boot 3.5.4, Spring Data JPA, Flyway, PostgreSQL 16
• Frontend: React 19, Vite 7, TypeScript, Tailwind CSS v4, TanStack Query, axios,
react-router-dom v7Read the full README ↗Personal finance tracker for a small set of accounts: transactions, per-category budgets, investments, savings goals, and recurring transactions with automatic backfill. Accounts are grouped into households — everyone in one shares the same data; an account not placed in a household is private on its own.
Live at https://myfinance-lemon.vercel.app (backend on Render, database on Supabase — see Deployment below).
docker-compose.yml) and is also used by
the backend's Testcontainers-based integration testscp backend/.env.example backend/.env # adjust values if needed
docker compose up -d # starts Postgres 16 on :5432
backend/.env holds POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, POSTGRES_USER,
POSTGRES_PASSWORD, and JWT_SECRET (signs login tokens — any long random string; generate
one with node -e "console.log(require('crypto').randomBytes(48).toString('base64'))").
These are read by both the Spring Boot app (via spring-dotenv) and docker-compose.yml
(env_file), so one file configures both. The compose file starts a single db service
(container myfinance-db, named volume myfinance_pgdata so data survives
docker compose down; use docker compose down -v to wipe it).
cd backend
./mvnw spring-boot:run
Serves the API on http://localhost:8080/api. Flyway migrations
(src/main/resources/db/migration) run automatically on boot — the schema is fully
Flyway-owned (ddl-auto=none), no manual DDL needed.
cd frontend
npm install
npm run dev
Vite dev server on http://localhost:5173. The API base URL defaults to
http://localhost:8080/api; override it with a VITE_API_URL build-time env var (see
frontend/.env.example) when pointing at a deployed backend. Visiting any page while logged
out redirects to /login.
There's no sign-up page — accounts are a fixed set, added by hand, and grouped into
households (everyone in one household shares the same transactions, categories,
investments, and saving goals; display names in Definições stay personal either way).
Two accounts exist today, sharing one household
(backend/src/main/resources/db/migration/V8__add_households.sql):
rui, password changeme123rita, password changeme123Both are seeded with must_change_password set, so logging in with either lands on a
mandatory change-password screen before anything else — worth doing for both before
sharing the link any further, since the placeholder is checked into the repo.
To add another account, write a new Flyway migration that inserts a row into users
(username, password_hash set to a bcrypt hash of the chosen password — e.g. via Spring
Security's BCryptPasswordEncoder, or any bcrypt tool — must_change_password = true, same
reasoning as the seeded accounts, and a household_id: either the existing shared
household's id to add them to it, or a fresh households row of their own to keep them
private). Anyone can also change their own password any time from Definições → "Alterar
palavra-passe".
Backend only — the frontend has no test tooling yet.
cd backend
# Fast unit tests only (Mockito, no DB) — pass on any machine
./mvnw test -Dtest='TransactionServiceImplTest,RecurringTransactionServiceImplTest'
# Full suite: unit tests + BackendApplicationTests + the three *IT controller
# integration tests, which each spin up their own Postgres via Testcontainers
# automatically (no need to `docker compose up` first — but Docker must be running)
./mvnw test
If you're on Docker Engine 29+, note that backend/src/test/resources/docker-java.properties
pins the Testcontainers Docker API client to a version Docker 29 still serves correctly —
Docker 29 bumped its API version in a way that broke Testcontainers 1.x's daemon detection
(testcontainers-java#11212).
This is already fixed in the repo; it's only worth knowing about if you ever bump the
Testcontainers version.
backend/ Spring Boot API — src/main/java/com/myfinance/backend, Flyway migrations in
src/main/resources/db/migration
frontend/ React app — src/pages, src/components, src/context, src/lib
docker-compose.yml Dev Postgres
CLAUDE.md Detailed architecture notes, current status, and roadmap
Live, free tier, two services plus a Supabase database: https://myfinance-lemon.vercel.app (frontend) → https://myfinance-gh91.onrender.com (backend).
backend (builds backend/Dockerfile), deploy branch main. Env vars:
POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD
(from the Supabase project — see backend/.env.production for the current values),
JWT_SECRET, DB_SSL_MODE=require (Supabase requires SSL; local dev defaults to
disable), ALLOWED_ORIGINS (the Vercel URL from the next step).frontend,
framework preset Vite (auto-detected). Build env var VITE_API_URL = the Render service's
URL + /api.ALLOWED_ORIGINS to the Vercel URL, then redeploy
(env var changes need a manual redeploy on Render's free tier).Both auto-deploy on every push to main. Render's free tier sleeps after ~15 min idle —
the first request after a gap is slow (cold start); the recurring-transaction scheduler's
existing catch-up logic (see Domain model → Recurring behaviour in CLAUDE.md) covers any
daily run it slept through, so nothing is lost, just possibly delayed.
See CLAUDE.md for the detailed, up-to-date status and roadmap.