A bilingual marketing site built with Astro and Tailwind CSS. The project targets deployment under the /vibeperform-astro-page base path (for example on GitHub Pages) and ships with reusable UI primitives and structured content for fast iteration.
- Node.js 20 LTS (aligns with the GitHub Actions workflow)
- npm (comes with Node 20)
- Optional: npx astrofor project utilities
Keep Node versions in sync across local environments and CI to avoid lockfile drift.
- Install dependencies once:
npm install 
- Start the dev server with hot reload:
Astro prints a local URL (defaultnpm run dev http://localhost:4321). Use?lang=dewhen previewing locale-specific routes if your browser caches redirects.
- Create optimized production output before deploying:
npm run build 
- Preview the built site (uses the output in dist/):npm run preview 
Always run npm run build before shipping changes so Astro detects base-path issues early.
src/
  components/
    Button.astro        # Reusable CTA button with confetti behaviour
    HomePage.astro      # Landing page shell (hero + features) that consumes localised content
    NavBar.astro        # Shared navigation bar used across every page
  data/
    homeContent.ts      # Locale-specific strings and navigation definitions
  pages/
    index.astro         # English landing page
    de/index.astro      # German landing page
    workshops.astro     # English detail page
    about-us.astro      # English detail page
    de/workshops.astro  # German counterpart
    de/ueber-uns.astro  # German counterpart
    markdown-page.md    # Sample markdown content page
styles/
  global.css            # Tailwind base styles + custom utilities
Astro routes map 1:1 to files (src/pages/**/*.astro). English pages live at /vibeperform-astro-page/...; German pages sit under /vibeperform-astro-page/de/....
- NavBar.astrois the single source of truth for navigation markup. When creating new pages, import it instead of rebuilding headers.
- Set homeHrefusing the/vibeperform-astro-pageprefix so deployments under a project subpath keep working.
- Each page’s locale toggle (alternateLocaleHref) should point to the equivalent page in the other language. Keep these links absolute to the project root (e.g./vibeperform-astro-page/de/workshops).
- Use npm run buildto validate that generated asset paths respect the base path before publishing.
- Tailwind classes provide the primary styling. To change global colours, edit src/styles/global.cssand extend the Tailwind config if you need custom tokens.
- For consistent backgrounds and typography, rely on Tailwind palette tokens (bg-white,text-slate-900, etc.) rather than hard-coded hex values.
- When updating colour usage:
- Adjust the tailwind class at the component level.
- Audit dark/light contrast using Tailwind’s numbered scale (slate-500,slate-700) for predictable accessibility.
- Keep reuse high—if you find repeated overrides, graduating colours into Tailwind’s theme configuration avoids duplication.
 
- Buttons and links use shared patterns (Button.astroand NavBar classes). Update those components first so colour tweaks cascade everywhere.
- Centralise shared copy in src/data/homeContent.ts. Each locale has anav,hero, andfeaturesblock. Update copy here instead of editing multiple components.
- Honour the structure:
- nav.linkscontrols both label text and target URLs. Use absolute URLs that include- /vibeperform-astro-pageso navigation works in production.
- herostrings feed the landing page hero via- HomePage.astro.
- features.itemsis an array; keep copy concise to preserve layout on mobile.
 
- For page-specific content (e.g., /workshops), edit the relevant.astrofile. Maintain parity between English and German versions to keep toggles symmetrical.
- When adding a new locale:
- Duplicate the page structure under a new directory (e.g., src/pages/fr/).
- Extend homeContentwith the new locale key.
- Provide translations for every navigation label and feature string before exposing the locale toggle.
 
- Duplicate the page structure under a new directory (e.g., 
- The site expects the /vibeperform-astro-pageprefix. If you deploy elsewhere, update:- homeHrefderivation in- HomePage.astro
- All hard-coded homeHrefand locale URLs in the content pages
- The navigation links in homeContent.ts
 
- Keep CI/CD on Node 20 (actions/setup-nodealready pins it). Regeneratepackage-lock.jsononly with that version to avoid inconsistencies.
- After each deploy, smoke-test both locales, the locale toggle, and static assets (favicon.svg, CSS) to confirm base URLs are correct.
- Branch from master.
- Implement UI/content updates in the component or data file where the copy lives.
- Run npm run devfor live feedback; runnpm run buildbefore opening a PR.
- Verify navigation links and language toggles manually in both locales.
- Commit with a concise, descriptive message and open a review-ready PR.
Following this checklist keeps the marketing site consistent, accessible, and production-ready with minimal effort.