Who you would be hiring
03
Cosmin Ilie, full-stack engineer in Bucharest
Full-stack engineer, working on my own from Bucharest with founders and product teams across Europe, in English and Romanian.
I build the part of a product people touch. Sometimes that is a marketing site. More often it is the product interface itself, or help on a frontend team that is behind.
Most weeks go into a SaaS platform that puts a real iPhone in a browser tab: strict TypeScript, live video over WebSockets, a public API and an MCP server.
The rest goes into infrastructure I run myself.
I turn down work with no named decision maker, or with a deadline picked before the scope exists.
What I reach for
- Interfaces
- TypeScript, React, Next.js, Astro, CSS written by hand
- Data
- TanStack Query, Drizzle, Postgres, Zod
- Quality
- Vitest, Playwright, WCAG 2.2 AA, Core Web Vitals on real devices
- Operations
- Docker, Caddy, Cloudflare, Vercel, Linux
By the numbers
Counted in the codebase
Most of what I build sits behind a login.
The four figures were counted in one client platform, the one described below. It is not named here. I can show more of it on a call.
112Tables
99Migrations
46Dashboard pages
45API domains
- 01
Remote iPhone control platform
Current workA SaaS product that puts a real iPhone in a browser tab. Strict TypeScript end to end, live video over a WebSocket that stays smooth while the interface keeps responding. The rest of the code tracks which tenant owns which device, which role can take control, and what happens to a session when a phone drops off the network mid-tap.
- Built with
- Next.js 15 App Router, React 19, TypeScript strict, Drizzle and Postgres, TanStack Query, Tailwind 4, WebSocket streaming, Cloudflare R2
- Dimensions
- Multi-tenant, 46 dashboard pages, 45 API domains
- 02
Streaming gateway
Current workThe Node service between the phones and the browser. MJPEG frames over WebSocket, resized with sharp, every message validated against a schema before it is acted on.
- Built with
- Node.js, WebSocket, MJPEG, sharp, Zod, JWT
- Dimensions
- One long-lived socket per device, measured in frames and megabytes
- 03
Public API and MCP server
Shipped, still maintainedThe same platform, opened to other people’s code: a versioned REST API and an MCP server, so agents can drive devices directly.
- Built with
- TypeScript, REST /v1, MCP, Postgres
- Dimensions
- Versioned at /v1, documented straight from the validators
- 04
Homelab
Running since 2024Docker services behind Caddy, Pi-hole handling DNS, Jellyfin for media, all reachable through a Cloudflare Tunnel with no open ports. Nothing is exposed to the internet directly.
- Built with
- Docker, Caddy, Cloudflare Tunnel, Pi-hole, Jellyfin
- Dimensions
- One always-on machine, zero inbound ports
The desk
Who does the work
I do all of it myself, from Bucharest.
- Based
- Bucharest, Romania
- Working hours
- UTC+2, overlapping the European day
- Languages
- English and Romanian
- Hosted on
- Cloudflare Pages, static files at the edge
The back page
Tell me what is broken, or what does not exist yet
Email works best. A few sentences are enough.
hello@cosmin.zip