Built in public
Updates
An open book on this project: what shipped this week, what is in progress, where it is going and how it is built. Free tools and open research, built in public by AI coding agents and checked by automated tests. Everything here is generated from the repository on each publish.
This week in numbers
The seven days to Saturday, 31 October 2026.
New tools this week
- Babysitting Business Kit: free, private, in your browser
- Find copy-pasted code, fast
- Shed Designer: drag out a gable shed, get the plans and the cut list
- Agentic Trading Lab
- VSME Report Builder — Free Sustainability Report for Small Suppliers (Basic Module)
Recently shipped
This build could read history back to Thursday, 22 October 2026; older merges are on GitHub.
ToolsProducts
- wall-framing-takeoff: schedule page hold-dates field
Open Wall Framing Takeoff — free, private, in your browser → - hearth-and-horizon: The Stone That Keeps the Sun (text only)
Open Hearth & Horizon: free AI-written science fiction and Catholic bedtime stories, with audio → - redteam: rsu-withholding-gap-calculator 2026-10-31
Open RSU Tax Withholding Calculator 2026 — is 22% enough? → - wall-framing-takeoff: schedule page documents notBefore hold dates, example carries one
Open Wall Framing Takeoff — free, private, in your browser → - wall-framing-takeoff: every page links to the other six, with a test
Open Wall Framing Takeoff — free, private, in your browser → - saints-by-candlelight: episode 62, Philip and the Traveller on the Gaza Road (text only)
Open Saints by Candlelight: a free bedtime podcast of saints, angels and Bible stories → - wall-framing-takeoff: slab edge line in insulation text, F-factor field clicked in Chromium
Open Wall Framing Takeoff — free, private, in your browser → - wall-framing-takeoff: footing steps box on the foundation card
Open Wall Framing Takeoff — free, private, in your browser → - hearth-and-horizon: The Count Between (text only)
Open Hearth & Horizon: free AI-written science fiction and Catholic bedtime stories, with audio → - wall-framing-takeoff: schedule notBefore start dates
Open Wall Framing Takeoff — free, private, in your browser → - wall-framing-takeoff: concrete calculator page (slab, footing, piers; quarter-yard order, bags)
Open Wall Framing Takeoff — free, private, in your browser → - wall-framing-takeoff: monthly weather-rates field on the schedule page
Open Wall Framing Takeoff — free, private, in your browser →
ResearchStudies
- research/aerolog-scaling: milestone 9o, estimated noise correlation (GLS)
Read aerolog-scaling → - research/aerolog-scaling: milestone 9n, whitened residuals for coloured noise
Read aerolog-scaling → - research/llm-coding-inference: milestone 7e, 2,000-draw coverage check into paper and README
Read llm-coding-inference → - research/lowcomm-training: 6n compression excess not linear in omega
Read lowcomm-training → - research/civ-levers: lagged elite recruitment and stress (history milestone, second run)
Read civ-levers → - research/heavy-hydraulics: milestone 3j, two manual figures agree on the rating-point drop
Read heavy-hydraulics → - research/build-data: milestone 4 instrument, split-conformal (CQR) and drift diagnostic, tests; no real-data run (feeds unreachable)
Read build-data → - research/marine-colregs: COLREGs-aware collision avoidance, three planners on 115 encounters
Read marine-colregs →
WebsiteThe site
- polish: seo_title batch 11, 20 titles for 2026-10-25/26 posts
- polish: seo_title batch 10, 25 titles for 2026-10-26 posts
- process: shorten over-long seo_title that turned main red (check_post_frontmatter)
- polish: seo_title batch 9 (22 posts) + shed-dormer post description
- process: fix red main (siding post description over 160 chars)
- redteam: platform/pages/faq-coverage 2026-10-31
Read the full changelog: every merge in the last 14 days, by day.
Active research
Research projects changed in the last 14 days, most recently active first. All projects, with their write-ups, are on the research page.
- aerolog-scaling
research/aerolog-scaling: milestone 9o, estimated noise correlation (GLS) - llm-coding-inference
research/llm-coding-inference: milestone 7e, 2,000-draw coverage check into paper and README - lowcomm-training
research/lowcomm-training: 6n compression excess not linear in omega - civ-levers
research/civ-levers: lagged elite recruitment and stress (history milestone, second run) - heavy-hydraulics
research/heavy-hydraulics: milestone 3j, two manual figures agree on the rating-point drop - build-data
research/build-data: milestone 4 instrument, split-conformal (CQR) and drift diagnostic, tests; no real-data run (feeds unreachable) - marine-colregs
research/marine-colregs: COLREGs-aware collision avoidance, three planners on 115 encounters - verifiable-training-mechanisms
research/verifiable-training-mechanisms: milestone 53, progress check vs stall and reversed-step workers - energy-cell-dfn
research/energy-cell-dfn: why SPMe scored good cells zero - verified-dse
research/verified-dse: milestone 45, rank displacement vs pool size - marine-hull
research/marine-hull: milestone 7e, H5 glider vs AUV fixed-energy flip - marine-path
fix main: marine-path README live-page link; 14-day notice page FAQ answers match their JSON-LD - hanger-3dseeds
research/hanger-3dseeds: raise the end-radius limit to 9 and 12 cm - sim2real-inference
research/sim2real-inference: finite-pool certificate result moves into the paper's main text (7y), plus post - buildbot-carrycop
research/buildbot-carrycop: time-varying CoP ramp (heel to toe) sweep - hanger-3dradius
photo-editing: RAW review proxies from the embedded preview
And 1043 more in the changelog.
Lab notebook entries
The newest dated entries from projects that keep a LOG.md.
- 31 Octaerolog-scaling: Milestone 9o: can the output-error fit estimate the noise correlation itself and still recover 9n's gain? (planned before running)
- 31 Octaerolog-scaling: Milestone 9n: does fitting 9m's coloured-noise record with AR(1)-whitened residuals recover the loss? (planned before running)
- 31 Octciv-levers: Lagged elite recruitment and lagged stress (milestone 7, second run)
- 31 Octciv-levers: Pooled sanctioning against peer punishment (milestone 5, second run)
- 31 Octheavy-hydraulics: Milestone 3j: the manual's P-to-A flow curves pin the rating-point drop (not pre-registered)
- 31 Octheavy-hydraulics: Milestone 6c: paper section 3.5 gains 3i (a writing step, no experiment)
- 31 Octllm-coding-inference: Milestone 7e: the 2,000-draw check moves into the paper and README (a writing step, no experiment)
- 31 Octlowcomm-training: Milestone 6n (H6 scale-up): is the size-2 excess linear in omega? Keep 1/4 at H = 64, six seeds (planned before running)
In progress
Open pull requests
The live list of open pull requests loads from this site's development dashboard. You can also see them on GitHub.
Process improvements underway
- Decide who publishes the gh-pages snapshot
- Get a first usage reading for any product
- Make the catalogue's sitemap discoverable despite the Pages subpath
- Turn on GitHub's merge queue for main (owner setting)
- Cloud sessions cannot download the Piper voice, so creative runs cannot voice episodes
- Deploy platform/counter on an always-on HTTPS host so site visit counts exist
- seo: give the GitHub repository a real description, topics and a social preview image
- seo: publish the MCP server to the official MCP registry
- seo: once Search Console reports, find which tool pages Google declines to index and fix those
From the process backlog: 47 done so far.
Waiting on the owner
The decision queue is not available in this build.
Agents work around these rather than wait; the full list is on the engineering status page.
Direction: where this is going
The owner's standing goals, summarised from prompts/goals.md,
which every agent run reads. The file has the full text, in the owner's own words.
The mission
- Ventures : software products strangers can use for free, with real business potential, measured by use.
- Research : a research portfolio that supports PhD applications in ML/AI, robotics and autonomy, operations research or industrial engineering.
- The platform : the agents, checks and prompts that do the work above.
- Free choice : in the spirit of Google's "20% time", about one run in twenty works on whatever the agent finds most interesting, with its own approach (
prompts/explore/). - Creative work : the owner's long-running creative projects, written, voiced and published by the fleet (
prompts/creative/). - The web presence : one website, hosted on GitHub (GitHub Pages), from which all of the work above can be easily checked out visually.
A public face for everything
Most things in this repository should have a publicly accessible web page: every venture, every research project, and the platform tools a stranger could use or learn from. All of those pages should be reachable from one navigable home page, so a visitor who lands there can browse by category and click through to any secondary page, and every secondary page links back to it.
- Quality, not just coverage
Automated, unpaid, compliant distribution
Publicize the work far more, automatically and for free: get every product (and, where it fits, every research project) onto the natural distribution platforms where its users already look, such as package registries, extension and plugin stores, tool directories, syndicated feeds and openly labelled bot accounts, on top of the search and AI-assistant discovery already built. Think of it as legally compliant, unpaid, automated sales where there is no sale: the funnel ends in a stranger using a free tool.
- Distribution and measurement are now the limiter
- SEO moves up a lot, on the site and in the repository
- Own the tooling; open-source apps and tools as a second track
- Feedback and usage from the site, on one free account
- No terms of service are ever broken for it
- Privacy rules follow the law, not stricter
Sales, marketing and business tools
A direction, not a mandate for volume. Tools for selling and marketing (B2B, B2C and consumer), each with a deterministic core and AI on the user's own key from any provider (platform/llm/). Each can be deployed as a business of its own, embedded in someone's SaaS, or run as part of a suite. Extending the sales and marketing ventures that already exist comes before adding new ones. Spec, guardrails and definition of done: portfolio/sales-tools/README.md.
Business functions with data to build and test against
Pick a job someone is paid to do (bookkeeper, support agent, contracts reviewer, demand planner), find public labelled data of the real work, and build the system against it: rules, a small trained model or an agent, measured on a held-out split before any claim is made. Real labelled data is what keeps the work from being a calculator (Depth over calculators): a chatbot can't hand a reader a measured error rate on 1,000 real receipts. Extending an existing venture whose README says "hand-written fixtures only" comes before starting a new one. The method, the licence checks and the list of candidate datasets: portfolio/data-backed/README.md. First instance: AI Bookkeeper's receipt reader on CORD-v2, 4% to 94% of held-out totals read right (2026-10-24).
AI accounting systems
The portfolio already had about ninety accounting tools, and each did one step (a payout to a journal, a CSV check, a categorizer, a reconciler). The direction is the system those steps belong to: books that persist, learn from the owner's corrections, and produce what a bookkeeper hands over at month end. The deterministic path stays the product, and a model only suggests (PRODUCT_PLAYBOOK.md §3). The first piece is ventures/ai-bookkeeper, first in portfolio/flagships.yaml.
Autonomous water vehicles
Surface boats, sailing and wave-powered drones, AUVs, gliders and ROVs as one system: hull and energy, navigation without GNSS, collision rules (COLREGs), perception and fleets. It starts as research track 23 (marine) in research/PROJECTS.md, simulation first; a product (a survey planner, an endurance or COLREGs checker) follows when a result earns one. No weapons or surveillance work, and real-water operation is an owner step.
Local models as an option beside API keys
Every AI feature that takes a key also takes a model running on the user's own machine or network (Ollama, LM Studio, llama.cpp; for images and video, a local server such as ComfyUI), at no per-call cost and with the data staying local. The deterministic path stays the product. How: platform/llm/ and PRODUCT_PLAYBOOK.md §3.
Voice, chat and agents as primary ways in
Every tool is reachable four ways: the visual form, a typed sentence, the voice, and an AI agent. Output can be read aloud, and voice-only use should work. Nothing heavy loads until the visitor opts in, and the opt-in names the download size and where their words go. Quality is measured and published next to the limitations, not asserted. The shared implementation is the site assistant (platform/pages/assistant.mjs, the Ask page on the public site). Rules for products: PRODUCT_PLAYBOOK.md §4, "Every way in".
Write about the work
The blog is the site's writing/ section (Atom feed at writing/feed.xml), built from Markdown in docs/posts/ by platform/pages/writing.mjs. Three kinds of post, all for a reader who has never seen the repository:
LLM docs and a marketing page for every product
The post half is covered by "Write about the work" above (an agent doc and a post per run, by judgment). The product half is a default for PRs that add or change a product, not a gate; skip it, and say why in the run record, when an existing page or file already covers the change (extend that instead):
Research algorithms as tools
New tools favour methods from papers, run on the user's own data, with the paper cited and the licence respected; another basic calculator ranks below them. The browser is one good place to run them, not a requirement: a CLI, a Python package, a notebook, a GPU job the user runs, or a self-hosted service is fine when the method needs it (owner, 2026-10-30, "Direction: every platform"). Spec, licence rules and definition of done: portfolio/research-tools/README.md.
Every platform, not just the web
A tool is finished when it reaches people beyond its web page: a CLI, the MCP server, and the app packagers in platform/distribution/ (iOS, Android, browser extension; desktop is the open gap). Publishing under the portfolio's name stays an owner step; building the packages is not. Channel list and status: portfolio/distribution/README.md.
- No static-only default
- No browser-only rule either
Depth over calculators
So this is about where effort goes, not about what may land. Don't start new calculators or spend a run deepening one (features, pages, comparison pages, consolidation, distribution); fix one when it is broken (a failing test, a wrong result, a dead link). Calculator work that is already built, such as an open PR or a stranded branch, is fine to finish and merge: that costs little, and leaving it unmerged gains nothing. The router (portfolio/router/allocate.py) ranks every non-flagship calculator last with a maintain-only task. A run with a free choice picks research, a research-adjacent tool or a flagship milestone. A tool built on a published method that fails both tests (a chatbot reproduces it in one reply; a maths graduate follows it at a glance) is a research tool, not a calculator, and is welcome: a published model, a solver or a proof passes; rates times quantities does not. Where to find such engines: "Research algorithms as tools" above. The posts: docs/posts/2026-10-20-fewer-calculators-harder-problems.md and docs/posts/2026-10-20-if-its-a-calculator-make-it-hard.md.
- Size the work, not just the maths
- Lean towards projects of about three hundred hours
- Beat asking a chatbot
Language is a judgment call
No track, area or runbook mandates a language. Pick the one that makes the work best, and say why in the README when it is not what the surrounding code uses. Existing code, shared tooling (research/ helpers are Python; most venture pages and checks are plain .mjs) and the host (Pages serves committed files) are reasons to weigh, not rules. A guide that reads as requiring a language is out of date: follow this section and report it as doc_friction. The Rust direction below is one such reason, for heavy cores.
Rust where it is essential
So prefer projects whose heavy core needs Rust: our own inner loop is the measured bottleneck, there is no room for a runtime (firmware, real-time control), or one engine has to ship to WASM, CLI, Python and crates.io. Porting light work or a wrapper around an existing C library rarely pays off. The opinion piece, with the test and four candidates from this repository: portfolio/opinions/2026-10-20-rust-where-it-is-essential.md.
Dev tools in Rust, common and niche
So rewriting developer tools in Rust is a standing direction, for widely used tools and for niche ones. It sits inside the section above: pick a tool where Rust earns its place (a slow or memory-bound inner loop, untrusted input to parse, or one engine for a CLI, the browser via WASM and other surfaces), measure the original on real input first, and publish the comparison (speed, memory and agreement on the same input), wins and losses alike. Skip tools that already have a mature Rust version (ripgrep, fd, bat, delta, tokei, hyperfine, ruff, uv, biome, oxc, typos, lychee, zizmor, jaq) unless there is a measured gap. The first is ventures/dupehound, a copy-paste detector that read this repository's 9,458 .mjs files in 1.2 s where jscpd needed 337 s and 6.2 GB. Candidates and the test for each: portfolio/opinions/2026-10-29-dev-tools-in-rust.md.
Open construction, mining and heavy equipment
So open designs for excavators, loaders, haul trucks, drills and similar machines are a standing direction: hardware, controller firmware (a natural fit for the Rust direction above), operator and fleet software, simulation and autonomy, judged by what they take off the cost of owning and running a machine against the one they would replace. It is research track 25 (heavy) in research/PROJECTS.md, where the milestones and its guardrails live: designs are research, not certified machines; nothing runs on a real machine or near a person without the owner; no emissions-control tampering and no breaking OEM access controls. A piece that people can use (a controller, a retrofit kit's software, a fleet tool) can graduate to a product like any other.
Files first, not the GitHub API
A fresh clone and grep should answer "what happened and why". A PR body, review thread, issue, CI log or Actions artifact won't do that: you have to query the API one PR at a time to read any of them, and logs and artifacts expire (artifacts here keep 7 to 30 days). So anything a later reader needs goes in a file in the same PR, and the GitHub text is a summary that points to it, never the source:
Software for the routine, agents for judgment
When runs keep doing the same chore (counting, collecting, checking, formatting, recomputing a metric), and a script, a check or a scheduled build could do it at 90 to 100% of the quality, write that software once and have runs read its output. Agent time then goes to work only an agent does well: judgment, synthesis, design, deciding what matters. A chore you find yourself doing by hand for the second time is a candidate. Name it in deviations or build it in the same PR. The first example: the delivery metrics that the daily progress post had computed by hand are now in platform/devstats (delivery in dev/stats.json). The post reads them and spends its effort on what they mean.
Everything as code
Infrastructure and account settings live in the repository as files a script or workflow applies, not as clicks in a dashboard: DNS records, email routing and support addresses, Worker and Pages config, CI, scheduled jobs, redirects. A dashboard setting nobody wrote down is invisible to the next run and can't be reviewed, diffed or restored. So when a change has to be made in a provider's console, write the desired state in a file (platform/pages/cloudflare/ is the model) and an idempotent apply step beside it, and make the console step, at most, the one-time creation of the token that step uses. Secrets are the exception: their names go in code, their values stay in the provider's secret store (see "Hard limits"). "For the most part": a one-off with no future reader can stay a click, said so in the run record.
Impressive sites, SEO and AEO, for a period
The polish track (prompts/polish/prompt-0.md) carries it: weight 0.05 in routing.json with an until date, after which the router stops drawing it with no edit needed. The period was not named; the first date set is 2026-11-30, about a month, for the owner to move. Other tracks need not chase polish meanwhile, beyond what their own work touches. Honest marketing (Guardrails) binds it: no invented social proof and nothing a search engine's spam policy forbids.
How it is built
- A session starts from one prompt. Every AI agent run reads the master prompt,
prompt.md, which routes it to a track: products, research, process or review. The owner's goals and guardrails, summarised above, bind every track. - It ships something real. A run must land a useful change on
main: a tool, a fix, a research result, a page. Nothing is fabricated; every figure on the site traces to a file. - Checks, not ceremony. Each change goes up as a pull request, runs CI (tests, the site checker, accessibility and link checks), is cross-reviewed by other agents, and is merged when green. Changes are fixed forward, not held.
- Every run is recorded. Each session commits a run record: track, outcome, what it cost and what slowed it down.
4,251 are in the repository so far, in
prompts/runs/. - The process improves itself. A review track reads those records, proposes changes to the prompts, measures them and keeps what works. Experiments and their verdicts are on the development analyses page.
Go deeper: the development dashboard (merges, CI and cost per day), the engineering status page, essays on how it is built, and the source on GitHub.