CarTalk: From 8-Second Pages to 300ms
- Company
- CarTalk
- Overview
CarTalk brought me in to pay down years of technical debt on its site. Moving to Next.js and TypeScript, static generation and deduplicated API calls cut page loads from 8 seconds to 300ms and builds from 10 minutes to under 2, and left the team with a roadmap it could keep.
- Technologies
- PerformanceTechnical DebtReactNext.jsTypeScript

From Technical Debt to Technical Excellence
CarTalk, a marquee brand in automotive media, depended on its website to continue delivering value to its vibrant community after the famed podcast ended.
Over time, the site amassed significant technical debt, which impacted performance, scalability, and reliability for millions of loyal users. Partnering with The Innovation Lab, CarTalk underwent a comprehensive technology transformation.
Key Outcomes
"David has been instrumental in guiding our technology strategy at Car Talk. His expertise, well-thought-out approach, and ability to quickly understand our infrastructure have been invaluable. We look forward to working closely with David to optimize our platform and achieve our goals."
A Legacy Worth Preserving
CarTalk, the popular podcast known for entertaining and informative discussions about cars, has been a trusted resource for the automotive community. Even after the podcast ended, CarTalk continued to support its audience through its website, providing valuable content, reviews, and resources.
However, the website was grappling with a critical challenge. A consequence of numerous CTO and engineer transitions without significant restructuring had resulted in severe performance issues and deployment complexities. The website's ability to effectively serve its users and support the company's objectives was in jeopardy.
A Website Drowning in Technical Debt
Substantial technical debt confronted the CarTalk website, resulting in sluggish performance and deployment complexities. The site was built using an older, less efficient framework with no modern optimization techniques.
Before & After Metrics
Paying down the debt
CarTalk brought me in to take on the technical debt directly: a framework migration, faster builds, leaner API calls and static pages, then a roadmap the team could keep following.
Framework Migration
Migrated to Next.js 14 with React 19, providing a modern foundation for speed, consistency, and future scalability.
Build Time Optimization
Reduced build time from 10 minutes to under 2 by implementing fetch deduplication, eliminating redundant network requests.
API Optimization
Cleaned up API calls, minimized data transfer overhead, and migrated from JavaScript to TypeScript for type safety.
Rendering Optimization
Transitioned from SSR to SSG, pre-rendering pages at build time for CDN delivery without server-side processing.
Long-Term Strategy
Developed a future-proof engineering roadmap ensuring continuous improvement and alignment with industry best practices.
Measurable Impact
What I took away
- Strategic technical debt reduction unlocks performance and scalability
- Modern frameworks (Next.js, TypeScript) provide solid foundations
- SSG over SSR dramatically improves load times for content sites
- API optimization and fetch deduplication reduce build times significantly
- Long-term engineering roadmaps ensure sustainable growth
The bottom line
CarTalk's site had years of technical debt behind an 8-second page load. Moving to Next.js and TypeScript, static generation and deduplicated API calls brought pages to 300ms and builds to under two minutes, and left the team with a roadmap it could keep.
Related notes

Enterprise i18n at Scale
Built a comprehensive internationalization system supporting 9 languages across ~1,800 pages using Next.js 16 and next-intl 4.4. This case study examines the architectural decisions, translation pipeline, and performance optimizations required to deliver a type-safe, maintainable i18n solution at enterprise scale.

Agent Harness 101
Every coding agent is a short loop: ask the llm, run the tools it asks for, and stop when it asks for nothing. The harness is everything around that loop that keeps it safe and durable, and each of its primitives (session, thread, turn, tool, permission and agent) is written here as a real schema. Ends with a scripted demo that follows one message from the moment you press enter to the final answer.

How Browsers Measure Text
An interactive explorable explanation of browser text measurement — from Canvas measureText() and Intl.Segmenter to greedy line-breaking, variable-width reflow, and shrinkwrap binary search. Build intuition for the prepare/layout two-phase architecture that powers modern text-heavy applications.
Get in touch
Have a question about something I wrote, or want to talk? Send me a message.