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.
A private, multi-currency net worth tracker. Track bank accounts, wallets, cash, loans and savings goals in one place, with live exchange rates and no bank sync.
FinanceTypeScript · CSSGitHub @BenstikeyOnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Multi-currency personal finance dashboard — accounts, transactions, net worth, cash-flow forecasting, savings objectives, and loans.
Built with Next.js 16 (App Router), Postgres on Neon, and Tailwind + shadcn/ui.
Requires Node 20+ and a Postgres database.
npm install
Create .env.local:
DATABASE_URL=postgres://... # Neon pooled connection string
SESSION_SECRET=... # openssl rand -base64 32
If the project is linked to Vercel, DATABASE_URL is already set there and can
be pulled with vercel env pull. Generate SESSION_SECRET yourself — rotating
it invalidates every existing session.
Apply the schema, then start the dev server:
npm run db:migrate
npm run dev
Sign up at /login to create the first account.
Database. Plain Postgres, accessed with the Neon serverless driver through
tagged-template queries in src/lib/queries.ts (reads) and the per-route
actions.ts files (writes). Values interpolated into sql`...` are sent as
bound parameters, not concatenated.
Auth. Email + password, hashed with scrypt (src/lib/password.ts). Sessions
are stateless JWTs signed with SESSION_SECRET and stored in an httpOnly cookie
(src/lib/session.ts).
Authorization. This is the part worth understanding. There is no Row Level
Security — that was a Supabase feature built on auth.uid(), and it does not
exist here. Every query that touches user data must filter on user_id
explicitly, and the id must come from requireUserId() in src/lib/dal.ts,
never from a form field or a client argument.
src/proxy.ts also redirects signed-out visitors, but that check is optimistic
only — it reads the cookie and never queries the database. It is not the
security boundary; the user_id filter is.
SQL files in migrations/, applied in filename order by npm run db:migrate.
Each runs in a transaction and is written to be idempotent, so re-running is
safe. Add new files as 0002_*.sql, 0003_*.sql, and so on.