尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A modern expense tracking app with beautiful charts, budget goals, and recurring reminders. Built with Next.js 14, FastAPI, and PostgreSQL.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗An expense tracker for Bangladesh, in Taka. Track spending and income, set monthly budgets and savings goals, get bill reminders, and ask an optional AI assistant about your money in English or বাংলা.
Live: https://expense-tracker-orcin-pi.vercel.app
More screenshots are in docs/screenshots.
| Website | Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS, shadcn/ui, TanStack Query, Recharts |
| API | FastAPI, SQLAlchemy 2.1, Alembic, Pydantic 2, Python 3.11+ (uv) |
| Database | PostgreSQL 16 |
| AI | OpenRouter (Claude Haiku 5.5, Gemini 3.5 Flash Lite as fallback), tool calling, server-sent events |
| Quality | pytest (96% coverage), Vitest, Playwright (e2e, layout, accessibility), ruff, mypy, ESLint, Prettier, pre-commit + gitleaks, GitHub Actions, Dependabot |
| Ops | Docker, Vercel (website), Render (API), Neon (database), Sentry (optional), UptimeRobot |
flowchart LR
B[Browser] -->|pages + /api/*| V["Next.js on Vercel<br/>website + /api proxy"]
V -->|/api/v1/* + X-Client-IP| A["FastAPI on Render<br/>auth, data, assistant"]
A --> D[("PostgreSQL<br/>Neon")]
A -->|optional, tools on your data| O["OpenRouter<br/>Claude Haiku / Gemini"]
A -.->|errors, optional| S[Sentry]
V -.->|errors, optional| S
/api/* to the API, so the login cookie stays on the website's own domain (HttpOnly, Secure, SameSite=Strict).docker compose --profile full up --build
Then open http://localhost:3000. The API is at http://localhost:8000/docs.
You need Python 3.11+ with uv, Node 22, and Docker (for Postgres).
docker compose up -d # Postgres on localhost:5432
cd backend
cp .env.example .env
uv sync
uv run alembic upgrade head
uv run python -m scripts.seed_demo --reset # optional demo data: [email protected] / demo-password-123
uv run uvicorn app.main:app --reload --port 8000
cd ../frontend # second terminal
cp .env.example .env.local
npm install
npm run dev # http://localhost:3000
To try the assistant locally, put an OpenRouter key in backend/.env (OPENROUTER_API_KEY), then turn the assistant on in Settings.
Everything is in backend/.env.example and frontend/.env.example, with comments. The main settings:
API (backend/.env)
| Variable | Default | What it does |
|---|---|---|
APP_ENV | development | production turns on strict checks (secure cookies, a real secret key, explicit origins) |
DATABASE_URL | local Postgres | Postgres connection string |
SECRET_KEY | dev value | Signs login tokens. Required in production (32+ characters) |
ALLOWED_ORIGINS | http://localhost:3000 | The website's address(es), comma-separated |
APP_TIMEZONE | Asia/Dhaka | What "today" means |
PROXY_SHARED_SECRET | empty | Shared with the website so rate limits see real visitor IPs |
OPENROUTER_API_KEY | empty | Turns the AI assistant on (it's off without a key) |
ASSISTANT_MODEL / ASSISTANT_FALLBACK_MODELS | Haiku 5.5 / Gemini 3.5 Flash Lite | Models, chosen by the eval in docs/ASSISTANT_EVAL.md |
ASSISTANT_DAILY_MESSAGE_LIMIT | 50 | Assistant messages per user per day |
ASSISTANT_GLOBAL_DAILY_BUDGET_USD | 1 | The assistant pauses for everyone once a day's spend reaches this |
SENTRY_DSN | empty | Error monitoring (off without it) |
RATE_LIMIT_DEFAULT | 120/minute | Requests per IP |
Website (frontend/.env.local, or Vercel's settings)
| Variable | When it's read | What it does |
|---|---|---|
BACKEND_URL | build time | Where /api/* is forwarded (the API's address) |
PROXY_SHARED_SECRET | runtime | Same value as on the API |
NEXT_PUBLIC_SENTRY_DSN / SENTRY_DSN | build / runtime | Error monitoring for the browser / server (off without them) |
Never set NEXT_PUBLIC_API_URL in production: it would bypass the proxy and break the login cookie.
| Suite | Command |
|---|---|
| API (pytest, coverage gate 80%) | cd backend && uv run pytest |
| Website unit (Vitest) | cd frontend && npm test |
| End-to-end, layout and accessibility (Playwright) | cd frontend && npm run test:e2e |
| Lint, format, types | uv run ruff check . && uv run mypy · npm run lint && npm run typecheck |
CI runs all of them on every push and pull request, and also builds the Docker images and starts the full stack. No test ever calls a real AI model. Details: docs/TESTING.md.
docs/DEPLOYMENT.md is a click-by-click guide: the database on Neon, the API on Render (both in Singapore, free to start) and the website on Vercel. Monitoring setup: docs/MONITORING.md.
/docs on the running API).
├── backend/ FastAPI app
│ ├── app/
│ │ ├── routers/ HTTP endpoints (auth, expenses, income, goals, ...)
│ │ ├── assistant/ AI assistant: LLM client, tools, chat service, prompt
│ │ ├── models/ SQLAlchemy models
│ │ ├── schemas/ Pydantic request/response models
│ │ └── services/ Shared logic (cashflow, goals, users)
│ ├── alembic/versions/ Database migrations
│ ├── scripts/ Demo data, assistant eval and latency tools
│ ├── tests/ pytest suite
│ └── Dockerfile
├── frontend/ Next.js app
│ ├── src/app/ Pages (App Router)
│ ├── src/components/ UI, by feature
│ ├── src/lib/ API client, queries, formatting, validation
│ ├── e2e/ Playwright tests (incl. layout and accessibility)
│ └── Dockerfile
├── docs/ Guides and screenshots
├── docker-compose.yml Postgres, or the full stack with --profile full
└── render.yaml Render Blueprint for the API
See CONTRIBUTING.md. Please report security problems privately (details there).
MIT © 2026 Mahamudul Hasan