Lab notes

My running log of the big changes to every experiment, newest first.

  1. Building the lab

    The equipment page is now a wall where every tool hangs as a plate with its logo or initials, and a pinned note opens with what I use it for and where. Model versions are grouped into one entry per family, and each entry links to its product, its source project or the experiment.

  2. 3D tablet plant

    The first layout did not convince me, so Codex drew three directions. I combined two of them, moved the room markers off the machines and published the plant on GitHub Pages.

  3. Building the lab

    I moved the lab to j-garciaruiz.github.io/lab and rewrote every page in the first person, since this is my journal; the AI is still named wherever it did the work.

  4. 3D tablet plant

    I added narration in one Gemini voice and plant sounds synthesised in the browser.

  5. 3D tablet plant

    A research agent wrote the content from 41 sources. Codex fact-checked it independently and found 16 problems; I applied all 16, and one of them added a 42nd source.

  6. 3D tablet plant

    I built a 3D plant in Three.js with Claude Code: 16 clickable rooms, a guided tour, a quiz and the material flow between rooms, laid out from a visual concept Codex generated first.

  7. Building the lab

    I turned the site into a lab journal with tags, lab equipment, these lab notes and an about page. Then I surveyed 219 project folders, picked 27 to write up, and reshaped every experiment page around the problem first: what I needed, why nothing out there was good enough, then what I built.

  8. Medicare drug prices

    I split the repository into two matching tracks, drug pricing and the county atlas, and published both on GitHub Pages from a public repository.

  9. US county health atlas

    I split the repository into two matching tracks, re-ran the atlas pipeline and got all 58 outputs back byte for byte, then published both tracks on GitHub Pages from a public repository.

  10. Brazil's out-of-pocket gap

    I wrote it up for the lab, with the WHO GHED series from 2000 to 2023 and a year scrubber you can drag.

  11. Building the lab

    I built the design tokens with a build step that fails on any colour contrast below WCAG AA; it caught the bright orange stamps and the focus ring. In Magnific I set up a brand kit for the lab, traced the machines to vectors and upscaled the hero, and the J-tube won a test of six logo ideas on paper, on the purple wall, blurred at a distance and at favicon size.

  12. Building the lab

    I picked the concept, Johnattan's Laboratory: an original cartoon lab inspired by Dexter's Laboratory and kept fully separate from Decilion. Codex generated three visual directions, and I combined the notebook pages of one with the secret-lab hero of another.

  13. Training studio app

    I split the trainer's session screen into three steps (before, during, after) and added an in-app guide for each role. A late change inside the notice period now costs the athlete the original session after a warning, where before it moved the session for free.

  14. Handheld as Mac remote

    I set up a Game Boy game I already had in RetroArch, fixing its unmapped buttons with Libretro's Pocket 5 controller profile, and a one-way save backup to the Mac with Syncthing; a test file arrived in about 15 seconds.

  15. Medicare drug prices

    I added a fourth finding from the Part D plan pricing files (plan prices for the ten drugs sit at the negotiated price from January 2026) and registered five predictions for the 15 drugs whose negotiated prices start on 2027-01-01, in a git commit, before opening any 2027 data.

  16. US county health atlas

    I built the county atlas site: a project page and an interactive map with 34 outcome layers, in light and dark mode and with a phone layout.

  17. Medicare drug prices

    I started a US public health data lab, with a catalog of sources checked live that day and a fetcher for CDC datasets, and measured Part D spending per claim, list-price cuts and pharmacy acquisition costs for the ten negotiated drugs. Codex and Agy each recomputed the numbers blind, and I applied their fixes.

  18. US county health atlas

    I started a US public health data lab: a catalog of sources, each checked live that day, and a fetcher for CDC datasets.

  19. Motion studio

    I found that GitHub's search rate limit had been silently breaking the scout's collector and fixed it with paced, retried searches. Its eighth scan report followed: 653 new repositories, 90 shortlisted, about 65 read.

  20. Handheld as Mac remote

    I added Direct to Mac: the handheld sends its input over Tailscale to a small receiver on the Mac. Typing '123' on the handheld arrived on the Mac.

  21. Bogotá rental finder

    Ciencuadras got daily discovery through an isolated headless browser, and a publishing step now checks the live feed against the committed data. The verified feed held 918 listings.

  22. Bogotá rental finder

    I fixed all 15 findings of an independent Codex review (GPT-6 Astra), then moved furnished status, lease term, utilities and admin fees from keyword rules to Jev, checked both against 60 blind-labelled listings, and had Jev score up to five photos per listing.

  23. Bogotá rental finder

    I collected furnished listings from Fincaraíz, Metrocuadrado, Ciencuadras and a sample of Airbnb monthly stays, placed each one on the city's street grid, and built a map app with like, discard and a swipe deck that refreshes on GitHub Actions at 06:00 Bogotá time.

  24. Training studio app

    I switched from the demo to a pilot with real accounts: admin approval, one-time recovery codes, consent screens and nightly encrypted backups.

  25. Handheld as Mac remote

    After confirming the handheld can act as a Bluetooth keyboard and mouse, I built my own version of Bluetooth Remote: right stick for the cursor, left stick to scroll, D-pad for the arrow keys, and two patches that make the on-screen keyboard easier to use.

  26. E-paper home display

    I handed the first unit over to friends with a setup kit that uses neutral data sources, after moving HTML rendering to Playwright's headless shell because a hidden Chrome had started taking over link clicks on the Mac.

  27. Residents' shift scheduler

    I started storing every assistant message and every request it could not apply, so I could read where it went wrong. Then I let it work on generated schedules: it can read the month, even out nights and propose swaps, still only as proposals.

  28. Meeting recorder

    A real Bluetooth headset dropout cost 33 seconds of microphone audio, so I made the recorder survive one mid-recording. I also added an optional voice-processing mode with echo cancellation and Voice Isolation, and measured what it does.

  29. Primary Doctor

    The seven minor findings from the final review were fixed, each with a test that fails if the old bug comes back.

  30. Study notes from recordings

    I published four more sessions after an independent legal review by Codex found 26 issues in the notes and 12 in the question banks.

  31. E-paper home display

    Over-the-air updates made the screen cable-free, and Hermes, my phone assistant, can now post messages to it. After a hang emptied the battery, I added a 90-second start-up deadline, a safe mode that does not touch the display and a low-battery sleep screen.

  32. Primary Doctor

    When the art pass stalled at 6 out of 10 against the concept, I escalated it to Codex, and two fresh reviewers scored the rescue 7 out of 10. The loop built a debug Android APK and a web build, and I merged the prototype once the final whole-game review gave 8 out of 10 from the visual critic, the Claude reviewer and Codex.

  33. E-paper home display

    Claude ran an overnight research session that produced four reports and 32 ranked ideas, and cut a full redraw from 2.26 to 1.59 seconds and a deep-sleep wake from 9.1 to 3.7 seconds.

  34. Primary Doctor

    Two independent AI raters labelled all 1,200 questions as urgent or scheduled, with an adjudicator for the 29 disagreements. They agreed at kappa 0.94; the old keyword rule had reached only 0.35.

  35. Handheld as Mac remote

    I compared handhelds with a Codex research report built on 59 sources and a Claude review, then asked Codex to try to break Claude's lean toward the Pocket 6. It recommended the Pocket 5, and I ordered one.

  36. Primary Doctor

    I started the autopilot with a written mandate, a test harness, timers to wake the run after usage limits, and two Codex concept images that set the art direction. The run paused twice at the usage limit and resumed from the saved state each time.

  37. E-paper home display

    I backed up the 32 MB factory flash in verified 1 MB chunks and ran a font test on the real panel: text drawn on the Mac kept every accent, and the device's own fonts dropped them. The same day the screen started fetching its pages from a server on the Mac over Wi-Fi, and a compressed 4-bit format instead of PNG cut a page load from about 6.6 to about 3.1 seconds.

  38. Artist's website

    I added her copyright and reproduction notice to every page, put in her new artwork titles, replaced three artwork files and showed print sizes on all 58 pieces.

  39. Residents' shift scheduler

    An assistant prototype got 28 of 30 facts right on a real month's message, and I compared six model settings on the same test before giving it a tab in the back office. I also added a repair mode that fixes a published month with as few moves as possible.

  40. Meeting recorder

    Codex reviewed it independently twice. I addressed the 12 findings of the first review and the 9 new ones of the second, except the items I list as known limits.

  41. Residents' shift scheduler

    I coded the coordinator's written rules, split the solver into two stages and started real use, with a roster loader that keeps personal data out of the code repository. I also moved the app from Cloudflare Workers and D1 to Vercel and Turso, and all 762 database rows came across identical.

  42. Meeting recorder

    I built the menu-bar recorder (system audio through a Core Audio process tap, the microphone through AVAudioEngine, ffmpeg to encode and mix) and added local transcripts with Parakeet through FluidAudio. My first Spanish test was invalid, so I switched to the int8 v2 encoder and a Latin-script language filter.

  43. Orthopaedic surgery registry

    I added a skull fracture workflow with optional cervical spine scoring, then hip and foot and ankle, ten functional scores and tap-first entry in every area, and released version 1.15.0.

  44. Training studio app

    I load-tested the app at the gym's real size and moved training data into tables, which cut the admin screen download from 29.2 MB to 0.76 MB. I also built the website prototype in Spanish, with stock photos and every unconfirmed fact labelled.

  45. Artist's website

    Six collection pages joined the site, with 58 artworks, in the order she asked for.

  46. Brazil's out-of-pocket gap

    I built an interactive explainer on health financing with a policy slider and 18 self-tests, and fixed everything an independent Codex review found.

  47. Child deaths, Colombia and Brazil

    I built a second explainer from the same Colombia and Brazil comparison, on under-5 mortality, with 27 self-tests and an independent Codex review.

  48. Training studio app

    I built the booking engine (all-or-none multi-date bookings, plan credits, the cancellation deadline) and put a full demo with fictional accounts on Vercel.

  49. AI quota gauge

    I switched the weekly forecast from the window average to the rise in usage over the last 72 hours, and brought back a vanished menu-bar icon that SwiftBar had listed as disabled.

  50. Brazil's out-of-pocket gap

    I scanned all 3,099 WHO Global Health Observatory indicators for the ones Colombia and Brazil both report, and trimmed them to 115 comparable ones, with a written reason for every cut.

  51. Training studio app

    I drew a design system from the gym's public Instagram look and built an editable Spanish booking prototype in Figma.

  52. Artist's website

    Codex generated five homepage concepts from her own artwork and logo. I merged the two she liked, added a paper-to-print section after a Claude critique, and had the site live in Astro on Vercel, on its own domain, the same day.

  53. Motion studio

    I wrote a pre-flight checklist and a one-command check of the finished file, with every test first proven to fail on planted defects. Then I rendered the same clay scene in Blender and in Three.js from one cue file, and gave the same brief to two motion tools.

  54. Residents' shift scheduler

    I built the first engine: Colombian public holidays, a rule checker and a mixed-integer solver (HiGHS) that runs in the browser, all tested on fictional residents.

  55. AI quota gauge

    I built the first version with Claude Code: one Python script reads Claude and Codex usage into the menu bar, and a fuel-tank popover, picked from three concepts, shows what is left. I tested the fallbacks with simulated login failures.

  56. Motion studio

    I put a Jev triage step in front of Opus to filter new GitHub repositories, added a ledger that measures tokens and time for every job, and widened the knowledge base to generative and hybrid video.

  57. Medical Spanish practice

    I built Gemini 3.8 Flash-Lite TTS with a designed voice per patient on a preview branch, benchmarked 30 lines on two models and moved the app to consulta.decilion.com. Server logs then showed that an accent change I heard came from the live ElevenLabs v3 voice, and speaker embeddings checked the Gemini voices.

  58. Medical Spanish practice

    I hardened the app for version 1.3.0 and moved patient speech to ElevenLabs v3 Conversational, then ran a blind A/B test in which I picked Gemini 3.8 Flash TTS on 7 of 7 lines.

  59. Motion studio

    I researched how the first code-drawn films were being made, started the knowledge base, made a 15-second test cartoon and set up a scout that runs every Monday.

  60. LAC health news monitor

    I retired the monitor and kept its archive of articles and events.

  61. LAC health news monitor

    I tested TypeSafe's Jev against my GPT-5.4 nano triage gate on 600 replayed articles, and Jev scored an F1 of 0.969 against 0.901.

  62. WHO data MCPs

    I released GHED 0.6.1 after testing it with fresh Claude Code sessions on four research tasks and checking the answers against the WHO workbook. I also prepared a hosted HTTP version with 34 read-only tools, not deployed yet.

  63. Study notes from recordings

    I applied the professor's approved corrections to the practice questions: 33 text revisions and one changed answer key.

  64. WHO data MCPs

    I published both servers on PyPI (GHED 0.6.0 and GHO 0.7.0) through GitHub Trusted Publishing.

  65. Phone to Mac shelf

    After an independent design critique from Codex I replaced the first shelf design with a quiet reading index, tested everything end to end from the iPhone and saved the setup so a future session can rebuild it.

  66. Phone to Mac shelf

    I audited Tailscale on the Mac, found the local Ollama server listening on every network interface and bound it to the Mac alone. Then I built the reading shelf, the Send to Mac upload page with automatic OCR, and a preview slot for development servers.

  67. LAC health news monitor

    I switched it from scheduled runs to on demand, because the daily and weekly jobs cost more than the reading they produced.

  68. LAC medicine prices

    I froze the third wave at 16,423 observations of 10,195 products from 131 sources, dropped the old international reference prices and any originator premium, and published the September report on GitHub Pages.

  69. Orthopaedic surgery registry

    I recompressed 185 stored photos from 250 MB to 103 MB, ran a design loop where every visible change needed before-and-after screenshots, and gave the demo account its own fictional patients that reset at every demo sign-in, so checks never touch a real doctor's records.

  70. LAC medicine prices

    I rebuilt the census from scratch, from 161 to 298 pharmacies, and started a separate analysis project that reads only the exported data package. Codex worked through 36 batches of scraper recipes for 179 assigned sources and left 62 working recipes.

  71. Study notes from recordings

    The site reached seven published sessions, one of them built from the recordings of both sections of the course, after I applied the quick wins from an independent design audit by Codex.

  72. Insured but not served

    I added a short insights brief with six chart specifications, and Claude Opus checked every number and interpretation in it.

  73. Orthopaedic surgery registry

    I started compressing photos in the browser before upload to keep storage under the free-tier cap, and later made the clinical photo storage private, with images served through links that expire after four hours.

  74. Study notes from recordings

    Claude Opus drafted the first study note from a recorded class and I put the site online. The next day I added a narrated audio version of each note and a practice section, and mobile Lighthouse performance went from 69 to 100.

  75. Insured but not served

    Codex audited the code and then every claim in the report against the data, and I corrected the figures and wording it found overstated. Checking my estimator against R's survey package showed subgroup standard errors that were too small; after the fix, 64 of 64 estimates matched.

  76. Insured but not served

    With Claude Code I built the pipeline: ten survey rounds downloaded from DANE's microdata portal, converted to parquet and turned into weighted indicators and a ten-section report.

  77. Personal gym app

    I made the gym feel lived in: decorations earned as level rewards, boxing, yoga and dance stations, a jukebox of synthesized music and gym members who wander between the machines.

  78. Personal gym app

    8-Bit Gym got its world: the gym builder, a SpriteKit scene with tap-to-move, the coach and the first licensed sprites, followed by stats and history, XP, levels, badges, challenges, chiptune sound effects and the app icon.

  79. World Cup pool

    I archived the final data and standings, then deleted the site and its database.

  80. 7 Wonders scorekeeper

    I fixed the service worker, which had been caching the room's API and freezing the sync, hardened the room after a Codex security and concurrency review, and switched room codes to six digits with a numeric keypad for joining.

  81. 7 Wonders scorekeeper

    I added a mode chooser (one scorekeeper for the whole table, or a calculator for each player) and a shared room on Upstash Redis, so every phone at the table sees the same live scoreboard.

  82. 7 Wonders scorekeeper

    I built the first scoreboard and a Learn tab with the rules, illustrated with AI images of the seven wonders. Then I applied a Codex review, which brought the best assignment of science wildcards, validation of saved scores, accessibility fixes and a service worker for real offline use.

  83. LAC medicine prices

    I added a relevance filter after finding that pharmacy search boxes pad results with unrelated products, which cut the first wave to 4,472 clean observations. Then I published a preliminary methodology report on the first two waves.

  84. World Cup pool

    On the day of the first knockout game I added a public stats page, tie-breaks where genuine ties share a rank, and cartoon mascots. Over the next two days I fixed the results sync for penalty shootouts that the feed marked finished without a winner, added a rules page and put each player's accuracy on the leaderboard.

  85. World Cup pool

    I built the pool (bracket editor, scoring, username and passcode sign-in, three leaderboards and an admin page) and deployed it on Vercel. After independent reviews by Codex and Agy I hardened it, loaded the real Round of 32 fixtures and set results to sync every 20 minutes during game hours.

  86. LAC medicine prices

    I started the regional version, with a harvester for VTEX (the e-commerce platform behind many of the big chains) and a census of all 33 countries run by one background agent per country. The first wave stored 13,448 raw price rows.

  87. Colombia's health complaints

    I replaced a single before-and-after cut with an event study that aligns each intervened insurer to its own takeover date. Codex and Agy checked the dates independently and critiqued the charts, and I revised them.

  88. Colombia's health complaints

    I mapped the old and new complaint reasons onto stable themes across the July 2023 reclassification, and drew the foundational chart of complaints per million affiliates, 2014 to 2026.

  89. Colombia's health complaints

    I found the full complaint archive behind the Supersalud page through its public search API, parsed one workbook per year from 2014 to 2026, and loaded 10,246,947 record-level complaints into a DuckDB warehouse that matches the published monthly totals.

  90. Medical Spanish practice

    I traced the audio stutter to the browser redrawing the transcript every 220 ms during playback and removed that redraw. Then each patient got her own ElevenLabs Flash v2.5 voice, at about 390 ms through my route.

  91. Pharma trade chord

    I rebuilt the value poster in Paper, with the chord ring as one imported image and the text blocks as native, draggable elements. I also built a version on who supplies Latin America and the Caribbean, and rebuilt it on 2024 data.

  92. Comtrade pharma MCP

    I added the WTO and CEPII baskets that include active ingredients, WTO tariff and cross-check tools, a re-export signal, a tool that rebuilds a non-reporting country from its partners' reports, a disk cache and 8 offline unit tests, for 24 tools in total.

  93. Pharma trade chord

    I added a variant on the WTO Pharmaceutical Agreement basket, which adds active ingredients to finished medicines.

  94. Comtrade pharma MCP

    The analytical tools came next: supplier concentration, unit values, trade balance, mirror checks and revealed comparative advantage, each reviewed by Codex and Agy. From UN Comtrade's official Python package I took a cleaner query mode, a key-free fallback, monthly data and standard unit values.

  95. Pharma trade chord

    I pulled every export-reported chapter 30 flow for 2023 from UN Comtrade, drew the first chord graph by value, then added a volume version by net weight (pulled at the 6-digit product level) and a side-by-side poster of value against volume.

  96. Comtrade pharma MCP

    I started a server with 7 read-only tools for UN Comtrade medicine trade (snapshots, time series, top partners, product breakdowns and country comparisons) and read about 28 papers that use Comtrade, turning their methods into a list of tools to build.

  97. OECD Health MCP

    I dropped the Latin America focus, replacing 12 Latin American groups with 10 broad OECD group names, and added a circuit breaker that pauses all calls for 5 minutes when the OECD API rate-limits the server. Codex's second review caught a race in concurrent breaker checks and the silent dropping of unknown filter keys, and I fixed both.

  98. OECD Health MCP

    I forked the open-source OECD-MCP server, removed the non-health categories, generated a catalog of the 85 dataflows of the OECD Health Division and added curated indicators that map a plain name to the exact slice of a dataflow. Codex's first review led to fixes in alias resolution, theme filtering and stray output on the protocol channel.

  99. WHO data MCPs

    I built ghed-mcp, which finds WHO's health expenditure workbook, downloads it and builds a local SQLite cache to query, and made it public. Both servers now share country groups updated to the World Bank's FY2026 regions.

  100. WHO data MCPs

    I released gho-mcp, a server for the WHO Global Health Observatory, as a public repository.

  101. Orthopaedic surgery registry

    I added a public landing page and a way for new doctors to request access.

  102. Medical Spanish practice

    With Claude Code I built a bare latency test (voice to transcript to patient reply to speech, timed at each step), then the first patient, her chart and the coach, and put it online. The next day I rebuilt the coach to score only the Spanish, leaving clinical coverage out, and added a second patient.

  103. Personal gym app

    I finished planning an 8-bit sequel (technical plan, game design and design system) and tried seven AI-generated character sprites. None of them shipped.

  104. Orthopaedic surgery registry

    I built the first version in a day: sign-in, patient records, the surgery workflow, several doctors and invitation codes.

  105. Personal gym app

    I built the first version of Gym Trainer with an evidence-based 8-week program, turned the plan into a 4-day upper and lower body split, and fixed 10 issues from the first test on the real iPhone.

  106. LAC health news monitor

    I split the news pipeline out of my Substack writing project and made it its own tool, covering 33 Latin American and Caribbean countries.

  107. Colombia child mortality

    I assembled births and under-five deaths for 2008 to 2024 from DANE vital statistics, plus the government's preliminary 2025 figure, then built a standardized rate with the denominator fixed at 2008 births, a chart of 2025 scenarios and a notebook that walks through the whole argument.

  108. Colombia child mortality

    I ran a joinpoint analysis of under-five deaths from malnutrition, 2015 to 2024, with a Monte Carlo permutation test to choose the number of trend breaks.

  109. LAC medicine prices

    I ran a first scraper in Panama: 116 medicines from Panama's CABAMED essential medicines list, 386 search terms and five pharmacy websites, which returned 1,425 price rows for a Tableau dashboard.

  110. Constitutions and health

    I set up a two-reviewer check of the 107 classification cases that rest on coder comments. Claude did the first review; the second, human review is still open.

  111. Constitutions and health

    I revised the manuscript after simulated journal peer reviews written with ChatGPT, added figures from Codex (an interactive world map, a sign-reversal chart and a forest plot) and wrote a plain-language guide to the statistics for human rights professionals.

  112. Constitutions and health

    I rebuilt the Comparative Constitutions Project's three health questions as a five-level scale for the 183 constitutions in force in 2023, then tested the levels against WHO and World Bank indicators with and without income control, with Bonferroni and false discovery rate corrections, globally and by region.

© 2026 Johnattan García-Ruiz Last updated