尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Turns a person's life story into a personalised oracle deck — AI text and AI art, one card
at a time — then runs readings and a daily ritual on it.
Live at https://mystech-v5.vercel.app.查看完整 README ↗Turns a person's life story into a personalised oracle deck — AI text and AI art, one card at a time — then runs readings and a daily ritual on it.
Live at https://mystech-v5.vercel.app.
Free tier is 11 lifetime card credits and one reading a day. Pro is $4.99/mo — 50 credits a month, five readings a day, every spread, the better model. A printed deck is $49.
npm install
cp .env.example .env.local # then fill it in — see "Environment" below
npm run dev # http://localhost:3000
.env.local in this repo points at the production database. npm run db:push migrates
production. Read CLAUDE.md before running anything that writes.
npm test # Vitest — 391 tests, 40 files
npx tsc --noEmit # typecheck
npm run lint # eslint (28 pre-existing errors, all React Compiler rules)
npm run build # production build
Signing in locally goes through Google OAuth. For a headless walk, POST /api/auth/test-login
mints a session without it — dev only, 404 in production. An optional { email, role } body
(any @example.com address) mints a different, genuinely new user, which is the only way
to see what a stranger sees.
| Purpose | Variables |
|---|---|
| Database | DATABASE_URL (Neon) |
| Auth | AUTH_SECRET, AUTH_GOOGLE_ID, AUTH_GOOGLE_SECRET |
| AI text | GOOGLE_GENERATIVE_AI_API_KEY (Gemini 2.5 Flash) |
| AI art | STABILITY_AI_API_KEY (Stability AI Core) |
| Storage | BLOB_READ_WRITE_TOKEN (Vercel Blob) |
| Payments | STRIPE_SECRET_KEY, NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY, STRIPE_PRO_PRICE_ID, STRIPE_WEBHOOK_SECRET, STRIPE_PORTAL_CONFIG_ID |
| Nightly cron | CRON_SECRET, GITHUB_TOKEN, VERCEL_TOKEN |
RESEND_API_KEY, ADMIN_EMAIL | |
| Optional | GOOGLE_CLOUD_TTS_API_KEY (read-aloud), ELEVENLABS_API_KEY, NEXT_PUBLIC_APP_URL, EMAIL_FROM |
Card art is the thing to watch. A Stability balance of zero returns 402 payment_required
and every card in every new deck fails. There is no fallback image.
src/app/(marketing)/ landing, pricing
src/app/(app)/ today · decks · story · chronicle · paths · settings · profile
src/app/(admin)/admin/ feedback queue, prompts, users, deployments
src/app/api/ 108 routes
src/lib/ai/prompts/ every system prompt, one file per surface
src/lib/db/schema.ts Drizzle schema — the source of truth for the database
scripts/art-harness.ts seeded N-sample card-art harness (see below)
digests/ nightly health digests, committed by the cron
docs/audit-2026-09.md the last full read of this app, and what it found
Twelve pre-2026-06 URLs are config redirects in next.config.ts, not pages.
Art quality is the product's biggest open problem: for abstract subjects the model falls back to its own "oracle card" prior — a robed woman — whatever the card was about. Never tune the prompt from one image. The harness exists for exactly this:
npx tsx scripts/art-harness.ts --variant=baseline # 12 fixed subjects × 3 seeds
npx tsx scripts/art-harness.ts --variant=v1 --subjects=star-seed,veiled-galaxy
It writes a contact sheet to .art-harness/<variant>/SHEET.jpg. Look at the sheet, count the
failures, and only then change a prompt. docs/audit-2026-09.md has the current baseline.
Vercel cron gathers health data at ~20:10 UTC and commits digests/<date>.json; a Claude Code
remote agent reads it at 21:00 UTC and commits the markdown beside it. CLAUDE.md has the
architecture and the runbook.
Direct to main, push, Vercel deploys. No pull requests anywhere in this repo.