Skip to content
Rowin Hernandez, photographed in 2024
that's me — 2024

Product engineer · tech lead

Rowin Hernandez

Senior product engineer and tech lead with a strong bias toward shipping complex product surfaces end-to-end. Co-founder of Kalebtec.

Venezuela → Vigo, Galicia. Building for the web since 2010, coding professionally since 2015, working remotely since 2016. TypeScript & Node across React and Vue.

cyclist*, proud dad, and staff to Mila the cat.

Notes that outgrew the margin and became entries.

the journal
4 published · 2023 – 2024

On the desk

— drafts in progress
  • Re-architecting a live platform without taking it offlineFanFest
  • Kicking off a replatform with a deliberately bad planLeadership
  • Deterministic replay for AI agentsAgents
  • MCP-native browser control: typed, capability-gated tool contractsbrowxai

Selected work

full experience →
  • KalebtecProduct Engineering Studio · now
    Co-founded a two-person senior studio. Current focus: AI agent infrastructure, including browxai — an MCP-native, model-agnostic browser-control server for AI agents — and a Rust toolchain for machine-addressable agent context.
  • FanfestLive Fan-Engagement Platform
    Planned and architected v3 for clubs like PSG, Manchester City, the 49ers and AC Milan; led a team of six and designed the technical hiring process. Built the live-broadcast pipeline (MediaLive HLS/LL-HLS → MediaPackage + CloudFront, Chime) serving tens of thousands of fans per live event.
  • WSC SportsAI Sports-Video Platform
    Owned the AI Voiceover domain of Clipro (trusted by 550+ rights holders incl. the NBA, NHL, LaLiga, DAZN); re-architected it around an async, job-based model with real-time completion and in-flight recovery.
  • Voxel3D Dental Imaging
    Browser-based 3D frontend for medical volumes, sliced meshes and implants (Vue, Three.js, WebGL2, Rust/WASM) — plus the automated visual-regression infrastructure.
  • SabantoAutonomous-Agriculture Mission Control
    Geospatial frontend for planning and monitoring autonomous tractor missions in real time — a reusable deck.gl / Mapbox layer system over Turf.js / GeoJSON workflows.
  • LimbicMental-Health Access Platform
    Senior full-stack on an AI chatbot shortening the path to care — “time-travel” answer editing with safe rollback, and queued, retrying notifications so urgent cases always reach care.

Worked problem — testing a 3D medical viewer

On Voxel — a browser-based 3D dental viewer — a wrong pixel is a clinical risk. Every branch runs Puppeteer render tests and pixel-diffs them against cloud baselines. The CI I built treats a diff as a question for a human, not an automatic fail — and lets the newest push preempt a stale run.

render-tests workflowvoxel · 2021
Voxel render-tests workflow — the CI pipeline that runs Puppeteer render tests and pixel-diffs them against cloud baselinesyesnoyesnoyesnoyesnonoyespush / manualgit webhookpush eventrender-tests APIentry pointbranch alreadyrunning?stop stale runnewest commit winsstart runcheckout branch + commitnotify: run startednotifier · Lambdarun testerrors?notify: errordiffs?notify: successnotify: diffhuman reviews the pixelsmore tests?halt event?notify: run finishednotifier · Lambdadonenewest push preempts therunning branch — stale resultsare worse than slow ones.halt is checked betweentests — never mid-test.a diff isn't a failure —a human judges the pixels.

Stack: AVA + Puppeteer, pixelmatch against cloud baselines. The hard part wasn't the diffing — it was the run lifecycle: preemption, a halt check between tests, and a notifier keeping humans in the loop.

How this site is built

React Router v7 SSR on a custom Express server. The journal is pre-built, not compiled per request — so a page view is a file read, not a compile.

how this site is builtrowinbot.com
How this site is built — the build-time MDX content pipelineread, not builtside outputsMDX SOURCEjournal + pagescontent/*.mdxCONTENT BUILDERmdx-bundlerruns on content:watchbuild step — not runtimeimage blurdata-URLsSatori OG imagesper entryJSONcontent/build/entries + indexEXPRESS + REACT ROUTER v7SSR · reads JSON at request timeFly.io (mad)BROWSERpage viewbuild-time, not per-request —a page view is a file read,not a compile.blur + OG made once,here at build.

Open source spin-off: @rowinbot/rollup-image-blur, the Vite plugin that generates those blur placeholders.

Shipping it for real

margin note

Have a product to build or scale? I take client work through my studio, Kalebtec — my engineering, plus a studio’s operations and continuity.

→ kalebtec.com

Those diagrams are how this site works — yours would look nothing like them. What carries over is the approach: senior engineering from day one, with a studio behind it.