Portfolio Project

danielshort.me

Responsive Portfolio Site

Product Visualization HTML CSS JavaScript
Preview image for danielshort.me

Context

I needed a fast site to show my work, especially on mobile.

Approach

  • Built a static site and rendered portfolio projects from a single data file.
  • Added Google Analytics 4, structured data, and lazy loading for heavy assets.

Impact

  • First Contentful Paint: 1.2s (mobile).
  • This site helped me share my work during my job search.

Goals

I built this site to be fast, easy to use, and easy to update as I add projects.

  • Performance: keep pages light and avoid blocking resources.
  • Accessibility: semantic landmarks, keyboard-friendly components, and predictable navigation.
  • Maintainability: one project data file + build scripts to generate pages.

Architecture

  • Static HTML pages with shared JS for navigation, lazy loading, and UI behavior.
  • Portfolio projects defined in one data file and rendered into modals and filters.
  • Progressive enhancement: the portfolio page still works without JS via pre-rendered cards.

SEO and Sharing

  • Generated `/portfolio/<id>` pages for each project (canonical URLs, Open Graph metadata, JSON-LD).
  • Kept `sitemap.xml` in sync via a build step.
  • Configured Vercel rewrites so clean URLs map to generated pages under `pages/`.

Build and Deployment

  • CSS is bundled into a hashed file for caching while still allowing quick invalidation.
  • Build scripts generate project pages and copy deployable artifacts into `public/`.
  • Lightweight tests enforce markup contracts and ensure pages exist for every project ID.

What I'd Improve

  • Add richer case studies (diagrams, metrics, and lessons learned) for the top projects.
  • Reduce third-party dependencies in demos and tighten CSP over time.
  • Automate screenshots so project cards stay consistent.

Links