Bold Ideas Lab (Chinese name: 敢想实验室) is a youth-focused creative education brand: AI-assisted projects, mentorship, and outcomes-oriented learning for families who want depth beyond generic tech classes.
This repository is the production Next.js workspace for the public marketing site.
- Next.js 16 (App Router)
- React 19
- TypeScript
- Tailwind CSS 3.x
- lucide-react (icons)
For future multi-agent collaboration, read in this order:
AGENT.md(live progress, priorities, session protocol)README.md(this file; technical map)ITERATION_INSIGHTS.md(commit-level decision history)public/media/MEDIA_STATUS.md+public/media/ASSET_CATALOG.md(media runtime + mapping)
If any older status doc conflicts with AGENT.md, use AGENT.md as canonical.
| Route | App entry | Page component |
|---|---|---|
/ |
app/page.tsx |
components/pages/HomePage.tsx |
/about |
app/about/page.tsx |
components/pages/AboutPage.tsx |
/programmes |
app/programmes/page.tsx |
components/pages/ProgrammesPage.tsx |
/work |
app/work/page.tsx |
components/pages/WorkPage.tsx |
/eduos |
app/eduos/page.tsx |
components/pages/EduosPage.tsx |
/insights |
app/insights/page.tsx |
components/pages/InsightsPage.tsx |
/contact |
app/contact/page.tsx |
components/pages/ContactPage.tsx |
Global shell: app/layout.tsx (metadata, Navbar, Footer, LanguageProvider).
- Shared layout:
components/layout/(Navbar,Footer,LanguageToggle) - UI primitives:
components/ui/(PageHero,Section,Card,ButtonLink,CheckList,EditorialImage,FinalCta) - i18n copy:
messages/en.json,messages/zh.json— primary text store for both locales - Locale + dictionary wiring:
lib/i18n.ts(navItems,getDictionary, types) - Client language state:
components/providers/LanguageProvider.tsx(togglesen/zh, persistsboldIdeasLocaleinlocalStorage, setsdocument.documentElement.lang)
- Primary metadata config:
app/layout.tsx- title template, description, canonical, OpenGraph, Twitter cards, icon declarations.
- Crawler rules:
app/robots.ts->/robots.txt - Sitemap:
app/sitemap.ts->/sitemap.xml - PWA manifest:
app/manifest.ts->/manifest.webmanifest - Brand/icon assets in use:
app/icon.pngapp/apple-icon.pngapp/favicon.icoapp/opengraph-image.pngapp/twitter-image.pngpublic/brand/logo-full.png
- Implemented in
components/pages/ProgrammesPage.tsx. - Reads
?promo=from the URL (case-insensitive). Active codes:workshop,returning(legacy-compatible:london,manchester) (seevalidPromoCodesin that file). - When active: shows promo banner and strikethrough “original” prices; prices and copy strings come from
messages/*.jsonunderprogrammes.pricing. app/programmes/page.tsxwraps the page inSuspensebecauseuseSearchParams()is used.
cd bold-ideas-lab-web
npm install
npm run devOpen the URL shown in the terminal (typically http://localhost:3000).
npm run build # production build
npm run lint # eslint- Inside this repo (
bold-ideas-lab-web/): the Next.js app, Tailwind config, and in-repo docs (README.md,AGENT.md,ITERATION_INSIGHTS.md,PROJECT_STATUS.md,AI_HANDOFF.md,CONTENT_STATUS.md). - Outside this repo (workspace parent):
reference_materials/(HTML prototypes), and analysis/handoff markdown such asPROJECT_AUDIT.md,CONTENT_SOURCE_MAP.md,REFERENCE_EXTRACTION.md. Treat those as inputs for content decisions, not as code to merge verbatim.
For live priorities and cross-agent continuity, read AGENT.md first, then AI_HANDOFF.md and historical status docs as needed.