Back to Home

Blog

Build-in-public notes on React and TypeScript applications and applied AI workflows: what I tried, what broke, and what I learned.

Showing 17 of 17 posts

The Reply Sounded Finished. The Email Was Still Missing.
LeadFlow

The reply sounded finished. The email was still missing

A fictional inquiry gave a budget, a date, and no email. The draft sounded ready to send. The missing list caught the gap, and the reply did not.

Oct 25, 20265 min read
Read Article
Document Extraction Day 6: The Quote Says 90.00
Document Extraction Workbench · Day 6

The quote says 90.00 and the value says 9.00

Day 5 let a total of 9.00 pass because its quote was on the page. The new check compares the value with the amounts in its own quote and flags the mismatch. Day 6 of building a document extractor.

Oct 24, 20265 min read
Read Article
I Built the Empty Office First
Intake Desk

I built the empty office first

Intake Desk will turn a messy legal inquiry into a draft record a person can check. I did not call a model yet. I built the front door, the desk, and a place for the original message to live.

Oct 23, 20265 min read
Read Article
Document Extraction Day 5: A Quote Is Not Proof
Document Extraction Workbench · Day 5

A quote on the page is not proof the total is right

Invoice 1 passed with no issues. A quote I invented was flagged. Invoice 3 stored 9.00 while the page says 90.00, and that one still passed. Day 5 of building a document extractor.

Oct 20, 20266 min read
Read Article
Run Explorer Day 4: One Filter, One Cache Entry
Run Explorer · Day 4

One filter should not wear another filter’s data

The table now requests one page through a mock API. A slow failed request cannot overwrite a newer succeeded filter because each result has its own cache key.

Oct 18, 20266 min read
Read Article
Ask TanStack Query Day 4: The Model Stopped Guessing
Ask TanStack Query · Day 4

The model stopped guessing

The same kind of question had to be answered from the stored cards, and each answer had to name its page. One came back right, one honest and incomplete, one a correct refusal. Day 4 of building a docs assistant.

Oct 16, 20264 min read
Read Article
Document Extraction Day 4: Cleanup Is Code, Not a Prompt
Document Extraction Workbench · Day 4

Cleanup is code, not a sentence in the prompt

A total of 125 becomes 125.00. February 30, a negative amount, and three decimal places are rejected, and a missing currency stays null. Day 4 of building a document extractor.

Oct 13, 20265 min read
Read Article
Run Explorer Day 3: Filters That Survive a Refresh
Run Explorer · Day 3

The search box and the URL hold different text

Typing in the search box changes nothing until I press Search. Status, sort, and page live in the URL, so Back and refresh restore the table. Day 3 of building a dashboard for recorded application runs.

Oct 11, 20265 min read
Read Article
Document Extraction Day 3: A Scan With No Text
Document Extraction Workbench · Day 3

A page I can read can still have no text

A text PDF came back with the vendor and the total. A scanned PDF came back as an empty string, even though I can read the page myself. Day 3 of building a document extractor.

Oct 11, 20265 min read
Read Article
Run Explorer Day 2: A Table That Scrolls on Its Own
Run Explorer · Day 2

The sideways scroll stays inside the table

At 390 pixels wide, the run table scrolled sideways and the rest of the page stayed still. I removed that rule and the whole page started sliding. Day 2 of building a dashboard for recorded application runs.

Oct 10, 20265 min read
Read Article
Run Explorer Day 1: A Missing File and a Quoted Six
Run Explorer · Day 1

A missing file and a six in quotes

I pointed the app at a file that does not exist, and I passed the number six in quotes. The page died on the first mistake and stayed up for the second. Day 1 of a dashboard that reads recorded steps instead of guessing why a run failed.

Oct 10, 20265 min read
Read Article
Ask TanStack Query Day 3: Docs Cut Into Cards
Ask TanStack Query · Day 3

The manual is now a stack of cards

270 docs pages became 905 searchable cards with embeddings in Supabase. The cutter is deliberately simple, and some cards are cut in the wrong place.

Oct 8, 20265 min read
Read Article
Document Extraction Day 2: Null, Empty, or Zero
Document Extraction Workbench · Day 2

A missing fact is null, not blank and not zero

A missing invoice field is null, not an empty string and not zero. Day 2 of building a document extractor that keeps the value, the exact quote, and the page for every fact.

Oct 7, 20264 min read
Read Article
Ask TanStack Query Day 2: The Docs and the Quiz
Ask TanStack Query · Day 2

I went and got the books and the quiz

I downloaded 270 pages of official TanStack Query docs and 962 answered GitHub discussions. The docs are the library, the questions are the quiz, and many marked answers are already out of date.

Oct 3, 20265 min read
Read Article
Document Extraction Day 1: A Missing Currency
Document Extraction Workbench · Day 1

The page never said the currency

One practice invoice never stated its currency, so the correct draft leaves that field null instead of guessing. Day 1 of building a document extractor that keeps the evidence for every field.

Oct 1, 20265 min read
Read Article
Ask TanStack Query Day 1: Outdated AI Answers
Ask TanStack Query · Day 1

Why AI gives outdated TanStack Query v5 answers

I asked an AI five questions about TanStack Query v5. Two answers used removed or renamed APIs, onSuccess and cacheTime. Day 1 of building a docs assistant that looks up the current instructions first.

Sep 30, 20266 min read
Read Article
Building a Support Ticket Classifier from Scratch
Python & AI

Building a Support Ticket Classifier from Scratch

How I built a production support ticket classifier using Python, rule-based routing, OpenAI API integration, and evaluation metrics. A deep dive into the boundary between custom code and external APIs.

Sep 28, 202611 min read
Read Article