fetzer@boise: ~/site — go run ./cmd/fetzer

David Fetzer

software engineer · boise, id · remote
role Software Engineer at C1 · Founder at Mapwrightstatus Open to interesting conversationsbuilds map servers · CLI tools · self-hosted platforms · hardware
README
1/1
~/site/README.md main󰴛

David Fetzer

software engineer · boise, id · remote

I build infrastructure — map servers, command-line tools, self-hosted platforms, and the hardware underneath them.

Five independent projects carry this page: a self-hosted map server sold as a Mapbox alternative, a static Go binary for browserless file transfer, a private LLM and RAG platform on Kubernetes, a secure element board for the Raspberry Pi, and a 3D-printing service that prices and fulfils uploaded parts.

locationBoise, ID · remote
roleSoftware Engineer at C1 · Founder at Mapwright
statusOpen to interesting conversations

mapwright

self-hosted map infrastructure · mapwright.io

A self-hosted map server. The full Mapbox stack — tiles, styles, geocoding, routing, static maps — running on your own hardware as a single Docker image with embedded Postgres.

Mapwright speaks Mapbox and MapTiler URL shapes, so existing MapLibre applications migrate by changing a base URL rather than rewriting against a new SDK. It runs air-gapped for on-premise and data-residency requirements.

01 tilesVector and raster tiles. 127 GB for full-planet coverage.
02 stylesVisual style editor with five standard styles.
03 geocodingForward and reverse geocoding with POI search.
04 routingDirections, matrix, isochrone, map-matching, optimization. 93 GB, full planet.
05 static mapsServer-rendered static maps.
06 wmts/wmsWMTS and WMS for standards-based GIS clients.
07 api keysScopes, origin allowlists, metering, and rate limits.
08 adminAdmin console.
09 mcpAn MCP server exposing migration, reference, and live-API tools to coding agents, so an assistant can port an app off Mapbox or call a running instance. Admin operations are deliberately excluded from the tool surface.

3dpass

3d printing as a service · 3dpass.shop

A 3D-printing service. A customer uploads a mesh, the server measures it, prices it, takes payment through Stripe, and tracks the part through printing and shipping.

Next.js and Convex, with a Python bridge on the print-farm LAN: the printers have no public ingress, so the bridge connects outbound, mirrors telemetry, and advances jobs.

pricingServer-authoritative. The browser posts a print configuration and receives totals — never a coefficient, never a rate.
measurementVolume is the billing quantity, so it is recomputed server-side from the stored bytes rather than trusted from the client.
boundariesEvery backend function declares argument and return validators; money and status writes are internal-only, reachable from the signed Stripe webhook.
bridgeShips with a simulator driving the same contract as the printers, so the admin queue and order flow run with no hardware attached.
testingPlaywright end-to-end and unit tests across the money, authorization, and file paths, with enforced coverage thresholds. CI is the only path to production.

transfer-it-cli

single static go binary · MIT

A single static Go binary for MEGA's transfer.it, shipping as both an interactive TUI and a scriptable CLI. Built for machines without a browser — servers, embedded boxes, SSH-only sessions. Zero runtime dependencies.

protocolThe upload path is reverse-engineered from transfer.it's WebSocket protocol.
throughputMulti-pool parallel connections, in-session retry with exponential backoff, and token-bucket bandwidth limiting over a shared HTTP/2 client with TLS session resumption.
memoryTransfers stream, so memory stays bounded by the chunk size — under a megabyte, even on 20+ GiB files.
resumeUploads, downloads, and recursive folder uploads all resume after process restart, tracked by a per-transfer chunk bitmap with per-chunk MAC verification that stays forward-compatible across binary upgrades.
packagingSix cross-compiled targets plus native .deb, .rpm, and .apk packages.
cistaticcheck, govulncheck, and race-detector tests across Linux, macOS, and Windows, alongside a weekly check that hashes upstream bundles and opens an issue when the service changes underneath it.

self-hosted ai platform

a guarded ops agent over private LLM and RAG infrastructure

A multi-node K3s cluster running across Raspberry Pis, with GPU inference offloaded to a virtualized host elsewhere on the same network. Open WebUI, Ollama, a FastAPI retrieval service over a Qdrant vector store, Prometheus and Grafana observability, and automated backup-freshness checks.

ops agentA read-only operations agent answers infrastructure questions from runbooks and from live cluster state, calling tools and parsing their output into typed views rather than pasting raw text back.
safetyEvery request passes a default-deny safety router before any tool or retrieval runs: an LLM intent classifier and a regex gate work independently, and either one flagging write intent stops execution. Writes return a scoped review checklist marked proposed_action_only — the agent drafts, a human applies, and it may never report a change as done.
architectureMixed-architecture throughout. Cluster workloads are arm64 images built and served from a private registry with upstream images pinned by digest, while inference runs on x86 with a passed-through consumer AMD GPU.
inferenceVulkan rules out flash attention and KV-cache quantization, so throughput comes from context and keep-alive tuning instead.
servicesPython and FastAPI services, a Go backend-for-frontend, React and TypeScript console.

secure element HAT

raspberry pi add-on board

A custom PCB designed in KiCad around an ATECC608B-TNGTLS secure element.

interfaceI2C.
keysHardware-backed key storage and TLS provisioning.
integrationDevice tree overlay and EEPROM configuration for Raspberry Pi.

open source

contributions

Contributions to Jellyfin and Websurfx.

C1 — Software Engineer

march 2022 – present · remote

Design, build, and own production software end to end: backend services, web applications, and the infrastructure they run on.

Lead engineer on two internal platforms, owning architecture and delivery across distributed backend services, embedded Linux agents, and operator-facing web interfaces.

languagesGo, TypeScript (Node/Express), React
migrationProduction Django services migrated to Go.
infrastructureAWS (EC2, S3, Lambda) managed as code with Terraform and OpenTofu.
toolingInternal tooling used across engineering teams.
priorUS Army infantry veteran, 2012–2015.

Mapwright — Founder & Engineer

june 2026 – present · remote

Self-hosted map infrastructure: a drop-in Mapbox and MapTiler alternative that teams run on their own hardware.

productThe full map stack — vector and raster tiles, a visual style editor, geocoding, routing, and static maps — as a single Docker image with embedded Postgres.
compatibilityA Mapbox- and MapTiler-compatible API surface, so existing MapLibre applications migrate by changing one URL rather than rewriting against a new SDK.
platformAPI keys with scopes, origin allowlists, metering, and rate limiting, plus an admin console.
deploymentFull-planet coverage, deployable air-gapped for on-premise and data-residency requirements.
agentsAn MCP server gives coding agents migration, reference, and live-API tools, so an assistant can port an application off Mapbox or query a running instance. Key management is left out of the tool surface on purpose.

stack

languages, services, and tools

languagesGo, TypeScript, JavaScript, Python
backendNode.js, Express, Convex, PostgreSQL, PostGIS, REST APIs, WebSockets, Stripe
frontendReact, Next.js, Tailwind
infrastructureAWS, Terraform, OpenTofu, Docker, Kubernetes, Linux
hardwareKiCad, embedded Linux, I2C
aiOllama, Qdrant, RAG retrieval, MCP servers, agent tooling
domainsgeospatial, embedded systems, self-hosted infrastructure
↑/↓ j/k selecth/l ←/→ panetab next tab/ filterg/G first/lastenter open linkbubbletea · lipgloss