Madrid, España · Desarrollando iOS desde 2016

Oscar Canton.
Senior iOS Engineer.

Trabajo en VASS. Desde finales de 2022 estoy en el proyecto de Inditex, la app con la que el personal de tienda del grupo trabaja cada día, y desde 2025 llevo su equipo iOS. Antes pasé por banca y retail con otros clientes de la casa.

Aparte está lo mío: dos apps en la App Store que hice porque las quería usar yo, y de las que también mantengo la API y el servidor.

01 Quién soy

Trayectoria

Casi todo lo que he hecho en iOS ha sido para banca y gran distribución. Equipos grandes, apps con las que alguien trabaja o mueve su dinero, y el nivel de revisión que eso trae. Ahí aprendí a defender cada decisión por escrito, que es una costumbre que ya no se me quita.

En VASS llevo desde 2019. Los tres primeros años fui saltando de proyecto en proyecto —Pibank, Unicaja, Mercadona, Santander— y desde finales de 2022 estoy fijo en la cuenta de Inditex. En 2025 me dieron el equipo: somos tres, y sigo picando código.

Y luego está lo mío, que va aparte y firmo como OgamLabs. Dos apps en la App Store con su API, su base de datos y su servidor. De ahí sale casi todo lo que publico en abierto.

02 VASS · Clientes

Apps en producción

Proyectos de cliente dentro de VASS: la empresa es siempre la misma, el cliente cambia con el proyecto. De cada uno cuento solo el alcance público, porque lo de dentro es suyo.

  • Inditex 2022 — hoy
    La app de iPhone y iPad con la que el personal de tienda de Zara, Pull&Bear, Massimo Dutti, Bershka, Stradivarius y Oysho gestiona su tienda en todo el mundo. Más de 50 módulos repartidos en una docena de librerías. Swift 5/6 · SwiftUI · Tuist
  • Santander Belgium 2022
    App de depósitos. Coordiné los equipos de iOS y Android para que las dos versiones se comportaran igual, con la interfaz en francés, neerlandés e inglés. Swift · Kotlin · Combine
  • Mercadona 2021
    Su primera app para comprar en lonja: por barco, por lonja y por día, con el histórico de precios a mano. Swift 5
  • Unicaja 2020
    Bizum dentro de la app del banco, con PSD2 de por medio y la API bancaria cubierta con tests antes de escribir la pantalla. Swift · VIPER · TDD
  • Pibank 2019 — 2020
    Área privada de clientes del Banco Pichincha y su app de envío de remesas. Fue mi primer proyecto de banca. Swift 4 → 5 · VIPER
03 Producto propio

CholloGas y Hilo

Dos apps mías, firmadas como OgamLabs y las dos en la App Store. Las empecé para usarlas yo, y eso se nota en lo que decidí y en lo que decidí no hacer.

  • Pantalla real de CholloGas en modo oscuro: los costes estimados de una estación y la evolución de su precio a un año, con la tendencia y la diferencia respecto a la media provincial Ver en la App Store ↗

    CholloGas

    En la App Store

    Comparador de precios oficiales de carburantes en España y Francia, con datos de MITECO y del Gobierno francés. La hice por una razón poco noble: las que había eran horrorosas de mirar y yo quería una bonita para repostar.

    Cobertura
    ES + FR
    Fuentes
    2 públicas
    Modo
    Offline

    La app es Swift y SwiftUI, y guarda lo último que vio para seguir sirviendo en un sótano sin cobertura. La API es TypeScript sobre Fastify y PostgreSQL, con un adaptador por país: cada gobierno publica sus datos como le parece.

    El problema
    Dos fuentes oficiales que no se parecen en nada: otros identificadores, otra geografía, otros carburantes y otras horas. Todo eso tenía que acabar en un único modelo tipado. Y como sincronizo cada seis horas, el histórico se llenaba de lecturas idénticas.
    Alternativas
    Guardarlo todo y podar después con un proceso de limpieza, o guardar solo los cambios de precio de verdad.
    La decisión
    Sincronización delta: escribo una fila únicamente cuando el precio cambia. Menos escrituras repetidas, un histórico con variaciones reales y ninguna tarea de limpieza que mantener.
    Lo que costó
    Que la fecha que ves es la de la última variación, no la de la última consulta. Un precio que lleva días quieto parece viejo aunque esté al día. Lo explico dentro de la app y le dediqué una página entera en datos y precios.
    • Swift
    • SwiftUI
    • Fastify
    • PostgreSQL
    • Docker
  • Pantalla real de Hilo al resolver un puzle: el hilo era COSTURA, con las cinco palabras, lo que une a cada una y el tiempo empleado Ver en la App Store ↗

    Hilo

    En la App Store

    Juego diario de palabras: cinco palabras que esconden un hilo común. En casa somos de juego diario, así que acabé haciendo el nuestro.

    Puzzles
    4.015
    Locales de tienda
    11
    Tests
    1.128

    SwiftUI con concurrencia estricta y persistencia local. Lo que más tiempo me llevó no fue el juego: fue montar el pipeline que genera, valida y revisa el catálogo y las creatividades de tienda para once locales, porque hacer eso a mano no era viable para una persona. El código y el catálogo siguen privados; el proceso está documentado.

