Lab

Working proof of product judgment, architecture, and delivery speed.

This is the front door for what I am exploring now: faster product loops, AI-assisted delivery, and how senior engineering judgment turns ambitious ideas into production-grade systems a team can understand, operate, and extend.

Current thesis Ambitious software can move faster.

When implementation and coordination costs drop, the standard for what one strong team can ship goes up.

The lab exists to make the claim inspectable.

Working Surface

Current signals

Build

Production software at AI-accelerated speed

I am interested in serious product systems: focused enough to solve the real workflow, durable enough to meet enterprise expectations.

Systems

Backend, gateway, client, and tests moving together

The best AI-assisted development loops happen when the architecture lets you reason across boundaries instead of tossing work between isolated parts.

Judgment

Knowing what not to build

Faster implementation raises the value of taste, restraint, production awareness, and the ability to spot bad ideas before they become durable code.

Case File

Briefing: the operator and the household headend.

Built together over roughly 30 days, my home lab became a household media platform: Rails backend, device gateway, Android client, device-based authorization, registration, admin controls, synchronization, observability, and the connective tissue that lets the operator manage the whole thing from the headend.

The signal is not the home media domain. The signal is cross-layer product delivery: clear boundaries, real users, device trust, operational visibility, and an experience simple enough that the complexity disappears.

Boundary Diagram

Homelab Media Server

A private, living-room TV system: pick something to watch, prove the screen is allowed, then stream it through a controlled path I can operate from one headend.

Edge Media Control
Artifact 01 / Edge TLS front door One public entrance for apps, screens, realtime updates, and protected assets.
Artifact 02 / Edge Living-room app The television interface a person actually holds, browses, and watches.
Artifact 03 / Edge Screen identity Every playback request starts by proving which device is asking.
Artifact 04 / Edge Stream gate Short-lived signed passes keep media URLs useful without making them open.
Artifact 05 / Media Segment shelf Finished streams are served as small pieces the TV can request smoothly.
Artifact 06 / Media Legit inputs HDHomeRun plus public streams like QVC and NHK World News.
Artifact 07 / Media Packaging bench Raw media is inspected, shaped, and made ready for reliable playback.
Artifact 08 / Media Media root The library stays on disk; the product stores what it needs to find it.
Artifact 09 / Control App release lane New TV builds become installable artifacts with versioned delivery.
Artifact 10 / Control Product memory Accounts, devices, catalog entries, sessions, and watch state live here.
Artifact 11 / Control Back room Slow work runs offstage: imports, packaging, source sync, and inspection.
Artifact 12 / Control Live wire Screens check in, accept commands, and stay visible to the operator.
Artifact 13 / Control Headend The control room for policies, device state, imports, and interventions.
Artifact 14 / Edge Live route switch Channel-style traffic is shaped at the edge before it reaches the house.
Artifact 15 / Control Rails origin The application brain: catalog, devices, portal, sessions, and decisions.
Artifact 16 / Control Portal surface A browser cockpit for household operations, not a pile of scripts.

What it does

It turns a private media library into a channel-grade TV experience with identity, control, and observability built in.

01 Choose The TV gets a polished catalog and a familiar lean-back way to browse what is available.
02 Authorize The server decides whether this screen, this session, and this stream belong together.
03 Play Edge services deliver the stream while the operator can see, guide, and recover the system.
Trust boundary Bearer device credentials and signed edge JWTs are separate credentials with different blast radii.
Data boundary PostgreSQL owns product truth; the filesystem owns media bytes and generated HLS.
Operator boundary Headend actions create commands, policies, imports, packaging jobs, and visible device state.
Runtime boundary Capistrano/systemd runs the Rails origin; Android releases are built and published as separate artifacts.
30 days from idea to daily use

Case summary: one coherent household platform.

From the outside, it looks like a home lab. Inside the file, it is a working product surface across a Rails backend, device gateway, Android client, device enrollment, household access policy, administration, sync, and tests. The operator gets the simple version because the system did the complicated version first.

Exhibit A We could reason across the full path instead of treating each component as a handoff.
Case note

The useful part was seeing backend contracts, gateway behavior, Android expectations, and tests as one problem. When the whole room is in view, fewer mysteries survive the first pass.

Exhibit B Changes moved quickly because the contract between layers stayed visible.
Case note

Short loops let bad assumptions show up while the design was still fresh enough to correct. That is cheaper than discovering them after everyone has developed opinions.

Exhibit C The system crossed from project to daily-use software in roughly a month.
Case note

The handoff point was quiet: one day the prototype became dependable daily-use software, with fewer manual checks and clearer operating signals.

01

A household device gets the app.

Any compatible household device can become part of the system through a normal app install. No hand-written setup notes, no per-device ritual, no guessing which settings matter.

Case note

The device should present itself to the system, receive what it needs, and become useful without making the operator become a sysadmin. The best clue that it worked is that nobody has to explain it twice.

02

The headend enrolls it.

