Survival LLM
인터넷 없이도 동작하는 무료 AI 어시스턴트와 150만 건 오프라인 자료를 제공, 답변 출처 표시, Mac·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.