Manuel Ramiro Zabaleta

Manuel Ramiro Zabaleta

Software Engineer · Madrid

I like building things people actually use, and that have to be fast and hold up. My product, Cromocheck, is already used by 6,800+ people.

Me gusta construir cosas que la gente usa de verdad y que tienen que ir rápido y aguantar. Mi producto, Cromocheck, ya lo usan más de 6.800 personas.

01

AboutSobre mí

I build products end to end and keep them running for real people.

Construyo productos de principio a fin y los mantengo funcionando para gente real.

I learned to code at 42 Madrid and in a web development diploma. Since 2024 I've worked at Vass, building online stores for international clients: custom checkouts, back-office tools and full redesigns on Magento 2 and Shopify, and now the move to Adobe Commerce SaaS with Edge Delivery Services and App Builder.

Aprendí a programar en 42 Madrid y en un FP de Desarrollo de Aplicaciones Web. Desde 2024 trabajo en Vass, haciendo tiendas online para clientes internacionales: checkouts a medida, herramientas de backoffice y rediseños completos en Magento 2 y Shopify, y ahora la migración a Adobe Commerce SaaS con Edge Delivery Services y App Builder.

In 2025 I launched Cromocheck, my own product. It grew to 6,800+ accounts without ads, and running it taught me what client work doesn't: deciding what to build, owning the data model and the server, and living with every decision in production. Now I'm going deeper into TypeScript, web performance and software architecture.

En 2025 lancé Cromocheck, mi propio producto. Ha llegado a más de 6.800 cuentas sin publicidad, y llevarlo me ha enseñado lo que no enseña el trabajo para clientes: decidir qué construir, ser dueño del modelo de datos y del servidor, y convivir con cada decisión en producción. Ahora profundizo en TypeScript, rendimiento web y arquitectura de software.

Product judgementCriterio de productoI build what users ask for and measure whether it worked.Construyo lo que piden los usuarios y mido si ha funcionado.
End-to-end ownershipDe punta a puntaData model, frontend, infrastructure and deploys.Modelo de datos, frontend, infraestructura y despliegues.
Production firstPensando en producciónMigrations without downtime, rehearsed before touching production.Migraciones sin cortes y ensayadas antes de tocar producción.
  1. 42 Madrid+ web development diploma+ FP Grado Superior DAW
  2. Vasse‑commerce internshipprácticas e‑commerce
  3. VassE‑commerce Developerdesarrollador e‑commerce
  4. Cromochecklaunched, sololanzado, en solitario
  5. 6,800+6.800+accounts and growingcuentas y creciendo
02

Cromocheck

Cromocheck on a phone: a collection at 54%, with marked and missing stickers

Collectors mark the stickers they have and share their swap lists. It grew without ads: people find it on Google and through the lists other users share.

Los coleccionistas marcan los cromos que tienen y comparten sus listas de repes. Ha crecido sin publicidad: la gente llega por Google y por las listas que comparten otros usuarios.

Where visitors come fromDe dónde llegan las visitasUmami · 30 days · 6,598 referral visits · no adsUmami · 30 días · 6.598 visitas externas · sin anuncios
  • searchbuscadores 87%
  • socialredes 11%
  • AI assistantsasistentes de IA 1.7%
decision 1 · data modeldecisión 1 · modelo de datos

One row per sticker was not going to scale

Una fila por cromo no iba a escalar

Every marked sticker was a row: almost a million, close to the free-tier limit. I changed it to one row per user and collection, with the stickers in an array. Press the button to see what the migration did.

Cada cromo marcado era una fila: casi un millón, cerca del límite del plan gratuito. Lo cambié a una fila por usuario y colección, con los cromos en un array. Pulsa el botón para ver qué hizo la migración.

70 MB · ~1M rows· ~1M de filas14 MB · ~6k rows · −80%· ~6.000 filas · −80 %
progress (user_id, card_id, qty)progress (user_id, collection_id, owned_ids[], duplicates jsonb)

Migrated over a month: dual writes to both tables for a week, then only the new one, with the old table kept as a backup. No downtime and no data lost.

Migración de un mes: una semana de escritura doble en las dos tablas, después solo en la nueva, y la antigua como copia de seguridad. Sin cortes y sin perder datos.

decision 2 · infrastructuredecisión 2 · infraestructura

Leaving Vercel for my own server: −75% cost

De Vercel a mi propio servidor: −75 % de coste

The bill grew with traffic. I moved the app to a Hetzner VPS with Docker behind Nginx, and Coolify builds and deploys every push. This is how it fits together today.

La factura subía con el tráfico. Moví la app a un VPS de Hetzner con Docker detrás de Nginx, y Coolify compila y despliega cada push. Así encaja todo hoy.

Cromocheck architectureUsers reach Nginx and a Next.js container on a Hetzner VPS deployed by Coolify from GitHub. The app reads Supabase Postgres and Auth, sends email with Resend and logs to Grafana Loki. Umami measures traffic.hetzner vps · dockersupabaseserviceseventshttpspushdeploysqlsessionemaillogsusers6,800+ accountsumamianalyticsgithubdev → mainnginxtls · proxynext.js 16typescriptcoolifybuild · deploypostgresrls · migrationsauthemail · googleresendemaillokilogs · pino
BrowserNavegador
Hetzner VPS · DockerVPS de Hetzner · Docker
SupabaseSupabase
ServicesServicios
Next.js 16 appApp en Next.js 16

