尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證social site
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Dating by personality. Masquerade: chat masked for 5 minutes; unmask only if you both say yes. If you don't, the chat is deleted.
Live at dashpad.site · Built with Next.js (hosted on Vercel) and Supabase (accounts, database, photos, live chat).
/terms) and Privacy Policy (/privacy)/api/games/move, which checks the rules in src/lib/boardgames (the same rules the app uses to show legal moves); Whot hands and the market stay hidden.src/lib/features.ts): a floating + button on Home (drag it anywhere) posts a game challenge or a line of text for 3 hours. Only people whose Masquerade settings fit yours, and yours fit theirs, see it (on Home and the Meet page, which also holds Events). Tapping Meet opens a masked chat; on game posts people wait their turn and play one at a time. Both unmask → it's a match. The first post is free, then 10 Keys (no refunds). Price, free posts and length are set in admin → Prices.supabase/migrations/0001_dashpad.sql, click Run.https://dashpad.site.anon public key, service_role secret key.| Name | Value |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Project URL from Supabase |
NEXT_PUBLIC_SUPABASE_ANON_KEY | anon public key |
SUPABASE_SERVICE_ROLE_KEY | service_role secret key (keep private; used for account deletion) |
NEXT_PUBLIC_SITE_URL | https://dashpad.site |
"regions": ["dub1"] in vercel.json), next to the database in Supabase's Ireland region (eu-west-1). If the database ever moves, change this to match: every page's trips to the database stay a few milliseconds instead of crossing an ocean.dashpad.site, and follow the DNS instructions shown there at your domain registrar.npm install
cp .env.example .env.local # fill in your keys
npm run dev # http://localhost:3000
/preview/<screen> shows each screen with sample data during development (masquerade, waiting, chat, decide, matched, ended, invite, matches, match-chat, profile, onboarding). It is switched off on the live site.
Database rules live in supabase/migrations/0001_dashpad.sql. Matching, timers, unmask decisions and chat deletion all run inside the database, so nobody can cheat them from the browser.
Go to dashpad.site/admin. Log in with the email and password you set in Vercel:
| Name | Value |
|---|---|
ADMIN_EMAIL | the admin login email |
ADMIN_PASSWORD | a long, strong password |
To change them, edit the values in Vercel → Settings → Environment Variables and redeploy (everyone logged in to admin is logged out).
Admin has: an Overview (members, online now, masquerades, matches, revenue, gifts, reports), Masquerade Nights (create, edit, publish, cancel with automatic refunds, night-specific icebreakers, live preview) and Icebreakers (browse by spice level, search, edit, switch off, delete, and bulk-add by pasting one question per line).
Link-Ups (called Pacts in the code and database): questionnaire events at dashpad.site/link/<link> (admin → Link-Ups at /admin/link-ups). Old /pact/, /twin/ and /link-up/ links redirect there.
Feedback: people tap the help button (life ring) at the top of Home, or "Help and feedback" in the side menu on computers, to send feedback, report a problem, ask for help or share an idea. Messages show in admin → Feedback, where you mark them handled or delete them. Run supabase/updates/45_feedback.sql once in Supabase to switch it on.
New profile photos go to R2 once these are set in Vercel (then redeploy). Until then, Supabase storage is used. Older photos keep working from Supabase.
| Name | Value |
|---|---|
R2_ACCOUNT_ID | your Cloudflare account ID |
R2_ACCESS_KEY_ID | R2 API token's Access Key ID |
R2_SECRET_ACCESS_KEY | R2 API token's Secret Access Key (keep private) |
R2_BUCKET | the bucket name, e.g. dashpad-media |
NEXT_PUBLIC_MEDIA_URL | the bucket's address, e.g. https://media.dashpad.site |
Also run supabase/updates/57_r2_photos.sql (with your media address in it), and allow uploads from dashpad.site in the bucket's CORS settings.
dashpad.site, choose Managed.| Name | Value |
|---|---|
NEXT_PUBLIC_TURNSTILE_SITE_KEY | the Site Key |
TURNSTILE_SECRET_KEY | the Secret Key (keep private) |
It protects sign-up and the admin login. Most real people never see a challenge.
Dashpad sends its own password reset emails through Resend (not Supabase's email).
dashpad.site, and add the DNS records it shows at your domain registrar. Wait until it says Verified.| Name | Value |
|---|---|
RESEND_API_KEY | the API key (keep private) |
EMAIL_FROM | Dashpad <[email protected]> |
Reset links last 1 hour, work once, and each account can request at most 3 per hour.
Dashpad emails everyone going to an event the day before and on the day (each reminder goes out once). It uses Resend, so set that up first (above).
| Name | Value |
|---|---|
CRON_SECRET | any long random text (keep private). Vercel uses it to call the reminder job. |
vercel.json tells Vercel to run the job every morning at 8:00 UTC (9:00 in Lagos). You can see it under Settings → Cron Jobs in Vercel.You can turn reminders off for one event in its settings. On an event's admin page, Email attendees now sends everyone going a message straight away (handy when you go live).
https://dashpad.site/api/paystack/webhook and save. (This makes sure Keys arrive even if someone closes the page after paying.)| Name | Value |
|---|---|
PAYSTACK_SECRET_KEY | your Paystack secret key (keep private) |
Key packs and prices live in src/lib/keys.ts (50 for ₦750 · 150 for ₦2,000 · 500 for ₦4,500). Gift prices are in the database (gifts table).
Calls connect the two phones directly. That works on most Wi-Fi, but many mobile networks need a relay (TURN) server. Dashpad uses Cloudflare's (first 1,000 GB a month free, then $0.05/GB):
| Name | Value |
|---|---|
CLOUDFLARE_TURN_KEY_ID | the Turn Token ID |
CLOUDFLARE_TURN_API_TOKEN | the API Token (keep private) |
(Any other TURN provider works too: set TURN_URLS, TURN_USERNAME, TURN_CREDENTIAL instead.)
/terms and /privacy for your country, and fill in the operator's legal name and governing law (section 15 of the Terms).Members turn them on in Profile → Notifications (or from the prompt on Home). They get notified about new messages and gifts, calls, people saying hi at events, matches from events, and event announcements. Nobody is notified while they're actively using Dashpad.
Set these in Vercel → Settings → Environment Variables, then redeploy:
NEXT_PUBLIC_VAPID_PUBLIC_KEY and VAPID_PRIVATE_KEY: a matching pair. Generate with npx web-push generate-vapid-keys. Keep the private one secret. Don't change them later, or everyone has to turn notifications on again.VAPID_SUBJECT: mailto: plus an email push services can contact, e.g. mailto:[email protected].On iPhone, notifications only work after the member adds Dashpad to their home screen (Safari → Share → Add to Home Screen), on iOS 16.4 or later.