Lumina is a quote-first journaling app. Users write entries, Lumina stores the raw words, and the mirror surfaces recurring verified quotes without diagnosing or interpreting the user.
- Clerk authentication with custom sign-in, sign-up, SSO callback, and password reset pages
- Journal entries with optional mood and comma-separated feeling words
- Verified quote extraction for saved entries
- Structured mirror reports built from quotes, counts, and fixed reflection questions
- Dashboard activity stats for entries and verified quotes
- Raw data export with quote extractions
- Account settings, data deletion, and Stripe subscription management
- Next.js 14 App Router
- React 18
- PostgreSQL with Prisma
- Clerk authentication
- OpenAI for quote extraction, with heuristic fallback when
OPENAI_API_KEYis absent - Stripe checkout and customer portal
- Tailwind CSS
npm install
cp .env.example .env.localFill in at least:
DATABASE_URL=postgresql://...
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
NEXT_PUBLIC_APP_URL=http://localhost:5000Then sync the database schema:
npm run db:pushRun the app:
npm run devThe default local URL is:
http://localhost:5000
//sign-in/sign-up/forgot-password/sso-callback/dashboard/journal/insights/reports/settings/checkout/checkout/return/checkout/success