Skip to content

cadamsmith/cadamsmith.dev

Repository files navigation

πŸš€ cadamsmith.dev

Personal portfolio site built with Astro + Svelte 5, deployed on Cloudflare Pages.

site image

stack

  • astro β€” static site generation, file-based routing, content collections
  • svelte 5 β€” interactive islands (skills widget, timeline, projects, music player, map)
  • leaflet β€” interactive location map
  • cloudflare pages β€” hosting and deployment
  • typescript β€” throughout

architecture

All pages are prerendered at build time (static output). Interactive components are mounted as Svelte islands with client:visible.

Site content is driven by Astro content collections in src/content/:

Collection Description
skills/ Tech skills shown in the skills widget
timeline/ Work and education history with location + coordinates
projects/ Projects shown in the projects widget
songs/ Music player playlist + /songs browse page (YouTube embeds)
blurbs/ Hero and contact section copy
heroTags/ Info tags shown in the hero section

local setup

git clone https://github.com/cadamsmith/cadamsmith.dev.git
cd cadamsmith.dev
npm install
npm run dev

commands

npm run dev        # Start development server
npm run build      # Build for production (static output to dist/)
npm run preview    # Preview production build
npm run test       # Run Vitest unit tests
npm run lint       # Run Prettier + ESLint checks
npm run format     # Auto-format with Prettier
npm run check      # Astro type checking
npm run resume     # Regenerate resume.pdf from content (local tool; needs Gleam + Typst)

resume generator

The served resume (public/resume.pdf) is generated from the site's own content, so it stays in sync with the rest of the site. A small Gleam CLI in tools/resume/ parses the content collections (timeline/, skills/, projects/) plus tools/resume/profile.yaml, then renders a Typst template to PDF.

npm run resume   # writes public/resume.pdf β€” review the diff before committing

This is a local, on-demand tool β€” it needs gleam (+ Erlang) and typst installed (brew install gleam typst) and is intentionally not part of npm run build or CI. See tools/resume/README.md for details.