124
Vetted systems I have actually shipped with, catalogued in the registry.
Eduardo Inerarte
Cuban in Copenhagen. Eight years writing code in Cuba, eleven in Denmark, and the same job in both places: make it load fast and keep it from breaking. Everything below is live. Touch it.
Vetted systems I have actually shipped with, catalogued in the registry.
Average Core Web Vitals score across the systems still running.
People using the consumer networks and SaaS products behind these numbers.
Serverless architecture, no SLA breaches so far.
Legacy codebases pulled apart into something a team can move in.
7 products of my own. For each: the problem it started from, the architecture I chose, and the path I turned down to get there.
22 in total. The 7 at the top are my own — open a row to read the case study.

Every design read back, every build
Fabrication is blocked in code rather than asked for in a prompt: numbers, names and acronyms must be grounded in the source document, and refused claims come back marked as refused.
CV tools are either pretty and unparseable or parseable and ugly. Both sell the same promise — "ATS-friendly" — and neither can show you what an automated screen actually read back.
A PDF that looks correct proves nothing: the text layer can arrive out of reading order, or be an image with no text at all. And the render path is WASM, which a green build silently drops — the bundler cannot see a file read at runtime, so dev and CI both pass while production has no renderer.
Every design renders in a test that reads the PDF back with an independent parser and asserts each critical field survived in reading order, so the build fails rather than the applicant. A second test fails if any template has no round-trip test, and health checks assert the WASM binary and fonts are present instead of merely that the server is up.
In beta at €12/month with checkout still closed. 28 structures across 17 themes, 60 bundled font families, five input formats including scans, and a public API of eight endpoints with its own OpenAPI reference.
An independent parser as the judge, and a per-structure honesty rating: one of the 28 is labelled design-first rather than verified, because it is.
Right-to-left PDF support. The glyphs and layout come out right and the text layer comes back reversed — a document that looks perfect and silently fails the one thing this product sells. The endpoint answers 422 and names the formats that do work.

A server that cannot read a workout
17 collections behind an opt-in sync server, and 2,076 movements bundled for offline use — held in separate files by licence, so share-alike attribution never leaks into a generated programme.
A training log is health data, and the box where you describe your situation is where somebody writes about an injury. Every tracker asks for an account first and holds that in plain text on its own server.
Encrypting on the device is the easy half. One encrypted blob per account is fine on one device and destroys data on two: train on the phone, open the laptop holding a stale copy, and the session is gone. Syncing without ever letting the server read a workout means the merge has to work on data it cannot see.
Rows, not blobs: one workout is one record with its own id and timestamp, and the server moves envelopes whose metadata is plaintext for merging while the body stays the same AES-GCM ciphertext that sits on the device. A random data key wrapped by the passphrase-derived key means a password change re-wraps one blob instead of re-encrypting every row. Sync is opt-in, and the active workout never leaves the device.
In production as an installable offline PWA, with web push and a paid panel gyms use to publish announcements, events, menus and programmes to their members. Pricing is published at €200 to €1,000 a month and invoiced by hand.
Deterministic arithmetic owns the timeline and the model only picks movements, so the plan can refuse a date instead of flattering one. Ask for one month to lose 60 kg and it still says twenty.
A payment processor. A subscription state machine with no payments behind it is a mechanism pretending to be a fact, so the gym plan is a field a human sets and the invoice is a human writing one.

927 plans, zero servers
An 813 KB index searched in the browser with Fuse.js, and each plan’s SPEC, PRODUCT, PLAN, DESIGN and TASKS loaded only on open.
A corpus of 927 product plans, five documents each, sitting in folders. Deciding what to build next meant opening directories one at a time, and a corpus you cannot search is a corpus you rewrite by accident.
The facets a reader wants are buried in prose written by successive generations of tooling: the country is a loose line, what someone will pay is free text, the stack is a bold label halfway down a plan. Faceted search over that means parsing prose reliably — and the whole thing had to keep running on a static file server.
The index is built once at build time into JSON, and search runs in the browser over it. Each plan’s five documents are their own file, fetched only when a plan is opened, so the first paint carries the index rather than the corpus.
Live and free with no account. 927 plans faceted by 58 categories, 318 tags, 1,821 technologies and 45 countries, ranked on three axes, with every plan shareable as its own URL.
Build-time indexing and client-side search, so hosting is a static file server and there is nothing to keep running.
A search backend. It would have handled a corpus ten times the size, and added a service to operate for a reader count that will never need one.

