Imported from Julian-AT/young_ai_leaders_linz (
AGENTS.md). Install upstream withnpx skills add Julian-AT/young_ai_leaders_linz. Copyright stays with the author.
This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in node_modules/next/dist/docs/ before writing any code. Heed deprecation notices.
Young AI Leaders Austria
Tech Stack
- Framework: Next.js 16 (App Router, React 19, TypeScript strict)
- Styling: Tailwind CSS v4 with oklch design tokens
- Deployment: Vercel
Commands
npm run dev— Start dev servernpm run build— Production buildnpm run lint— ESLint checknpm run lint:fix— ESLint auto-fixnpm run typecheck— TypeScript checknpm run format— Prettier formatnpm run format:check— Check formattingnpm run check— Run lint + typecheck + build
Code Style
- TypeScript strict mode, no
any - Named exports, PascalCase components, camelCase utils
- kebab-case file names
- Tailwind utility classes, no inline styles
- 2-space indentation
- Responsive: mobile-first
- Server components by default, "use client" only where needed
Project Structure
src/
app/ # Next.js routes only
components/
shared/ # Layout-level (header, footer, smooth-scroll, theme-band, icons)
sections/ # Page sections (hero, stats, programs-switcher, etc.)
content/ # Static content data (about, partners, programs, site)
hooks/ # Shared React hooks
config/ # Environment validation
public/
fonts/ # Self-hosted WOFF2
images/ # Site images
logos/ # Brand assets
seo/ # Favicon, OG image
Architecture Rules
- Server components by default — only add "use client" for interactivity
- Content data lives in
src/content/— centralized static content layer - No barrel exports (index.ts) — use explicit file imports
- No global state management — use server rendering, props, URL state
- Shared hooks in
src/hooks/— e.g.,use-reveal.tsfor IntersectionObserver animations - Absolute imports via
@/*mapped tosrc/*
Important Notes
- When launching Claude Code agent teams, ALWAYS have each teammate work in their own worktree branch and merge everyone's work at the end.
- Pre-commit hooks run ESLint + Prettier via Husky + lint-staged.
Learned User Preferences
- Use the brand string "Young AI Leaders Austria" (not Linz); keep Linz-named domain, email, social handles, and repo unless explicitly asked to change them.
- Client-side route changes should reset scroll to the top of the page (Lenis-aware, not only
window.scrollTo). - Prefer cutting unused CMS/infra over keeping partial integrations; this site stays static content on Vercel without Payload or Docker.
- Blog content should be MDX/markdown with dynamic routes and image support, not a TypeScript-only content module.
- Blog listing should use infinite scroll and prioritize fast image loading/performance.
Learned Workspace Facts
- Payload CMS was removed; page content lives in static modules under
src/content/. - Blog posts are MDX files in
src/content/blog/, compiled with@next/mdx, listed viasrc/content/blog.ts, and served at/blogand/blog/[slug]. - Smooth scrolling is powered by Lenis; navigation scroll-reset must use the Lenis instance.
