Personal brand/portfolio site for Kathryn Hurchla. Domain: dadeda.design
Brand: Data, Design & Daughters LLC dba Data Design Dimension (DADEDA).
#DADEDA is both the brand name and a hex color (sage mist, oklch(0.89 0.007 155)).
- Framework: Astro 6 (static-first, islands architecture)
- Components: Svelte 5 (runes, no shadow DOM)
- Styling: Tailwind v4 (layout/typography) + vanilla CSS (animation/D3 viz). OKLCH tokens.
- Testing: Vitest (TDD), Playwright (e2e), Chromatic (visual regression)
- Component dev: Storybook 8
- Deployment: Cloudflare Pages + Workers + KV + R2
- Language: TypeScript (strict)
- Package manager: pnpm
pnpm dev— start dev serverpnpm build— production buildpnpm preview— preview production buildpnpm check— Astro type checkingpnpm test— run Vitest testspnpm test:watch— run tests in watch modepnpm storybook— start Storybook dev serverpnpm storybook:build— build Storybook
src/pages/— Astro page routessrc/components/— Svelte interactive componentssrc/layouts/— Astro layout templatessrc/content/— Content collections (YAML cards, MD/MDX writing & pages)src/lib/— Shared utilities, Scrambler logic, GitHub API clientsrc/lib/webmcp/— WebMCP tool registrationssrc/styles/— Design tokens (tokens.css), global stylespublic/— Static assets (favicons, robots.txt, llms.txt)docs/adr/— Architecture Decision Recordstests/— Test files
Always test-first:
- Write failing test
- Confirm it fails
- Implement until test passes
- Refactor while green
- ES modules, never CommonJS
- Svelte 5 runes ($state, $derived, $effect), not legacy reactive syntax
- D3 components: use
client:only="svelte"directive in Astro pages - All images must have descriptive alt text
- Semantic HTML (nav, main, article, section, footer)
- Color tokens via CSS custom properties, never hardcoded hex
- Tailwind for layout/typography, vanilla CSS for animation + D3 viz
- Cards and clusters defined as YAML data files, not hardcoded in components
- Adding content = adding a YAML/MD file. No component code changes needed.
- Writing hub:
original(full text),syndicated(excerpt + link),note(micro-post)
- WCAG 2.1 AA minimum
- All interactive elements keyboard navigable
- Color contrast >= 4.5:1 normal text, >= 3:1 large text
- Skip navigation link on every page
- ARIA labels on icon-only buttons
prefers-reduced-motion: disable all animationsprefers-color-scheme: respect dark/light preference
- Branch naming: feature/, fix/, content/
- Conventional commits (feat:, fix:, docs:, style:, refactor:)
- Run
pnpm buildbefore committing - Never commit .env files or API keys