A podcast about developer tools and the people who make them.
- mise - for managing Node.js and pnpm versions
# Install mise (if not already installed)
curl https://mise.run | sh
# Install project dependencies and tools
mise install # Installs Node.js 22.17.0 and pnpm 10.14.0
mise run install # Installs npm dependencies
# Start development server
mise run devOpen http://localhost:3000 to view the site.
All commands can be run through mise for consistent environment management:
mise run dev # Start Next.js dev server
mise run build # Build for production (includes RSS generation)
mise run build-rss # Generate RSS feed only
mise run create-new-episode # Create a new episode template
mise run standard-site-prepare-content # Generate Sequoia-ready episode markdown
mise run publish-dry # Preview Standard.site and Markpub publishing
mise run publish # Publish to Standard.site and sync Markpub content
mise run sync-markpub-content # Sync at.markpub.markdown content to published recordsAlternatively, you can use pnpm directly after running mise install:
pnpm dev # Start Next.js dev server
pnpm build # Build for production
pnpm build-rss # Generate RSS feed only
pnpm create-new-episode # Create a new episode template
pnpm publish-episode # Publish an episodeThis repo now includes a Sequoia-based standard.site publishing workflow for
episodes, following the same pattern as hipstersmoothie.com-2: a checked-in
sequoia.json, site-wide publication discovery in the root layout, and
document verification tags rendered by Next.
- Install dependencies:
pnpm install - Initialize Sequoia in this repo:
pnpm exec sequoia loginpnpm exec sequoia init
This creates sequoia.json, which the app reads at runtime to emit the
site.standard.publication link tag.
pnpm standard-site:prepare-content # Generate Sequoia-ready episode markdown
pnpm publish:dry # Preview what Sequoia will publish
pnpm publish # Publish to standard.site
pnpm generate-episode-descriptions # Generate one-line descriptions via Cursor Agent CLI- The source of truth remains
pages/episode/*.mdx. - A generated mirror is written to
.generated/sequoia-content/for Sequoia to scan. It includes show notes, sections, and the full transcript. - Published
atUrivalues stay in the generated Sequoia content, not the source MDX. - Episode content on ATProto uses the Markpub.at lexicon (
at.markpub.markdown) in each document'scontentfield. Sequoia still publishes plaintextContent;pnpm sync-markpub-contentruns after publish to attach the structured markdown record. - Episode descriptions can be regenerated as one-liners with
pnpm generate-episode-descriptions(uses Anthropic whenANTHROPIC_KEYorANTHROPIC_API_KEYis set in.env, otherwise the CursoragentCLI). - Markpub metadata uses GFM flavor with
remark-gfmrendering rules and YAML front matter extracted from episode metadata. - This app uses manual verification tags on episode pages instead of
sequoia inject, which is a better fit for the Next.js deployment model used here.
devtools.fm/
├── app/ # Next.js App Router pages and API routes
│ ├── episode/[id]/ # Individual episode pages
│ ├── episodes/ # Episode listing
│ ├── guests/ # Guest information
│ ├── sponsors/ # Sponsor pages
│ └── api/ # API endpoints for forms
├── pages/episode/ # Episode content (MDX files)
│ ├── 1.mdx # Episode 1
│ ├── 2.mdx # Episode 2
│ └── ... # Episodes 3-148+
├── components/ # React components
├── utils/ # Utility functions
│ ├── processMdx.ts # MDX parsing and processing
│ └── generate-rss.ts # RSS feed generation
├── scripts/ # Build and content scripts
└── public/ # Static assets
Episodes are written in MDX format with structured content:
---
title: "Episode Title"
youtube: https://youtube.com/watch?v=VIDEO_ID
spotify: https://open.spotify.com/episode/EPISODE_ID
tags: tag1, tag2, tag3
---
{/* TAB: SHOW NOTES */}
Episode description and links...
{/* TAB: SECTIONS */}
00:00 - Introduction
05:30 - Main topic
...
{/* TAB: TRANSCRIPT */}
**Speaker Name:** Transcript content...For information on the production process and how to create new episodes, see PRODUCTION_PROCESS.md.
This project is open source and available under the MIT License.
Thanks to Vercel for hosting and to all our supporters and sponsors who make this podcast possible.