Set up the colours, fonts, and spacing rules once. Then every component you build looks intentional automatically.
A design token is just a named value. Instead of writing #4F46E5 everywhere you need indigo, you write indigo. Instead of 'Cormorant Garamond, serif' everywhere, you write font-display. Then if you decide your school's indigo should be a touch warmer, you change one place and every page updates.
This is the whole reason real projects feel "designed" and prototypes don't.
Now every page imports from @/lib/constants and there is exactly one place to update if a branch phone number changes.
This is the single most important difference from Project 1. In Lovable, the branches were mentioned in 7 different places. Here, they're a constant. Adding a new branch is one entry in the BRANCHES array.
Files inside public/ are served from the root of your site. So public/branches/andheri.jpg becomes the URL /branches/andheri.jpg — which matches the image: '/branches/andheri.jpg' in BRANCHES.
For now, even placeholder photos are fine. You can replace them later. The naming is what matters.
git add .git commit -m "set up design tokens, fonts, school data"git push
Wait ~60s, then refresh aurora-school.vercel.app. The default Next welcome page is still there (we haven't touched page.tsx yet), but the production build now includes your fonts and tokens — ready to use on the next page.
The infrastructure is set. The design language is locked in. Now you build the actual pages.
The next page (branches-page.mdx) builds the /branches route — and along the way you'll see how having BRANCHES as one constant makes the whole thing trivial. After that, the home page, the admissions page with a working contact form, and finally about + deploy + checklist.