My Secret Santa
Organize your Secret Santa gift exchange with private groups and anonymous messaging
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.
SocialPython · TypeScriptGitHub @kristina-hanxhara9OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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).