Landing page for Project Olivaw: copy-paste Rust components for robotics and embedded systems, inspired by the "you own the code" philosophy.
This project replaces the Astro starter template with a complete marketing site built using Astro + Tailwind CSS v4.
- Framework: Astro 6
- Styling: Tailwind CSS v4 (via
@tailwindcss/vite) + custom CSS design tokens - Typography: Inter + JetBrains Mono (
@fontsource) - Animations: native
IntersectionObserverreveal animations (no animation library) - Output: static build with sitemap generation (
@astrojs/sitemap) - Theme: light/dark mode with persistent localStorage toggle and anti-flash boot script
Production site is configured as: https://polivaw.grisu.co
The staged implementation follows the "Project Olivaw Website — Implementation Plan" and includes:
- Full landing page architecture (header, hero, sections, footer)
- Reusable UI primitives (
Button,Badge,Card,CodeBlock,Icon,SectionTitle) - Section components:
HeroAboutFeaturesProjectsGettingStartedCommunity
- Type-safe component contracts in
src/types/components.ts - Global design system in
src/styles/global.css - Scroll-in animation system in
src/scripts/animations.ts - Starter cleanup (removed default Astro assets and
Welcome.astro)
/
├── astro.config.mjs
├── package.json
├── public/
├── src/
│ ├── components/
│ │ ├── layout/
│ │ │ ├── Footer.astro
│ │ │ ├── Header.astro
│ │ │ └── ThemeToggle.astro
│ │ ├── sections/
│ │ │ ├── About.astro
│ │ │ ├── Community.astro
│ │ │ ├── Features.astro
│ │ │ ├── GettingStarted.astro
│ │ │ ├── Hero.astro
│ │ │ └── Projects.astro
│ │ └── ui/
│ │ ├── Badge.astro
│ │ ├── Button.astro
│ │ ├── Card.astro
│ │ ├── CodeBlock.astro
│ │ ├── Icon.astro
│ │ └── SectionTitle.astro
│ ├── layouts/
│ │ └── Layout.astro
│ ├── pages/
│ │ └── index.astro
│ ├── scripts/
│ │ └── animations.ts
│ ├── styles/
│ │ └── global.css
│ └── types/
│ └── components.ts
└── README.md
- Node.js
>=22.12.0 - pnpm
pnpm installpnpm devVisit: http://localhost:4321
pnpm buildpnpm preview| Command | Description |
|---|---|
pnpm dev |
Start Astro dev server |
pnpm build |
Build static production output in dist/ |
pnpm preview |
Serve the production build locally |
pnpm astro |
Run Astro CLI commands |
- Tailwind v4 is loaded through
@import 'tailwindcss';insrc/styles/global.css. - Design tokens are defined via CSS variables in
:rootand.dark. - The theme toggle stores user preference in
localStorageunderolivaw-theme. - A blocking inline script in
src/layouts/Layout.astroapplies theme before paint to avoid FOUC/FOWT.
- Elements annotated with
data-animateanddata-animate-staggerreveal on scroll. - Logic lives in
src/scripts/animations.ts. - Each animated element is observed once and unobserved after becoming visible.
src/layouts/Layout.astrosets canonical URL, Open Graph, and Twitter metadata.- Sitemap is generated through
@astrojs/sitemapduring build.