Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
FinDost AI: 파키스탄 대상 무료 디지털 장부 및 30일 현금흐름 예측. 자금 부족 및 충격 시나리오 분석
Free digital khata and 30-day cash-flow forecasting for Pakistani shops, enterprises, households and students. FinDost AI flags projected cash shortages, tests shocks like late payments or price rises
금융Python · TypeScriptGitHub @tehsaad온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Free digital khata and 30-day cash-flow forecasting for Pakistani shops, enterprises, households and students. FinDost AI flags projected cash shortages, tests shocks like late payments or price rises, and compares recovery options — in English and Urdu.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Cash-flow early warning and recovery planning for Pakistani shops, enterprises, households and students — in English and Urdu.
Live: https://findostai.vercel.app · API health: https://findost-api.vercel.app/api/v1/health · Presentation guide: docs/PRESENTATION_GUIDE.md
A shop can be profitable on paper and still run out of cash: customers pay late (udhaar) while rent, suppliers and bills fall due on fixed dates. Households and students have the same timing problem with salaries, allowances and fees. FinDost turns your records into a 30-day cash forecast, warns you before a projected shortage with the records behind it, lets you test what-if shocks, and prices recovery options by re-running the forecast. Enterprises add budgets, data checks, an approval workflow and team roles.
Every figure is calculated by FinDost's deterministic engine from your own records. AI is optional: with your consent it helps understand questions, words answers and reads receipt photos into proposals you review — it never calculates your figures.
Real screens from the local app with fictional demo data:
| Workspace selection | Switcher |
|---|---|
| Shop dashboard | Recovery options |
| Copilot | Team & access |
| Type | For | Distinctive modules |
|---|---|---|
| SME / shop | Kiryana, retail, micro-business | Khata, udhaar, inventory, data checks, tasks |
| Enterprise | Finance teams | Everything in SME + Team & Access; navigation grouped as a finance workflow |
| Household | Family budgets | Income & expenses, bills, budget, savings goals, personal what-ifs |
| Student | Allowance, fees, part-time income | Same as household, student wording |
The type is chosen once, when you create your own workspace; the server enforces the modules
(backend/app/auth.py, FEATURES).
| Layer | Stack |
|---|---|
| Frontend | Next.js 15.5.27, React 19.1.1, TypeScript 5.9.2, Tailwind CSS 3.4.17, Recharts 2.15.4, Supabase JS/SSR |
| Backend | Python 3.12, FastAPI 0.143.0, Pydantic 2.14.0, SQLAlchemy 2.1.4, psycopg 3.3.6, NumPy 2.5.3, httpx, PyJWT |
| Data & auth | Supabase PostgreSQL (RLS enabled, no public policies) and Supabase Auth (email confirmation, Google, anonymous demo, Cloudflare Turnstile) |
| AI (optional) | Groq (default openai/gpt-oss-20b), Google Gemini (default gemini-3.5-flash-lite) via plain HTTPS |
| Resend (auth emails through Supabase SMTP; team invitations through the Resend API) | |
| Hosting | Vercel: findost-ai (frontend) and findost-api (backend + daily cron) |
| Tests | pytest, Vitest, ESLint, tsc, headless-Chrome scripts in scripts/ |
Browser ─► Next.js (Vercel) ── Supabase Auth (session, captcha)
│ /api/v1/* rewritten server-side to the API (same origin; API URL never in the bundle)
│ Authorization: Bearer <JWT> · X-Workspace-Id: <chosen workspace>
▼
FastAPI (Vercel) verify JWT ─► resolve workspace + membership + role ─► engine
│ │
▼ ▼ optional, consent + quota
PostgreSQL (Supabase) Groq / Gemini (wording, receipts)
Diagrams, request lifecycle and the full API reference: docs/PRESENTATION_GUIDE.md
(sections 9–13). Code: frontend/ (App Router), backend/app/routers (API), backend/app/services (engine).
email_sent status.Backend (Python 3.12+; no Supabase or AI keys needed):
cd backend
python -m venv .venv && .venv/bin/pip install -r requirements-dev.txt
DATABASE_URL=sqlite:///./local.db DEV_AUTH_SECRET=local-dev-secret-change-me-0123456789 \
.venv/bin/uvicorn app.main:app --port 8000
Frontend (Node 20+; developer sign-in instead of Supabase):
cd frontend
npm install
NEXT_PUBLIC_AUTH_MODE=dev DEV_AUTH_SECRET=local-dev-secret-change-me-0123456789 \
API_URL=http://localhost:8000 npm run dev # http://localhost:3000
Sign in with any email on the developer form, choose an account type, and start with demo data. To use Supabase
locally instead, fill frontend/.env.local from frontend/.env.example and leave NEXT_PUBLIC_AUTH_MODE empty.
cd backend && .venv/bin/python -m pytest # 168 tests (mocked AI, SQLite)
cd frontend && npm run typecheck && npm run lint && npm test && npm run build # 28 Vitest tests
# browser checks against the local stack (needs Chrome + playwright-core):
node scripts/e2e-enterprise.cjs # enterprise workflow, roles, workspace selection/switching (26 checks)
node scripts/e2e-journey.cjs # 10-step demo journey (15 checks)
Results and what is not verified: docs/TESTING.md.
Names only — never commit values.
Backend (backend/.env.example)
| Name | Purpose |
|---|---|
DATABASE_URL | SQLite locally; Supabase transaction-pooler URL in production |
SUPABASE_URL | JWKS location for verifying access tokens |
SUPABASE_JWT_SECRET | Only for legacy HS256 projects |
DEV_AUTH_SECRET | Local developer tokens; ignored in production |
CORS_ORIGINS | Allowed origins for direct API calls |
GROQ_API_KEY, GROQ_MODEL | Optional AI wording / question interpretation |
GEMINI_API_KEY, GEMINI_MODEL | Optional receipt reading and AI fallback |
LLM_TIMEOUT_SECONDS, AI_DAILY_LIMIT | AI timeout (12 s) and daily per-workspace cap (60) |
ANON_AI_DAILY_LIMIT, ANON_MAX_TRANSACTIONS, DEMO_TTL_DAYS | Private-demo limits |
CRON_SECRET | Authenticates the daily demo-cleanup cron |
RESEND_API_KEY, EMAIL_FROM, APP_URL | Optional team-invitation emails and invitation link base |
FINDOST_TODAY, MAX_UPLOAD_BYTES, ENVIRONMENT | Test date pin, upload limit, environment |
Frontend (frontend/.env.example): API_URL, NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY,
NEXT_PUBLIC_TURNSTILE_SITE_KEY, NEXT_PUBLIC_GOOGLE_AUTH_ENABLED, NEXT_PUBLIC_AUTH_MODE,
NEXT_PUBLIC_SITE_URL, DEV_AUTH_SECRET (dev only). Supabase Auth config push also uses TURNSTILE_SECRET_KEY
and RESEND_API_KEY.
Two Vercel projects (backend/, frontend/) and one Supabase project. For schema changes: apply
supabase/migrations/* → deploy backend → deploy frontend. Rollback by promoting the previous Vercel deployment.
See docs/DEPLOYMENT.md and docs/ROLLBACK.md.
| Now (implemented) | Next (roadmap — not built) |
|---|---|
| Ledger, CSV/receipt import, forecast, alerts, simulator, recovery, budgets, goals, data checks, approvals, reports, Copilot, roles, workspace selection | Payment-timing uncertainty in forecasts · real-business pilot · bank feeds and reconciliation · ERP integrations · approval thresholds and chains · per-tenant RLS policies · team roles for SME · controlled execution of approved payments with human sign-off |
Presentation guide · Architecture · Forecast methodology · Security · Testing · Deployment · Demo script · Implementation report
FinDost AI provides decision support, not financial advice. Demo data is fictional.