This is a detailed, well-specified build. Let me quickly describe the reference images, then check the project setup and build it.
Image descriptions:
Let me look at the project structure.
I have everything I need (Tailwind v4, shadcn, date-fns, lucide-react). Let me check which UI components are available.
All components exist and I have date-fns, lucide-react, and shadcn ready. I'll build a dense, Gantt-style operational UI with a clear separation: types + mock data in lib/, and modular components in components/curriculum/. Let me create the data layer first.
Now the timeline math utilities and visual helpers:
Now the small presentational components — badges:
Now the top-bar components (header, view tabs, filters):
Now the shared row-model builder used by both the tree and the timeline (keeps row heights aligned):
Now the timeline bar with resize affordances:
Let me add header tier height constants to the timeline lib:
Now the CurriculumTreeTable (left sticky panel):
Now the TimelineGrid (right scrollable panel):
Now the WeekDetailPanel (daily breakdown):
Now the CurriculumDetailDrawer with clearly separated actions:
Now the main page component that wires it together with a spreadsheet-style single-scroll (sticky left column, scrollable timeline). Let me add sonner toaster usage too.
Now wire up the page and add the Toaster:
Let me update the layout metadata and add the background class to <html>:
Now let me verify it compiles and check for errors by checking the dev logs after a build check:
Run this command?
cd /vercel/share/v0-project && pnpm exec tsc --noEmit 2>&1 | head -40