yk.camelcase.work

Recent Work

Recent products, built end to end. Each entry names the engineering decision that shaped it, not the feature list.

Every project below started from a real problem. From there the role is the same: product concept, system architecture, implementation, infrastructure, deployment and continuous delivery - each product keeps evolving well past its first release.

Plaud - Private AI knowledge platform

Documents and media of any kind - PDFs, video, audio, images and more - become searchable, summarized and answerable, over inference that never leaves my own infrastructure.

Problem

Useful knowledge piles up in formats nobody can search: hours of recorded calls and lectures, scanned PDFs, video, photos on a phone. Cloud assistants can summarise it and answer questions over it, but only after every file is uploaded to someone else's servers - which rules them out for private notes, client material or anything under NDA.

RAGLocal inferenceMultimodal ingestionDevice syncDurable processing queueMulti-user isolation

Architecture

  • One interface for every model. Generation, embeddings, transcription and vision all sit behind a single provider-agnostic contract. Which engine answers, and where it runs, is a deployment decision rather than a code dependency.
  • Any device is an ingest channel. A device connects with its own rotatable credential and sees a virtual namespace containing nothing but its own files. Transport is a pluggable channel, not the architecture: onboarding a phone is a row in a table, with nothing provisioned on the host.
  • Nothing is acknowledged until it's durable. A backup client marks a photo as synced when the transfer closes, so the close succeeds only after the bytes and the record are committed. Duplicates are caught by content, not by trusting the client's memory of what it already sent.
  • Processing is a queue, not a request. Atomic claim with a lease: workers scale out, a crash mid-file is recoverable, and a reconciler repairs what a crash left behind. Heavy media runs out-of-band and calls back, so the API never blocks on transcription.
  • Retrieval is a contract, not a top-k call. Chunks below a relevance score never reach the model - a weak question returns nothing instead of a confident answer built from noise. Text and visual similarity are scored on separate scales; one shared cutoff across two embedding spaces is a bug, not a simplification.
  • Built to survive bad input. A multi-stage extraction chain falling back to OCR, and unsupported formats parked in an explicit state instead of failing the batch.
  • Structure is suggested, never imposed. Related records are detected and offered as a series; a person confirms. Auto-tagging reuses the vocabulary already in use before inventing words, and manual edits survive reprocessing.

Editron

An API-first text transformation service. Its own web editor is a first-party client of the same public API and is forbidden from bypassing it, which is what keeps the integration surface honest; the processing engine is swappable behind one internal contract, with tenancy, API keys, quotas and usage accounting as first-class concerns, plus a published TypeScript SDK.

Lernklang

A gated listening platform for language learning with a school-facing analytics dashboard. One image, three roles: scheduled work runs as its own container, so restarting or scaling the web app never skips or double-runs a job - and configuration is validated at startup, the process refusing to boot on an invalid variable rather than failing quietly in production.

Herald

Topic-driven news collection, processing and delivery. Deduplication is enforced at delivery, keyed per channel by content hash with URL as fallback over a rolling window, so syndicated and live-updated articles are never sent twice; each article yields three independently produced formats, every one stamped with the exact pipeline version that made it, for reproducibility and cost accounting.

Smaller products and focused experiments are part of the same practice: they let an idea, an interaction pattern or a new workflow be validated quickly, before a larger system is committed to.