Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗rea# Voice Gift
Friends record secret voice messages. When you send the gift, each one lights a candle.
A web app (no install) for group voice gifts, built as a prototype for collecting real Indonesian speech with captions the speakers corrected themselves. Works on phones and desktop.
Flow
/new: the occasion, who it's for, decorates the cake / bouquet / lanterns,
then logs in with Google to save it. /account lists their gifts on any phone./g/<gift> from WhatsApp, record up to 15 s, fix the caption, send./m/<gift>?k=<key> and, when ready (e.g. at 00:00), sends the
recipient their link /r/<gift>?k=<key> + the 4-digit PIN from there.npm install
npm run dev # http://localhost:3000 — data is saved in .data/
# without GOOGLE_CLIENT_ID in .env, add DEV_LOGIN=1 to log in with any email (local only)
The microphone needs localhost or https. To test on your phone over Wi-Fi, deploy to Vercel instead.
revallo/VoiceGift → Deploy.
No settings to change; vercel.json has them.https://<your-project>.vercel.app and test with three accounts: organizer, friend, recipient.Optional environment variables (Settings → Environment Variables, then redeploy):
| Variable | What it does |
|---|---|
ADMIN_KEY | Enables GET /api/export?key=…, a JSONL file of every message for the ML team, and GET /api/users?key=…, the list of accounts |
ASR_URL, ASR_API_KEY | Use the company's speech recognition API instead of the mock (see lib/asr.js) |
GROQ_API_KEY | Use Groq Whisper large-v3 for now, until the company API is ready (ASR_URL wins if both are set) |
GOOGLE_CLIENT_ID | Required: logging in is "Continue with Google" only. An OAuth Web application client id from Google Cloud Console, with https://voicegift-one.vercel.app (and http://localhost:3000) as authorized JavaScript origins, and the app published (in Testing only 100 accounts can log in) |
DEV_LOGIN | 1 = a plain email + name login instead of Google, for the e2e test and local work. Ignored on Vercel |
/api/audio,
and only with the recipient's link (or to the person who recorded it).lib/limits.js): 3 voices per account per gift, 20 recordings per account per day (each one is an
ASR call), 10 gifts per account per day.CLAUDE.md).api/ serverless functions (one file per endpoint)
lib/ storage (Vercel Blob / local folder), ASR seam, gift + account model, HTTP helpers
public/ the website: plain HTML + ES modules, no build step
assets/themes.js words per occasion + picks the scene
assets/cake.js birthday: the cake + candles
assets/bouquet.js graduation: the bouquet + flowers
assets/lanterns.js wedding: strings of lanterns
assets/stage.js shared scene scaffolding
assets/recorder.js records 16 kHz mono WAV in the browser
assets/auth.js accounts in the browser: who is logged in, the sign-up / log-in form
design/screens/ the designed screens this app is built from
tests/e2e.mjs end-to-end test with a fake microphone
dev.mjs local server that mimics Vercel
Ten weak spots found in a code + screen review, most important first. Fixed so far: 4, 5, 6.
MAX in lanterns.js, flowerSpots in bouquet.js). Voice 37/41 has no item,
so the recipient can't tap it. Fix: a cap per gift in api/message.js, shown on the friend's page ("the gift is full")./api/reveal has no limit on wrong PINs (only 10,000 options), and a wrong PIN
gets a different error than a wrong key, which tells the guesser the key is right. Fix: count wrong PINs per gift and lock for a while, like passwords.