An AI-powered web app that helps people design personalized 3-5 minute "micro-rituals" for stress, anxiety, and low mood.
🌐 Live Demo: https://inner-harbor-eta.vercel.app
Inner Harbor is not therapy—it's a self-care and awareness tool that:
- Generates short, structured rituals combining breathing, movement, sensory grounding, and self-talk
- Tracks what helps you over time
- Provides a calm, non-judgmental space for immediate relief
Important: This app cannot replace professional mental health care. See our safety guidelines below.
- Node.js 18+ and npm
- PostgreSQL database (local or hosted)
- Clone and install dependencies
npm install- Set up environment variables
Copy .env.example to .env and fill in your values:
cp .env.example .envRequired variables:
DATABASE_URL: PostgreSQL connection string (pooled)DIRECT_URL: Direct database connection (for migrations)AI_API_URL: LLM API endpoint (e.g., OpenAI)AI_MODEL: Model name to use (e.g., gpt-4o-mini)AI_API_KEY: Your OpenAI API keyNEXT_PUBLIC_APP_URL: Your app URL (for production)NODE_ENV: Environment (development/production)
- Initialize the database
npm run prisma:migrate
npm run prisma:generate- Run the development server
npm run devOpen http://localhost:3000 in your browser.
innerHarbor/
├── app/ # Next.js App Router
│ ├── page.tsx # Home: ritual composer
│ ├── library/ # Saved rituals
│ ├── weather/ # Emotional weather timeline
│ ├── about/ # Safety info
│ └── api/ # Backend API routes
├── src/
│ ├── components/ # React components
│ │ ├── ui/ # Base UI primitives
│ │ ├── ritual/ # Ritual-specific components
│ │ └── layout/ # Layout components
│ ├── lib/ # Business logic
│ │ ├── llm.ts # LLM integration
│ │ ├── safety.ts # Crisis detection
│ │ ├── db.ts # Prisma client
│ │ └── types.ts # Shared types
│ └── styles/ # Global styles
├── prisma/
│ └── schema.prisma # Database schema
├── PROJECT_SPEC.md # Full product specification
├── CLAUDE.md # Development instructions
└── TASKS_CHECKLIST.md # Active task tracking
npm run dev- Start development servernpm run build- Build for productionnpm start- Run production servernpm run lint- Lint codenpm run prisma:generate- Generate Prisma clientnpm run prisma:migrate- Run database migrationsnpm run prisma:studio- Open Prisma Studio (DB GUI)
- User: Basic user profile
- Session: Emotional check-in (emotion, context, distress rating)
- Ritual: Saved ritual with steps and metadata
- Run: Record of ritual execution with helpfulness rating
See prisma/schema.prisma for details.
- Read
PROJECT_SPEC.mdfor product context - Check
TASKS_CHECKLIST.mdfor current phase - Follow conventions in
CLAUDE.md - Make changes in small, focused steps
- Test with
npm run devandnpm run lint
This app is ready to deploy to Vercel with Supabase as the database.
See DEPLOYMENT_GUIDE.md for complete step-by-step instructions.
-
Set up Supabase (Database)
- Create free account at supabase.com
- Create new project
- Copy connection string
- Run
npx prisma migrate deploy
-
Deploy to Vercel (Hosting)
- Create account at vercel.com
- Import your GitHub repository
- Add environment variables
- Deploy!
-
Post-Deployment
- Test all features
- Verify crisis detection
- Monitor logs
DATABASE_URL="postgresql://..." # From Supabase (pooled connection)
DIRECT_URL="postgresql://..." # From Supabase (for migrations)
AI_API_URL="https://api.openai.com/v1/chat/completions"
AI_MODEL="gpt-4o-mini"
AI_API_KEY="sk-..." # Your OpenAI key
NEXT_PUBLIC_APP_URL="https://inner-harbor-eta.vercel.app" # Your Vercel URL
NODE_ENV="production"Note: For IPv4 networks, use Supabase's session pooler for both DATABASE_URL and DIRECT_URL. See DEPLOYMENT_GUIDE.md for details.
- ❌ Diagnose mental health conditions
- ❌ Provide therapy or medical advice
- ❌ Handle crisis situations
- ❌ Replace professional care
If you or someone you know is in crisis:
- US: Call or text 988 (Suicide & Crisis Lifeline)
- Crisis Text Line: Text "HELLO" to 741741
- Emergency: Call 911 or go to nearest emergency room
- Prominent disclaimers throughout the app
- Crisis keyword detection
- Clear boundaries in AI prompts
- Privacy-first data handling
- Calm, non-clinical aesthetic: Soft colors, gentle gradients
- Accessibility first: WCAG AA standards
- Privacy by default: User controls their data
- Evidence-informed: Grounded in CBT, DBT, mindfulness research
Private project. Not for redistribution.
Built with compassion for mental health and well-being.
Remember: You deserve support. If this app isn't enough, please reach out to a mental health professional.