Deep Closeout: PM Interview Practice Tool

Summary

Built and shipped a live audio PM interview practice tool at pezant.ca/interview/. Claude CLI (Max subscription) as interviewer, browser SpeechSynthesis for TTS with 50+ voice options, Web Speech API for STT with auto voice activity detection. Loads 7+ interview prep files as context. Structured scoring rubric (5 categories, advance decision). All loose ends resolved: PM2 for server persistence, autossh for tunnel, 9 company prep mappings + auto-scan, clickable session review page with full transcripts.

Architecture

Browser (STT+TTS) ↔ WebSocket ↔ Express:3456 (WSL) ↔ autossh tunnel ↔ pezant.ca Apache /interview/ (HTTPS). Claude CLI via stdin pipe, sonnet model, Max OAuth.

Key Decisions

  • Claude CLI over API — user requested leveraging Max subscription, zero marginal cost
  • Browser SpeechSynthesis over Edge TTS — user tested Edge TTS, said terrible; browser voices much better
  • 15s silence timeout — original 1.8s too aggressive for PM interview answers
  • Settings panel with Save button — user explicitly requested explicit save vs live-apply

Commits

  • c82aeb0 — Initial implementation
  • 6aed990 — Context/progress files
  • 67290f3 — Loose ends: PM2, autossh, company mappings, session review
  • f115f67 — Final context update

Learnings

  • Edge TTS npm broken on Node 22 (TypeScript in node_modules)
  • ngrok now requires account; Cloudflare quick tunnel API unreliable
  • Web Speech API not-allowed error creates infinite retry loops without denial tracking
  • Claude CLI large prompts must pipe via stdin, not -p argument

Repo: npezarro/pm-interview-practice

Leave a Reply

Your email address will not be published. Required fields are marked *