Survival LLM
A free AI assistant and survival library (1.5 million offline articles) that runs on your own computer, with no internet. Shows the source of every answer. Mac and Windows.
翻譯準備中
尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A live, in-room song-rating prediction game. The host plays a song; everyone in the room rates it 1–10 and predicts the room's average. Closest prediction wins the round (ties broken by who locked in first). Rounds run fully blind — nobody sees the room's actual score until the session ends, when each player gets a shareable recap card (total points, letter grade, rank, and the big reveal of the room's average).
No long-term loop — built to run inside a single session at an event.
Themed in the Makin' It palette (green #4bb749, purple #403694) with the Makin' It logos built in. The white primary wordmark sits in the player header and host bar; the white secondary emblem appears on the lobby and the recap card; the full-color mark is the favicon. The bundled files live in public/ as logo.png (primary wordmark), mark.png (secondary emblem), and mark-color.png (favicon) — swap any of them to update the look. If a file is missing, a pulsing dot stands in.
Ad banners show in the lobby, during voting, and on the "locked in" screen — never on the results or recap (those stay clean for the reveal). Upload banners from the host console's Ads card. There's a three-level cascade, most specific wins:
If none is set, the slot collapses (no empty box). Banners are uploaded as image files (PNG/JPG/GIF/WebP, recommended 320×100, under 500KB) and stored in the database — so they persist on Vercel, no separate file hosting needed. An optional click-through URL opens in a new tab.
/admin, names the session → gets a QR code + link.Scoring: room average = the mean of everyone's 1–10 ratings. Your points come from how close your prediction was to that average, on an exponential curve:
Winner of a round = smallest prediction error; exact ties go to whoever locked in earliest.
Blind rounds + recap: during the session players see their points, rank, and a reaction tier (bullseye / sharp / close / off / way off) — but not the room average or their exact error. When the host ends the session, each player gets a recap card: total points, a letter grade (from average read accuracy), their rank + percentile in the room, bullseye count, best round, and the revealed room average, with a Share button.
Queue: songs you add stack in a visible "Up next" list. Open the top one (or any one), reorder with the arrows, edit a song's details, or remove one. A song doesn't get a round number until you actually open it, and you can't open a new round while one is still mid-vote.
You need Node.js 22.5+ (uses the built-in SQLite module — no native build step).
Upgrading from an earlier copy? The scoring + queue update changed the database schema. Delete your old
roomtone.db(androomtone.db-wal,roomtone.db-shm) once before starting — a fresh one is created automatically. Your sessions are per-event anyway, so nothing of value is lost.
npm install
npm start
Open http://localhost:3000/admin to host. Players use http://localhost:3000/ — but on a phone they need your laptop's LAN address, e.g. http://192.168.1.40:3000/?s=SESSIONID (the admin QR encodes this automatically if you open admin via your LAN IP instead of localhost).
EMAIL_PROVIDER to send real ones.roomtone.db next to the server. Delete it to wipe everything.⚠️ Venue/guest WiFi often blocks phone-to-laptop traffic ("AP isolation"). If players can't reach your laptop, use Mode B.
vercel CLI or Git import).DATABASE_URL = your Postgres string (this switches the app from SQLite → Postgres automatically)EMAIL_PROVIDER = resend (or mandrill, or console to show codes on screen)EMAIL_FROM, and RESEND_API_KEY or MANDRILL_API_KEY if sending real emailhttps://yourapp.vercel.app/admin, create a session, project the QR.The QR encodes the deployed URL, so players join from any network.
Set EMAIL_PROVIDER:
| Value | Behavior | Needs |
|---|---|---|
console (default) | Code prints to server log and shows on the player's screen. Zero setup. | — |
resend | Real email, fast, free tier, self-serve. Easiest real email. | RESEND_API_KEY, EMAIL_FROM |
mandrill | Real email via Mailchimp Transactional. | MANDRILL_API_KEY, EMAIL_FROM |
If a real send fails, the code falls back to the server log + the player's screen so a slow or blocked email never stalls the round. See .env.example.
Note: your Mailchimp Marketing account is not the same as Mailchimp Transactional (Mandrill) — Mandrill is a separate paid add-on. For a live event,
resendorconsoleis usually less hassle.
npm test # scoring unit tests + full HTTP end-to-end flow
server.js — HTTP server, all API routes, round/scoring engine wiringdb.js — picks SQLite (local) or Postgres (deployed) automaticallyemail.js — swappable OTP sender (console / resend / mandrill)scoring.js — pure scoring (room average, points, ranking + tie-break)public/play.html — the player phone apppublic/admin.html — the host consoleapi/index.js, vercel.json — deployment glueconsole mode — fine for a trusted room; switch to resend if you want real verified emails for a follow-up.