Notebook
Whatever is holding my attention.
Notes from building with AI agents, plus whatever else teaches me something.
Series
- pgvector for TypeScript
Eight posts that take one TypeScript project, a multimodal docs assistant searching text and screenshots, from a first similarity query to vector search you can tune, measure, and run in production. No second database.
All posts
202626 posts
- Embeddings rot too. Running pgvector in production.Aug 28
- Stop shipping retrieval changes on vibesAug 25
- Your RAG is confidently wrong without hybrid searchAug 21
- Stop tuning everything. pgvector has three knobs that matter.Aug 18
- Your agent's knowledge base is lying to you. Run these 14 checks.Aug 18
- I read all 1,061 comments on Karpathy's llm-wiki gistAug 17
- Claude watermarks its text now. Let's panic?Aug 16
- HNSW or IVFFlat? Choosing and building your pgvector indexAug 14
- Every result scores 0.81. Your search is broken.Aug 11
- Search text and screenshots with one pgvector columnAug 3
- Vector search in Postgres isn't magicAug 2
- AI agent architecture patterns that survive productionMay 18
- Stop adding prompts. Your agent needs control flow.May 17
- pgvector vs Pinecone for RAGMay 16
- RAG with Postgres, Drizzle, and pgvectorMay 15
- Building an MCP Server in TypeScript with NestJSMay 14
- Build an MCP Server from ScratchMay 13
- Self-hosting an LLM as a TypeScript DeveloperMay 12
- Running Homebrew on Linux with Multiple UsersMay 11
- Drizzle ORM vs PrismaMay 10
- Running cron jobs in NestJSMay 9
- Kafka vs RabbitMQMay 8
- Zod vs YupMay 7
- Unit and e2e testing in NestJS with Jest and SupertestMay 6
- NestJS microservices with a real two-service exampleMay 5
- TypeScript conditional types and how infer worksMay 4
20258 posts
- Adding prettier to eslint Apr 10
- A try at type-safe groupBy function in TypeScriptApr 10
- Upgrading my blog to Next 15Apr 5
- tsx doesn’t support decoratorsMar 26
- You can't extend Window with a type aliasMar 21
- Validating NestJS env vars with ZodFeb 6
- Using node API for delayFeb 6
- Loading env file into Node processFeb 6
202427 posts
- React Component LifecycleNov 28
- Email special headersNov 20
- How CQRS is different than Event SourcingAug 18
- RabbitMQ exchange vs queue, explainedAug 14
- What the pgvector operators <->, <=>, and <#> actually meanAug 13
- PgVector indexing options for vector similarity searchJul 31
- Counting GPT tokensJun 30
- Logging route handler responses in Next.js 14Jun 19
- Redirect www subdomain with CloudflareJun 17
- Logging requests in Express appJun 16
- Move Docker volume to bind mount Jun 12
- Docker Compose won't pull the latest image unless you tell it toJun 11
- Using puppeteer executable for GSTSJun 8
- Next.js Hydration Window IssueMay 29
- Using Git rebase without creating chaos in your repoMay 16
- Why EQ is Your Next Career UpgradeMay 13
- Finding Your Raspberry Pi Address on a MacMar 24
- How to store vector embeddings in Postgres with Drizzle ORMMar 21
- RabbitMQ RPC pattern in TypeScriptMar 16
- Optimize webpage load with special tagsMar 15
- What the hell is Open Graph?Mar 13
- List of useful Chrome argsMar 10
- My go-to Next.js ESlint configMar 10
- The trap of making everything dynamicMar 1
- PostgreSQL doesn't have ON UPDATE CURRENT_TIMESTAMP. Here's the fixFeb 27
- Cannot find module '../build/Release/canvas.node' on macOSFeb 20
- Combining RxJS observables - Part 1Feb 20