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.
แอปจัดการรายรับ-รายจ่าย ตั้งงบประมาณ และวิเคราะห์การใช้เงินกับน้องออม
Translation pending
FinanceTypeScript · CSSGitHub @NorawittonOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
แอปจัดการรายรับ–รายจ่ายภาษาไทยแบบ mobile-first ช่วยบันทึกรายจ่ายจากสลิปธนาคาร เพิ่มรายการด้วยตนเอง ตั้งงบประมาณ และวิเคราะห์พฤติกรรมการใช้เงิน พร้อมมาสคอต "น้องออม" แมวไทยสีส้มที่คอยแนะนำและให้กำลังใจ This is a Next.js (App Router) + TypeScript + Tailwind CSS v4 prototype PWA. Open http://localhost:3000 — it redirects to /onboarding on first run, then /home once onboarding is completed (tracked in the mocked profile record).Read the full README ↗
แอปจัดการรายรับ–รายจ่ายภาษาไทยแบบ mobile-first ช่วยบันทึกรายจ่ายจากสลิปธนาคาร เพิ่มรายการด้วยตนเอง ตั้งงบประมาณ และวิเคราะห์พฤติกรรมการใช้เงิน พร้อมมาสคอต "น้องออม" แมวไทยสีส้มที่คอยแนะนำและให้กำลังใจ
This is a Next.js (App Router) + TypeScript + Tailwind CSS v4 prototype PWA.
npm install
npm run dev
Open http://localhost:3000 — it redirects to /onboarding on first run, then
/home once onboarding is completed (tracked in the mocked profile record).
src/
app/ Route pages (Next.js App Router)
onboarding/ 3-slide onboarding
home/ Home Dashboard
history/ Transaction History (search/filter/swipe)
analytics/ Analytics & insights
budget/ Budget + Saving Goals
profile/ Profile & Privacy
add/expense|income|credit-card/ Manual entry forms
scan/ Slip capture/upload + OCR review flow
components/
ui/ Button, Card, ProgressBar, CategoryIcon, ScreenHeader, MascotTipCard
mascot/ Mascot.tsx — original "น้องออม" SVG character, 8 poses
illustrations/ Flat-vector/isometric scene illustrations
charts/ Recharts wrappers (donut, line, bar)
transactions/ TransactionForm, TransactionRow, AddTransactionSheet, SlipReviewSheet
nav/ AppShell, BottomNav
hooks/
useAppData.ts Central data hook: wires the database service into React state
lib/
types.ts Core data model (Transaction, Account, Budget, SavingGoal, UserProfile, ...)
categories.ts Category + bank definitions (labels, colors, icons)
mockData.ts ~25 seeded realistic Thai transactions, accounts, budget, goals
format.ts Thai Baht + Buddhist-era date formatting helpers
analytics.ts Derived-data calculations (sums, top categories/merchants, series)
insights.ts Rule-based Thai mascot coaching copy
services/
database.ts ALL storage reads/writes go through here (currently localStorage)
ocr.ts Mocked slip-scanning; swap internals for a real vision/OCR API
auth.ts Mocked session/PIN; swap internals for real auth
lib/services/database.ts to call
Supabase/Firebase instead of localStorage. Function signatures already
return Promises and match the shapes in lib/types.ts, so no consuming
component should need to change.lib/services/ocr.ts's scanSlip() to POST the captured
image to a real slip-reading/vision endpoint and map the response into a
SlipOcrResult.lib/services/auth.ts to call a real auth provider.Brand colors, type scale, radii, and motion are defined as CSS variables in
src/app/globals.css (prefixed --ag-*) and mirrored into Tailwind's
@theme inline block, so they're usable both as bg-ag-yellow-style
utility classes and as raw CSS variables.
components/mascot/Mascot.tsx — original character, no third-party assetscomponents/illustrations/Illustrations.tsx — original flat/isometric geometric scenesglobals.css
(slide-up on load, coin bounce, mascot blink, float, pulse ring), all
respecting prefers-reduced-motionlocalStorage and is seeded once per browser (see
ensureSeeded() in database.ts); clearing site data or using the
Profile screen's "ลบข้อมูลทั้งหมด" resets it.