Transform college application essays through structured AI scoring and optional human review. Preserve student voice while delivering actionable feedback.
EssayEdge AI is a full-stack SaaS platform that helps students improve their college application essays using:
- AI-powered analysis (Claude Sonnet & Haiku)
- 7-dimension rubric scoring (authenticity, reflection, structure, specificity, clarity, mechanics, ethics)
- Voice preservation through tone embeddings and comparison
- Optional human review from vetted editors
- Version tracking to monitor progress across drafts
Frontend:
- Next.js 14 (App Router)
- TypeScript
- Tailwind CSS
- Shadcn/ui components
- Zustand (state management, if needed)
Backend:
- Next.js API Routes (serverless)
- Prisma ORM
- PostgreSQL (via Supabase)
AI/ML:
- Anthropic Claude (Sonnet for analysis, Haiku for fast checks)
- OpenAI (embeddings for tone comparison)
- Structured JSON validation with Zod
Payments:
- Stripe Checkout + Webhooks
Auth:
- Supabase Auth (email/password)
Hosting:
- Vercel (recommended)
- Supabase for database + storage
βββ app/
β βββ api/
β β βββ essays/ # Essay CRUD
β β βββ analyze/ # AI analysis endpoint
β β βββ rewrite/ # Rewrite suggestions
β β βββ stripe/ # Payment checkout
β β βββ webhook/ # Stripe webhooks
β βββ dashboard/ # Student dashboard
β βββ essay/[id]/ # Essay detail page
β βββ pricing/ # Pricing page
β βββ login/ # Auth pages
β βββ signup/
β βββ page.tsx # Landing page
βββ components/
β βββ ui/ # Shadcn components
β βββ essay/ # Essay-specific components
β βββ dashboard/ # Dashboard components
β βββ landing/ # Landing page components
βββ lib/
β βββ ai/
β β βββ analyzer.ts # Main AI scoring engine
β β βββ clients.ts # AI client setup
β β βββ prompts.ts # Prompt templates
β βββ supabase/ # Supabase client config
β βββ stripe/ # Stripe config
β βββ validations/ # Zod schemas
β βββ prisma.ts # Prisma client
βββ prisma/
β βββ schema.prisma # Database schema
βββ types/
β βββ ai.ts # TypeScript types
βββ .env.example # Environment variables template
- Node.js 18+
- npm or yarn
- PostgreSQL database (Supabase recommended)
- Anthropic API key
- OpenAI API key
- Stripe account
-
Clone the repository:
git clone <your-repo-url> cd tic-tac-toe
-
Install dependencies:
npm install
-
Set up environment variables:
cp .env.example .env.local
Fill in your actual values:
# Supabase NEXT_PUBLIC_SUPABASE_URL=your_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_service_role_key # AI APIs ANTHROPIC_API_KEY=your_anthropic_key OPENAI_API_KEY=your_openai_key # Stripe STRIPE_SECRET_KEY=your_stripe_secret NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_stripe_public STRIPE_WEBHOOK_SECRET=your_webhook_secret # Database DATABASE_URL=your_postgres_connection_string # App NEXT_PUBLIC_APP_URL=http://localhost:3000
-
Set up Supabase:
- Create a Supabase project
- Copy the connection string to
DATABASE_URL - The Prisma schema will handle table creation
-
Initialize the database:
npx prisma generate npx prisma db push
-
Run the development server:
npm run dev
-
Open the app: Navigate to http://localhost:3000
-
Install Stripe CLI:
brew install stripe/stripe-cli/stripe
-
Forward webhooks to local server:
stripe listen --forward-to localhost:3000/api/webhook/stripe
-
Copy the webhook signing secret to
.env.local
Commons Check (Free)
- Fast pass/fail flags
- Quick improvement tips
- Uses Claude Haiku (fast & cheap)
Full Analysis (AI Pro)
- 7-dimension rubric scoring (0-6 scale each)
- Weighted overall score (0-100)
- Detailed rationales for each dimension
- Top 5 targeted fixes
- Outline and sentence-level suggestions
- School-fit analysis
- Tone preservation check
Rewrite Suggestions
- Paragraph-level rewrites
- Voice preservation notes
- Multiple goal types (intro, specificity, goals, tone, structure)
- Authenticity/Voice (20%) - Does it sound like the student?
- Reflection/Insight (20%) - Shows growth and self-awareness?
- Narrative Structure (15%) - Clear beginning, middle, end?
- Specificity & School Fit (15%) - Concrete details and school alignment?
- Clarity & Style (10%) - Easy to read and engaging?
- Mechanics (10%) - Grammar, spelling, punctuation?
- Ethics/Originality (10%) - Authentic work, no red flags?
| Package | Price | Features |
|---|---|---|
| Free | $0 | 1 Commons Check (650 words max) |
| AI Lite | $9 | Commons Check + basic rubric + 5 fixes |
| AI Pro (Single) | $29 | Full rubric + rewrites + school-fit + tone check |
| AI Pro (Monthly) | $49/mo | Up to 6 essays per month |
| Human Lite | $79 | 1 professional review (48h turnaround) |
| Human Full (1) | $129 | 1 in-depth review with revision |
| Human Full (3) | $279 | 3 review rounds |
| Human Full (5) | $399 | 5 review rounds (complete coaching) |
See prisma/schema.prisma for the complete schema.
Key models:
User- Students, reviewers, adminsEssay- Essay metadata (type, prompt, school, word limit)EssayVersion- Versioned essay contentAIAnalysis- AI analysis resultsCommonsFlag- Individual flag resultsRewrite- Rewrite suggestionsOrder- Payment recordsReview- Human review assignmentsReviewer- Reviewer profiles
- All essays encrypted at rest (Supabase default)
- Essays NOT used to train models (unless opted in)
- Age gate: 16+ for MVP (avoids COPPA complexity)
- PII minimized
- Parental consent flow ready for <16 users
- Data retention: 18 months (configurable)
- Export and deletion self-serve
AI Analysis Test:
# Create a test essay via API
curl -X POST http://localhost:3000/api/essays \
-H "Authorization: Bearer <token>" \
-d '{
"type": "PERSONAL_STATEMENT",
"promptText": "Discuss a challenge...",
"content": "When I was twelve..."
}'
# Run analysis
curl -X POST http://localhost:3000/api/analyze \
-H "Authorization: Bearer <token>" \
-d '{
"versionId": "<version_id>",
"analysisType": "full"
}'- Connect your repo to Vercel
- Add environment variables in Vercel dashboard
- Deploy
# Generate migration
npx prisma migrate dev --name your_migration_name
# Apply migrations in production
npx prisma migrate deploy- Go to Stripe Dashboard β Webhooks
- Add endpoint:
https://your-domain.com/api/webhook/stripe - Select events:
checkout.session.completed,checkout.session.expired,charge.refunded - Copy signing secret to production env vars
- Create feature branch
- Make changes
- Test locally
- Run Prisma generate if schema changed
- Push and deploy
Create Essay
POST /api/essays
Body: {
type: EssayType,
promptText: string,
targetSchool?: string,
wordLimit?: number,
content: string
}Get Essays
GET /api/essays
Returns: { essays: Essay[] }Run Analysis
POST /api/analyze
Body: {
versionId: string,
analysisType: 'commons_check' | 'full',
toneSample?: string
}Generate Rewrites
POST /api/rewrite
Body: {
versionId: string,
goals: string[],
toneSample?: string
}Create Checkout Session
POST /api/stripe/checkout
Body: {
package: PackageType,
essayId?: string
}
Returns: { sessionId: string, url: string }- AI scoring engine
- API routes
- Landing page + pricing
- Basic authentication
- Stripe integration
- Database schema
- Dashboard UI
- Essay detail page with analysis results
- Diff viewer for rewrites
- Authentication pages
- School-fit database (top 50 schools)
- Reviewer marketplace basics
- Collaborative sessions
- Multilingual support
- Chrome extension for Google Docs
- Recommendation letter guidance
- Mobile app
See CONTRIBUTING.md for development guidelines.
Proprietary. All rights reserved.
- Issues: GitHub Issues
- Email: support@essayedgeai.com
Built with β€οΈ for students applying to college