Renders pages on the server and runs server actions. The code is split into feature modules (auth, collections, notifications, admin). It ships as a Docker image built from a multi-stage Dockerfile with a pinned Node version.

Renderiza en el servidor y ejecuta las server actions. El código está dividido en módulos por funcionalidad (auth, colecciones, notificaciones, admin). Se despliega como imagen Docker, hecha con un Dockerfile multietapa y la versión de Node fijada.

Tap any piece to see what it doesToca cualquier pieza para ver qué hace
03

ExperienceExperiencia

Cromocheck

Founder & Software Engineer

Fundador e ingeniero de software

Cromocheck ↗ · own product in production· producto propio en producción

Sep 2025 – nowsep. 2025 – hoy

A web app for sticker and trading-card collectors. I designed, built and run it alone, and choose what to build next from user feedback and usage data.

Una web para coleccionistas de cromos y cartas. La he diseñado, construido y la mantengo yo solo, y decido qué construir a partir del feedback y de los datos de uso.

6.8k+accounts and 1,000+ monthly users, with no paid adscuentas y más de 1.000 usuarios al mes, sin publicidad
−80%database size (70 → 14 MB) after redesigning the data model, migrated with no downtimede base de datos (de 70 a 14 MB) al rediseñar el modelo de datos, sin cortar el servicio
−75%hosting cost moving from Vercel to Hetzner with Docker, Nginx and Coolifyde coste de hosting al pasar de Vercel a Hetzner con Docker, Nginx y Coolify
87%of referral traffic comes from search engines, plus lists users sharede las visitas externas llega por buscadores; el resto, por listas que comparten los usuarios
45%of monthly users come back every week (WAU/MAU)de los usuarios del mes vuelven cada semana (WAU/MAU)
22collections with categories, search and per-user sections, built from user requestscolecciones con categorías, buscador y secciones por usuario, a partir de peticiones
Next.jsTypeScriptReactSupabasePostgreSQLZodDockerNginxHetznerCoolify

E-commerce Developer

Desarrollador e-commerce

Vass · consultancy · Madrid· consultoría · Madrid

Jun 2024 – nowjun. 2024 – hoy

I build and evolve online stores for international retailers. I started with classic Magento 2 and Shopify builds, and now I work on Adobe's composable stack: Edge Delivery Services, Commerce Optimizer and App Builder.

Desarrollo y hago evolucionar tiendas online de marcas internacionales. Empecé con proyectos clásicos de Magento 2 y Shopify, y ahora trabajo con el stack composable de Adobe: Edge Delivery Services, Commerce Optimizer y App Builder.

Adobe Commerce SaaS migration: storefront on Edge Delivery Services, catalog in Commerce Optimizer, and PHP customisations moved to App BuilderMigración a Adobe Commerce SaaS: storefront en Edge Delivery Services, catálogo en Commerce Optimizer y personalizaciones PHP llevadas a App Builder
Custom checkout for in-store pickup in Magento 2, with Knockout.js, quotes and addressesCheckout a medida para recogida en tienda en Magento 2, con Knockout.js, quotes y direcciones
Back-office grids so the client's team runs pickup orders without a developerGrids de backoffice para que el equipo del cliente gestione la recogida sin un desarrollador
Full rebrand from Figma, with reusable widgets the client configuresRebranding completo desde Figma, con widgets reutilizables que configura el cliente
Private Shopify checkout unlocked by an access code, with customer data in metaobjectsCheckout privado en Shopify que se desbloquea con un código de acceso, y datos de cada cliente en metaobjects
4international stores in different industries, from deploys to dev, staging and productiontiendas internacionales de sectores distintos, de los despliegues a los entornos de desarrollo, staging y producción
Adobe CommerceEdge Delivery ServicesCommerce OptimizerApp BuilderMagento 2PHPjQueryKnockout.jsMySQLShopifyLiquidFigma

E-commerce Intern

Prácticas e-commerce

Vass · Madrid

Mar – Jun 2024mar. – jun. 2024
04

CertificationsCertificaciones

Valid until Mar 2028Vigente hasta mar. 2028

Stripe Certified Professional Developer

Stripe · issued Mar 2026expedida en mar. 2026

ID 177305540

Valid until Mar 2028Vigente hasta mar. 2028

Stripe Certified Associate Developer

Stripe · issued Mar 2026expedida en mar. 2026

ID 177064435

Valid until Jun 2028Vigente hasta jun. 2028

PrestaShop Certification

PrestaShop · issued Jun 2026expedida en jun. 2026

ID 24500ac2b89403e1a964c2dc2cbdf27b4043b10f

In preparationEn preparación

Adobe Commerce Developer Professional (AD0-E725)

Adobe

05

Stack

FrontendFrontend
Backend & dataBackend y datos
InfrastructureInfraestructura
E-commerceE-commerce
QualityCalidad
EducationFormación42 Madrid · Web Application Development diploma42 Madrid · FP Grado Superior DAW
LanguagesIdiomasSpanish (native) · English (B2)Español (nativo) · Inglés (B2)