Proyectos
No son ejercicios de tutorial. Son cuatro productos que están en producción y que mantengo yo: un comparador de colegios para familias peruanas, una plataforma para que escolares repasen jugando, una tienda online de pines y una herramienta para que los agentes de código recuerden lo que hicieron.
Cada uno tiene su caso de estudio con las decisiones técnicas, los números reales y lo que salió mal.
colegios.pe — comparador de colegios del Perú
Casi 181.000 instituciones educativas del país en un solo catálogo, con datos oficiales del MINEDU y reseñas de la comunidad, para que una familia decida en qué colegio matricular a sus hijos.
- Stack: FastAPI + SQLAlchemy + PostgreSQL, SvelteKit, y seis scrapers en Python para ESCALE, Identicole, matrícula, PAE, distritos y COAR.
- Qué resuelve: buscar por distrito, nivel, gestión o pensión; comparar colegios; ver la ficha con matrícula, alimentación escolar y contexto del distrito.
- Tamaño: 509 tests entre API, frontend y scrapers.
Cómo lo construí · colegios.pe
tucole.pe — plataforma educativa "aprende jugando"
Repaso y práctica para estudiantes de 4.º y 5.º de secundaria: siete cursos entre aritmética, geometría, trigonometría, física, biología, lenguaje e historia del Perú, con lecciones y exámenes por unidad.
- Stack: FastAPI + SQLAlchemy + PostgreSQL y SvelteKit 3 con Svelte 5, Tailwind y SQLAdmin. Antes era Django 3.0 y Vue 2, los dos sin soporte.
- Qué resuelve: repaso por curso y unidad, exámenes, registro con login y newsletter, y un panel de contenido.
- Tamaño: el backend legado eran 827 líneas y 6 modelos; se reescribió entero en vez de parchearlo.
kipin.pe — tienda de pines metálicos
Tienda online de pines ilustrados, hecha con Django. El trabajo interesante no es el carrito: es el buscador, que tiene que encontrar "cactus" cuando alguien escribe "catus".
- Stack: Django 6.1, PostgreSQL con
pg_trgmyunaccent,easy-thumbnailscon WebP, gunicorn detrás de nginx. - Qué resuelve: catálogo, búsqueda tolerante a errores de tecleo, productos relacionados, miniaturas y feed para Facebook.
- Dónde corre: VPS de OVH, servicio de systemd, estáticos servidos por nginx.
anathem — memoria local para agentes de código
Un binario en Rust y un archivo SQLite. Nada más: ni demonio, ni servidor HTTP, ni claves de API. Un agente guarda lo que aprendió y lo encuentra en la sesión siguiente.
- Stack: Rust, SQLite con FTS5, servidor MCP por stdio, BM25 y un paquete de vocabulario opcional para la capa vectorial.
- Qué resuelve: memoria entre sesiones de Claude Code y opencode, con correcciones explícitas por tema o por id.
- Medido: 9 MB en reposo, 8 ms de búsqueda sobre 449 memorias y 90,5% de recall@5 en LongMemEval-S.
Cómo lo construí · Código en GitLab
Cómo trabajo
Cada proyecto empieza por los datos y por el problema de quien lo va a usar, no por el framework. Después escribo los tests antes de tocar la interfaz, documento las decisiones que no son obvias y dejo el despliegue reproducible: si no se puede volver atrás en un comando, no está terminado.
Si quieres hablar de alguno de ellos, escríbeme a me@alexanderae.com.