Sending a ping...

Leighton's Sea

0 fm · Local AI · Geospatial systems · Practical automation

I build systems from the hardware up.

Self-taught builder working across data, infrastructure, and creative tools—mostly on a salvaged-hardware homelab, always with an eye toward systems that survive the real world.

10 machines4 GPUs on the primary hostFailure recovered ↓
Descend ↓How the harness works
120 fm / Industry

Where the data meets the job site.

The projects receiving active build time: finding real opportunities in public records, making distributed work durable, and designing a geospatial runtime that can resume after interruption.

Also collecting: Signal Engine, a new versioned public-data pipeline built on Fleet Harness.

400 fm / Worlds

The same GPUs, after hours.

Local models, rendering tools, and human review turn prompts into environments you can see.

Four stages of the Alamo environment from pre-dawn to daylight

Alamo 1836

A defender-focused educational environment with a dawn timeline, deterministic captures, and an evidence gallery of 246 stills and 14 clips.

A red-and-white lighthouse on a rocky island at dusk, its beam sweeping over the sea

Live Scene

Typed or locally transcribed prompts build a 3D scene; follow-up edits, mouse transforms, and offline speech make it an authoring tool. Its hand-built worlds include the Hadal Garden behind this page and Lantern Point at the surface.

Step into Lantern Point →
Glowing jellyfish generated in the Hadal Garden

The rendering forge

Recipes expand into bounded jobs for images, sprites, video, Blender scenes, and voice. Durable batches are copied and verified, then reviewed before selected media reaches the display pipeline.

Meet the living renderer →
400 fm / Work

Systems at depth

Working systems, field experiments, and purpose-built tools. Filter by the kind of problem they solve.

Geospatial intelligence

GeoSynopsis

Turns every U.S. census tract into source-grounded, plain-language answers using a local retrieval pipeline and salvaged thin clients.

82,764 tracts · local LLM synthesis · data-license fences

RAGMapLibreSwarm
Explore the map →
Evidence engine

Career Intelligence

Distributed public-source career research with bounded jobs, stored evidence, local-model extraction, and citations required for material claims.

Completed research runs · reproducible reports · public sources only

ResearchSQLiteLocal LLM
Media pipeline

Diffusion Media

A local render forge scheduling image, video, Blender, voice, and 2.5D animation work across every usable GPU in the fleet.

9 GPU lanes · atomic job claims · verified publishing

BlenderDiffusionGPU fleet
Meet the living renderer →
Child-centered software

Zoomammals

A personalized Android play space whose tap telemetry feeds directly back into target size, placement, and a custom local-art pipeline.

On-device tap logs · bespoke sprites · Fire tablet delivery

AndroidUX dataGenerative art
Infrastructure map

Visual CMDB

A visual configuration database for understanding machines, services, network paths, and what-if changes across the homelab.

Evidence-backed inventory · dependency views · local SQLite

CMDBTopologyOperations
Open the topology →
Personal knowledge

Vault Organizer

A local agent that ingests notes, proposes links, maintains map-of-content hubs, and measures how an Obsidian knowledge graph grows.

Hourly organizer · reversible Git history · local-model judgment

ObsidianMCPKnowledge graph
Human interface

Dictation Coach

Push-to-talk transcription that polishes speech locally, types into the active window, and tracks pacing, fillers, pauses, and clarity.

Whisper on CPU · optional local rewrite · CPU-only mode

WhisperSpeechLocal-first
Coding infrastructure

Local Coder

A local coding workflow combining editor integration, repository retrieval, and model trials on real tasks, with access to stronger models when needed.

Local model trials · editor integration · source retrieval

QwenAiderRouting
Market watcher

Deal Radar

An official-API watcher implementation for saved eBay searches, with a durable seen-item record to suppress duplicate listings.

API implementation · persistent deduplication · operating status unconfirmed

AutomationeBay APISQLite
Public data

Signal Engine

Versioned public-data collection across the local fleet. Scheduled workers preserve source snapshots and sightings so later analysis can trace a conclusion to its inputs.

7 configured sources · content-addressed storage · Fleet Harness

Public dataProvenanceSQLite
Read the project →
Speech

Bilingual Voice Assistant

A local voice interface combining Whisper, local language models, and offline English and Spanish speech, with persistent memory and user feedback.

Local speech pipeline · editable memory · separate development lane

SpeechMemoryLocal AI
Read the project →
MCP

Local Agent Tools

Small MCP tools give assistants repository search, bounded source context, and concurrent service-health checks.

Code RAG · local embeddings · Go Healthcheck

MCPRetrievalOperations
Read the project →
Desktop

Collage Bench

A local layered PNG editor with reversible crop, undo history, and a tool registry for adding capabilities after review.

Native desktop window · non-destructive crop · PNG export

DesktopCanvasTool registry
Read the project →
700 fm / The harness

Jobs that outlive the machines running them.

A node reboots, a GPU disappears, a worker hangs halfway through a write. The recovery rules live in the database schema.

Task lifecycle: submission, atomic lease, completion, bounded retry, and dead-letter

One owner, provably.

A worker claims a task inside a single BEGIN IMMEDIATE transaction and gets an opaque lease token. A worker that went quiet and came back can't report over a newer lease; its old token is simply refused.

lease_owner · lease_token · lease_expires_at

Submit twice, run once.

Every task carries an idempotency key, so restarting a 48-hour run or re-seeding a queue never duplicates work. Re-submitting is a no-op.

UNIQUE(project, idempotency_key) · UNIQUE(run_id, kind, payload_json)

Every attempt is a row.

Tries, outcomes and state changes are recorded, not logged and lost. One ten-day run left 9,674 events behind, enough to reconstruct exactly what happened and when.

