Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 0 additions & 87 deletions .github/workflows/fly-deploy.yml

This file was deleted.

2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,6 @@ interview-app/last-fix.md
interview-app/build-summary.md
interview-app/builds/
interview-app/public/builds/
interview-app/fly.toml
interview-app/.fly/

# Feedback transcripts and archives (local working files)
feedback/*
Expand Down
183 changes: 33 additions & 150 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,167 +1,50 @@
# CLAUDE.md

<!-- This file will be filled in by /idea-capture after the interview. -->
<!-- For now, here's the context Claude needs to know about this project. -->
## Project summary

## What is this project?
Yappybara is a local-first AI app ideation and prototyping workspace.

Yappybara is a toolkit for helping kids (ages 9-14) design and build their first app using Claude Code. It includes a voice-powered interview app, sketch tools, and an automated build system. The app idea hasn't been captured yet — run `/idea-capture` with the interview transcript to fill this in.
Primary path:
- run `interview-app/` locally,
- iterate on prompts/spec/prototype quickly,
- keep infra cost near zero.

---
This repo is intentionally aligned to:
- no required Fly.io backend,
- free GitHub Pages site in `site/`,
- local persistence and local execution by default.

## Voice Interview App
## Core runtime

The `interview-app/` directory contains a browser-based interview tool. It uses:
- **Web Speech API** for speech-to-text and text-to-speech (runs in Chrome)
- **Claude Agent SDK** for conversation (uses your Claude Max subscription, no API key needed)
- **Built-in drawing tool** for sketching app ideas directly in the browser
- `interview-app/server.js` — Express server + orchestration
- `interview-app/public/index.html` — browser UI
- `interview-app/builder.js` — prototype builder
- `interview-app/mechanic.js` — patch/fix loop
- `interview-app/safety.js` — response/preview sanitization

To run: `make interview-setup` (once), then `make interview`

No API key needed — uses your existing Claude Code auth. Sketches are saved to `docs/sketches/` automatically.

## Media Safety Rules

- NEVER attempt to read audio or video files (`.wav`, `.mp3`, `.m4a`, `.mp4`, `.mov`, etc.)
- Audio is handled by the browser's Web Speech API; Claude only ever sees text
- The `/sketch` skill can read images (photos of drawings) — images are allowed
- Sketches from the interview app are saved to `docs/sketches/`

---

## Important Context for Claude

**The creator is a kid (ages 9-14) and very intelligent.** When explaining things:
- Use clear, direct language - no corporate jargon or hand-waving
- It's okay to use real technical terms, but explain them the first time ("a *component* is a reusable piece of UI, like a building block")
- Be encouraging and enthusiastic about their ideas
- When there are choices to make, present 2-3 options with honest trade-offs
- Default to the simplest approach that works
- Ask "does that make sense?" and actually mean it

**A parent or mentor is always present** during Claude interactions. They can help with:
- Account setup (App Store, hosting, etc.)
- Approving any spending or cloud resources
- Git operations and deployment
- Answering questions about the real world

**The goal:** Show that a kid with a good idea and AI tools can build something real that helps people. Ship fast, learn by doing, iterate based on feedback.

---

## Tech Stack

<!-- Will be filled in by /idea-capture based on the app type -->

| Layer | Choice | Notes |
|-------|--------|-------|
| **App Framework** | Expo (React Native) | One codebase for iOS, Android, and web |
| **Language** | TypeScript + React | Industry standard, tons of learning resources |
| **Backend** | Supabase | Free tier: database, auth, file storage, real-time |
| **Hosting (web)** | Vercel | Free tier for the web version |
| **Mobile builds** | EAS Build | Free tier for iOS/Android builds |
| **CI/CD** | GitHub Actions | Auto-test on every push |

**Why these choices:**
- **Expo** handles iOS + Android + Web from one codebase. No need to learn Swift AND Kotlin AND React separately.
- **Supabase** has a generous free tier (500MB database, 1GB file storage, 50K monthly active users). That's plenty to launch and get real users.
- **Vercel** hosts the web version for free.
- **Total cost to launch: $0.** Costs only start if the app gets thousands of users (a good problem to have).

---

## Project Structure

```
interview-app/ # Voice interview tool (browser-based)
server.js # Express server + Anthropic API
public/index.html # Chat UI with speech + drawing
uploads/ # Uploaded sketch photos
app/ # Expo app (screens, components, navigation)
(tabs)/ # Tab-based navigation screens
components/ # Reusable UI components
lib/ # Utilities, API client, helpers
assets/ # Images, fonts, icons
docs/
sketches/ # Processed sketch specs (from interview + /sketch)
BUILD-PLAN.md # Phased build plan
feedback/ # Saved interview transcripts
supabase/ # Database migrations and config
CLAUDE.md # This file
INTERVIEW.md # Interview script
README.md # Project docs
```

---

## Development Commands

```bash
# Run the voice interview (first time: make interview-setup)
make interview

# Start the app in development mode (opens in browser + Expo Go on phone)
make dev

# Run tests
make test

# Build for web
make build-web

# Create a preview build for phone testing
make build-preview

# Check for problems
make lint
```

---

## Database Tables

<!-- Will be filled in as we build features -->

---

## Environment Variables
## Local commands

```bash
# Supabase (get these from supabase.com dashboard)
EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
make interview-setup
make interview # Claude-enabled mode
make interview-demo # local-only mode
make interview-test
```

---

## Screens

<!-- Will be filled in by /idea-capture and /sketch -->

---

## Roadmap
## Safety + constraints

### Done
- [x] Project template ready
- [ ] Interview completed
- [ ] Sketches processed
- [ ] Plan created
- Never read raw audio/video blobs in tooling flows.
- Treat user/project files as local-first and avoid adding remote dependencies unless explicitly requested.
- Prefer deterministic edits and test-backed changes.

### Phase 1: Get it running
- [ ] Create Expo project
- [ ] Set up navigation
- [ ] Build home screen
## Public site

### Phase 2: Core features
- [ ] <!-- Features from interview -->
- `site/` is deployed by `.github/workflows/pages.yml`
- custom domain target: `yappybara.dev`
- DNS automation script: `scripts/configure-namecheap-github-pages.mjs`

### Phase 3: Make it look great
- [ ] Apply design from sketches
- [ ] Add animations
- [ ] Test on real phone
## Release posture

### Phase 4: Share it with the world
- [ ] Deploy web version
- [ ] Build for iOS/Android
- [ ] Share with friends for feedback
- MIT licensed
- CI test workflow in `.github/workflows/ci.yml`
- keep docs and workflows aligned with local-first + free-hosting strategy
21 changes: 0 additions & 21 deletions Dockerfile.fly

This file was deleted.

13 changes: 3 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# App Makefile
# These commands will work once the Expo project is created

.PHONY: dev test build build-web build-preview lint clean setup help interview interview-demo interview-setup interview-test feedback restart resume yappybara-install yappybara-install-plugin yappybara-launch deploy-queue
.PHONY: dev test build build-web build-preview lint clean setup help interview interview-demo interview-setup interview-test feedback restart resume yappybara-install yappybara-install-plugin yappybara-launch

help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
Expand Down Expand Up @@ -75,7 +75,7 @@ interview: ## Start the voice interview app (uses Claude Max subscription)
interview-demo: ## Start kid-safe demo mode (no Claude login required)
@cd interview-app && YAPPY_MODE=demo node server.js

yappybara-install: ## One-command local install for families (set YAPPY_INSTALL_PLUGIN=1 to add Claude plugin)
yappybara-install: ## One-command local install (set YAPPY_INSTALL_PLUGIN=1 to add Claude plugin)
@if [ "$${YAPPY_INSTALL_PLUGIN:-0}" = "1" ]; then \
./scripts/install-yappybara.sh --with-plugin; \
else \
Expand All @@ -85,12 +85,5 @@ yappybara-install: ## One-command local install for families (set YAPPY_INSTALL_
yappybara-install-plugin: ## Install Yappybara Claude plugin from this repo marketplace
@./scripts/install-claude-plugin.sh

yappybara-launch: ## Fast launcher for kid-safe demo mode
yappybara-launch: ## Fast launcher for local demo mode
@$(MAKE) interview-demo

deploy-queue: ## Show recent parent deploy requests captured locally
@if [ -f interview-app/data/deploy-requests.jsonl ]; then \
tail -n 20 interview-app/data/deploy-requests.jsonl; \
else \
echo "No deploy requests yet."; \
fi
Loading