Rol: Fundador e ingeniero.
En Colombia, contratar servicios del día a día (plomería, aseo, clases, mandados, electricidad, belleza, cuidado de mascotas) todavía se hace por WhatsApp, por recomendación o con el número pegado en un poste. No hay verificación, ni reputación, ni precios claros, ni protección del pago. La oferta y la demanda ya existen. Lo que falta es confianza.
Construí Cerkya para resolver eso.
El producto
Para quien necesita algo
Publicas lo que necesitas en más o menos un minuto. Personas verificadas cerca de ti te mandan ofertas y ves sus reseñas antes de elegir. Escoges una, pagas protegido y calificas el trabajo al final.
Para quien ofrece servicios
Los prestadores tienen demanda constante, una reputación que los acompaña de un trabajo a otro y el pago garantizado por lo que terminan.
Dónde corre
La app está en App Store y Google Play desde octubre de 2026. La web app para quien solicita (PWA), el panel de administración y la landing también están en producción.
Cómo está construido
Cerkya vive en dos repositorios: cerkya-app, la app en Flutter para iOS y Android, y cerkya-platform, un monorepo de TypeScript con pnpm donde está todo lo demás.
Backend
Hono con better-auth y Drizzle sobre PostgreSQL. Todo lo que entra y sale pasa por zod, y la API publica su documentación en OpenAPI. Redis corre al lado.
Frontends
- App móvil: Flutter, un solo código para iOS y Android.
- PWA para quien solicita: React. La elegí en vez de Flutter Web a propósito: el renderizado en canvas castiga el tamaño del bundle, el SEO y la accesibilidad, y la versión web tiene que cargar rápido desde un enlace compartido.
- Panel de administración: React con Vite.
- Landing: Astro, con blog en MDX.
Matching geográfico con H3
Para conectar una solicitud con prestadores cercanos uso celdas hexagonales H3 guardadas como columnas normales de Postgres. Una búsqueda por radio es un k-ring de celdas alrededor de la solicitud, que se vuelve una consulta con índice. Sin PostGIS.
Pagos protegidos
Los pagos funcionan en custodia con Wompi. La app crea una intención de pago, Wompi la confirma con un webhook cuyo checksum se verifica, y el dinero se libera solo cuando el trabajo se completa.
Verificación de identidad
La verificación de identidad se hace con documento y selfie. Eso es lo que significa "verificado" cuando ves una oferta.
Worker de IA
Un worker en Python con FastAPI se encarga de la moderación, la clasificación y el ranking, y un worker de visión autoalojado modera las imágenes. Los modelos vienen de Cloudflare Workers AI, Cerebras y Amazon Bedrock (Nova Micro), con OpenAI como respaldo. Cada proveedor tiene su propio interruptor de apagado, así que puedo apagar cualquiera por separado.
Facturación electrónica (DIAN)
La facturación electrónica colombiana es un paquete propio: documentos UBL 2.1, códigos CUFE/CUDE, firma XAdES y el sobre SOAP. Es un paquete puro que no lee variables de entorno; la app le pasa todo lo que necesita.
Operar desde Claude (MCP)
Un servidor MCP remoto de administración expone las herramientas contables, así que puedo manejar esa parte del negocio desde Claude.
Infraestructura
- Un VPS administrado con Dokploy.
- Cloudflare R2 para archivos y Cloudflare Pages para los frontends estáticos.
- Backups a R2 cada 12 horas, con restauraciones probadas de verdad.
- Monitoreo con Beszel y GlitchTip.
- pnpm con lockfile estricto y auditoría de dependencias en CI.
Lo que aprendí
- Una sola base de datos, no almacenes en paralelo. Las celdas H3 en columnas normales de Postgres cubren la búsqueda geográfica sin sumar otro sistema que haya que mantener sincronizado.
- El núcleo difícil, puro. El paquete de la DIAN no lee el entorno, y eso lo hace fácil de probar y difícil de romper por accidente.
- Cada proveedor de IA externo necesita su interruptor. Con un interruptor por proveedor y un respaldo, que un proveedor tenga un mal día no tumba la moderación.
- Para la web, tecnología web. El lado de quien solicita es una PWA en React y no Flutter Web, porque un enlace compartido tiene que cargar rápido, ser indexable y funcionar con lector de pantalla.
- Un backup solo cuenta cuando ya lo restauraste.
Stack
| Capa | Tecnología |
|---|---|
| App móvil | Flutter (iOS y Android) |
| API | Hono, better-auth, Drizzle ORM, PostgreSQL, zod, OpenAPI, Redis |
| Web | PWA en React, admin en React + Vite, landing en Astro con blog en MDX |
| IA | Worker en Python con FastAPI, worker de visión autoalojado; Workers AI, Cerebras, Bedrock Nova Micro, OpenAI de respaldo |
| Pagos e identidad | Pagos en custodia con Wompi, verificación con documento + selfie |
| Facturación | Paquete propio para la DIAN: UBL 2.1, CUFE/CUDE, XAdES, SOAP |
| Operación | Dokploy en un VPS, Cloudflare R2 y Pages, Beszel, GlitchTip, servidor MCP remoto de administración |
