Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Personal finance for everyday people. It lives in your texts; the calendar
shows what's coming. Built for HackNC 2026 by Muhammad Tahub Khatri, Jacob
Heminway and Simon Ormond.
• Coding agents and contributors: read AGENTS.md first. It
holds the rules, commands and project layout, and points to the detailed
docs in docs/.
• What the product is: docs/PROJECT.md.
• Where work stands: the latest entry in
docs/HANDOFF.md.README 전문 보기 ↗Personal finance for everyday people. It lives in your texts; the calendar shows what's coming. Built for HackNC 2026 by Muhammad Tahub Khatri, Jacob Heminway and Simon Ormond.
Over iMessage, you text Reeflect:
AGENT_RECEIPT_PHOTOS is on.On the web, a cash-flow calendar shows paydays, bills, subscriptions and spending on the days they happen, with a balance line and a per-day spending headline. There are also pages for accounts, CSV and PDF statement imports, Capital One Nessie sync, budgets, recurring payments, bills, planned transactions and transfer review.
Reeflect never moves money, never gives investment advice, and never shows a number produced by an AI model.
iPhone ⇄ iMessage ⇄ Photon Spectrum ⇄ agent-worker (Render)
│ relays only, no business logic
▼
Next.js app (Vercel): /api/agent/turn, the website
│ │ │
Postgres (Neon) Gemini API Capital One Nessie
{cash_total}, never amounts. Code fills in the real values, and a
digit scan rejects any number the model wrote itself (ADR-019, ADR-059).Design decisions are recorded as ADRs in docs/DECISIONS.md.
Uses pnpm only.
pnpm install
cp .env.example .env.local # then fill it in; see the comments in the file
docker compose up -d # local PostgreSQL on port 5433, used by tests
pnpm db:migrate
pnpm dev
Open http://localhost:3000. Every command is listed in AGENTS.md section 5.
In a cloud workspace that allows HTTPS but cannot reach PostgreSQL over TCP,
set DATABASE_TRANSPORT=websocket in .env.local. The app then uses Neon's
WebSocket Pool; deployments still use pg when this variable is empty. The
WebSocket and storage clients honor the runtime's HTTPS_PROXY and NO_PROXY
settings on Node 24.5 or later. Migrations still use a direct TCP connection.
Local statement imports need the five storage variables in .env.example
from the Neon storage-tests branch. Put them in .env.local for the app and
.env.storage-tests for tests. Both files are ignored by Git; tests always use
local PostgreSQL and never the production storage bucket.
Before release, run pnpm db:verify --target app with the intended runtime
connection role. It checks financial schema and read access without changing
data; a successful health check or migration journal alone is insufficient.
See database readiness for targets, limitations
and the migrate/verify/release sequence.
Review recorded transfers from Transactions → Review transfers. Choose a specific counterpart and confirm the classification; removing a pairing keeps the existing labels. See transfer review for the window, limits, Bills evidence rules and the separate normal-activity action.
To run the iMessage worker locally (it uses terminal chat by default):
pnpm --filter agent-worker dev
| Service | What we use it for |
|---|---|
Photon Spectrum (spectrum-ts) | The iMessage connection: receiving texts and photos, sending replies |
Google Gemini API (@google/genai) | Working out what a text is asking, choosing a category, writing reply sentences, and reading receipt photos. It never supplies a number |
| Capital One Nessie API | Sandbox bank data: customers, accounts, purchases, deposits, withdrawals, transfers and bills. Holds synthetic data only |
| Neon | Hosted Postgres, and object storage for canonical statement CSVs (through the AWS S3 SDK and files-sdk) |
| Resend | Account emails |
| Vercel | Hosting the Next.js app |
| Render | Hosting the agent worker |
| Library | Use |
|---|---|
| Next.js and React | The web app and API routes |
| TypeScript | All code |
| Drizzle ORM and node-postgres | Database schema, migrations and queries |
| Neon serverless driver and ws | Optional WebSocket connection to Postgres where TCP is blocked |
| Better Auth | Sign-up, sign-in and sessions |
| Zod | Validating every external input and API response |
| unpdf | Reading text from PDF statements in memory |
| pdf-lib | Generating synthetic PDF statements for tests |
| Motion | UI animation, honouring reduced-motion settings |
| Tailwind CSS | Installed as a fallback only; styling is plain CSS Modules |
| Vitest and Playwright |
The full dependency list, with versions, is in package.json and agent-worker/package.json.
Inside the product. Reeflect calls Google Gemini through the official
@google/genai SDK. On the deployed app it tries gemini-3.8-flash,
gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash and
gemini-3.5-flash-lite, in that order; in development and tests it uses
gemini-3.1-flash-lite (see src/lib/ai/models.ts).
Gemini does these jobs:
Gemini never parses bank statements and never produces a figure shown to the user. Until we have a paid key, only sandbox or synthetic data is sent to it.
Building the product. We wrote this project with AI coding assistants, directed and reviewed by the team:
Co-Authored-By: Claude trailer.AGENTS.md holds the rules every agent followed. Each agent
session is logged in docs/HANDOFF.md, with who did the
work and which agent helped. Every change went through tests and CI, and
merging into main needed a teammate's review.
All financial data in this repository, in the demo and in Nessie is synthetic. It comes from our own generator (docs/SYNTHETIC.md); no real customer data is used.
| Unit and end-to-end tests |
| ESLint and Prettier | Linting and formatting |