Now

A dated log of what I built, what broke, and what I finally understood. Written per milestone, unedited afterwards — the wrong turns are the useful part.

Building

Xylodesk — Resume Studio, the résumé builder with templates and live editing.

Learning

GraphQL schema design, and testing enough to trust a refactor.

Next up

Shipping this site to GitHub Pages, then a proper accessibility pass.


week 29

Heuristic matching first, AI second

Shipped skills and experience overlap scoring before touching Gemini. The AI tier now layers on top and falls back to the heuristic when a call fails. A working, explainable baseline beats a clever thing that sometimes returns nothing.

MatchingGemini

week 22

Made tenant scoping fail loudly instead of quietly

Switched acts_as_tenant to fail-closed. An unscoped query now raises instead of returning an empty set — because an empty set looks like "no results" in the UI and like a passing test in CI.

RailsMulti-tenancy

week 22

Wrote a reviewer instead of writing more code

Spent the day building subagents that review my diffs rather than shipping features. Felt slow. It has since caught authorization gaps and tenant-isolation issues I personally wrote and personally approved.

ToolingReview

week 22

GDPR erasure is not a DELETE statement

Candidates can erase their data; employers must retain some of it. Landed on a 30-day window that anonymizes retained records in place, so foreign keys survive and the person does not. The hardest part was accepting that the naive answer was wrong.

ComplianceData

week 20

Split the two things I kept calling a "profile"

A candidate profile and an employee HR record looked like one model for about a week. They are not: one is public, one holds compensation. Splitting them early cost an afternoon and removed an entire category of future leak.

SchemaPrivacy