DayForge converts a raw task list into a realistic, time-boxed daily schedule — deep work blocks placed at peak hours, admin work batched together, and highest-leverage tasks front-loaded by default. Add a task mid-day and the rest of the day regenerates around it.
DayForge takes a pasted task list and builds a time-boxed daily schedule that accounts for meetings, breaks, and context-switching cost, places deep-work blocks at peak-energy hours, batches admin work together, and orders tasks by leverage. The resulting schedule exports for Notion, Google Calendar, or plain copy-paste, and can be regenerated on the fly when a new task is added mid-day.
app/page.tsxrenders the landing shell withHeroSection,FeaturesSection, and thePlannerForminput component.app/api/plan/route.tssends the submitted task list to the Groq Chat Completions API (llama-3.3-70b-versatile) against a typedScheduleOutputschema, falling back to a fixed demo schedule when no API key is set.app/api/review/route.tspersists a real end-of-day retro (what worked, what failed, one lesson) to Postgres vialib/db.ts, so past reviews can inform how future plans are judged.- Styling is Tailwind CSS with Framer Motion handling interface transitions.
The real problem: an AI scheduler that only ever proposes plans and never learns whether they worked is just a fancier to-do list — the interesting problem is closing the loop between "here's your plan" and "here's what actually happened."
The approach: /api/review persists a structured retro (what worked, what failed, one lesson) per plan to Postgres, independent of the LLM call that generated the plan — the review loop works even if Groq is unavailable, and recentReviews() makes past retros queryable rather than write-only.
One real number: reviews are capped to the 14 most recent by default (recentReviews(limit = 14)) — roughly two weeks of retro history surfaced at a time.
Not handled yet: past reviews aren't fed back into the plan-generation prompt yet — the persistence layer exists, but the "learn from what failed last time" loop isn't closed end-to-end.
| Layer | Technology |
|---|---|
| Framework | Next.js (App Router) |
| Language | TypeScript |
| AI | Groq (llama-3.3-70b-versatile) |
| Styling | Tailwind CSS |
| Motion | Framer Motion |
| Deployment | Vercel |