Volver a los trabajos
2026CloudeProduct design and engineering, end to end

Cloude: un producto cloud de consumo, de la marca a la seguridad

Un producto cloud de consumo que construimos end to end. Una única codebase Next.js, un único design system, un único equipo en web, desktop y React Native. El MVP salió en dos semanas. Nos quedamos y construimos encima el producto de consumo final, sobre la misma base, con cifrado end-to-end y claves protegidas por hardware en el centro de la arquitectura.

Consumer cloudWeb + mobileEnd-to-end encryption
Cloude: un producto cloud de consumo, de la marca a la seguridad

Construimos Cloude end to end. El MVP salió en dos semanas. El equipo que pusimos en marcha se quedó más allá del lanzamiento y construyó el producto de consumo final sobre la misma base. Un solo encargo, una única codebase Next.js, un único design system, un único equipo en web, desktop y React Native.

Lo que entregamos

  • 2Semanas al MVPBrief firmado a la demo en vivo
  • 1CodebaseWeb, desktop, React Native, un solo design system
  • End to endScopeBrand, product, engineering, arquitectura de seguridad
Cloude marketing homepage hero. Header with brand mark, Product, Security, Press nav, theme toggle, Sign in link and Open Cloude button. Centred headline All your stuff, in one beautiful place over organic pink and orange blob art. Subline about a drive that finally feels yours. Open Cloude button below. Top edge of the in-app Files preview peeks under the fold.
Lo que el visitante encuentra. Voz de marca arriba, prueba del producto bajo la fold.

Una codebase, dos superficies

La primera decisión fue estructural. Un producto cloud de consumo normalmente envía web de marketing y plataforma desde repos distintos, con equipos distintos y una capa de traducción entre los dos. Argumentamos por una única codebase Next.js, un único design system, un único equipo. El founder compró el argumento.

El trade-off es honesto. Una codebase única significa que el equipo de marketing no envía copy sin coordinarse con el deploy de ingeniería, y el equipo de producto tiene que pensar en SEO cuando refactoriza un componente. Aceptamos esos costes porque la ventaja era mayor. La web de marketing encajona el componente Files en producción en lugar de un mockup: lo que el visitante ve en la landing es lo que recibe cuando se registra. El trimestre de lanzamiento salió en un solo evento de calendario, no tres.

Cloude marketing homepage product showcase. Same header. Below the hero, the live Cloude Files dashboard is rendered full-width on a soft pink-to-peach gradient. Sidebar with Upload button, primary destinations and pinned folders. Folder grid for Design, Product, Finance, Photos, Archive. Recent files list visible.
El componente Files encajonado en la página de marketing es el mismo componente React que va en producción en la plataforma. Refactorizamos ambos para compartir el mismo adapter de datos, así el workspace de demo y la base de datos de producción hablan la misma forma.
Cloude marketing Files section. Top of frame fades from the orange-pink gradient into white. Section overline FILES, headline Every file, exactly where you remember it. Three checkmark bullets about grid-list toggle, hover-to-preview and drop targets. Right side shows a desktop-frame screenshot of the Cloude Files page.
Escribimos los bullets al final, después de que la plataforma estuviera a la par con la promesa de marketing. Cada check apunta a una interacción que la app en producción entrega de verdad.

Ingenierado para la escala antes de que los usuarios existieran

El MVP arrancaba con una cohorte pequeña de early-access. El deck de la seed proyectaba un orden de magnitud más para fin de año. Ingenieramos para la proyección, no para la carga actual.

La lista de la biblioteca está virtualizada con un cap de filas fijo independientemente del tamaño del dataset, así el coste de render se mantiene plano a medida que crece la biblioteca. Los archivos recientes vienen de una única query server-side indexada en (owner_id, accessed_at desc), y el plan de la query se mantiene constante en cada petición. Las carpetas y las vistas recientes leen de una caché local-first en IndexedDB mantenida en sync con el servidor mediante un motor de sync diferencial: por el cable viajan solo los bytes cambiados. Un portátil en un túnel sigue funcionando. Una reconexión se pone al día en una sola ronda.

Cloude desktop Files page in light mode. Sidebar with Files, Shared, Recent, Starred, Trash, Account, plus pinned folders Design, Product, Photos and tag chips Work, Personal, Family, Travel. Top row of folder cards: Design, Product hovered, Finance, Photos, Archive. Recent files list with type badges, sizes and timestamps. Storage meter at the bottom of the sidebar.
El home del producto. Sidebar, grid de carpetas, archivos recientes, medidor de almacenamiento. La grid de carpetas está virtualizada, así el coste de render se mantiene plano sin importar cuántas carpetas tenga la cuenta.
Cloude desktop Recent page in light mode. Tab strip with All, Images, Documents, Videos, Audio, Archives. Files grouped by Today, Yesterday, Earlier this week, Older. Each row shows type icon, filename, format badge, size and relative time. Same sidebar as the Files page.
Recent agrupa por Hoy, Ayer, Esta semana, Antes. Query server única, indexada en (owner_id, accessed_at desc), así el plan se mantiene constante tanto si la cuenta tiene decenas como miles de archivos.

