Skip to content
Staff software engineer, Berlin

Ramiro Rivera

I build AI-native product software that stays understandable and operable after the demo.

Senior engineer at Miro, where I own the rich-text layer of the multiplayer canvas and shipped streamed AI editing into it. On my own time in 2026 I've built seven projects end to end with fleets of coding agents, spec-first and with an adversarial reviewer on every change.

Selected work

Things I built on my own time this year, mostly with a fleet of coding agents doing the typing.

Each one opens into a case study: why it exists, the decisions and their reasons, an architecture diagram, and what still doesn't work.

ramiro@workbench: ~

➜ ~

localhost:5173/launch

Provisioning

Launch Agent

  1. 1Agent
  2. 2Region
  3. 3Plan
  4. 4Access
  5. 5Secrets
  6. 6Review

Agent

Hermes

Self-improving agent with persistent memory.

OpenClaw

Local-first gateway with channels and ClawHub skills.

01 / 05 · blueprint

One-click hosting for personal AI agents

Agent Haven

Pick an agent, paste a Telegram bot token, and get a running machine you never have to SSH into.

  • A Telegram message woke a scaled-to-zero machine in 1242 ms, and the agent replied in 24.6 s.
  • One provider port behind Fly Machines, Hetzner, local Parallels VMs and a deterministic fake.
  • Provisioning runs on a separate runner, so provider credentials never reach Convex or the browser.
TypeScriptEffectConvexReact 19ViteClerk
Read the case studyMVP, proven live on Fly
foundry.local/projects/warehouse-inventory/builder
FCurrent workspacelive

FOUNDRY

What do you want to build?

Describe your app in a sentence. Foundry spins up a project, plans the work and starts building. You review and ship.

Web appWebsiteData appAutomation

Recent projects

3

Aurora Launch Page

WebsitePrivate

Updated Jul 8 · 16:20

Studio Booking

Web appPrivate

Updated Jul 7 · 10:42

Ops Dashboard

Data appPrivate

Updated Jul 5 · 09:15

01 / 06 · prompt

AI app builder

Foundry

Describe an app, watch an agent build it in a Docker sandbox, and review the preview and diff before anything becomes real.

  • Prompt, plan, approval gate, sandboxed preview, diff accept and a git-backed checkpoint.
  • Failed or rejected generations can't bill: one predicate guards every debit.
  • 1,434 commits and about 352k lines of TypeScript in three months, roughly half of it tests.
TypeScriptEffect@effect/rpcElysiaSQLite + DrizzleReact 19 + Vite
Read the case studyLive-tested against real models
opentiiny · Demo Pocket Lab (USB)
opentiiny
USB ·ConnectingDemo Pocket Lab (USB)
Mock deviceDeterministic test data. No device mutations.

Device overview

Demo Pocket Lab

Demo Pocket Lab · USB connection

Device status

Ready

Memory

10.1 GiB used · 29.8 GiB total

NPU utilization

2 used · 6 available

CPU

Demo processor

Storage

476.8 GiB total

Connection

Transport
…
Wi-Fi
…
Signal
…
Firmware
…

Demo language model

demo-language-model

2 NPU

Read status

Sampled 9:20:38 PM
Running modelspending
NPU allocationpending
Installed modelspending
Model catalogpending
Device informationpending
Network interfacespending
Storagepending
Hardware usagepending

01 / 05 · device comes alive

Linux desktop app for a pocket AI box

open-tiiny

An unofficial Linux app and CLI that drives the Tiiny Pocket Lab over USB, no vendor app needed.

  • Talks to the Pocket Lab directly over USB or LAN, no vendor tooling in the loop.
  • One Effect service graph drives the Electron app, the CLI and a local API.
  • 1,442 test files run against a deterministic mock device.
TypeScriptElectron 44Effect 3.22React 19HeroUI 3Tailwind 4
Read the case studyRuns on Linux
devplane.local/chat

personal cloud / local instance

DevPlane

Chat

loading

Chat state

Ready

The selected instance is connected. Chat composes through its action registry.

Ask for work, or type @ to attach a tool.

Public exposure

  1. requestedagent asked in chat
  2. approvedowner decided
  3. activepublic over HTTPS
  4. revokedowner pulls the URL

Chat uses the selected instance action registry. No fallback provider is assumed.

Ask your instance to begin. Use @ to attach a tool.

Ask your instanceEnter to send · @ to attach a tool
Describe the work to do

01 / 05 · Ready

Self-hosted personal cloud

devplane

One signed install turns a fresh Ubuntu VM into a personal cloud computer whose agent asks before it touches the outside world.

  • Rust node supervises a sandboxed OMP agent with one model egress
  • Approvals bind exact targets and are consumed once
  • Publish a local service over HTTPS through Tailscale Funnel
React 19 + ViteFastify + tRPCEffectRustOMP (Oh My Pi)bubblewrap
Read the case studyRunning, hardening for v1
9:41
Stratadaily practice
Today
Check-in

Got a minute to check in?

A quick reflection with your Guide. About sixty seconds.

Past check-ins

