La Historia: De la Idea a 20K Visitantes Mensuales
Todo comenzó simple. Estaba trabajando en otro proyecto y noté que muchos autónomos y pequeñas empresas en España tenían dificultades para encontrar la correspondencia exacta entre códigos IAE y CNAE. No existía una herramienta gratuita, clara y rápida.
Decidí construir Conversor IAE CNAE en público. Nada de esperar al momento "perfecto". Solo un fin de semana, Next.js, Supabase, y un dataset de 2,247 códigos oficiales (1,187 IAE + 1,060 CNAE).
Hoy recibe 20K visitantes mensuales sin una sola caída.
Por Qué Elegí Next.js 15.5.4 + Supabase
La decisión técnica fue deliberada. Necesitaba:
1. Velocidad de desarrollo: Construir en días, no semanas 2. Rendimiento en búsqueda: Los usuarios necesitaban resultados instantáneos 3. Cero infraestructura: Sin DevOps, sin servidores que mantener 4. Escalabilidad automática: Que creciera sin mi intervención
Next.js 15.5.4 + Supabase (PostgreSQL 17.6.1) resuelve todo esto. No es sexy, pero funciona.
La Arquitectura Real
``` ┌─────────────────────────────────────────┐ │ Vercel (Next.js 15.5.4) │ │ ├─ API Routes (/api/search) │ │ ├─ Server Components (búsqueda) │ │ └─ Static Generation (landing) │ └────────────┬────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────┐ │ Supabase (PostgreSQL 17.6.1) │ │ ├─ Tabla: codigos (2,247 registros) │ │ ├─ Índices: código, descripción │ │ └─ Full-text search activado │ └─────────────────────────────────────────┘ ```
Simple. Predecible. Escalable.
El Stack Técnico Completo
Mi `package.json` revela las decisiones:
Frontend:
- React 19.1.0 con TypeScript 5 (tipado fuerte desde el inicio)
- TailwindCSS con extensión de tipografía
- Lucide React para iconos consistentes
Data & Analytics:
- @tanstack/react-query: Cacheo inteligente de búsquedas
- @supabase/ssr: Auth y sesiones sin dolor
- Microsoft Clarity: Entender cómo usan la herramienta
- Vercel Analytics: Monitorear rendimiento en producción
Contenido & Monetización:
- Sanity CMS: Blog integrado (tipado con PortableText)
- Google AdSense: Monetización simple sin fricciones
- html2canvas-pro + jsPDF: Exportar resultados a PDF
No hay nada experimental. Todo probado en producción.
Cómo Optimicé para 20K Visitantes Mensuales
1. Búsqueda Rápida con Full-Text Search
El 80% del tráfico busca códigos específicos. La consulta SQL es crítica:
```sql SELECT * FROM codigos WHERE to_tsvector('spanish', descripcion) @@ plainto_tsquery('spanish', $1) OR codigo ILIKE $2 LIMIT 50; ```
PostgreSQL maneja esto en milisegundos. Sin índices complejos. Sin caché distribuido. PostgreSQL es suficiente.
2. Caché en el Cliente
Usé React Query para cachear búsquedas:
```typescript const { data } = useQuery({ queryKey: ['codigos', searchTerm], queryFn: () => fetch(`/api/search?q=${searchTerm}`).then(r => r.json()), staleTime: 1000 * 60 * 60, // 1 hora }); ```
Si alguien busca "electricista" a las 10:15 y otro a las 10:17, el segundo obtiene el resultado del caché. Reducción de carga en Supabase: ~40%.
3. Server Components para Landing
La página principal es estática (generada en build time). Cero JavaScript innecesario. Carga en <800ms.
4. Analytics Silencioso
Microsoft Clarity + Vercel Analytics sin ralentizar nada. Entiendo dónde abandona la gente, qué búsquedas fallan, dónde clican.
Lo Que Aprendí: Commits Reales
Mis últimos 5 commits (28 de enero de 2026) cuentan la historia:
Commit 1: TypeScript en el Blog ``` fix(blog): resolve TypeScript type error in BlogContentWithAds ```
Tipado fuerte desde el inicio. Evita bugs en producción.
Commit 2: Optimización de AdSense ``` improve adsense performance ```
Google AdSense puede ralentizar si no lo optimizas. Lazy loading + async scripts.
Commits 3-5: UX en Mobile ``` fix(auth): close mobile menu on auth navigation fix(nav): add viewport units to overlay for full-screen coverage feat(nav): add sticky navigation with always-visible mobile CTA ```
El 65% del tráfico es mobile. Estos commits pequeños son críticos.
Monetización: La Parte Incómoda
No voy a mentirte sobre ingresos (no incluyo números específicos por privacidad), pero puedo decirte cómo funciona:
1. AdSense: Colocación discreta, sin saturar 2. Affiliate: Enlaces a gestorías y software contable 3. Premium (futuro): Exportar a formatos específicos, API access
La clave es no sacrificar UX por dinero. La herramienta es gratis porque debería serlo. Los ingresos son secundarios.
Por Qué Esto Escala sin Problemas
Vercel
- Despliega automáticamente en cada push
- Auto-scaling sin configurar nada
- CDN global (importante para España + Latinoamérica)
Supabase
- PostgreSQL manejado
- Backups automáticos
- Monitoreo de rendimiento incluido
- Escalas cuando necesitas, pagas cuando usas
Resultados
- 99.9%+ uptime (Vercel + Supabase son confiables)
- Tiempo de respuesta <200ms (p95)
- Cero mantenimiento DevOps
El Mercado Español: Por Qué Funciona
Conversor IAE CNAE existe porque:
1. Regulación compleja: Autónomos y pymes necesitan certeza 2. Sin alternativas libres: Todo lo demás es pago o incompleto 3. SEO natural: "Conversor IAE CNAE" es una búsqueda real 4. Utilidad pura: Resuelve un problema específico
No es viral. No es emocionante. Es útil. Y eso es suficiente.
Qué Haría Diferente
Si volviera atrás:
1. Más análisis antes: Hubiera validado demanda con 10 mensajes a autónomos 2. Monetización desde el inicio: Probar modelos desde el día 1 3. Comunidad: Crear un canal de Telegram para actualizaciones
Pero honestamente, la arquitectura fue correcta. Next.js + Supabase fue la decisión acertada.
El Takeaway
No necesitas infraestructura compleja para escalar a 20K visitantes mensuales. Necesitas:
1. Herramienta útil: Resuelve un problema real 2. Stack correcto: Next.js + Supabase para MVP que escala 3. Optimizaciones simples: Caché, índices SQL, lazy loading 4. Paciencia: Dejar que el SEO funcione
Conversor IAE CNAE es código abierto en GitHub. Mira la arquitectura, aprende, construye algo similar.
La próxima herramienta útil que necesita el mercado español podría ser la tuya.
---
¿Construyes herramientas en público? Comparte tu stack en los comentarios. Me interesa saber qué funciona en tu mercado.