Registration, assignment, status, device authorization, access policy, and recovery are treated like fleet management. The device is not special; it is another managed endpoint in the house.

Case note

That means visibility, repeatability, known state, and household rules assigned by the headend instead of configured by hand on each device. The operator changes the policy once; the fleet gets the message.

03

The right library surface appears.

Once a device is enrolled, the personal media library and household playback controls become available through the same consistent, policy-aware interface.

Case note

The useful thing is walking to another screen in the house and having the system already know what that device and person should be allowed to do. The hard part is policy, state, and repeatability handled consistently.

Device posture

Registration, status, assignments, and drift are visible without making the operator inspect every layer.

Case note

The operator sees posture in room language first, with deeper technical state available when it matters. The interface leads with decisions, then exposes detail on demand.

Cross-layer contracts

Backend responses, gateway behavior, mobile expectations, and tests stay aligned as the system changes.

Case note

This is where AI assistance paid off: coordinated changes could be made and tested across the whole boundary. Fewer artificial handoffs, more verified behavior.

Device authorization

Access is mediated through enrolled devices and headend policy instead of loose per-screen configuration.

Case note

A device can be trusted for a role, limited to a boundary, reassigned, or recovered centrally. Trust becomes an explicit operating decision.

Operator signal

The interface points attention toward what is live, what changed, and what needs a human decision.

Case note

The goal is less dashboard noise and more useful signal at the moment the operator needs it. If everything is urgent, the interface has resigned from its job.

The operator controls the room from the headend.

The useful version is not turning every screen in the house loose. Authorization is device based, and the headend owns the rules: which devices are enrolled, what household programming they can access, what adults control, and where kid-safe boundaries belong. The operator gets central control because local improvisation is how small problems become family tech support.

Device Install the Android app and the device can request enrollment.
Policy Programming access follows device policy instead of local endpoint setup.
Boundaries Children get the right experience without inheriting the whole library surface.

The operator still has to make the call.

The system did not design itself. The important work was deciding what belonged where, which guarantees mattered, how compatibility would survive change, and what features would add burden instead of value. Put the same delivery model in a restricted environment and the platform inherits the sensitivity of the room, which is exactly why device authorization, headend policy, and dependable auditability matter. The fastest way to build the wrong thing is still fast.

  • Keep existing behavior dependable while adding new capability.
  • Prefer visible contracts over clever one-off shortcuts.
  • Build the smallest useful operating model, then iterate from reality.

Case Notes

Rails backend
Device gateway
Android client
Device auth
Admin tooling
Sync + tests

The operator sees a command center, not plumbing.

The room has household playback services, devices, registrations, authorization state, assignments, access rules, sync behavior, and exceptions. The software makes the next right action obvious without hiding the reality underneath. Calm is a feature.

Operator clarity

The system stays useful because every layer agrees.

Rails owns the product brain, the gateway keeps device-side reality moving, the Android client gives each screen a zero-config interface, and tests protect the contracts between them. That is how a household playback platform becomes something dependable instead of another system trapped in maintainer folklore.

Rails
Gateway
Android
Operator

The hard work is deciding what deserves to exist.

AI made coordinated changes cheaper, but the architecture still needed boundaries, trust decisions, compatibility, recovery paths, and restraint. We were not just adding features; we were shaping an operating model.

  • Keep existing deployments working.
  • Make failure states visible.
  • Avoid clever features that increase operator burden.

Operator Room

What the operator needs when the room is live.

The operator is not asking for a technology tour. They are trying to understand what is live, what is drifting, what needs attention, and whether the system can be trusted while the room keeps moving. That is the bar the home lab was built against.

Live device posture, playback status, enrollment state, device authorization, synchronization health, pending work, and exceptions surfaced in language that maps to the room instead of the database.

The stressful moments are edge cases: partially updated devices, stale playback or service state, bad assumptions crossing service boundaries, and actions that look safe in one layer but are wrong in another.

The conversation is about guarantees: what each component owns, when state is authoritative, how recovery works, which workflows need human confirmation, where automation should stop, and what else becomes possible once the foundation is stable.

Latest Essay

The Economics of Software Development Just Changed

September 1, 2026

A little over a month ago, I started building something for myself. Not a demo. Not a weekend toy. Not a “look, I called an API” portfolio project. I mean an actual piece of software that I wanted to use. It has a Ruby on Rails backend, device-side gateway...

Read on Medium
Software economics
Coordinated system changes
Senior engineering judgment
Product and leadership feedback loops

Open Questions

The questions I keep coming back to.

Cost

What becomes worth building when a month of work turns into a weekend?

Some software was never impossible. It was just irrational under the old cost structure.

Teams

What does product leadership look like when implementation is no longer the slowest part?

Process built for scarce engineering capacity can become the thing that slows useful iteration down.

Architecture

Which systems can actually benefit from AI-assisted development?

Fast coordinated change needs good boundaries, visible contracts, useful tests, and enough context for agents to reason about the whole path.