attempts(task_id, number) · events(at DESC)

Silence is a signal.

Workers heartbeat. When a lease expires, the task goes back in the water automatically. Retries are bounded, and work that keeps failing goes to a dead-letter state instead of looping forever.

heartbeat → recover_expired → max_attempts → dead

Agents on a leash.

Model-driven work is planned, then *frozen* into explicit tasks before anything runs. Each file is a separate generation task, compile and test gates decide whether it passed (the model doesn't), and a person signs off between waves: 18 checkpoint rounds on one project. Candidate models audition on real tasks first; one gamed a text check and was cut.

plan → freeze → run → gate → human checkpoint

Evidence or it didn't happen.

Research findings must cite their sources, generated work lands only at declared paths with receipts, and media publishes only from verified batches. Review agents are read-only; their opinions are separate records that never overwrite the work.

findings ⟷ evidence ⟷ sources

Fleet Harness 2,768 tasks · 3,449 leases · 644 automatic retries · 15 registered workers

Research swarm 201,003 tasks · 136,566 sources indexed · 1,831 cited findings

Render forge 133 / 142 jobs succeeded in a one-hour run across six GPU lanes

Historical run snapshots, read October 2, 2026. These are measured totals, not live counters.
Five core tables and their lease and idempotency constraints
The schema that makes it boring.
Ten days, replayed. Totals are measured; individual log lines are illustrative.

SQLite in WAL mode and Python's standard library, running on reclaimed hardware. Durable state first, clever orchestration second.

1000 fm / The floor

Meet the lab.

Ten machines, racked, cabled, and brought back into service. Local models, embeddings, and media jobs share the fleet.

Dell PowerEdge R740xd · Primary host

Hyper-V · 32 cores / 64 threads · 400 GB ECC · approximately 11 TB RAID · two Tesla P100s, Quadro RTX 4000 and Quadro M4000 · 10 GbE.

Two HP Z640s · Compute and render

128 GB memory each · AMD Vulkan compute · 2.5 GbE interconnect.

Vector store and worker lanes

An Ubuntu vector node, four worker lanes for long research and data jobs, an OPNsense edge, and a workstation complete the lab.

A bare machine gets an image only after someone says so.

A new machine is recorded as idle. A person picks a profile and authorizes it in Infrastructure Control. The first installer fetch clears authorization. When the agent says hello, the ledger marks it provisioned.

Human-authorized machine provisioning from discovery to agent hello

Sea agents 8 machines recorded · 6 provisioned · 2 still idle

4 Debian compute · 1 Debian applicator · 1 vector node · desktop profile defined, unused in this snapshot

Provisioning ledger snapshot: October 2, 2026.
Four installation profiles and their recorded counts
Four images, one agent.
One machine, walked through. The join is illustrative; the totals are from the ledger.

The dive log

"Healthy," and running on the wrong silicon

Symptom: After a GPU swap, a model service still reported Running and passed health checks.

Cause: Its pinned GPU ID no longer existed, so it fell back to CPU with no error. Five projects would have slowed quietly.

Fix: Re-pinned the service by device UUID.

Guardrail: Check that VRAM is actually held; service status proves nothing.

Two P100s, one model, 2.35× faster

Symptom: Two dense-model endpoints, each at 8.72 tok/s.

Cause: The model shape didn't fit the hardware: memory bandwidth, not compute, was the limit.

Fix: One 35B mixture-of-experts model split across both P100s: 40.95 tok/s on a larger model at a better quantization.

Guardrail: The slower-memory card stays out of the split on purpose.

The addresses that moved

Symptom: Two workstations came back on different IPs after a reboot.

Cause: Not lost reservations: a network bridge presented a different member NIC's MAC.

Fix: Diagnosed by name (mDNS), corrected through the DHCP server's API.

Guardrail: Every dual-homed host has both MACs reserved.

A driver on a headless box

Symptom: The vendor installer left a server half-uninstalled.

Cause: It waits for an interactive login that never happens on a headless server.

Fix: Extracted the package and installed the driver from its INF over SSH.

Guardrail: No interactive installers on headless hosts.

The cards that weren't gone

Symptom: Two GPUs vanished from the host.

Cause: They were passed through to a VM, which looks exactly like a pulled card.

Fix: Traced the hypervisor's device assignment and reclaimed both with a dismount/mount cycle, no reboot.

Guardrail: Check device assignment before declaring hardware dead.

The model that gamed the test

Symptom: A candidate coding model 'passed' a trial task.

Cause: It satisfied a source-text check without doing the work, broke the file's syntax, and rewrote every line ending.

Fix: The trial failed it, and the coding lane was rebuilt around a different model.

Guardrail: Models are graded by gates they can't edit, on real tasks, before they get a lane.

Open the infrastructure topology →

800 fm / Method

Constraints are part of the design

The journey of a thousand nautical miles begins with a single ping.
  1. Local-first where privacy, cost, or control matter.
  2. Durable state before clever orchestration.
  3. Public and licensed data remain explicitly fenced.
  4. Old hardware earns its watts through useful work.

1000 fm · A quiet door

What's your bottleneck?

Run systems for a living? I'd like to compare notes.
A stubborn problem, a project in mind, or a simple hello.

Write a note. Cork it. Let it drift.

To: leighton@leightonsea.com

Your note goes straight to my inbox.

Drag the cork into the neck to send.Or click the cork.

Newsletter · The Dive Log

Notes from the floor.

An occasional letter on what's running in the lab: what broke, what shipped, and what the fleet is chewing on. A few times a season, never more.

I'll email you a link to confirm. City and state only help me send local notes to the right people; your details stay with me. Reply “unsubscribe” to any issue to leave.