Text AI friends who remember your life, check in on you and know what's happening in Kenya today. Always honestly AI. Free to start, for adults 18+.
SocialGitHub @maith96Availability not checked yetOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Friends who remember. Sasamigo, by Leinalok Labs, is an AI chat app built with Next.js + Vercel AI SDK + NVIDIA NIM and/or Gemini + Supabase, hosted on Vercel.
It includes a public REST API (/api/v1) so a later app (mobile, desktop, another site) can use the same accounts and chats. See API.md.
Features: streaming replies · Markdown and code blocks with copy buttons · chats saved per user · auto-titled, renameable and deletable chats · model picker · starter prompts · stop and retry · friendly error messages · per-user rate limit · mobile layout · dark mode (follows the system setting).
nvapi-).supabase/schema.sql and click Run.
Then do the same with supabase/personas-seed.sql to load the built-in personas.
Both are safe to re-run, which is also how you upgrade after pulling new changes.anon) key.http://localhost:3000, later your Vercel URL).cp .env.example .env.local # then fill in the values
npm install
npm run dev
Open http://localhost:3000, sign up, and start chatting. By default Supabase emails a confirmation link on sign-up. For quicker local testing you can turn off Authentication → Sign In / Providers → Email → Confirm email.
.env.local (Settings → Environment Variables).src/
app/
page.tsx # chat page (requires sign-in)
login/ # sign in / sign up
admin/stats/ # persona stats (admins only)
auth/callback/route.ts # email confirmation links
api/chat/route.ts # streaming endpoint for the website UI
api/v1/... # public REST API for other apps (see API.md)
components/ # chat UI (sidebar, messages, model picker, markdown)
lib/
chat-service.ts # shared chat logic: history, Gemini call, saving, rate limit
models.ts # "Terra Fast" etc. → Gemini model IDs
api.ts # API auth (Bearer token or cookie), errors, CORS
reply-stats.ts, feedback.ts # reply style metadata, thumbs up/down, admin stats
supabase/ # Supabase clients
proxy.ts # keeps the login session fresh; redirects signed-out users
supabase/schema.sql # tables + Row Level Security
supabase/personas-seed.sql # built-in personas (generated, don't edit)
personas/*.json # built-in persona character sheets (source of truth)
public/avatars/ # built-in persona avatars
Each persona is a structured character sheet (src/lib/persona-schema.ts): identity, personality,
behaviour rules, communication style with situational examples, knowledge, and relationship.
Built-in personas live in personas/*.json. After editing one:
npm run personas:seed # validates the JSON and regenerates supabase/personas-seed.sql
Then run supabase/personas-seed.sql in the Supabase SQL Editor.
Memory and check-ins: after each reply, a fast model extracts lasting facts (about the user, and details the
persona said about itself) into memories; a grounding check drops anything that wasn't actually said. Users can see
and delete them via the 🧠 Memory button. relationships tracks how much they've talked; the stage
(new → warm → close) needs both messages and days. When a user reopens a persona chat after the persona's
checkIn.afterHours, the persona texts first (never stacked; gentle wellbeing check only if they were struggling).
Safety layers: crisis language and "I'm under 18" statements are detected in code and add an urgent instruction
to that reply; crisis messages also always show a helpline card in the UI (and crisis_support in the API).
Every reply is saved with style metadata (words, emoji, bubbles, whether it asks a question, time to the first word,
a prompt_version that changes when the persona or prompt builder changes) and a reply_id shared by its bubbles.
Users can rate replies with 👍 / 👎 (optional reason). Admins get a stats page at /admin/stats with, per persona
and model: thumbs-up rate, how often and how fast users answer, reply style, latency, day-1/day-7 return and messages
per session; check-ins are shown separately.
supabase/schema.sql):
insert into public.admins (user_id) select id from auth.users where email = '[email protected]';PROMPT_VERSION in src/lib/prompt-builder.ts when you change the prompt layers.This is the beginning of the README. Read the rest at the original. Read the full README ↗