Quick wins

Small actions that move your goals forward.

Workout log
Check-in
Tidy your space

Your six areas

7.9

this week

Rest is your lowest area this week.

Areas
Today
Guide
Goals
Circle

01 / 05 · check-in

AI coaching app · private

Project Kestrel

A mobile coaching app built around six life areas, with an AI coach that proposes changes and waits for your OK.

  • One action registry feeds both the UI buttons and the AI coach's tools.
  • Every action starts locked. The coach asks before it touches your plan.
  • Typed contracts and tracing from the phone down to the database.
ExpoReact NativeTypeScriptEffectPostgreSQLDrizzle
Read the case studyPrivate product
reachy-mini.local · DJ Reachy Remix

DJ Reachy Remix

Music, conversation and motion for your Reachy Mini

Voice transport connectedChatGPT subscription Live

Ready

Generate a new track or play one from your library.

Stop ends local playback. Provider generation may continue.

ChatGPT subscription selectedProvider access unverifiedMusic key configured

Music generation

Eleven Music model

music_v2_5

Duration

30 s

Request type

Prompt

Song prompt

Local motion

Groove, the original
Intensity80 of 100, the original level

Saved tracks

Antenna Shuffle

20261020_Antenna_Shuffle.mp3, 12.1 KB

Bass Bot Bounce

20261019_Bass_Bot_Bounce.mp3, 12.1 KB

Neon Groove

20261018_Neon_Groove.mp3, 12.1 KB

01 / 06 · Ask by voice

Reachy Mini robot app, remixed

DJ Reachy Remix

My remix of mzurki's DJ Reachy, a Reachy Mini app that takes a song request by voice, composes it with Eleven Music and dances to it.

  • Built on mzurki's DJ Reachy Space, plus my deck panel, saved tracks and a stop that actually stops.
  • Voice runs on a ChatGPT subscription and never falls back to API-key billing.
  • Paid music only starts after an app-owned confirmation, so a stray yes can't spend credits.
PythonFastAPIReachy Mini SDKElevenLabs MusicChatGPT LiveWebRTC (aiortc)
Read the case studyv0.2.0, verified end to end
9:41Wed Oct 21
Delete word
ReadyMission 10/20Operators

Delete word

Delete one word from the cursor.

Use an operator plus motion to remove stale.

dOperatorwMotion

Target

L1 C1

Cursor

L1 C1

Keys

2 keys

Reward

150 pts

Live iSHLIVE 58x10 · GHOSTTY · nvim-ipad-tutor
1stale token remains ← target
~
~
~
~
~
~
~
NORMALnvim-tutor://operators-dw-01[+]1,1All
:command
dwExpected dw0/2
d takes a motion. Real Neovim checks the buffer.

01 / 05 · mission briefing

iPad app for learning Neovim

nvim-tutor

An iPad app that teaches Vim motions by running real Neovim on the iPad, with a SwiftUI game layer on top.

  • Real Neovim runs on the iPad inside an app-owned iSH Alpine runtime.
  • A Lua bridge grades every command against the actual buffer and cursor.
  • Works fully offline from a locked 41-package Alpine core.
SwiftSwiftUIRustiSH ARM64 emulatorAlpine Linux 3.21Neovim + Lua
Read the case studyProven in the iOS simulator

How I build with agents

Spec first

Every behavior change starts as an OpenSpec change with requirements and scenarios. Agents implement against the spec, not against a chat log.

Adversarial review

A second model family reviews every PR. A CLAIM: trailer on each commit says what was verified, and a truth ledger records it, so "done" means checked.

Receipts over vibes

Live runs leave transcripts in the repo: cold-boot timings, wake latency, screenshots. If it isn't in docs/receipts, it didn't happen.

Typed spine

Effect services, branded types and one RPC contract per product. When agents write most of the code, the type system is the senior reviewer that never gets tired.

Experience

  1. Miro

    Senior Software Engineer

    , Berlin, hybrid

    • Own the rich-text editing and rendering layer of Miro's multiplayer canvas, used by every text feature.
    • Shipped streamed AI editing rendered live on the canvas, with undo, cancel and multiplayer consistency.
    • Scope, design and ship foundation changes behind flags, then own their performance and edge cases.
    TypeScriptReactCanvas 2DPixiQuillOpenAI APIs
  2. Delivery Hero

    Senior Software Engineer · Frontend Chapter Lead

    , Berlin

    • Restaurant operations app used daily by 100k+ restaurants; owned features from design to monitoring.
    • Chapter lead: mentoring, onboarding and frontend standards for the sub-department.
  3. ITsynch

    Engineering Lead, earlier Software Engineer

    , Argentina, remote

    • Designed the authorization, notifications, audit and presentation-rules engine reused across the product line.
    • Led a multi-year modernisation, turning ambiguous stakeholder requirements into shipped software.

Systems Engineering, Universidad Tecnológica Nacional, Argentina. Spanish (native), English (full professional), German (A2).

Building something with agents in it?

I like product problems where the model is the easy part and the system around it isn't.

ramarivera@gmail.com