Ivy is a student workspace built with Next.js that combines course planning, deadline tracking, and AI-assisted study workflows in one app.
The current product includes:
- a dashboard with course, task, and deadline overview
- an AI study assistant for chat, course extraction, flashcards, and quizzes
- a calendar view for dated and TBD work
- a resume analyzer for ATS keyword matching
- a cover letter generator for job-specific drafts
- lightweight auth plus Supabase-backed persistence
- Next.js 16 App Router
- React 19
- TypeScript
- Tailwind CSS 4
- Supabase REST API
- OpenAI API
- create, edit, and delete courses
- track tasks and deadlines
- export tasks and deadlines as CSV
- review workload in dashboard and calendar views
- chat with uploaded PDF or text context
- extract course structure from syllabi or notes and turn it into app data
- generate flashcards from source material
- generate quiz questions for self-testing
- upload a resume PDF and compare it against a job description
- generate prioritized resume edits
- draft ATS-friendly cover letters with tone presets
- UI uses client-rendered pages and components under
app/andcomponents/. - Core data is loaded from
/api/data/bootstrap. - Auth is cookie-based and handled in
lib/server/auth.ts. - Persistence is backed by Supabase through
lib/server/supabaseRest.ts. - AI features currently run through server routes in
app/api/.
- Node.js 18+
- npm
- Supabase project with the included SQL migration applied
- OpenAI API key for AI features
- Install dependencies:
npm install- Copy the environment template:
cp .env.example .env.local-
Fill in the required values in
.env.local. -
Apply the Supabase migration in
supabase/migrations/20260213170000_initial_auth_and_data.sql. -
Start the app:
npm run dev- Open
http://localhost:3000.
See .env.example for the canonical list.
Required:
NEXT_PUBLIC_SUPABASE_URLSUPABASE_SERVICE_ROLE_KEY
Optional:
OPENAI_API_KEY
If OPENAI_API_KEY is missing, parts of the career tooling fall back to deterministic non-AI responses. The main chat and study-generation flows require an API key.
npm run devstarts the local dev servernpm run buildbuilds the production appnpm startserves the production buildnpm run lintruns the TypeScript checknpm run test:unitplaceholder todaynpm run test:integrationplaceholder todaynpm run test:e2eplaceholder today
These are real, known gaps in the repository today:
- automated tests are not wired up yet
- README-level deployment documentation is still minimal
- AI key handling is server-owned by default rather than bring-your-own-key
- some UI copy and branding are inconsistent with the underlying implementation
The intended direction is to support a bring-your-own-key model so self-hosters can use their own API credentials rather than relying on a project-owned key. That work fits the current architecture and is a near-term improvement target.