尚未检测到更新。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.