Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion components/sections/About.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ describe('About', () => {
it('renders pull-quote and personal note', () => {
renderWithLocale(<About />);
expect(screen.getByText(/I'm a Technical Product Manager/)).toBeInTheDocument();
expect(screen.getByText(/Oreo debate/)).toBeInTheDocument();
expect(screen.getByText(/strong opinions about Oreos/)).toBeInTheDocument();
});

it('does not use aria-label on non-interactive paragraph elements', () => {
Expand Down
4 changes: 2 additions & 2 deletions components/sections/Services.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import { renderWithLocale } from '@/lib/test-utils';
import { Services } from './Services';

describe('Services', () => {
it('renders "What I Bring" heading', () => {
it('renders "How I Work" heading', () => {
renderWithLocale(<Services />);
expect(screen.getByText('What I Bring')).toBeInTheDocument();
expect(screen.getByText('How I Work')).toBeInTheDocument();
});

it('renders all 4 service titles', () => {
Expand Down
8 changes: 4 additions & 4 deletions data/services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,27 @@ export const services: ServiceEntry[] = [
title: 'Technical Product Strategy',
icon: 'compass',
description:
"I own the roadmap from discovery to delivery, balancing technical constraints with business outcomes. I've consolidated 400+ backlog items into structured projects and built dual roadmaps spanning multiple teams.",
'I own the roadmap from discovery through delivery. At Circadence that meant turning 409 loose backlog items into ten projects a team could actually plan against.',
},
{
id: 'ai-augmented-engineering',
title: 'AI-Augmented Engineering',
icon: 'sparkles',
description:
'I embed AI tooling into team workflows — Claude Code in grooming, MCP for roadmap surfacing, shared agent configs so quality scales without bottlenecking on review.',
'I put AI tooling where the team already works: Claude Code in grooming sessions, MCP for surfacing roadmap context, shared agent configs so nobody starts from scratch.',
},
{
id: 'process-delivery',
title: 'Process & Delivery',
icon: 'users',
description:
"Certified ScrumMaster who builds the sprint cadence, retros, and cross-functional rhythms that let teams ship reliably. I've designed hiring processes adopted company-wide.",
"Certified ScrumMaster. I set up the sprint cadence and retros that make delivery predictable, and I've built hiring processes that got adopted company-wide.",
},
{
id: 'engineering-product-bridge',
title: 'Engineering ↔ Product Bridge',
icon: 'code',
description:
'I go deep on React, TypeScript, and system architecture when the work calls for it, so product decisions stay technically grounded.',
"When the work calls for it I'm still in React and TypeScript myself, which keeps product decisions honest about what the build actually costs.",
},
];
2 changes: 1 addition & 1 deletion data/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export const siteConfig = {
name: 'Zach Lamb',
title: 'Technical Product Manager',
description:
'Technical Product Manager who owns the roadmap, runs the team, and goes deep on the technical decisions that matter. React, TypeScript, and AI-powered product development. Certified ScrumMaster with a Human Centered Computing background.',
'Technical Product Manager and former senior engineer. I own the roadmap and still read the pull requests. React, TypeScript, and AI-assisted delivery.',
url: 'https://zachlamb.io',
ogImage: '/og.png',
availability: 'Open to remote',
Expand Down
40 changes: 26 additions & 14 deletions messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"site": {
"name": "Zach Lamb",
"title": "Technical Product Manager",
"description": "Technical Product Manager who owns the roadmap, runs the team, and goes deep on the technical decisions that matter. React, TypeScript, and AI-powered product development. Certified ScrumMaster with a Human Centered Computing background."
"description": "Technical Product Manager and former senior engineer. I own the roadmap and still read the pull requests. React, TypeScript, and AI-assisted delivery."
},
"nav": {
"trailGuide": "Trail Guide",
Expand All @@ -25,9 +25,9 @@
"title": "Zach Lamb",
"subtitle": "Technical Product Manager",
"taglines": [
"Technical product lead with an engineering background. I own the roadmap, run the team, and keep both from drifting apart.",
"React, TypeScript, and LLM apps — I know what to build and how to ship it.",
"Always up for a conversation about code, AI, the outdoors, or Oreos."
"I spent ten years as an engineer before I owned a roadmap. It shows in how I run one.",
"React, TypeScript, and LLM apps. I can scope the work and I can build it.",
"Happy to talk shop, trade trail recommendations, or argue about Oreos."
],
"getInTouch": "Get in Touch",
"learnMore": "Learn More",
Expand All @@ -37,15 +37,27 @@
"about": {
"heading": "Trail Guide",
"body": [
"I'm a Technical Product Manager with a frontend engineering background, which means I own the roadmap, run the team, and can still go deep on the technical decisions that actually matter."
"I'm a Technical Product Manager who came up through frontend engineering. That background is the whole point: I can sit in a roadmap review and a code review on the same afternoon and be useful in both."
],
"stats": [
{ "value": "10+", "label": "Years Building" },
{ "value": "5", "label": "Industries" },
{ "value": "CSM", "label": "Certified" },
{ "value": "IC↔PM", "label": "Dual Track" }
{
"value": "10+",
"label": "Years Building"
},
{
"value": "5",
"label": "Industries"
},
{
"value": "CSM",
"label": "Certified"
},
{
"value": "IC↔PM",
"label": "Dual Track"
}
],
"personalNote": "When I'm not at my desk, I'm teaching yoga, hiking Colorado's trails, or trying to settle the Oreo debate once and for all.",
"personalNote": "Outside work I teach yoga and hike as much of Colorado as I can get to. I also have strong opinions about Oreos.",
"focusAreas": "Technical Product Management · Roadmap Ownership · React & TypeScript · AI/LLM Integration · Cross-functional Leadership · Certified ScrumMaster"
},
"footer": {
Expand All @@ -57,7 +69,7 @@
},
"contact": {
"heading": "Leave a Note at Camp",
"intro": "Whether it's about code, the trail ahead, or Oreos — drop a note and I'll get back to you from base camp. I typically reply within a day.",
"intro": "Drop a note and I'll usually get back to you within a day. There's no wrong reason to reach out.",
"name": "Name",
"email": "Email",
"message": "Message",
Expand All @@ -78,11 +90,11 @@
"projects": "Selected Work",
"endorsements": "Recommendations",
"skills": "Gear",
"services": "What I Bring",
"services": "How I Work",
"education": "Credentials"
},
"projects": {
"intro": "A handful of projects that show how I think about users, shipping, and where AI earns its keep."
"intro": "A few projects worth showing, with notes on what I was solving and what I'd change."
},
"endorsements": {
"intro": "What fellow hikers have said about working with me.",
Expand All @@ -103,7 +115,7 @@
"certifications": "Certifications"
},
"skills": {
"intro": "The tools and practices I reach for — trail-tested and production-ready."
"intro": "The tools I've actually shipped with, not the ones I've read about."
},
"privacy": {
"pageTitle": "Privacy Policy",
Expand Down