Kiwi is an AI-powered usability testing platform that automates user testing by simulating personas and analyzing UI/UX interactions. The platform uses AI agents to navigate prototypes, capture screenshots, and provide detailed usability feedback.
Built with Next.js, Stagehand v3 (Browserbase), Supabase, and OpenAI.
- π€ AI-Powered Persona Simulation: Create personas with AI assistance and simulate real user behavior
- π― Automated Testing: Navigate websites and Figma prototypes using Stagehand v3
- π Comprehensive Reports: Get detailed UI findings, accessibility insights, and conversion recommendations
- πΉ Session Replay: Watch full session replays using rrweb
- π Real-time Updates: Live browser view and real-time progress tracking
- π¨ Modern UI: Beautiful, responsive interface built with Next.js and Tailwind CSS
- Frontend: Next.js 16 with TypeScript, React 19, and Tailwind CSS
- Test Runner Service: Node.js/Express service using Stagehand v3 for browser automation
- Database: Supabase (PostgreSQL) for data storage
- Storage: Supabase Storage for screenshots and evidence
- Queue: BullMQ with Redis for job processing
- Browser Automation: Stagehand v3 with Browserbase cloud browsers
- Node.js (v20 or higher)
- Supabase account (for database and authentication)
- OpenAI API key (for AI-powered persona generation and task rephrasing)
- Browserbase account (for cloud browser sessions)
- Google Gemini API key (for Stagehand agent - can use
GOOGLE_GENERATIVE_AI_API_KEYorMODEL_API_KEY) - Redis (optional, for production job queue - in-memory queue used in development)
git clone https://github.com/yourusername/kiwi.git
cd kiwi# Install frontend dependencies
npm install
# Install test-runner service dependencies
cd services/test-runner
npm install
cd ../..Create a .env.local file in the root directory:
# Supabase (Database & Auth)
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# OpenAI (for AI-powered persona generation)
OPENAI_API_KEY=your_openai_api_key
# Browserbase (for browser automation)
BROWSERBASE_API_KEY=your_browserbase_api_key
BROWSERBASE_PROJECT_ID=your_browserbase_project_id
# Test Runner Service URL (for local development)
TEST_RUNNER_SERVICE_URL=http://localhost:3001Create a .env file in services/test-runner/:
# Supabase
SUPABASE_URL=your_supabase_project_url
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
SUPABASE_STORAGE_BUCKET=test-evidence
# Browserbase
BROWSERBASE_API_KEY=your_browserbase_api_key
BROWSERBASE_PROJECT_ID=your_browserbase_project_id
# AI Models
MODEL_NAME=google/gemini-3-pro-preview
MODEL_API_KEY=your_google_gemini_api_key
# Or use GOOGLE_GENERATIVE_AI_API_KEY (Stagehand's preferred env var)
GOOGLE_GENERATIVE_AI_API_KEY=your_google_gemini_api_key
# OpenAI (for task rephrasing and persona generation)
OPENAI_API_KEY=your_openai_api_key
# Redis (optional - for production job queue)
REDIS_URL=redis://localhost:6379
# Service Configuration
PORT=3001
NODE_ENV=development
MAX_CONCURRENT_RUNS=5Run the migration to add the browserbase_session_id column to the test_runs table:
Option 1: Using the migration script
npm run migrate-dbOption 2: Using Supabase Dashboard
- Go to your Supabase project β SQL Editor
- Run the SQL from
supabase/migrations/add_browserbase_session_id.sql
Create a storage bucket named test-evidence in your Supabase project:
- Go to Storage in your Supabase dashboard
- Click "New bucket"
- Name it
test-evidence - Make it public or configure appropriate policies
Terminal 1: Start the test-runner service
cd services/test-runner
npm run devTerminal 2: Start the frontend
npm run devServer URLs:
- Frontend: http://localhost:3000
- Test Runner Service: http://localhost:3001
kiwi/
βββ src/ # Next.js frontend application
β βββ app/ # Next.js app router pages and API routes
β βββ components/ # React components
β βββ lib/ # Utilities and stores
β βββ types/ # TypeScript type definitions
βββ services/
β βββ test-runner/ # Node.js test runner service
β βββ src/
β β βββ execution/ # Test execution logic
β β βββ reasoning/ # Multi-agent reasoning engine
β β βββ storage/ # Database operations
β β βββ queue/ # Job queue management
β βββ package.json
βββ supabase/
β βββ migrations/ # Database migrations
βββ scripts/ # Utility scripts
npm run dev- Start Next.js frontendnpm run build- Build for productionnpm run start- Start production servernpm run check- Run TypeScript, ESLint, and Prettier checksnpm run fix- Auto-fix linting and formatting issuesnpm run migrate-db- Run database migrations
npm run dev- Start with hot reloadnpm run build- Build TypeScript to JavaScriptnpm start- Start production servernpm run type-check- Type check without buildingnpm run lint- Lint codenpm run format- Format code with Prettier
- Navigate to the Tests page
- Click "New Test"
- Fill in test details:
- Title and goal
- URL (website or Figma prototype)
- Tasks to complete
- Select a persona
- Click "Run Simulation" to start the test
- Navigate to the Personas page
- Click "New Persona"
- Optionally use AI to generate persona details:
- Click "Try AI"
- Describe your persona in natural language
- Click "Generate Persona"
- Review and edit the generated details
- Fill in persona details manually or use AI-generated content
- Click "Create Persona"
- Live Run Page: Watch the simulation in real-time with live browser view, logs, and progress
- Report Page: View comprehensive findings, metrics, session replay, and action journey
- Push your code to GitHub
- Import your repository in Vercel
- Set environment variables:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYOPENAI_API_KEYTEST_RUNNER_SERVICE_URL(your test-runner service URL)
- Deploy
- Connect your GitHub repository
- Set root directory to
services/test-runner - Set build command:
npm install && npm run build - Set start command:
npm start - Add all environment variables from
services/test-runner/.env - Deploy
- Check that all environment variables are set correctly
- Verify Supabase connection with service role key
- Ensure Browserbase API key and project ID are correct
- Check Redis connection if using production queue
- Verify Browserbase API key and project ID
- Check that
GOOGLE_GENERATIVE_AI_API_KEYorMODEL_API_KEYis set - Ensure the model name is correct (e.g.,
google/gemini-3-pro-preview)
- Verify
TEST_RUNNER_SERVICE_URLis set correctly - Check CORS settings if deploying to different domains
- Ensure the test-runner service is running and accessible
- Run migrations:
npm run migrate-db - Verify Supabase connection strings
- Check that storage bucket
test-evidenceexists
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
See LICENSE file for details.
For issues and questions, please open an issue on GitHub.