13 sources, one ranked list
GitHub, Reddit, Hacker News, DEV.to, Lobsters, Stack Overflow, npm, Hugging Face, GitLab, Codeberg, Hashnode and SourceHut, deduplicated and scored by recency.
Hiring and open-source sourcing both run on GitHub stars, which reward what was popular years ago rather than who is shipping this month.
Thirteen platforms expose activity in thirteen shapes, the same person appears under different handles on each, and every signal ages at a different rate. Ranking them together means reconciling identity and freshness before a single result can be trusted.
I modelled recency as a half-life decay instead of a raw count, so a commit from last week outranks a three-year-old star pile, and put deduplication ahead of scoring so one person is one result. Contact stays manual: the product surfaces people, it never messages them.
In public beta with a free tier of 3 saved searches and 50 saved builders. Keyword alerts by email or RSS, private notes per profile, and CSV/JSON export, so a shortlist leaves the product in whatever tool the team already uses.
Decay-weighted scoring over lifetime totals, and deduplication before ranking, so freshness and identity are settled before anything is shown.
Automated outreach. It would have been the obvious growth lever and would have turned a discovery tool into another cold-email machine.

25,000 listings on one map
Properties, vehicles, services and experiences across eight neighbourhoods, clustered so a district is legible before you filter anything.
Finding anything in Copenhagen means four different sites: Boliga for flats, DBA for cars, Facebook groups for services, Airbnb for the rest. Each one is a feed, and a feed cannot tell you what is ten minutes from your door.
Properties, vehicles, services and experiences have almost nothing in common as data: different prices, different units, different lifespans. Putting all four on a single map means one schema flexible enough to hold them and one interface that does not turn into a filter panel.
I made the map the primary surface rather than a feature of the list, and clustered by neighbourhood so a district reads at a glance before anything is filtered. Curation is deliberate and human, not a scraper firehose.
25,000 listings across four verticals pinned over eight Copenhagen neighbourhoods, each with its own count. Free to browse, no ads, no dark patterns.
Map first, list second, clustered per neighbourhood, so proximity is the primary filter and the rest is optional.
An infinite ranked feed. Higher engagement, but it answers "what is popular" when the question is "what is near me".

~300 skills across 6 AI CLIs
One repository, symlinked into every CLI, with 10 MCP servers as declarative YAML and an installer that is safe to run twice.
Every AI CLI keeps its own config, its own skills folder and its own MCP list. Six of them means six copies of the same setup, drifting apart from the day you install the second one.
A dev environment is not just dotfiles: it is CLIs, runtimes, language servers, model endpoints and the prompts themselves, spread across macOS, Linux and Windows. Making it reproducible means it has to be safe to run twice on a machine that is already half configured.
I made one git repository the source of truth and symlinked out of it, so a skill is written once and every CLI sees it. MCP servers are declarative YAML rather than six hand-edited JSON files, and the installer is idempotent with a dry-run mode and CI validation on all three platforms. Karpathy's Spec → Verifier → Environment loop is encoded as three verifier gates per task.
A new machine reaches a full working setup with one command: npx @edd_remonts/create-ai-os. Roughly 300 skills, 10 MCP servers, 45 CLI tools, 43 global node packages and 28 python packages, restored the same way every time.
Symlinks from one repository over per-tool copies, so there is exactly one place a skill can be wrong.
A sync daemon watching each tool. Less setup up front, but it turns config drift into a background process nobody can debug.

