<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>David Gomez — Devblog</title>
<link>https://davidgomez.cc/devblog.html</link>
<description>Working notes on building Loupe, side projects, and learning in tech.</description>
<item>
<title>Three ways to ship the wrong thing to Cloudflare Pages</title>
<link>https://davidgomez.cc/devblog/three-ways-to-break-a-deploy.html</link>
<guid>https://davidgomez.cc/devblog/three-ways-to-break-a-deploy.html</guid>
<pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate>
<description>Adding a devblog to my site took three tries to deploy — a nested zip, a misplaced git init, and a commit Cloudflare refused to stop rebuilding. All three were the same mistake wearing different hats.</description>
</item>
<item>
<title>Two seats, one bike</title>
<link>https://davidgomez.cc/devblog/two-seats-one-bike.html</link>
<guid>https://davidgomez.cc/devblog/two-seats-one-bike.html</guid>
<pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate>
<description>I pulled the two-seat workflow I use to build Loupe out into an open-source kit. The idea, and why it&#39;s a context-scaler, not a token-saver.</description>
</item>
<item>
<title>June 21 — glass on the surface, plumbing underneath</title>
<link>https://davidgomez.cc/devblog/daily-log.html</link>
<guid>https://davidgomez.cc/devblog/daily-log.html</guid>
<pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate>
<description>A wide day: shipped a dormant glass redesign and a fully responsive header, chased a stats box that kept clipping, root-caused six photo-pairing mis-binds down to a filename suffix, sorted out the faithful way to pull edited photos, relocated my notes vault, and ran a security review I&#39;m keeping vague on purpose.</description>
</item>
<item>
<title>June 20 — a portable enrichment import, a console that runs the pipeline, and a brand pinned down</title>
<link>https://davidgomez.cc/devblog/portable-import-and-a-brand-pinned-down.html</link>
<guid>https://davidgomez.cc/devblog/portable-import-and-a-brand-pinned-down.html</guid>
<pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate>
<description>A long, many-threaded day. I built the full path that lets a second person&#39;s Apple-photo metadata become my app&#39;s enrichment database, turned the setup console into something that can actually start the pipeline stages itself, split the frontend out of the monolith, unified the brand across app and marketing site, stood up real email, and fixed a couple of bugs that had been silently breaking the photo pipeline for a while.</description>
</item>
<item>
<title>June 19 — the day Loupe got its name, its face, and its front door</title>
<link>https://davidgomez.cc/devblog/rename-connect-faces-brand.html</link>
<guid>https://davidgomez.cc/devblog/rename-connect-faces-brand.html</guid>
<pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate>
<description>A long, many-threaded day: renamed both repos to loupe, shipped the Map and Cutting Room pages, built the in-app People view on top of face embeddings, redrew the brand mark down to the favicon, and stood up the onboarding front door.</description>
</item>
<item>
<title>June 18 — the motif gets deeper the closer you zoom</title>
<link>https://davidgomez.cc/devblog/contact-sheet-deepens-by-zoom.html</link>
<guid>https://davidgomez.cc/devblog/contact-sheet-deepens-by-zoom.html</guid>
<pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
<description>Redesigned the month view&#39;s day cards into a contact-sheet film motif, polished the marketing site&#39;s desktop nav, survived a concurrent-edit collision that wiped my work off disk, and finally figured out what machine I&#39;ve actually been building on.</description>
</item>
<item>
<title>June 17 — making Loupe leave my box: portability, a brand, and a public site</title>
<link>https://davidgomez.cc/devblog/from-my-box-to-a-product.html</link>
<guid>https://davidgomez.cc/devblog/from-my-box-to-a-product.html</guid>
<pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
<description>The day Loupe stopped being a thing that only runs on my machine. I reframed it as a self-hostable product, made the pipeline portable through environment variables, scrubbed both repos clean for publishing, finalized a brand and header, fixed the photobook&#39;s repetition problem, and registered loupeculling.com for a marketing site.</description>
</item>
<item>
<title>June 16 — a kernel reboot, two apps becoming one, and an enrichment layer pulled from Apple</title>
<link>https://davidgomez.cc/devblog/one-app-called-loupe.html</link>
<guid>https://davidgomez.cc/devblog/one-app-called-loupe.html</guid>
<pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate>
<description>The day the project got a name and a spine: I came back to a box that had silently rebooted, merged two sibling photo-review apps into one productionized service called Loupe, added a cloud backup and AI-written period summaries, and built an enrichment layer that joins Apple&#39;s own labels, people, and scores back onto my library by UUID.</description>
</item>
<item>
<title>June 15 — the 462 GB move that took 0.09 seconds, and two review tools</title>
<link>https://davidgomez.cc/devblog/the-move-that-moved-nothing.html</link>
<guid>https://davidgomez.cc/devblog/the-move-that-moved-nothing.html</guid>
<pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate>
<description>A long day: turning a 462 GB copy into an instant rename by understanding the filesystem, catching two backup processes about to trample each other, and building two browser tools to actually review ~91,000 photos without ever deleting one by accident.</description>
</item>
<item>
<title>June 14 — a dependency cascade, and matching files back to a list</title>
<link>https://davidgomez.cc/devblog/a-dependency-cascade-and-matching-files.html</link>
<guid>https://davidgomez.cc/devblog/a-dependency-cascade-and-matching-files.html</guid>
<pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
<description>An aggressive package cleanup quietly broke my storage box&#39;s admin UI through a dependency I didn&#39;t know was load-bearing. Then a filename-normalizer bug taught me to trust byte sizes over names when matching files back to a database.</description>
</item>
<item>
<title>June 12 — culling rules that find nothing, and a bucket that wasn&#39;t what it looked like</title>
<link>https://davidgomez.cc/devblog/rules-that-find-nothing.html</link>
<guid>https://davidgomez.cc/devblog/rules-that-find-nothing.html</guid>
<pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
<description>With the metadata database built, I started writing rules to surface delete-candidates. Two of the rules found nothing, one was secretly broken, and the biggest &#39;junk&#39; bucket turned out to be footage I&#39;d never delete. The lesson of the day: rules lie, pixels don&#39;t.</description>
</item>
<item>
<title>June 9 — building a photo-metadata pipeline with no sudo and a flaky network</title>
<link>https://davidgomez.cc/devblog/building-a-metadata-pipeline-no-sudo.html</link>
<guid>https://davidgomez.cc/devblog/building-a-metadata-pipeline-no-sudo.html</guid>
<pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate>
<description>Day one of the photo project: build an ingest tool that reads ~91,000 photos and videos into a SQLite database so I can cull systematically. The build went fine. The environment fought me, and the performance lessons were not where I expected.</description>
</item>
</channel>
</rss>
