Saltar al contenido principal

Sistema de diseño

El diseño visual de Closegram está construido sobre una configuración compartida de Tailwind (packages/tailwind-config) con un sistema de tokens de variables CSS personalizado y theming de tres modos.

Modos de tema

El ThemeContext admite tres modos:

ModoComportamiento
lightSiempre claro
darkSiempre oscuro
systemSigue la preferencia del sistema operativo mediante prefers-color-scheme

El tema resuelto (light u dark) se aplica alternando la clase en <html>. El modo se persiste en localStorage.

const { theme, mode, setTheme, toggleTheme } = useTheme();
// theme: 'light' | 'dark' (resolved)
// mode: 'light' | 'dark' | 'system'

Propiedades personalizadas de CSS

Definidas en apps/frontend-nextjs/src/app/globals.css y aplicadas globalmente:

TokenClaroOscuroUso
--color-background#ffffff#000000Fondo de página
--color-foreground#0f1419#e7e9eaTexto del cuerpo
--color-card#ffffff#16181cSuperficies de tarjetas
--color-card-foreground#0f1419#e7e9eaTexto sobre tarjetas
--color-border#eff3f4#2f3336Divisores, contornos
--color-input#f7f9f9#16181cFondos de campos de entrada
--color-muted#f7f9f9#16181cFondos sutiles
--color-muted-foreground#536471#71767bTexto secundario
--color-primary#1d9bf0#1d9bf0Azul de marca (interactivo)

Colores de acento de marca

Definidos en packages/tailwind-config/shared-styles.css y extendidos en Tailwind:

TokenValorUso
--color-blue-1000#2a8af6Destacados, enlaces
--color-purple-1000#a853baInsignia de creador, degradado
--color-red-1000#e92a67Reacciones, alertas

Tokens de tarjeta (Tailwind colors.card)

ClaveValor
card.light#ffffff
card.dark#191c1f
ClaveValor
logo.light#26292b
logo.dark#FFAA00

Tipografía

Pila de fuentes del cuerpo: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif.

Fuente de marca personalizada: BlueVinyl Bold (servida desde /assets/fonts/) — usada en los lockups del logo.

La navegación principal (Navigation.tsx) es una barra lateral de íconos que:

  • Se colapsa a solo íconos por defecto
  • Se expande al pasar el mouse o cuando el menú "Más" está abierto
  • Se colapsa a la fuerza si se establece la prop collapsed
  • Resalta la ruta activa mediante usePathname()

Elementos de navegación: Inicio, Buscar, Explorar, Mensajes, Notificaciones, Crear publicación, además de un menú desbordante "Más" con el selector de tema y cierre de sesión.

Rutas de la app

RutaPágina
/homeFeed principal
/searchBúsqueda
/messagesMensajes
/coinsMonedas y transacciones
/paymentsPagos
/profilePerfil propio
/[username]Perfil público
/p/[postId]Detalle de publicación
/settingsConfiguración
/loginInicio de sesión

Paquetes compartidos

PaquetePropósito
packages/tailwind-configConfiguración compartida de Tailwind + tokens de diseño
packages/typescript-configBases compartidas de tsconfig.json
packages/eslint-configReglas compartidas de ESLint
packages/graphqlÚnica fuente de verdad — esquema GraphQL + operaciones (Web/Admin)
packages/apollo-webCliente TS Apollo generado para frontend-nextjs (auth, ws, subida)
packages/apollo-adminCliente TS Apollo generado para frontend-admin
packages/apollo-swiftMódulo Swift ClosegramGraphQL generado para apps/ios