Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
YOPEY는 16‑24세 청년과 요양원 주민을 연결하고 AI 채팅으로 근처 요양원을 찾아 봉사활동을 시작합니다
YOPEY connects young people (16–24) with elderly care home residents. Chat with our AI to find a care home near you and start volunteering.
소셜Python · TypeScriptGitHub @kristina-hanxhara9온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AI chatbot that helps young people (16+) find local CQC-registered care homes and start volunteering as dementia befrienders. Replaces Tony's manual phone/email outreach process.README 전문 보기 ↗AI chatbot that helps young people (16+) find local CQC-registered care homes and start volunteering as dementia befrienders. Replaces Tony's manual phone/email outreach process.
backend/ FastAPI Python server (chat + LLM tools + nudge cron + dashboard API)
frontend/ Next.js 14 site (landing, onboard form, chat, admin dashboard)
<script> tag drops the whole flow onto any partner website as a floating chat bubble (see below)Partners add the chatbot to their own site with a single line before </body>:
<script src="https://YOUR-FRONTEND-DOMAIN/widget.js" async></script>
This injects a floating launcher button that opens the full YOPEY funnel (onboarding → care-home search → email drafting) inside an iframe served from the YOPEY frontend. Because the iframe runs on YOPEY's own origin, the partner site needs no API keys and no CORS/server changes — and its CSS/JS can't reach into the chat.
https://YOUR-FRONTEND-DOMAIN/widget-demo.htmldata- attributes on the script tag): data-yopey-position
(left/right), data-yopey-label, data-yopey-color, data-yopey-entry
(/chat lets returning visitors resume instead of re-onboarding)The app detects it is framed (via lib/embed.ts) and hides its own page header
so the widget panel shows a single, clean chrome. Note: if you later add
X-Frame-Options or a frame-ancestors CSP to the frontend, allow framing or
the widget will stop loading. Browser third-party-storage limits (notably
Safari) mean a returning visitor may need to onboard again; a single visit
always works end to end.
cd backend
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your keys (Gemini, Supabase, Resend, EMAIL_TOKEN_SECRET)
python agent.py
# server now on http://localhost:8000
Sanity check: curl http://localhost:8000/health → {"ok": true}
cd frontend
cp .env.local.example .env.local
# Edit .env.local if your backend isn't on http://localhost:8000
npm install
npm run dev
# open http://localhost:3000
Run this every morning (Railway/Render cron, or system crontab):
cd /path/to/backend && python agent.py --nudge
Example crontab — 9am UTC daily:
0 9 * * * cd /path/to/backend && /path/to/venv/bin/python agent.py --nudge >> nudge.log 2>&1
backend/.env)| Var | Required | Notes |
|---|---|---|
GEMINI_API_KEY | Yes | from aistudio.google.com (new keys start AQ., legacy AIza accepted) — use a billing-enabled project (paid tier excludes data from training) |
SUPABASE_URL | Yes | https://xxxxx.supabase.co |
SUPABASE_KEY | Yes | service_role key |
RESEND_API_KEY | Yes | resend.com — also sends dashboard sign-up codes |
EMAIL_FROM | For nudges | e.g. YOPEY <[email protected]> |
EMAIL_TOKEN_SECRET | Yes | long random string — signs dashboard sessions and email links |
ADMIN_EMAIL_DOMAIN | Optional | email domain allowed to register for the dashboard (default yopey.org) |
ALLOWED_ORIGINS | Yes | comma-separated frontend origins |
CQC_PARTNER_CODE | Optional | from cqc.org.uk if you have one |
PORT | Optional | defaults to 8000 |
frontend/.env.local)| Var | Required | Notes |
|---|---|---|
NEXT_PUBLIC_API_URL | Yes | your backend URL |
Frontend → Vercel
frontend/ directory into VercelNEXT_PUBLIC_API_URL env var pointing to your Railway URLBackend → Railway
backend/pip install -r requirements.txtpython agent.py.env.examplepython agent.py --nudge, schedule 0 9 * * *CB8 8YN), email.users table has: first_name, surname, age, postcode, email.contacts row written when bot logs the email send.UPDATE contacts SET contacted_at = NOW() - INTERVAL '3 days', then run python agent.py --nudge — confirm Resend dashboard shows the email./dashboard, choose "Create an account" with a @yopey.org email, enter the 6 digit code (shown in the backend logs if Resend is unset), then confirm tables populate and "Refresh" works.| Item | Cost |
|---|---|
| Supabase | Free tier |
| Gemini (3.5 Flash chat + grounded search) | ~£5/month for hundreds of conversations; web searches free under 5,000 grounded prompts/month, then $14/1k |
| Vercel | Free tier |
| Railway | ~£5/month for backend + cron |
| Resend | Free (100/day, 3k/month) |
| CQC + postcodes.io APIs | Free |
| Total | ~£10/month |
care_homes Supabase table loaded from the CQC bulk CSV + PostGIS distance queries (sub-100ms searches, no partnerCode needed).