AI-powered prenatal storytelling companion for expectant parents
EverNest generates personalized, calming bedtime stories for expectant parents to read aloud to their unborn baby. It creates a gentle bonding ritual through AI-generated stories customized with parent names, baby nicknames, and chosen themes.
- Personalized Stories: Stories featuring your names, your baby's nickname, and themes you choose
- Theme Selection: Colors & Shapes, Love & Bonding, Nature & Calm, Spiritual & Light, Rhythm & Sound, Family Legacy, Discipline & Values, or Surprise Me
- Adjustable Length: Quick (~2 min), Short (~2-3 min), Standard (~4 min), or Long (~5-6 min)
- Faith Preferences: Faith-based, Spiritual, or Non-religious tones
- Two Parent Support: Enter both parent names for inclusive storytelling
- Story Library: Save and browse your generated stories
- Favorites: Mark stories you love for easy access
- Uniqueness: Prevents duplicate stories with the same configuration
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS 4
- UI Components: shadcn/ui (Radix primitives)
- Authentication: Auth.js (NextAuth v5)
- Database: PostgreSQL via Prisma ORM
- AI: Google Gemini API (
@google/genai)
- Node.js 20+
- PostgreSQL database (Neon, Supabase, or local)
- Gemini API key from Google AI Studio
- Clone and install dependencies:
git clone https://github.com/ccraig09/evernest.git
cd evernest
npm install- Copy environment variables:
cp env.example .env.local- Configure
.env.local:
# Database
DATABASE_URL="postgresql://user:password@host:5432/evernest?sslmode=require"
# Auth.js
AUTH_SECRET="generate-with: openssl rand -base64 32"
AUTH_URL="http://localhost:3000"
# Gemini API
GEMINI_API_KEY="your-gemini-api-key"- Initialize the database:
npm run db:push- Start the development server:
npm run devVisit http://localhost:3000 to see the app.
- CHANGELOG.md - Project history (Living Document).
- DEPLOYMENT.md - Hosting guide (Vercel + Neon).
- TESTING.md - Testing strategy and specs.
This project is equipped with the following Agent Skills to assist with development:
- DEPLOYMENT_OPS: Standards for reliable Vercel/Neon deployments.
- STORY_QA: Protocols for testing the story generation user flow.
evernest/
βββ src/ # Production Next.js app
β βββ app/
β β βββ (app)/ # Authenticated app routes
β β β βββ dashboard/ # Main dashboard
β β β βββ library/ # Story library
β β β βββ settings/ # User settings
β β βββ api/
β β β βββ auth/ # Auth.js routes
β β β βββ stories/ # Story API routes
β β βββ auth/ # Auth pages
β β βββ page.tsx # Landing page
β βββ components/
β β βββ layout/ # App shell, navigation
β β βββ providers/ # Theme provider
β β βββ ui/ # shadcn/ui components
β βββ lib/
β β βββ auth.ts # Auth.js config
β β βββ db.ts # Prisma client
β β βββ gemini.ts # Gemini AI service
β β βββ types.ts # TypeScript types
β β βββ utils.ts # Utility functions
β βββ server/
β βββ story-service.ts # Story business logic
β βββ utils.ts # Server-only utilities
βββ prototype/ # Original Vite prototype (reference)
β βββ apps/prototype/ # Vite + React prototype app
β βββ flows/ # User flow diagrams
β βββ notes/ # Design notes
β βββ README.md # Prototype documentation
βββ prisma/
β βββ schema.prisma # Database schema
βββ docs/
βββ architecture.md # Architecture overview
| Method | Path | Description |
|---|---|---|
| POST | /api/stories | Generate a new story |
| GET | /api/stories | List user's stories |
| GET | /api/stories/[id] | Get a single story |
| PATCH | /api/stories/[id] | Toggle favorite |
| DELETE | /api/stories/[id] | Delete a story |
npm run dev # Start dev server with Turbopack
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run test # Run Jest tests
npm run db:push # Push schema to databaseThis project follows strict TypeScript practices and includes:
- ESLint for code quality
- Jest for testing
- Prisma for type-safe database access
- shadcn/ui for consistent component design
Run tests before committing:
npm run lint
npm run testMIT License - see LICENSE for details.
EverNest provides creative storytelling for bonding purposes only. It does not provide medical advice.