04 Arquitectura · Open source · IA

Arquitectura y herramientas

Todo esto empezó siendo algo que necesitaba yo y acabó publicado. La referencia de arquitectura es una app que compila, no un diagrama. Anvil me monta el esqueleto de un proyecto sin pisarme un solo fichero. Y con la IA aplico lo mismo que con cualquiera que toque mi código: un encargo claro, el contexto justo y alguien que lo revisa antes de que entre. De PRDPlanner y HarnessHub hay caso de estudio; el código sigue siendo privado.

  • iOS Architecture Reference

    Código abierto

    Una app de Xcode entera en Swift 6 que compila, organizada por capas y features dentro de un único target. Ahí están Clean Architecture, MVVM, Router tipado, estado @MainActor y composición explícita. Los límites entre capas se sostienen con revisión y tests, no porque el compilador los separe en módulos.

    Entradas
    19
    Tests
    194
    Dependencias externas
    0
    • Swift 6
    • SwiftUI
    • Clean Architecture
  • AnvilCLI

    Código abierto

    CLI en Go que me monta proyectos iOS y packs de herramientas de IA. Antes de escribir nada planifica y valida todos los destinos: no sobrescribe un solo fichero, junta las colisiones en una lista y, si algo falla a mitad, deshace únicamente lo que había creado esa ejecución.

    Tests
    421
    Skills con procedencia
    34
    Ejemplos Swift 6
    25
    • Go
    • Swift 6
    • Code generation
  • PRDPlanner

    Edición pública en preparación

    Workflow de PRD → plan → build para Claude Code. Agentes especializados, fases con dependencias y una etapa que intenta refutar lo que han encontrado las demás antes de que yo decida nada.

    • Agent orchestration
    • Verification
    • Human gates
  • HarnessHub

    Beta local

    Compositor local de skills, subagentes, plugins y MCPs para cinco harnesses. Resuelve compatibilidades y conflictos y genera bundles reproducibles sin instalar ni ejecutar nada de lo que empaqueta.

    • React · TypeScript
    • Local-first
    • Supply-chain safety
05 Criterio

Cómo trabajo

Cinco cosas que decidí en mis apps, con lo que me costó cada una.

  • Sin cuenta si no hace falta. CholloGas no tiene login. No necesito saber quién eres para decirte lo que cuesta el gasóleo. Lo pago renunciando a sincronizar entre dispositivos, y me parece un buen trato.
  • El último tramo va en el calendario. El grueso de una app se levanta rápido y engaña mucho. Lo que cuesta es lo de después: la pantalla vacía, el móvil sin cobertura, VoiceOver, que no se caliente el teléfono. Si no lo planifico desde el principio, no se hace.
  • Pago único siempre que pueda. CholloGas se compra una vez y ya está. Hilo también, aunque ahí hay suscripción para quien la prefiera.
  • Los datos, como vienen. Los precios salen de la fuente oficial tal cual: no los redondeo, no los corrijo y no los predigo. Prefiero explicar por qué un precio parece viejo antes que disimularlo.
  • Si lo despliego, lo mantengo. Certificados, copias de seguridad y monitorización. No hay un equipo de sistemas al que pasarle el marrón, y eso cambia lo que uno decide construir.
06 Contacto

Contacto

Si quieres hablar de trabajo, de una colaboración o tienes un problema con alguna de las apps, escríbeme. Contesto yo.