diff --git a/CHANGELOG.md b/CHANGELOG.md index a86cbc6..0e5ae98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 2026-07-13: Portfolio leadership positioning and preview audit + +- Repositioned the homepage and about copy around product, go-to-market, and engineering leadership for developer platforms, including the 20+ person Google Maps Platform Developer Experience Engineering team and manager-layer scope. +- Reordered featured work to lead with AI-native distribution after Code Assist, then agent skills, Voice of Developer, and evals, so the page reads more like a product growth system than a list of artifacts. +- Reordered writing to put weekly learnings first and Substack experiments second, and clarified thumbnail alt text where external preview image fetching is blocked by the environment. +- Tightened writing and talks section copy around shared learnings, team systems, and shipped product surfaces. +- Improved portfolio list thumbnails by emitting real image dimensions for row and work-card images and using a more stable grid row layout. + ## 2026-07-13: Portfolio feedback readiness pass - Compressed the portfolio header into a single-line shell on mobile and desktop, added Resume and Contact navigation, and added a manual light/dark theme toggle. diff --git a/portfolio/build.mjs b/portfolio/build.mjs index c231bb8..e3b14e4 100644 --- a/portfolio/build.mjs +++ b/portfolio/build.mjs @@ -472,6 +472,8 @@ function getImageDimensions(imagePath) { function workCard(entry) { const { meta } = entry; + const imagePath = meta.image ? join(STATIC_DIR, meta.image.replace(/^\//, '')) : ''; + const imageSize = meta.image ? getImageDimensions(imagePath) : null; const url = hasDetailPage(entry) ? entryUrl('work', entry) : rebase(meta.links?.[0]?.url || `${BASE}work/`); const external = !hasDetailPage(entry) && /^https?:/.test(url); const cardMeta = `

${metaLine([meta.org, meta.period])}

