A modern, responsive web application that helps students and new graduates practice networking and interview skills through AI-powered roleplay scenarios and cold outreach coaching.
- Product Docs & Design: CoffeeChat Coach Overview + Design
- Live App: coffeechatcoach.com
- Demo Video (60s) β Watch Here
- Responsive Design - Mobile-first design with hamburger navigation and adaptive layouts
- AI Chat Scenarios - Realistic conversations with 3 specialized personas:
- Recruiter: Professional tech recruiter for networking practice
- Alumni: University alumni sharing career insights and mentorship
- PM: Senior Product Manager for informational interviews
- Real-time Chat - Streaming AI responses with message history and focus management
- Smart Feedback System - AI-powered analysis focusing exclusively on user performance
- CoffeeChat Kit Generator - Personalized conversation starters from LinkedIn profiles
- Cold Email Coach - Concise, effective email rewrites (3-4 sentences max)
- Secure Authentication - Clerk-powered login with route protection
- History Dashboard - Comprehensive view of past sessions, kits, and email drafts
- Safe Practice Environment - Build confidence before real networking situations
- Personalized Coaching - AI adapts feedback to your communication style
- Anti-ClichΓ© Design - Avoid generic phrases and create authentic connections
- Actionable Insights - Specific, implementable improvements for better networking
- Mobile Optimized - Practice anywhere with responsive design
- Frontend: Next.js 15 (App Router), TypeScript, TailwindCSS
- Authentication: Clerk v6 with middleware protection
- Database: Supabase PostgreSQL with Prisma ORM (Session Pooler)
- AI: Groq API for fast, reliable AI responses
- Validation: Zod schemas for runtime type safety
- Rate Limiting: Upstash Redis with graceful fallback
- Styling: Custom CSS variables with design tokens
- Deployment: Vercel + Supabase
- Node.js 18+
- npm or yarn
- Supabase PostgreSQL database
- Groq API key
- Clerk account for authentication
git clone <your-repo-url>
cd coffeechat-coach
npm install
cp .env.example .env
Fill in your environment variables:
# Database (Use Supabase Session Pooler for prepared statements)
DATABASE_URL="postgresql://postgres.[project-ref]:[password]@aws-1-us-east-2.pooler.supabase.com:5432/postgres"
# Clerk Authentication
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxx
CLERK_SECRET_KEY=sk_test_xxx
# Groq API
GROQ_API_KEY=your_groq_api_key_here
# Upstash Redis (Optional - for rate limiting)
UPSTASH_REDIS_REST_URL=https://xxx.upstash.io
UPSTASH_REDIS_REST_TOKEN=xxx
# App Configuration
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Generate Prisma client
npx prisma generate
# Run database migrations
npx prisma migrate dev --name init
# (Optional) View database in Prisma Studio
npx prisma studio
npm run dev
Visit http://localhost:3000
to see the app!
The app uses 4 main models with proper relationships:
- Contact - LinkedIn profile information and notes
- CoffeechatKit - Generated conversation starters, shared interests, and one-line pitches
- ChatSession - Practice session transcripts with AI feedback
- ColdEmailDraft - Email drafts with AI analysis and concise rewrites
- Clerk v6 Integration - Modern authentication with middleware protection
- Route Protection - All practice features require authentication
- User Data Isolation - Data scoped by
ownerClerkUserId
- Graceful Error Handling - User-friendly error messages without exposing internals
- Rate Limiting - 10 requests/minute per user for AI endpoints
- Recruiter: Realistic tech recruiter focused on networking and relationship building
- Alumni: University alumni providing career guidance and industry insights
- PM: Senior Product Manager for informational interviews and career advice
- Streaming Responses - Real-time chat experience
- Contextual Feedback - AI analyzes only user messages for relevant feedback
- Concise Email Rewrites - 3-4 sentence cold emails with clear value propositions
- Personalized Kits - Conversation starters based on LinkedIn profile analysis
- Hamburger Navigation - Collapsible menu for mobile devices
- Adaptive Layouts - Grid systems that work on all screen sizes
- Touch-Friendly - Optimized button sizes and spacing
- Full-Width Containers - Consistent spacing across devices
- CSS Variables - Consistent theming with design tokens
- Tailwind Utilities - Responsive classes for adaptive layouts
- Component Library - Reusable UI components with proper styling
src/
βββ app/ # Next.js App Router pages
β βββ api/ # API routes with error handling
β β βββ chat/ # Real-time chat API
β β βββ cold-email/ # Email analysis API
β β βββ feedback/ # Chat feedback API
β β βββ generate/ # Kit generation API
β β βββ history/ # User history API
β βββ chat/[scenario]/ # Dynamic chat interface
β βββ cold-email/ # Email coaching interface
β βββ generate/ # Kit generation interface
β βββ history/ # History dashboard
β βββ scenarios/ # Scenario selection
βββ components/ # React components
β βββ ui/ # Base UI components (Button, Card, Input)
β βββ ChatMessage.tsx # Chat message display
β βββ Navbar.tsx # Responsive navigation
β βββ Footer.tsx # Application footer
β βββ ThemeToggle.tsx # Theme switching
βββ lib/ # Shared utilities
β βββ ai.ts # AI service with type safety
β βββ db.ts # Prisma database client
β βββ ratelimit.ts # Rate limiting utilities
β βββ scenarios.ts # Scenario definitions
β βββ utils.ts # General utilities
β βββ validation.ts # Zod validation schemas
βββ middleware.ts # Clerk authentication middleware
- Push code to GitHub
- Connect repository to Vercel
- Add environment variables in Vercel dashboard
- Deploy with automatic builds
# Production migration
npx prisma migrate deploy
npm run dev
- Start development servernpm run build
- Build for productionnpm run start
- Start production servernpm run lint
- Run ESLint (clean codebase)npm run db:generate
- Generate Prisma clientnpm run db:migrate
- Run database migrationsnpm run db:push
- Push schema changesnpm run db:reset
- Reset database
- TypeScript - Full type safety throughout the application
- ESLint - Clean, lint-free codebase
- Error Handling - Graceful error management with user-friendly messages
- Responsive Design - Mobile-first approach with adaptive layouts
- Copy LinkedIn profile text (About, Experience, Education)
- Paste into the Generate Kit page
- Get personalized conversation starters and shared interests
- Use the one-line pitch for introductions
- Choose scenario (Recruiter/Alumni/PM)
- Engage in a realistic AI conversation
- Receive focused feedback on your communication
- Review strengths and specific improvements
- Draft your outreach message
- Get AI analysis of strengths and weaknesses
- Receive concise, effective rewrite (3-4 sentences)
- Use suggested subject lines and opening/closing phrases
- Rate Limiting - 10 requests per minute per user for AI endpoints
- Error Recovery - Graceful handling of API failures
- Input Validation - Zod schemas prevent invalid data
- Database Optimization - Supabase Session Pooler for prepared statements
- Responsive Loading - Optimized for all device types
- Clerk Authentication - Modern auth with route protection
- User Data Isolation - Complete separation by user ID
- Input Sanitization - Validation prevents injection attacks
- Environment Protection - Secure handling of API keys
- Rate Limiting - Prevents abuse of AI endpoints
Database Connection
- Use the Supabase Session Pooler connection string
- Ensure DATABASE_URL is properly formatted
- Check if database migrations are applied
AI API Errors
- Verify GROQ_API_KEY is set correctly
- Check API quota and billing status
- Ensure proper error handling is in place
Authentication Issues
- Update to Clerk v6 for Next.js 15 compatibility
- Verify public/secret keys in environment
- Check middleware configuration
Mobile Display Issues
- Ensure responsive design classes are applied
- Test on various screen sizes
- Check container and spacing utilities
- β Responsive Design - Mobile-first approach with hamburger navigation
- β Error Handling - User-friendly error messages throughout
- β AI Improvements - More realistic personas and concise email rewrites
- β Type Safety - Full TypeScript coverage with proper types
- β Performance - Optimized database connections and API responses
- β Code Quality - Clean, lint-free codebase
For issues and questions:
- Create GitHub issue with detailed description
- Check troubleshooting section above
- Review environment setup requirements
- Test on different devices for responsive issues
This project is licensed under the MIT License.
Built with β€οΈ to help students succeed in networking and career development. Now with responsive design and robust error handling for the best user experience across all devices.