Personal website for Dana Larsen β Vancouver-based drug policy reform activist, author, and founder of multiple harm reduction organizations.
Built with Astro, a custom design system, and a focus on accessibility and performance.
- Framework: Astro β static-first, component-based architecture
- Styling: Vanilla CSS with a custom token-based design system (OKLCH color space)
- Fonts: Self-hosted custom typefaces (
CD,Inter) withfont-display: swap - Images: WebP format, lazy loaded, with
astro:assetsoptimization
The site uses a two-tier token system defined in src/styles/variables.css:
- Primitive tokens β raw color, spacing, and type values (
--blue-200,--sp-04,--font-03) - Semantic tokens β contextual mappings for surfaces, text, and interactive states (
--bg-surface,--text-title,--button-primary)
All colors use the OKLCH color space for perceptually uniform palettes and relative color syntax for hover states and transparency.
- Accessible by default β skip links, ARIA labels, visible focus rings, semantic HTML, and
prefers-reduced-motionsupport - SEO optimized β structured data (
Person,WebSite,WebPage), Open Graph / Twitter Card meta, canonical URLs, sitemap, androbots.txt - Responsive layout β fluid typography with
clamp(), container-aware grid layouts, and mobile-first breakpoints - Component architecture β reusable Astro components (
Button,ProjectCard,NewsBlock,SidebarBlock) with scoped styles - Performance β font preloading, DNS prefetching, lazy-loaded images, and minimal client-side JS
src/
βββ assets/graphics/ # SVG icons, social icons, decorative elements
βββ components/ # Reusable UI components (Button, Nav, Footer, etc.)
βββ layouts/ # Base HTML layout with meta and structured data
βββ pages/ # Route entry points
βββ sections/ # Page-level sections (Hero, Projects, About, Newsletter)
βββ styles/ # Global styles, reset, and design tokens
public/
βββ fonts/ # Self-hosted WOFF2/WOFF files
βββ images/ # Optimized static images
βββ favicon.svg
βββ robots.txt
βββ sitemap.xml
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewπ§ In active development β content sections and responsive refinements in progress.
Designed and developed by me. Built to ship, not just to show.