Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
DevFest·GDG 행사에서 만나야 할 멘토·학습자·협업자·채용 중인 팀을 찾고, 양쪽이 동의할 때만 연락처를 교환합니다
Find the people you should meet at DevFest and GDG events: mentors, learners, collaborators and teams that are hiring. Contacts are only swapped when both people say yes.
소셜TypeScript · CSSGitHub @alastella온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Find the people you should meet at DevFest Ilorin. Sign in with Google, get matched, swap contacts when you both say yes.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Networking for DevFest & GDG events.
Organisers create a space for their DevFest or GDG event. Attendees join it with a link or code, check in at the venue, and swipe through the people who are there (mentors, learners, people hiring, future co-founders). When two people both tap Meet, they can chat, find each other, and both tap We met.
Ayo, the buddy, guides people through a 7-step, Duolingo-style onboarding, suggests matches, and reacts as you go.
Everything is built from five primitives. A new feature should be one of these, or read them back; it shouldn't add a second way to do the same thing.
| Primitive | Stored as | Rule |
|---|---|---|
| Person | profiles | One badge, reused at every event. |
| Here | event_members.checked_in_at | For now, joining an event is enough (CHECKIN_REQUIRED is off). With CHECKIN_REQUIRED=1: set by scanning the event's check-in code (/e/<slug>/checkin?k=…), shown only at the venue; lasts for that day (Lagos time), and only on the event's date when it has one. |
| Want to meet | a pending row in connection_requests | One-way and private: never shown or sent to the person it's about. |
| Connection | the same row, accepted | Both want to meet. The only moment anyone is told. Unlocks chat and contact details. |
| Met | a meetings row from each person for the same event | Each taps We met; it counts once both have, at an event both are here at that day. |
The deck's Pass (passes) only hides someone from your deck at that event. "Your people here" is Here plus Connection: nothing extra is stored.
The one number: of the matches made at an event, how many became meetings.
/events/new, anyone else sees an application form (chapter name, their chapter's page on gdg.community.dev, city). A platform admin reviews it at /admin./discover.CHECKIN_REQUIRED=1): a second QR, for the venue only (posters, the welcome screen: "Show on screen" opens /e/<slug>/screen?show=checkin). Scanning it is what makes someone here, and only people who are here show up in the deck. "Make a new code" stops the old one working./e/<slug>/manage: the funnel (joined, here, swiped, matched, met), reports, members with when they checked in and how many people they've met, filterable to who's here./c/<slug> with their upcoming events, listed in the sitemap./admin, paste one community per line: name, type, city, country, link (commas or tabs, straight from a spreadsheet). Re-importing updates instead of duplicating. Template: docs/communities-template.csv.robots.txt disallows /api/ for crawlers.ADMIN_EMAILS (comma-separated Google emails) in the environment. Nobody can make themselves an admin from inside the app./admin: approve or decline organiser applications, add an organiser by email, or revoke someone's right to create new events (their existing events stay)./discover, add every city you go to events in. "Find events" lists upcoming listed events in all of them. Anyone can search /discover?city=Lagos without signing in.cp .env.example .env.local # set DATABASE_URL to a Postgres database
npm install
npm run migrate
npm run seed:demo # optional: a demo event (/e/demo-devfest, code DEMO26) with 8 made-up attendees, all checked in
npm run dev
Without Google keys you can still test locally: set ALLOW_DEV_LOGIN=1 in .env.local and a "sign in as test attendee" form appears for @example.test emails. It only works under next dev; production builds return 404 for it. See docs/TESTING.md.
openid, email and profile, and publish the app so anyone can sign in.https://your-domainhttps://your-domain/api/auth/google/callbackhttp://localhost:3000 and http://localhost:3000/api/auth/google/callback (use your port).GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET and APP_URL in Vercel → Settings → Environment Variables (and in .env.local for local).DATABASE_URL / DATABASE_URL_UNPOOLED.ADMIN_EMAILS with the Google email(s) of whoever approves organisers.prebuild runs the migration on every deploy./privacy, /terms and /guidelines are public and linked from the landing page, sign-in and My badge. The facts they quote (operator, contact email, last-updated date) live in src/lib/legal.ts. When a feature changes what is stored or who can see it, update the privacy page in the same change. Add the privacy and terms URLs to the Google OAuth consent screen.
Next.js 16 (App Router, Server Actions, proxy.ts), Postgres via pg, zod, Motion, qrcode. Google Sans / Google Sans Code fonts. Auth is Google OpenID Connect (authorization code + PKCE, state check, no extra library); sessions are httpOnly cookies and only token hashes are stored.
Not an official Google product. Google and DevFest are trademarks of Google LLC.