Móvil es React Native, no una app web travestida

El atajo habría sido una PWA dentro de una WebView. Construimos nativo. El cliente React Native consume los mismos design tokens que la web vía un package compartido, así un bump de los tokens se propaga a cada superficie en un solo commit. El bundle está ingenierado para mantenerse bajo el umbral de hot-fetch de la Store tras el tree-shaking: las actualizaciones se descargan en silencio. El transporte es HTTP/3 sobre QUIC. El primer frame interactivo en un Android de gama baja tiene el mismo coste fijo sin importar el tamaño del dataset: listas virtualizadas y queries indexadas hacen el trabajo pesado en el servidor, no en el dispositivo.

Cloude mobile navigation drawer open over the Account screen. Drawer shows the brand mark, an Upload button, primary destinations Files, Shared, Recent, Starred, Trash, Account, pinned folders Design, Product, Photos with file counts, and tag chips Work, Personal, Family, Travel. Storage meter and Earn free storage card at the bottom.
El drawer es toda la superficie de navegación en móvil. Destinos, carpetas pinneadas, chips de etiquetas, medidor de almacenamiento, todo en un solo scroll. En móvil nunca metimos la navegación en un sub-menú.

Cifrado sin el impuesto a la latencia

Fue la decisión de ingeniería más dura. El cifrado end-to-end suele aparecer en la ventanilla de Hacienda: round trips extra, cold starts más largos, archivos que se abren más despacio. Nos negamos a enviar eso.

El almacenamiento está cifrado en reposo con AES-256-GCM. Las claves por cuenta se derivan vía Argon2id desde la passphrase del usuario y nunca se guardan en el servidor. Los archivos compartidos viajan cifrados end-to-end con intercambio X25519. Las claves privadas viven dentro del Secure Enclave de iOS y del StrongBox de Android, protegidas por hardware y resistentes a la extracción incluso en un dispositivo rooteado. La arquitectura es zero-knowledge: el servidor guarda blobs opacos y nunca ve una clave desenvuelta.

Pruebas de penetración independientes corren con cadencia recurrente con un estudio de seguridad externo. Un programa público de vulnerability disclosure con bounty para investigadores está vivo desde el lanzamiento.

Cloude marketing Account section. Header active state on Security with floating peach and pink blob accents. Section overline ACCOUNT, headline Your drive, all in one screen. Three checkmark bullets about storage breakdown, two-factor on by default and active sessions. Right side shows a desktop-frame screenshot of the Cloude Account page.
En la web de marketing, seguridad es una sección de tres. Nada de copy alarmista, nada de iconos de candado. Tres checks y una captura de la página account en producción.
Cloude desktop Account page in light mode. Profile header for Alex Morgan with avatar and member-since date. Plan card with Cloude Pro, 200 GB tier and Upgrade button. Storage breakdown by type with coloured legend for Videos, Images, Design, Documents, Archives, Audio. Security section with two-factor toggle on, password row, notifications row. Devices list with current Chrome session and Safari iOS sign-out option.
La misma superficie en el producto. Plan, distribución del almacenamiento por tipo, toggle 2FA, lista completa de dispositivos con sign-out a un tap por cada uno. Nos negamos a esparcir la seguridad por varias páginas de ajustes.

El design system que alimenta Cloude se construyó desde cero para este encargo y hoy vive en web, desktop y React Native. Lo seguimos manteniendo nosotros. El equipo se mantuvo pequeño durante toda la duración, integrado por la governance de agentes del estudio: sin proliferación de contractors, sin handoff a vendors. El programa de vulnerability disclosure heredado del trabajo de seguridad sigue activo. Los design tokens que enviamos el primer día son los mismos que corren en producción hoy.

Stack

  • Next.js16
  • React19
  • TypeScript5
  • React Native
  • Postgres16
  • Supabase
  • Cloudflare R2
  • Vercel Edge
  • Sentry
  • Meilisearch

Dos semanas del brief al MVP en vivo. El estudio siguió y entregó el producto final sobre la misma base. La infraestructura que levantaron el primer día aguantó. Cifrado activado por defecto, latencias por debajo del segundo desde cualquier edge. No tuvimos que renegociar el scope ni una vez.

Founder, CloudeDespués del trimestre de lanzamiento

Operativo, hoy

  • End to endScopeDel brand a la arquitectura de seguridad, un solo equipo
  • 1CodebaseWeb, desktop, React Native, un solo set de design tokens
  • Day oneTokensLos tokens que enviamos en el lanzamiento siguen corriendo en producción

¿Estás construyendo algo que tiene que durar más allá de la seed?

Trabajamos con founders y equipos que tienen objetivos de ingeniería medibles y deben alcanzarlos antes de la siguiente ronda. End to end, un solo equipo. Escríbenos.

Empezar un proyecto