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.

Soulve - Multilingual journaling and reflection backend

Soulve is a journaling system that answers each entry with the next question and builds a personal portrait out of behaviour rather than questionnaire answers. I designed it around one transactional store, a safety path that runs before any reply is written, and voice input whose transcript is trusted only once its author confirms it. The ethical rules are code constants, not settings.

Problem

Understanding yourself is hard from the inside: the same reactions, choices and patterns repeat at work and in relationships, and they are easiest to see only in hindsight. Writing things down helps, but a journal never answers back - it does not ask the next question, notice what keeps coming up, or remember what you wrote three months ago.

Semantic recallPostgreSQL with pgvectorStreamed repliesFastAPI, server-sent eventsDeferred analysisCelery workers, Redis working memoryMultilingual emotion analysiszero-shot transformer plus lexiconsProsodic voice descriptorsspeech activity detection, eGeMAPSAdapter-based style tuningLoRA, preference optimization

Architecture

  • Single store over specialized services. Vectors, documents and relational data live in one transactional database, so an entry and the portrait it updates commit together. A dedicated vector service would have split that write across systems sharing no transaction.
  • Risk screening precedes the reply. A deterministic layer runs before anything is written back and can end the turn alone; costlier checks escalate only if it stays silent. At the highest risk level the dialogue stops rather than continuing.
  • Nothing analytical blocks the reply. Emotion analysis, embeddings and portrait writes all run after the stream closes, so latency tracks the reply alone. The portrait grows incrementally, with a periodic full rebuild as reconciliation against drifted counters.
  • Audio never overrides text valence. Prosody corrects sentiment only downward and by a bounded amount, flagging sarcasm or suppression instead of voting. Arousal and dominance invert the roles, and each fused dimension carries its own provenance.
  • Voice entries need explicit confirmation. An upload becomes an invisible draft: transcribed, yet absent from the journal and never analysed until confirmed. The cost is a second state machine plus a cleanup task for abandoned drafts.

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.