个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A photorealistic image/video guessing game. Verified users decide whether media is AI-generated or real, track a personal history, compete on leaderboards, and subscribe to every list by RSS.
翻译准备中
正在加载完整 README。
查看完整 README ↗A photorealistic image/video guessing game. Verified users decide whether media is AI-generated or real, track a personal history, compete on leaderboards, and subscribe to every list by RSS.
Built on the ProFullstack stack with Postgres (via @profullstack/libsql-pg) + Drizzle schema, Next.js 15, custom email/password auth (Argon2id), S3/R2 object storage, and seeded from Unsplash (real photos) + OpenAI image generation (AI variants). Deploys to Railway.
apps/web Next.js app: public pages, auth, guessing, RSS, admin
packages/db Drizzle schema, SQL migrations (SQLite + Postgres editions), database client, seeders
packages/seed Unsplash import + OpenAI variant generation (shared)
services/worker CLI jobs: seed:unsplash, seed:ai-variants, recalc, warm-feeds
docs/ PRD, API, RSS, seed-data notes
bun install
cp .env.example .env # local defaults use a file: SQLite db at repo root
bun run migrate # apply schema
bun run seed:tags # 22 default tags
bun run seed:demo # 12 demo media (placeholder images) + admin user
bun run dev # http://localhost:3000
The demo seed creates media with picsum.photos placeholders so the app renders
immediately. Email verification links are printed to the server console when
RESEND_API_KEY is unset. Sign up with the address in ADMIN_EMAILS
([email protected] by default) to get an admin account.
See .env.example. Nothing secret is committed. For
production set DATABASE_URL (postgres://...), SESSION_SECRET,
RESEND_API_KEY, the R2_* bucket vars, and (for seeding) UNSPLASH_ACCESS_KEY
OPENAI_API_KEY.# Real photos from Unsplash (needs UNSPLASH_ACCESS_KEY)
bun --filter @aiornot/worker seed:unsplash 100
# Photorealistic AI variants (needs OPENAI_API_KEY + R2_* storage)
bun --filter @aiornot/worker seed:ai-variants 100
# Recompute leaderboard/media stats from raw guesses (cron-safe)
bun --filter @aiornot/worker recalc:leaderboards
Admins can also trigger small seed batches from /admin/seed-batches.
/library)A paid repository of licensed photos, separate from the game's media table (library rows show provenance in the open; the game hides it until you guess).
library_pass is a CoinPay purpose like the others. It costs
PRICE_LIBRARY_PASS_USD (default 9) for LIBRARY_PASS_DAYS (default 30) of
full-resolution downloads, capped at LIBRARY_DAILY_DOWNLOADS (default 100) a
day. Buying again stacks the days. Promo codes with applies_to = 'library_pass' work./submit
(uploaded JPEG/PNG/WebP, claimed not-AI). A moderator approves it, labels it
not_ai, then clicks Add to library in /admin/media. Listing takes the
item out of game scoring. The archive is public-domain (CC0) photographs from
The Met's Open Access API.LIBRARY_STORAGE_DIR (default
$MEDIA_STORAGE_DIR/../.library-originals, so /data/.library-originals in
prod), which /media never serves. Pass holders get them from
/api/library/<id>/download. Public previews are 960px watermarked WebP.# Seed the archive with public-domain photographs from The Met
bun --filter @aiornot/worker seed:library 500
Every merge to master deploys to dev2 (.github/workflows/deploy-dev2.yml),
which builds .nixpacks/Dockerfile (a hand-written Bun image; the path is the
one dev2's compose names). One container runs the migrations and seeds, then the
media daemon (services/worker) in the background and the web app in front.
The runtime is Bun: bun install, bun run build, and bun <file>.ts for the
CLIs (no tsx).
/m/:slug, /i/:slug → 308 redirect), tag pages,
search with sort/filter, /play arena mode.<link> tags and a /feeds directory.robots.txt,
sitemap.xml, search pages noindex to avoid crawl traps.See docs/ for the full PRD and API/RSS/seed references.