Granola por dentro: el stack de la app de notas que vale 1.500 M$ (despiece con REA)
Despiece del .app de Granola con REA: Electron 44 + React + Tailwind, editor Tiptap, SQLite cifrado en local, cero bot en la llamada, Deepgram con failover a AssemblyAI, Whisper/Parakeet on-device, 16 modelos o Auto, WorkOS, Sentry y Amplitude. Con la economía por usuario reconstruida (COGS 3-7 $ vs 14 $ de Business).
Granola por dentro: el stack de la app de notas que vale 1.500 M$
Fuente: Instagram Reel de danielwelsh_routiq (@danielwelsh_routiq) · ~60 s · 1.089 me gusta · 54 comentarios · instagram.com/reel/DeoFirsNxGt
Fecha: no visible en el embed; el propio post cita la ronda a 1.500 M$, así que es posterior al 25-mar-2026.
Método del autor: abre el .app de Granola en macOS y lo interroga con REA (Reverse Engineer Anything), un MCP/CLI para agentes que inspecciona binarios, bundles y comportamiento en runtime. 13 diapositivas, cada una con la evidencia de terminal correspondiente.
Qué es
Granola es un cuaderno de reuniones con IA: tú escribes cuatro cosas mientras hablas y al terminar la app rellena el resto con la transcripción. Su diferencial comercial es que no mete un bot en la llamada: la app captura el audio del sistema y del micrófono en tu propio portátil, transcribe, y descarta el audio cuando acaba la sesión. Nació en mayo de 2024 de la mano de Chris Pedregal y Sam Stephenson con un equipo de cuatro personas y en marzo de 2026 cerró 125 M$ a 1.500 M$ de valoración (Index Ventures y Kleiner Perkins).
Este reel no cuenta el producto: cuenta cómo está construido, capa por capa, con nombres de fichero y de paquete reales. Es el tipo de despiece que sirve para dos cosas: entender qué es deuda técnica razonable en una app de escritorio moderna y saber qué se puede reutilizar para montar la versión vertical de la misma idea.
El stack, pantalla por pantalla
1. Portada. El .app abierto y el nombre del juego: "I reverse engineered".
2. Escritorio: Electron 44.4.2. La evidencia sale de Electron Framework.framework · strings → Chrome/152.0.7977.130 Electron/44.4.2. El subtítulo del vídeo lo compara con Discord y VS Code, y en fotogramas posteriores con Figma y Slack. Es la decisión que más define la app: un solo código React para macOS/Windows y acceso directo a APIs nativas de audio.
3. Pantallas: React + Tailwind. En dist-app/assets/primary-*.js aparece className: "min-w-0 flex-1 justify-center gap-0.5 py-2" — clases utilitarias de Tailwind dentro del bundle compilado. Nada de sistema de diseño propietario ni CSS-in-JS: es la ruta barata y rápida de un equipo de cuatro.
4. Editor: Tiptap. En dist-app/assets/useDocumentEditorSession-*.js aparece "@tiptap/extension-collaboration" comes with its own history support. Tiptap es ProseMirror empaquetado con una API cómoda; lo relevante es que Granola no escribió el editor, lo enchufó. Ese plugged in que el autor marca como badge es la lección de negocio: el editor no es el producto.
5. Notas: SQLite en tu portátil. app.asar/package.json declara "better-sqlite3-multiple-ciphers": "^12.9.0" — el fork cifrado de better-sqlite3, es decir: base de datos local, con cifrado, sin servidor de notas. Esto explica dos cosas a la vez: la promesa de privacidad y, más importante, que Granola no paga almacenamiento por usuario.
6-7. Sin bot: escucha al sistema y a tu micrófono. La prueba está en Info.plist: NSAudioCaptureUsageDescription ("During your meetings, Granola transcribes your system audio output") y NSMicrophoneUsageDescription. Captura las dos pistas por separado, lo que permite etiquetar hablantes sin diarización en la nube.
8. Voz a texto: Deepgram por defecto, AssemblyAI de repuesto. En dist-electron/main/index.js: id: 'transcription_provider', defaultValue: 'deepgram', y en otro punto var jhe = 'wss://streaming.assemblyai.com/v3/ws'. Es un diseño de failover: si el streaming de Deepgram se cae a mitad de reunión, el cliente salta al otro proveedor sin que el usuario lo note. Detalle de ingeniería pequeño y muy vendible.
9-10. En local: Whisper o Parakeet. LocalEngine: $(lle) ? 'whisper' : 'parakeet' y el texto de interfaz "Audio stays on your computer" junto a un interruptor. Traducción: el modo on-device existe (Whisper de OpenAI, Parakeet de NVIDIA, 600 M de parámetros) pero es una opción, no el camino por defecto.
11. IA: 16 modelos o Auto. El bundle deja el array a la vista con los identificadores del momento:
'claude-4-6-sonnet', 'gpt-5-6-luna', 'gpt-6-astra', 'gpt-6-sol', 'gpt-6-1-sol',
'gpt-6-luna', 'claude-opus-5-5', 'grok-4-7', 'gemini-3-1-pro-thinking',
'claude-5-5-sonnet', 'claude-fable-5-1', 'kimi-k3', 'glm-5.3',
'deepseek-v4p1-flash', 'qwen3.8-2.4t-a95b', 'qwen-3.8-27b'
Se ven 16, y el resto del código resuelve if (x === 'auto') { O = 'Auto' }. La tesis: no hay modelo propio, hay un router. La ventaja competitiva no es el modelo, es la integración y el contexto (tus notas + tu transcripción + tu histórico).
12. Plomería de SaaS. host: 'cname.workos-dns.com' → login con WorkOS (AuthKit), incluido SSO enterprise cuando el cliente lo exige. *.ingress.us.sentry.io → errores a Sentry. https://api2.amplitude.com/2/httpapi → analítica de producto con Amplitude. Ninguna de las tres se construye en casa.
13. El truco que los hizo famosos: mic monitor. Módulo interno que observa qué app tiene el micrófono: "us.zoom.xos" (Zoom) y "com.microsoft.teams2" (Teams) disparan Meeting detected y Granola aparece sola. Es la única pieza verdaderamente propietaria del stack, y es un detector de bundle IDs de 20 líneas. Ese es el producto.
El coste, pieza a pieza (estimación propia)
El autor dice que el desglose de coste está en los comentarios, y los comentarios de un reel son un muro de login: no son accesibles. Lo que sigue es mi reconstrucción con las tarifas públicas de cada proveedor a octubre de 2026 y un supuesto explícito de uso: 20 reuniones al mes × 45 min = 900 minutos de audio por usuario.
| Pieza | Tarifa pública | Coste por usuario/mes (estimado) |
|---|---|---|
| Electron, React, Tailwind, Tiptap core, SQLite, Whisper, Parakeet | gratis (open source) | 0 € |
| Deepgram Nova-3 streaming | 0,0048 $/min (promo) · 0,0077 $/min tarifa | 4,32 $ · 6,93 $ |
| AssemblyAI Universal-Streaming (failover) | 0,15 $/hora | 2,25 $ si se usa todo el mes; ~0 en uso normal |
| LLM (resumen por reunión, modelo grande) | ~3 $/M tokens entrada, ~15 $/M salida | 1,5-3 $ |
| WorkOS AuthKit | gratis hasta 1 M MAU; SSO 125 $/conexión/mes | 0 € (el SSO lo paga el cliente enterprise) |
| Sentry Team | 26 $/mes (anual) | céntimos por usuario |
| Amplitude | gratis hasta 2 M eventos/mes | 0 € |
| Tiptap Pro/Cloud (si usan extensiones de pago) | 49 $/mes Start · 149 $ Team | céntimos |
| Almacenamiento y transcripción en servidor | no existe: audio descartado, notas en SQLite local | 0 € |
Total COGS estimado: 3-7 $ por usuario y mes contra 14 $ de Business. Es decir, 50-80 % de margen bruto, y el margen mejora cuanto más se use el modo on-device (que no cuesta nada por minuto). Dos apuestas arquitectónicas sostienen ese número: audio que se tira al terminar y notas que viven en el portátil del cliente. Otter o Fireflies, que sí alojan vídeo y transcripción, pagan por minuto y por gigabyte para siempre.
La economía del modelo
- Precio público (verificado en granola.ai/pricing): Basic 0 $ con historial de 30 días, Business 14 $/usuario/mes, Enterprise 35 $/usuario/mes. Sin descuento anual, sin cobro por reunión: asiento plano.
- Mecánica de conversión: el plan gratuito no limita minutos, limita historial (30 días) e integraciones. El que se acostumbra a buscar en el histórico paga.
- Escala: cada 100.000 asientos de Business son 16,8 M$ de ARR. La valoración de 1.500 M$ no se sostiene con self-serve: se sostiene con Enterprise a 35 $ y con expansión dentro de cuentas (Vanta, Brex, Asana, Vercel, Mistral figuran como clientes).
- Coste real de la ronda: 192 M$ levantados en total. Con márgenes del 70-80 %, el negocio puede crecer sin quemar en infraestructura; el dinero se va en ventas, no en GPU.
- Palanca Enterprise: SSO, SCIM, retención configurable, auditoría y CAPA HIPAA. Todo eso cuesta casi cero en ingeniería y multiplica el precio por 2,5.
Dónde está el dinero (lectura para Plataforma IA)
- El despiece como producto. Routiq (el autor) lo convierte en contenido y en un plan de formación de pago (
labs.routiq.ai/scratch). En España no hay nadie haciendo teardown técnico con evidencia y en castellano para due diligence, fondos o consultoras. Un informe de "qué hay dentro de este SaaS" se vende a 1.500-4.000 € y se produce en una tarde con REA. - Local-first para clientes con datos sensibles. Clínicas, despachos, asesorías y legal no pueden mandar audio a Deepgram. El patrón de Granola (captura local + Whisper/Parakeet + SQLite cifrado + modelos en la nube solo para el resumen) es replicable y es exactamente el argumento de venta que desbloquea esos sectores.
- La versión vertical. El stack completo está a la vista: Electron + React + Tailwind + Tiptap + better-sqlite3-multiple-ciphers + Deepgram con failover. Montar "Granola para inmobiliarias" o "para comerciales de seguros" es un trimestre de trabajo, no un año, y el foso no es la tecnología: es el diccionario del sector y las plantillas de nota.
- El detector de reuniones como cuña.
mic monitorvale 20 líneas y es lo que hace que la app se sienta mágica. Cualquier herramienta de productividad que quiera "aparecer sola" puede copiar ese patrón hoy mismo. - El router de modelos como oferta. Vender "16 modelos o Auto" a un cliente es vender control de coste y de calidad sin reescribir nada:
deepseek-v4p1-flashpara lo barato,claude-opus-5-5para la reunión con el consejo. Ese selector es una función de producto que se puede empaquetar en cualquier SaaS vertical.
Herramientas y links referenciados
Del stack de Granola
- REA — Reverse Engineer Anything (el MCP con el que se hizo el despiece): github.com/morluto/rea · rea.tools · instalación:
npx rea-agents setup(onpm install --global rea-agents). Cuándo usarlo: auditar un binario, un.appo un bundle Electron sin código fuente. - Electron — electronjs.org · github.com/electron/electron ·
npm i -D electron. Cuándo: app de escritorio multiplataforma con acceso a APIs nativas (audio, permisos, sistema de ficheros). - React — react.dev · github.com/facebook/react.
- Tailwind CSS — tailwindcss.com · github.com/tailwindlabs/tailwindcss.
- Tiptap — tiptap.dev · github.com/ueberdosis/tiptap ·
npm i @tiptap/react @tiptap/starter-kit. Cuándo: editor de texto enriquecido serio sin construirlo desde ProseMirror. - SQLite — sqlite.org. Persistencia local, cero servidor.
- better-sqlite3-multiple-ciphers — github.com/m4heshd/better-sqlite3-multiple-ciphers ·
npm i better-sqlite3-multiple-ciphers. Cuándo: base de datos local cifrada en Electron (el fork que usa Granola). - Deepgram — deepgram.com · developers.deepgram.com. STT en streaming de baja latencia, 0,0048 $/min en promo.
- AssemblyAI Universal-Streaming — assemblyai.com. 0,15 $/hora, sin límite de streams concurrentes: failover barato.
- Whisper (OpenAI) — github.com/openai/whisper. Transcripción local, gratis, la referencia para audio difícil.
- NVIDIA Parakeet TDT 0.6B v2 — huggingface.co/nvidia/parakeet-tdt-0.6b-v2. 600 M de parámetros, pensado para tiempo real en local; hay versión v3 multilingüe (25 idiomas europeos, español incluido).
- WorkOS — workos.com. AuthKit gratis hasta 1 M MAU; SSO/SCIM a 125 $/conexión. Cuándo: vender a empresas sin construir SAML.
- Sentry — sentry.io. Errores y trazas; Team 26 $/mes.
- Amplitude — amplitude.com. Analítica de producto; gratis hasta 2 M eventos/mes.
Del negocio y del autor
- Granola — granola.ai · precios · anuncio de la ronda.
- TechCrunch, 125 M$ a 1.500 M$ — techcrunch.com.
- Autor del reel — @danielwelsh_routiq · su producto de formación: labs.routiq.ai/scratch.
- Post original — instagram.com/reel/DeoFirsNxGt.
Lo que el post no dice
- El coste es muro de pago social. "COST in the comments" con 54 comentarios: sin login no hay desglose. Los números de la sección de coste son míos, con tarifas públicas y un supuesto de 900 min/mes; no son las cifras del autor ni de Granola.
- De failover, nada demostrado. Ver
defaultValue: 'deepgram'y una URL de AssemblyAI en el bundle prueba que ambos están cableados, no que el salto ocurra en producción ni cuánto tarda. - "Audio stays on your computer" es un toggle, no el defecto. El propio código muestra que la transcripción por defecto es en la nube (Deepgram). El modo local existe para clientes que lo exigen.
- Los 16 modelos son una foto del momento. Los identificadores del array son de mediados de 2026 y varios parecen alias internos; tres meses después esa lista habrá cambiado. La lección no es la lista, es el patrón router.
- Electron tiene factura que el vídeo no enseña: binario de cientos de MB, consumo de RAM y batería, arranque más lento que nativo. Para una app que vive abierta todo el día es un coste de producto real.
- "Equipo de cuatro" ≠ "cuatro usuarios". El audio se entiende como "cuatro usuarios en el lanzamiento", pero el pie del post dice "a team of four" (cuatro personas en el equipo). El dato correcto es el del pie.
- 1.089 me gusta y 8K seguidores no validan nada técnicamente: el valor está en que cada afirmación viene con su fichero y su cadena. Eso sí es verificable, y es lo que hace bueno el despiece.
- Marco legal. Inspeccionar el bundle de una app que has instalado no es lo mismo que saltarse una licencia: REA avisa explícitamente de que no da derechos sobre IDA, Hopper o JEB, y aquí no se ha descompilado binario propietario, solo leído JavaScript y plists empaquetados.
- La valoración es privada. 1.500 M$ es la marca de una ronda, no un precio de mercado; con 192 M$ levantados, la presión por ARR enterprise es la que explica el giro a "capa de contexto" y no el amor por el producto.