Skip to content

ryanbaumann/Portfolio

Repository files navigation

Ryan Baumann Portfolio: one site, one demo lab, real maps

This repo is the public home for Ryan Baumann's portfolio and demo lab. It is part personal site, part runnable reference architecture, and part proof that developer experience work should ship as real artifacts.

The live site is https://www.ryanbaumann-portfolio.com/.

What is inside

  • Portfolio site at /: a zero-dependency static site over a flat-file markdown CMS. It covers work, writing, talks, and demos with no client-side JavaScript.
  • Demo lab under app paths: Strava 3D Explorer, Air Quality Map, and Isochrones, each built as a self-contained app.
  • Gateway in gateway/: a zero-npm-dependency Node server that serves the site, mounts each demo, and keeps secret-bearing API calls behind same-origin /api/* routes.
  • Cloud Run container: one deployable artifact for the site and every demo.

The portfolio narrative is intentionally grounded: solution architecture, developer experience, forward-deployed incubation at Google Maps Platform, and product growth leadership. The codebase backs that up with live apps, public docs, shipped links, tests, smoke checks, and a changelog.

Start here

Goal Command
Configure local secrets npm run setup
Build the whole container locally npm run build
Run the production gateway locally npm start
Smoke-test routes, assets, proxies, and secret leaks npm run smoke
Add a demo app npm run new:demo -- my-demo --title "My Demo"
Add a blog post npm run new:post -- "Post title"
Regenerate demo screenshots npm run previews

Apps

  • Site / Portfolio, served at /: Ryan's home page, work, writing, talks, and demo index.
  • Strava 3D Explorer: visualize Strava routes, endpoints, and photos in Google Maps Platform Photorealistic 3D.
  • Air Quality Map: inspect live Air Quality API heatmap tiles and point conditions on a 2D Google map.
  • Isochrones: analyze delivery, commute, and response reachability with live-regenerating isochrone bands.

Local development

npm run setup
npm run build
npm start

Open http://localhost:8080/. Then run:

npm run smoke

Each app can also run on its own dev server:

cd strava-explorer && npm install && npm run dev
cd aqi-map && npm install && npm run dev
cd isochrones && npm install && npm run dev
cd portfolio && node build.mjs && node serve.mjs

Architecture in one paragraph

portfolio/ builds static HTML into portfolio/dist/. Each demo builds its own static bundle. scripts/build-local.mjs stages those outputs under apps/<name>/, matching the Docker runtime layout. gateway/server.js serves the portfolio at the root, mounts demo apps from apps.json by most-specific path first, and proxies secret-bearing calls through server-side routes. See docs/ARCHITECTURE.md for the full design.

Security posture

  • Never commit API keys, OAuth secrets, access tokens, refresh tokens, or generated .env.* files.
  • Browser-exposed Google Maps keys must use VITE_ variables, API restrictions, and HTTP referrer restrictions.
  • Server-side secrets stay in Node env vars: STRAVA_CLIENT_ID, STRAVA_CLIENT_SECRET, and GMP_SERVER_API_KEY.
  • Gateway proxy endpoints return keyless 503 JSON responses instead of crashing, so smoke tests can run without secrets.

Deploy

.github/workflows/deploy.yml builds the container with Cloud Build and deploys it to Cloud Run on pushes to main using Workload Identity Federation.

Cost and terms

Google Maps Platform usage may incur costs. For prototypes, consider the Maps Demo Key: https://mapsplatform.google.com/maps-demo-key.

These projects integrate Google Maps Platform and Strava APIs. Use them in compliance with the Google Maps Platform Terms of Service, Google Maps End User Additional Terms, Google Privacy Policy, and the Strava Developer Agreement.

Contributing

Small, focused PRs are welcome. Keep app-specific code, commands, and dependencies inside the app directory you are modifying. Use npm only. Include the validation commands you ran.

License

MIT. See LICENSE.

About

Web app for trails.ninja

Resources

License

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors