尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A private, invite-only personal finance app (installable PWA) for tracking goals and the money that pays for them. It answers: where should my next rupee go?
Suggestions name kinds of fund, or funds you already hold, never new ones. Not investment advice.
Working on the code? Start with AGENTS.md, then docs/ARCHITECTURE.md and docs/DECISIONS.md. SPEC.md is the original spec, partly superseded.
lib/ with Vitest testsapp/(app)/ signed-in pages: goals, portfolio, cards, ask, import, settings
app/(auth)/login sign in, with privacy consent
app/consent, privacy policy re-acceptance and the public policy
components/ UI (sheets, forms, goal and card views)
lib/ finance logic (tracker, allocate, sip-plan, bills-fund, cards, loan...),
data loaders (data.ts) and server actions (*actions.ts)
lib/ai/ OpenRouter settings and model router
lib/ask/ Ask: anonymised context and the server action
lib/statement/ CAS import: review rows, categories, AI category check
api/ Python functions: cas_parse.py, pdf_text.py
supabase/migrations/ schema and RLS policies
tests/unit Vitest tests/integration RLS with two real users
tests/python pytest tests/e2e Playwright happy path
Requires Node 22, Python 3.12+ and Docker.
npm run setup # installs everything, starts local Supabase, writes .env.local
npm run dev # http://localhost:3000
.venv-cas/bin/python scripts/cas_dev_server.py # statement import, second terminal
Add yourself to the invite list (local):
psql postgresql://postgres:[email protected]:54322/postgres \
-c "insert into public.allowed_emails (email) values ('[email protected]');"
Sign-in codes show up in the local mail catcher at http://127.0.0.1:54324.
npm run check # lint, typecheck, unit and Python tests
npm run test:e2e:local # build + Playwright against local Supabase
# RLS check. Keys come from `npx supabase status -o env`.
SUPABASE_PUBLISHABLE_KEY=... SUPABASE_SECRET_KEY=... npm run test:rls
ap-south-1) region.npx supabase login
npx supabase link --project-ref <your-project-ref>
npx supabase db push
insert into public.allowed_emails (email) values ('[email protected]'), ('[email protected]');
https://<your-app>.vercel.app/** (and http://localhost:3000/** for local) to Redirect URLs.Free projects pause after 7 days without activity. Regular use keeps it awake.
.env.example:
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, NEXT_PUBLIC_SITE_URL
(your Vercel URL), NEXT_PUBLIC_CONTACT_EMAIL (shown on the privacy page), and the AI settings below.Never put the Supabase secret key in Vercel; the app does not need it.
AI is off unless OPENROUTER_API_KEY is set, and each user also has to opt in. It explains numbers the app
already calculated or reads documents for you to confirm; it never calculates, never names funds, and every answer is labelled as not advice.
OPENROUTER_API_KEY in Vercel and redeploy. That's all that's required. Models are picked
automatically (lib/ai/router.ts):
AI_PAID_DAILY_USD (default $0.50 a day) and AI_PAID_PER_USER_DAILY
(default 10 requests per person). Set OPENROUTER_ALLOW_PAID=false to never use paid models.OPENROUTER_FREE_MODELS and OPENROUTER_PAID_MODEL name models to try first.OPENROUTER_FREE_ALLOW_DATA_COLLECTION=true.
Otherwise free models that need it are skipped. Paid requests always ask OpenRouter to use only providers
that don't store or train on data.AI_DAILY_LIMIT caps requests per user per day for each feature (default 20).What the AI receives (see lib/ask/context.ts): rounded amounts, goal types, years to goal, kinds of
investment and statuses. Names you typed (goals, holdings, bills) become codes like [G1] and are put back
only when the reply is shown to you. It never receives your name, email, PAN, phone, age or city. Card
documents have card numbers, emails, phones and PAN masked first (lib/card-extract.ts), and statement
categories send only public scheme names. The AI is told never to recommend a fund, AMC or stock. Only the
time, model and feature of each request are logged, never the content.
consents with its version.DISCLAIMER_VERSION is no longer checked.)PRIVACY_VERSION in lib/legal/index.ts asks every user to accept the new policy.This app is a personal planning tool, not investment advice. Suggestions are general, based on asset categories and the information you entered. The creator is not a SEBI-registered investment adviser. Mutual fund investments are subject to market risks; read all scheme-related documents carefully. Consult a registered adviser before making investment decisions.