@@ -480,7 +482,7 @@ function workCard(entry) { ${meta.tags ? `

${meta.tags.map((tag) => `${escapeHtml(tag)}`).join('')}

` : ''}`; if (meta.image) { return ` - ${escapeHtml(meta.imageAlt || meta.title)} + ${escapeHtml(meta.imageAlt || meta.title)}
${cardMeta}
@@ -499,8 +501,10 @@ function listRow(collection, entry) { const title = clickable ? `
${escapeHtml(meta.title)}${external ? ' ↗' : ''}` : escapeHtml(meta.title); + const imagePath = meta.image ? join(STATIC_DIR, meta.image.replace(/^\//, '')) : ''; + const imageSize = meta.image ? getImageDimensions(imagePath) : null; const thumb = meta.image - ? `${escapeHtml(meta.imageAlt || meta.title)}` + ? `${escapeHtml(meta.imageAlt || meta.title)}` : ''; return `
  • ${thumb} diff --git a/portfolio/content/pages/about.md b/portfolio/content/pages/about.md index 8453f51..0aee26c 100644 --- a/portfolio/content/pages/about.md +++ b/portfolio/content/pages/about.md @@ -6,13 +6,13 @@ image: /previews/portfolio.jpg imageAlt: The home page of ryanbaumann-portfolio.com, the site this repo builds and serves --- -Engineer, builder, tinkerer. I have spent 15+ years building platforms at Google, Mapbox, Instabase, and Caterpillar. My lane is the seam between solution architecture, developer experience, and product growth. I set strategy, and I stay in the work: I dogfood products, review traces, write evals, ship reference apps, and show up where developers are. The proof lives on this site. [The lab](/demos/) is a set of live apps I build and run myself. +I lead product, go-to-market, and engineering work for developer platforms. Today that means Developer Experience Engineering for Google Maps Platform: a 20+ person team across engineering, product management, technical writing, developer relations, solution architecture, AI context, and developer growth, with multiple managers leading major lanes. I set strategy, and I stay in the work: I dogfood products, review traces, write evals, ship reference apps, and show up where developers are. The proof lives on this site. [The lab](/demos/) is a set of live apps I build and run myself. My operating thesis: **developer experience is a growth discipline.** The platforms that win don't just write better docs. They work backwards from adoption and revenue goals to the product, architecture, context, distribution, and ecosystem investments that move them. That holds whether the platform sells maps, document AI, or anything else. ## Google, 2021 to present -**Head of Developer Experience, Google Maps Platform** (2022 to present). I lead Developer Experience Engineering for a platform that powers over 10 million websites and apps. The team spans engineering, product management, technical writing, and developer relations, and operates as one unit with Product and Engineering. +**Head of Developer Experience, Google Maps Platform** (2022 to present). I lead Developer Experience Engineering for a platform that powers over 10 million websites and apps. The org is 20+ people across engineering, product management, technical writing, developer relations, solution architecture, AI context, and developer growth, with multiple managers owning durable workstreams. We operate as one unit with Product, Engineering, Sales, and Marketing. A lot of the work is forward-deployed incubation: sit with the field, find the repeated architecture or adoption blocker, build the smallest real artifact, then scale it through product, docs, partners, and distribution. The launches I led with this team, [Code Assist](https://developers.google.com/maps/ai/code-assist), [agent skills](https://github.com/googlemaps/agent-skills), the agentic eval suite, the Geo Architecture Center, and distribution into AI Studio, Replit, and Lovable, are detailed in [Work](/work/). diff --git a/portfolio/content/site.json b/portfolio/content/site.json index a2b1a0e..ab6ed5c 100644 --- a/portfolio/content/site.json +++ b/portfolio/content/site.json @@ -1,16 +1,16 @@ { "name": "Ryan Baumann", - "role": "Solution architecture, developer experience, and product growth leader", - "tagline": "Maps \u00b7 Solution Architecture \u00b7 Product Growth \u00b7 Agent-ready platforms", + "role": "Product, go-to-market, and engineering leader for developer platforms", + "tagline": "Maps \u00b7 Product GTM \u00b7 Developer Experience \u00b7 Agent-ready platforms", "location": "San Francisco, CA", - "intro": "I lead Developer Experience for Google Maps Platform, grounded in solution architecture and forward-deployed incubation work. I have spent 15+ years turning field friction into shipped products, reference architectures, developer tools, and growth loops at Google, Mapbox, Instabase, and Caterpillar. This site stays synced to the places I actually publish: LinkedIn for weekly notes, Substack for longer experiments, X when it is useful, and GitHub for the code.", - "headline": "Selected work, written from the artifact back: the business goal, what shipped, and what I learned.", - "description": "Ryan Baumann leads solution architecture, developer experience, and product growth work for Google Maps Platform, with a focus on maps, agent-ready platforms, evals, and AI-native distribution.", - "aboutTeaser": "I operate where product, engineering, field reality, and growth meet. At Google Maps Platform, that means incubating tools, solution architectures, evals, and distribution partnerships that help developers and agents build correctly. Before Google, I grew Mapbox customer engineering from 1 to 15 as the company crossed $100M ARR, led solutions architecture at Series-B Instabase, and built industrial IoT systems at Caterpillar with 3 patents.", + "intro": "I lead Developer Experience Engineering for Google Maps Platform, a team of 20+ across engineering, product, technical writing, and developer relations, with multiple managers spanning product incubation, solution architecture, AI context, and developer growth. I have spent 15+ years turning field friction into shipped products, reference architectures, developer tools, and growth loops at Google, Mapbox, Instabase, and Caterpillar. This site is where I share the artifacts, lessons, and operating notes from that product go-to-market engineering blender.", + "headline": "Selected work from the artifact back: the market goal, the team system, what shipped, and what I learned.", + "description": "Ryan Baumann leads product, go-to-market, and engineering work for Google Maps Platform Developer Experience, with a focus on maps, agent-ready platforms, evals, and AI-native distribution.", + "aboutTeaser": "I operate where product, engineering, field reality, and growth meet. At Google Maps Platform, I lead a 20+ person Developer Experience Engineering team across managers and disciplines: engineering, product management, technical writing, developer relations, solution architecture, AI context, and developer growth. Before Google, I grew Mapbox customer engineering from 1 to 15 as the company crossed $100M ARR, led solutions architecture at Series-B Instabase, and built industrial IoT systems at Caterpillar with 3 patents.", "sectionIntros": { - "work": "Selected solution architecture, product incubation, developer platform, and growth work. Each entry covers the goal it served, what actually shipped, and the lesson I took from it.", - "writing": "Notes on solution architecture, developer experience, applied AI, evals, maps, and building platforms agents can use. Claims point back to shipped work, talks, or weekly learning notes.", - "talks": "Talks and videos. I present demo-first: working product over slides, then how it's built, then why it matters.", + "work": "Selected product incubation, solution architecture, developer platform, and go-to-market engineering work. Each entry covers the goal it served, the team or system I led, what actually shipped, and the lesson I took from it.", + "writing": "Learnings and operating notes from the product go-to-market engineering blender: developer experience, applied AI, evals, maps, team systems, and building platforms agents can use.", + "talks": "Talks and videos. I present demo-first: working product over slides, then how the team and system shipped it, then why it matters.", "demos": "Live apps I build and run myself: real OAuth, real quotas, real cold starts, and real architecture tradeoffs. One Cloud Run service, server-side secrets only, and no client JavaScript on the portfolio." }, "links": { @@ -26,20 +26,20 @@ "defaultShareImage": "/previews/portfolio.jpg", "socialHandle": "@ryanbaumann", "proofPoints": [ + { + "label": "20+", + "text": "person Developer Experience Engineering team led across engineering, PM, technical writing, developer relations, and manager layers" + }, { "label": "10M+", "text": "websites and apps powered by Google Maps Platform, the platform where I lead Developer Experience" }, { "label": "$100M+", - "text": "ARR stage crossed while I grew Mapbox customer engineering" - }, - { - "label": "3", - "text": "US patents from industrial IoT work at Caterpillar" + "text": "ARR stage crossed while I grew Mapbox customer engineering from 1 to 15" } ], - "answerEngineSummary": "Ryan Baumann leads solution architecture, developer experience, and product growth work for Google Maps Platform. He focuses on maps, forward-deployed incubation, agent-ready documentation, evals, MCP tools, agent skills, and AI-native distribution. His portfolio is a zero-client-JavaScript static site plus live demo apps served from one Cloud Run container.", + "answerEngineSummary": "Ryan Baumann leads product, go-to-market, and engineering work for Google Maps Platform Developer Experience. He manages a 20+ person multi-disciplinary team across engineering, product, technical writing, developer relations, solution architecture, AI context, and developer growth. He focuses on maps, forward-deployed incubation, agent-ready documentation, evals, MCP tools, agent skills, and AI-native distribution.", "profileImage": "/img/ryan-baumann-profile.jpg", "profileImageAlt": "Ryan Baumann profile image" } diff --git a/portfolio/content/talks/agent-skills-video.md b/portfolio/content/talks/agent-skills-video.md index 11d12dc..42b88f6 100644 --- a/portfolio/content/talks/agent-skills-video.md +++ b/portfolio/content/talks/agent-skills-video.md @@ -6,6 +6,6 @@ date: 2025-12-01 summary: Introducing portable skill modules that teach AI agents to ship production-ready platform code in one install. links: [{"label": "Watch", "url": "https://youtu.be/NEk37sPlgaY"}] image: /img/talks/agent-skills-video.svg -imageAlt: Card for the agent skills introduction video +imageAlt: Artifact card for the agent skills introduction video, used because YouTube thumbnail fetching is blocked order: 2 --- diff --git a/portfolio/content/talks/code-assist-video.md b/portfolio/content/talks/code-assist-video.md index b8b5b78..6c25bcc 100644 --- a/portfolio/content/talks/code-assist-video.md +++ b/portfolio/content/talks/code-assist-video.md @@ -3,9 +3,9 @@ title: Bring Google Maps Platform expertise to your AI coding assistant venue: Google Maps Platform type: video date: 2025-11-01 -summary: Launch walkthrough of Code Assist: what grounded code generation looks like in a real agent session. +summary: Launch walkthrough of Code Assist: how grounded code generation works in a real agent session, and how the team turned it into a product surface. links: [{"label": "Watch", "url": "https://youtu.be/L2V58kKIHvc"}] image: /img/talks/code-assist-video.svg -imageAlt: Card for the Code Assist launch video +imageAlt: Artifact card for the Code Assist launch video, used because YouTube thumbnail fetching is blocked order: 1 --- diff --git a/portfolio/content/work/agent-skills.md b/portfolio/content/work/agent-skills.md index 96acbfd..c3b6bfb 100644 --- a/portfolio/content/work/agent-skills.md +++ b/portfolio/content/work/agent-skills.md @@ -1,7 +1,7 @@ --- title: Google Maps Platform Agent Skills org: Google -role: Product & engineering lead +role: Product, GTM & engineering lead period: 2025 – present summary: Portable skill modules that teach AI agents how to build with the platform across Web, Android, iOS, and Web Services. Installed with one command. tags: ["agent skills", "applied ai", "distribution"] @@ -9,7 +9,7 @@ links: [{"label": "GitHub", "url": "https://github.com/googlemaps/agent-skills"} image: /img/work/agent-skills.svg imageAlt: Terminal panel showing the one-line install command npx skills add googlemaps/agent-skills featured: true -order: 2 +order: 3 --- ## The goal diff --git a/portfolio/content/work/agentic-evals.md b/portfolio/content/work/agentic-evals.md index bdde606..ceb616f 100644 --- a/portfolio/content/work/agentic-evals.md +++ b/portfolio/content/work/agentic-evals.md @@ -8,7 +8,7 @@ tags: ["evals", "context engineering", "growth"] image: /img/work/agentic-evals.svg imageAlt: Panel showing the eval loop, from task to agent run to scored result to launch decision featured: true -order: 3 +order: 5 --- ## The goal diff --git a/portfolio/content/work/agentic-growth.md b/portfolio/content/work/agentic-growth.md index 873a48a..8e9dfb4 100644 --- a/portfolio/content/work/agentic-growth.md +++ b/portfolio/content/work/agentic-growth.md @@ -1,14 +1,14 @@ --- title: Agentic Growth & AI-Native Distribution org: Google -role: Product growth strategy lead +role: Product growth & distribution lead period: 2024 – present summary: Platform tools shipped into the default connectors of AI Studio, Replit, and Lovable, plus OSS libraries that grew reach 300%+ with AI-native builders. tags: ["growth", "distribution", "open source"] image: /img/work/agentic-growth.svg imageAlt: Panel listing the distribution surfaces, AI Studio, Replit, and Lovable, above the react-google-maps download stat featured: true -order: 4 +order: 2 --- ## The goal diff --git a/portfolio/content/work/code-assist.md b/portfolio/content/work/code-assist.md index f3ee695..0e0b3d5 100644 --- a/portfolio/content/work/code-assist.md +++ b/portfolio/content/work/code-assist.md @@ -1,9 +1,9 @@ --- title: Google Maps Platform Code Assist org: Google -role: Product incubation & engineering lead +role: Product incubation, GTM & engineering lead period: 2024 – present -summary: A product incubation that turned field demand for accurate AI-generated Maps code into a Google-hosted MCP service grounded in official docs and samples. +summary: Led the cross-functional team that turned field demand for accurate AI-generated Maps code into a Google-hosted MCP service grounded in official docs and samples. tags: ["mcp", "applied ai", "developer platforms"] links: [{"label": "Docs", "url": "https://developers.google.com/maps/ai/code-assist"}, {"label": "Launch blog", "url": "https://mapsplatform.google.com/resources/blog/announcing-code-assist-toolkit-bring-google-maps-platform-expertise-to-your-ai-coding-assistant/"}, {"label": "GitHub", "url": "https://github.com/googlemaps/platform-ai"}, {"label": "Video", "url": "https://youtu.be/L2V58kKIHvc"}] image: /img/work/code-assist.svg diff --git a/portfolio/content/work/geo-architecture-center.md b/portfolio/content/work/geo-architecture-center.md index 50a2749..3771d0f 100644 --- a/portfolio/content/work/geo-architecture-center.md +++ b/portfolio/content/work/geo-architecture-center.md @@ -8,7 +8,7 @@ tags: ["technical writing", "solution architecture"] links: [{"label": "Architecture Center", "url": "https://developers.google.com/maps/architecture"}] image: /img/work/geo-architecture-center.svg imageAlt: Panel showing the Geo Architecture Center stat of 40+ published solution architectures -order: 7 +order: 6 --- ## The goal diff --git a/portfolio/content/work/intelligent-product-essentials.md b/portfolio/content/work/intelligent-product-essentials.md index 0a6b83e..9e24874 100644 --- a/portfolio/content/work/intelligent-product-essentials.md +++ b/portfolio/content/work/intelligent-product-essentials.md @@ -9,7 +9,7 @@ links: [{"label": "Launch blog", "url": "https://cloud.google.com/blog/products/ image: /img/work/intelligent-product-essentials.svg imageAlt: Panel showing the Intelligent Product Essentials launch facts, zero to launch in nine months with GE Appliances featured: false -order: 6 +order: 7 --- ## The goal diff --git a/portfolio/content/work/mapbox-oss-datascience.md b/portfolio/content/work/mapbox-oss-datascience.md index 30963c3..33532cf 100644 --- a/portfolio/content/work/mapbox-oss-datascience.md +++ b/portfolio/content/work/mapbox-oss-datascience.md @@ -8,7 +8,7 @@ tags: ["open source", "developer advocacy", "data science"] links: [{"label": "mapboxgl-jupyter", "url": "https://github.com/mapbox/mapboxgl-jupyter"}, {"label": "mapboxgl-powerbi", "url": "https://github.com/mapbox/mapboxgl-powerbi"}] image: /img/work/mapboxgl-jupyter.jpg imageAlt: A Jupyter notebook rendering a Mapbox circle visualization of US healthcare charges with mapboxgl-jupyter -order: 10 +order: 11 --- ## The goal diff --git a/portfolio/content/work/trails-ninja.md b/portfolio/content/work/trails-ninja.md index d67e04d..11d091c 100644 --- a/portfolio/content/work/trails-ninja.md +++ b/portfolio/content/work/trails-ninja.md @@ -8,7 +8,7 @@ tags: ["side project", "self-hosted", "reference apps"] links: [{"label": "The demos", "url": "/demos/"}, {"label": "Source", "url": "https://github.com/ryanbaumann/ryanbaumann-portfolio"}] image: /previews/strava-explorer.jpg imageAlt: The Strava 3D Explorer flying a route through Chamonix in Photorealistic 3D, with photos anchored along the path -order: 11 +order: 12 --- ## What it is diff --git a/portfolio/content/work/voice-of-developer.md b/portfolio/content/work/voice-of-developer.md index 35cf470..1907d82 100644 --- a/portfolio/content/work/voice-of-developer.md +++ b/portfolio/content/work/voice-of-developer.md @@ -1,14 +1,14 @@ --- title: AI-Driven Voice of Developer org: Google -role: Product signal program creator & lead +role: Product signal program lead period: 2023 – present summary: An AI-driven product signal program that turns unstructured developer friction from Discord, Stack Overflow, issues, and support into ranked roadmap priorities. tags: ["product", "applied ai", "developer research"] image: /img/work/voice-of-developer.svg imageAlt: Panel showing developer signal sources flowing into ranked roadmap priorities featured: true -order: 5 +order: 4 --- ## The goal diff --git a/portfolio/content/writing/code-assist-launch.md b/portfolio/content/writing/code-assist-launch.md index cdcfff3..12f4f83 100644 --- a/portfolio/content/writing/code-assist-launch.md +++ b/portfolio/content/writing/code-assist-launch.md @@ -7,5 +7,5 @@ tags: ["code assist", "mcp", "developer experience"] external: https://mapsplatform.google.com/resources/blog/announcing-code-assist-toolkit-bring-google-maps-platform-expertise-to-your-ai-coding-assistant/ image: /img/writing/code-assist-launch.svg imageAlt: Card for the Code Assist launch post on the Google Maps Platform blog -order: 2 +order: 3 --- diff --git a/portfolio/content/writing/this-weeks-learnings.md b/portfolio/content/writing/this-weeks-learnings.md index c9e0606..9de3de3 100644 --- a/portfolio/content/writing/this-weeks-learnings.md +++ b/portfolio/content/writing/this-weeks-learnings.md @@ -1,11 +1,11 @@ --- title: #ThisWeeksLearnings -summary: The weekly series. What shipping developer experience and applied AI actually taught me that week: traces read, evals written, products dogfooded, opinions revised. +summary: The weekly series where I share what leading developer experience, applied AI, and platform growth work taught me that week: traces read, evals written, products dogfooded, opinions revised. date: 2026-07-12 canonical: https://www.linkedin.com/in/ryanbaumann/recent-activity/all/ tags: ["developer experience", "weekly notes", "applied ai"] external: https://www.linkedin.com/in/ryanbaumann/recent-activity/all/ image: /img/writing/this-weeks-learnings.svg -imageAlt: Card for the #ThisWeeksLearnings weekly series on LinkedIn +imageAlt: Artifact card for the #ThisWeeksLearnings weekly series on LinkedIn, used because LinkedIn preview image fetching is blocked order: 1 --- diff --git a/portfolio/content/writing/vibing-with-maps.md b/portfolio/content/writing/vibing-with-maps.md index 3c9f953..8431461 100644 --- a/portfolio/content/writing/vibing-with-maps.md +++ b/portfolio/content/writing/vibing-with-maps.md @@ -7,5 +7,5 @@ tags: ["applied ai", "maps", "vibe coding"] external: https://ryanbaumann.substack.com/p/vibing-with-maps-practical-experiments image: /img/writing/vibing-with-maps.svg imageAlt: Card for the Vibing with Maps post on Substack -order: 3 +order: 2 --- diff --git a/portfolio/style.css b/portfolio/style.css index d700646..80fdcf1 100644 --- a/portfolio/style.css +++ b/portfolio/style.css @@ -300,17 +300,16 @@ main > section { margin-bottom: clamp(3rem, 7vw, 4.5rem); } .rows { list-style: none; margin: 0; padding: 0; } .row { - display: flex; - justify-content: space-between; - align-items: baseline; - gap: 1.5rem; + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: start; + gap: 1rem; padding: 1.25rem 1rem; margin: 0 -1rem; border-radius: 0.5rem; border-bottom: 1px solid var(--line); transition: all 0.2s ease; } -.row:has(.row-thumb) { align-items: flex-start; } .row:hover { background: var(--surface); border-bottom-color: transparent; @@ -318,22 +317,20 @@ main > section { margin-bottom: clamp(3rem, 7vw, 4.5rem); } .row:first-child { border-top: 1px solid var(--line); } .row-thumb { height: auto; - flex: none; - width: 8rem; + width: clamp(7rem, 18vw, 10rem); aspect-ratio: 16 / 10; object-fit: cover; border-radius: 0.5rem; border: 1px solid var(--line); background: var(--line); } -.row > div { flex: 1; } .row-title { margin: 0 0 0.2rem; font-weight: 600; } .row-title a { text-decoration: none; } .row-title a:hover { text-decoration: underline; } .row-summary { margin: 0; color: var(--muted); font-size: 0.93rem; max-width: 38rem; } .row-meta { margin: 0; color: var(--faint); font-size: 0.85rem; white-space: nowrap; } @media (max-width: 560px) { - .row { flex-direction: column; gap: 0.35rem; } + .row { grid-template-columns: 1fr; gap: 0.45rem; } .row-meta { white-space: normal; } .row-thumb { width: 100%; } }