A children's app where kids create AI-generated avatars through a voice interview, connect with friends via invite codes, and record shared story memories with AI-generated images and audio narration. Stories require parental approval (a math gate) before being shared.
Test it live here: https://kindred-c7c67.web.app/
- Frontend: React 19 + TypeScript, Vite 6, Tailwind CSS v4
- Backend/Auth: Firebase (Firestore, Google Auth, Storage)
- AI: Google Gemini (
@google/genaiSDK) — text, image, TTS, video, and live voice - Animations:
motion/react, Icons:lucide-react
- Node.js v18 or later
- A Google account (for Firebase Auth via Google Sign-in)
- A Google AI Studio account for a Gemini API key
- A Firebase project with Firestore, Authentication (Google provider), and Storage enabled
git clone <repo-url>
cd kindrednpm install- Go to Firebase Console and create a new project (or use an existing one).
- Enable the following services:
- Authentication → Sign-in method → enable Google
- Firestore Database → create in production or test mode
- Storage → create a default bucket
- Go to Project Settings → Your apps → Web app and register a new web app.
- Copy the config values — you'll need them in the next step.
- Go to Google AI Studio.
- Create a new API key.
- Make sure the key has access to the models used:
gemini-2.5-flash-preview(text)gemini-2.5-flash-image(image generation)gemini-2.5-flash-preview-tts(text-to-speech)veo-3.1-fast-generate-preview(video generation)gemini-2.5-flash-native-audio-preview-09-2025(live voice interview)
Create a .env.local file in the project root with the following variables:
VITE_FIREBASE_API_KEY=your_firebase_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
VITE_FIREBASE_APP_ID=your_app_idAll values come from the Firebase web app config (step 3) and AI Studio (step 4).
Create a .secret.localfile in the functions folder with the following variables:
GEMINI_API_KEY=your_gemini_api_keynpm run devThe app starts at http://localhost:3000.
Note: The voice interview uses the browser microphone. Allow microphone access when prompted.
If you prefer to develop without hitting production Firebase, start the local emulators:
npm run emulatorsThis requires the Firebase CLI to be installed (npm install -g firebase-tools) and a firebase.json config in the project root pointing at your project.
| Command | Description |
|---|---|
npm run dev |
Start dev server on http://localhost:3000 |
npm run build |
Production build |
npm run preview |
Preview the production build locally |
npm run lint |
TypeScript type check |
npm run clean |
Remove the dist/ folder |
npm run emulators |
Start Firebase emulators (auth, firestore, storage, functions) |
- Sign in with Google at
/ - Select or create a child profile at
/select-profile - Parent enters child name and age at
/setup - Choose avatar style (Watercolor, Pixel, etc.) at
/choose-style - Voice or text interview — Gemini asks questions to generate a personalized avatar
- Dashboard — share a 6-character invite code with a friend; once accepted, a connection is created
- Create a story — pick a friend, generate a scene image + audio narration
- Parental approval — a math problem gate at
/approve/:id; once solved, the story is visible to both children
Find the architecture diagram here: https://github.com/tsyg-ai/kindred/blob/main/architecture.md