Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A couple website
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A private little web app for two people: pairing by code, live chat with reactions, pokes and love notes, couple trivia, daily tasks, one-time photo "snaps", and an installable PWA. No build step — it is a static site backed by Firebase (Auth and Firestore; no Storage bucket or paid plan needed).
| File | What it is |
|---|---|
public/index.html | The whole app (markup, styles and the module script). public/our-little-world.html just redirects here for old links. |
public/service-worker.js, public/manifest.webmanifest, public/icon*.svg/png | PWA: offline shell, install metadata, icons. |
public/fonts/ | Nunito, the rounded typeface, bundled so every phone shows the same font and nothing is loaded from Google. Its SIL Open Font License is Nunito-OFL.txt. |
firestore.rules, firebase.json, .firebaserc | Firestore security rules and CLI config (project aytt-677b4). |
api/couple-portrait.js | Optional Vercel function that draws the AI couple portrait (see below). |
api/notify.js, package.json | Vercel function that sends push notifications to your partner's phone (see below). |
vercel.json, .vercelignore | Security headers and the functions' timeouts for the Vercel deployment; files a command-line deploy must never upload. |
tw-local-app/Start TW.command | Double-click on a Mac to serve public/ on http://localhost:8765. |
cd public && python3 -m http.server 8765 --bind 127.0.0.1
Then open http://localhost:8765. Sign-in and sync talk to the real Firebase project, so use real accounts there.
Only the public/ folder is served as the website (so the rules, Firebase config and helper scripts at the repo root are
never downloadable); api/ holds the serverless functions. It deploys on Vercel (project tw, live at https://our-tw.vercel.app; the older
ay-five-umber.vercel.app address still works too). The security rules are not part of that deploy — publish them
whenever firestore.rules changes (the cycle tracker and account deletion both need the latest ones), either with the Firebase CLI:
firebase deploy --only firestore:rules --project aytt-677b4
or by pasting the file into Firebase console → Firestore Database → Rules and clicking Publish.
Each of you can add a photo from the home screen. With both photos in, the home screen shows a collage of the two of you with your days-together count (from the day you set), free and instant. If you both tick “Let AI use my photo”, either of you can ask for an AI-drawn couple portrait instead.
The AI drawing runs through api/couple-portrait.js, which calls Google's Gemini image model. To switch it on:
GEMINI_API_KEY with that key, then redeploy.GEMINI_IMAGE_MODEL to use a different image model (default gemini-2.5-flash-image).Until the key exists the function answers “not configured” and the app keeps the collage. The function only accepts signed-in TW users (it checks their Firebase ID token), allows one portrait per person per minute, and never stores the photos.
Messages, pokes, notes, snaps, surprises, bouquets and tasks reach your partner's phone as real notifications, even when
TW is closed. Each phone saves its push address under couples/{id}/push (turn it on in Settings → Notifications), and
api/notify.js sends the push through the browser's push service using Web Push (VAPID). To switch it on:
npx web-push generate-vapid-keys. The public key is already in index.html
(VAPID_PUBLIC_KEY); if you make new keys, replace it there.VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY and, optionally, VAPID_SUBJECT
(for example mailto:[email protected]), then redeploy. Keep the private key out of the repo.firestore.rules (they now include the push collection).The function only accepts signed-in TW users (it checks their Firebase ID token), reads the couple and devices using that user's own token so the security rules apply, and answers “not configured” until the keys exist, in which case TW keeps using in-app alerts only.
snaps record plus the photo in snapImages). The receiver's
app deletes both once the snap is closed, and the sender can unsend before it is opened. The rules only let the
receiver read the photo after the snap is marked as viewed. Treat it as best effort: a modified client could still
save the image while it is open.index.html is meant to be public. Restrict it to your site's domains in the Google
Cloud console (APIs & Services → Credentials) and consider enabling Firebase App Check.AI_ENDPOINT in index.html points at your own proxy
that holds the API key server-side.couples/{id}/cycle/{their uid}: only they can
write it, and the Firestore rules let their partner read it only while it is both on and shared, so turning sharing off
really hides it. Push alerts about it are deliberately vague. Predictions are estimates, not medical advice or
contraception. This feature needs the latest firestore.rules published.firestore.rules published; with older rules it stops at the first step and says that
nothing was deleted. Afterwards the phone also forgets its local settings and Firebase's offline copy of the chat.