尚未检测到更新。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