8 providers behind one config
Anthropic, OpenAI, OpenRouter, MiniMax, Together, Groq, vLLM and Ollama, all the same integration for the component.
shadcn/ui gives you every primitive a chat interface needs and no chat interface. Everyone rebuilds the same streaming panel, and everyone rebuilds it welded to one provider.
Streaming, markdown, code blocks, file upload and virtualised history are each easy alone and awkward together, especially while tokens are still arriving. Doing it once for Anthropic and again for every OpenAI-compatible gateway would have meant maintaining the same panel eight times.
I put the provider behind an adapter so the panel only knows about a stream of tokens, which makes Anthropic, OpenAI and every OpenAI-compatible gateway the same integration. Configuration is deep rather than a prop soup, and the component ships as a package you install instead of a template you fork.
MIT, on npm as @edd_remonts/ai-schadcn-chat. Works with Anthropic, OpenAI, OpenRouter, MiniMax, Together, Groq, vLLM and Ollama through one config object, and drops into an existing shadcn/ui app without a theme fight.
One adapter boundary between the panel and the provider, so adding a gateway is configuration rather than a fork.
A copy-paste template in the shadcn tradition. Easier to publish, impossible to fix once it is in fifty codebases.
Plenty of people write UI code. Mine is a different thing: I learned to make software work when there was nothing to work with, and I have spent eleven years applying that where there is.
Started full stack in Havana, ended up doing frontend architecture in Copenhagen.
In Cuba the weight of a page was not a metric. It was whether it loaded.
Eleven years in Denmark, seven places.
Translating product vision and design system maturity into structured code.
Orchestrating teams and mentorship cultures that scale.
/ TECHNICAL EXPERTISE
Technologies are commodities; architectural alignment and organizational governance are competitive differentiators. Here is how my capabilities are marshaled to deliver verified business speed and performance stability.
/ VALUE PROOFEnables distributed product teams to release features independently without breaking shared core architectures.
/ VALUE PROOFSecures perfect Core Web Vitals and sub-12ms interaction responsiveness for enterprise-scale platforms.
/ VALUE PROOFAccelerates feature-delivery cycles by 30% across 20+ active engineers via active mentorship.
/ VALUE PROOFBridges execution gaps between engineering teams, product managers, and executive stakeholders.
18+ years of building, scaling, and architecting resilient digital products from Havana to Copenhagen.
Design Systems Governance · Monorepos · Decoupled Contracts · API Design
Vite Monorepos · TypeScript · React · Next.js · Design-System Governance · Micro-Frontends
Virtualized DOM · Event-Driven State · Optimistic Caching · Performance SLAs
TanStack Query · Virtualized DOM · Event-Driven Architecture · React · Optimistic Cache Synchronization
Extreme Byte Optimization · Lightweight Parsers · Dial-up DB Sync · Primitives
Vanilla JavaScript Primitives · Extreme Byte Compression · Lightweight Parsers · Relational DBs
What clients say
“Eduardo will be an asset for any company that employs him – in particular tech companies with a multitude of cultures – and he has my highest recommendations.”
Jonas Warrer
Managing DirectorMedia Gaming Innovation Group
Four shapes this work usually takes. Each one is something I have already shipped, with the number it came with.
One deploy, four teams, and every release turns into a negotiation. I put the boundaries where the teams already are, split the frontend into sub-apps that own their own data, and leave the contracts written down. The test is whether a framework upgrade stops being a project.
Not a Lighthouse screenshot. I measure what the page actually costs: bundle, interaction latency, server render. Then I cut the expensive part and report the difference. The one I keep citing: 94% off the initial bundle, LCP down to 1.4s, interactions under twelve milliseconds. Measured before and after, not estimated.
A component library nobody adopts is a second codebase to maintain. I build it against the screens that already exist, migrate the first ones myself, and count adoption instead of components. The last one went out to twenty engineers and took thirty percent off delivery time.
Twenty-five thousand listings that filter without a spinner. Thirteen platforms reconciled into one ranked feed. I build the schema, the server functions and the interface as one piece, because in a product like that the seams are where it gets slow.
Ready to discuss a project, hire a staff engineer, or book technical consulting? Send a message and let's start a conversation.