import { ULTICAL_APP_NAME, ULTICARDS_APP_NAME } from "@/lib/suite/page-metadata" import { suitePublicAsset } from "@/lib/suite/suite-public-asset" export type LandingAppGradient = { a: string b: string c: string } /** Dégradés de marque — CTA démo, hover cartes, halos. */ export const LANDING_BRAND_GRADIENTS = { mail: { a: "#EA4335", b: "#f2783c", c: "#c5221f" }, drive: { a: "#34A853", b: "#1e8e3e", c: "#81c995" }, ultical: { a: "#FBBC04", b: "#f9ab00", c: "#fdd663" }, ulticards: { a: "#4285F4", b: "#1a73e8", c: "#669df6" }, ultidocs: { a: "#34c77b", b: "#1fb6c9", c: "#2dd4bf" }, ultiai: { a: "#f2783c", b: "#ea4335", c: "#ff9a56" }, admin: { a: "#7C3AED", b: "#6D28D9", c: "#A78BFA" }, ultimeet: { a: "#34A853", b: "#1e8e3e", c: "#81c995" }, } as const satisfies Record export function landingAppGlowVars(gradient: LandingAppGradient) { return { "--landing-glow-a": gradient.a, "--landing-glow-b": gradient.b, "--landing-glow-c": gradient.c, } } /** Onglets démo — dégradé + texte sombre si besoin (jaune). */ export const LANDING_DEMO_TAB_STYLES: Record< string, { gradient: LandingAppGradient; primaryTextDark?: boolean } > = { mail: { gradient: LANDING_BRAND_GRADIENTS.mail }, drive: { gradient: LANDING_BRAND_GRADIENTS.drive }, agenda: { gradient: LANDING_BRAND_GRADIENTS.ultical, primaryTextDark: true }, contacts: { gradient: LANDING_BRAND_GRADIENTS.ulticards }, docs: { gradient: LANDING_BRAND_GRADIENTS.ultidocs }, } export type LandingApp = { name: string tagline: string description: string icon: string iconDark?: string href?: string /** Page produit marketing (ex. /suite/ultimail). */ productHref?: string /** Application annoncée, pas encore disponible. */ soon?: boolean accent: string gradient: LandingAppGradient } /** Onglet démo (#demo) associé à une app (dock hero, visiteur non connecté). */ export const LANDING_APP_DEMO_TAB: Partial> = { "/mail": "mail", "/drive": "drive", "/contacts": "contacts", "/agenda": "agenda", } export const LANDING_APPS: LandingApp[] = [ { name: "Ultimail", tagline: "Messagerie", description: "Boîte unifiée multi-comptes, libellés intelligents, règles, envoi programmé et tri IA.", icon: suitePublicAsset("/ultimail-mark.svg"), href: "/mail", productHref: "/suite/ultimail", accent: "#EA4335", gradient: LANDING_BRAND_GRADIENTS.mail, }, { name: "UltiDrive", tagline: "Fichiers & docs", description: "Stockage, partage par lien, documents texte, dessins et co-édition en temps réel.", icon: suitePublicAsset("/ultidrive-mark.svg"), href: "/drive", productHref: "/suite/ultidrive", accent: "#34A853", gradient: LANDING_BRAND_GRADIENTS.drive, }, { name: ULTICARDS_APP_NAME, tagline: "Carnet d'adresses", description: "Contacts unifiés sur toute la suite, synchronisés avec la messagerie et le partage.", icon: suitePublicAsset("/contacts-mark.svg"), href: "/contacts", productHref: "/suite/ulticards", accent: "#4285F4", gradient: LANDING_BRAND_GRADIENTS.ulticards, }, { name: "UltiAI", tagline: "Assistant IA", description: "Assistant connecté à vos mails et fichiers, fournisseurs OpenAI-compatibles, quotas maîtrisés.", icon: suitePublicAsset("/ultiai-mark.svg"), href: "/chat", productHref: "/suite/ultiai", accent: "#f2783c", gradient: LANDING_BRAND_GRADIENTS.ultiai, }, { name: "Administration", tagline: "Console d'admin", description: "Gestion de l'organisation, SSO, déploiement, quotas IA et réglages centralisés.", icon: suitePublicAsset("/admin-mark.svg"), href: "/admin", productHref: "/suite/administration", accent: "#7C3AED", gradient: LANDING_BRAND_GRADIENTS.admin, }, { name: ULTICAL_APP_NAME, tagline: "Calendrier", description: "Calendrier partagé, invitations et disponibilités, connecté au mail et aux contacts.", icon: suitePublicAsset("/agenda-mark.svg"), href: "/agenda", productHref: "/suite/ultical", accent: "#FBBC04", gradient: LANDING_BRAND_GRADIENTS.ultical, }, { name: "UltiMeet", tagline: "Visio", description: "Réunions vidéo chiffrées dans le navigateur, auto-hébergées via Jitsi et liées à UltiCal.", icon: suitePublicAsset("/ultimeet-mark.svg"), href: "/meet", productHref: "/suite/ultimeet", accent: "#34A853", gradient: LANDING_BRAND_GRADIENTS.ultimeet, }, { name: "Photos", tagline: "Galerie", description: "Vos photos sauvegardées et organisées, hébergées chez vous — bientôt disponible.", icon: suitePublicAsset("/photos-mark.svg"), soon: true, accent: "#FBBC04", gradient: LANDING_BRAND_GRADIENTS.ultical, }, ] export type LandingFeature = { title: string description: string icon: string /** Carte large dans la grille bento. */ wide?: boolean } export const LANDING_FEATURES: LandingFeature[] = [ { title: "Souveraineté totale", description: "Auto-hébergée sur votre infrastructure : vos mails, fichiers et identités restent chez vous. Aucun tracker, aucune télémétrie, aucune dépendance à un cloud étranger.", icon: "mdi:shield-lock-outline", wide: true, }, { title: "100 % open source", description: "Code ouvert et auditable de bout en bout. Pas de boîte noire, pas de verrou propriétaire : vous gardez le contrôle, pour toujours.", icon: "mdi:source-branch", }, { title: "SSO unifié", description: "Une seule identité (OIDC / Authentik) pour toute la suite. Connexion unique, sessions sécurisées, déconnexion centralisée.", icon: "mdi:key-chain-variant", }, { title: "IA intégrée, maîtrisée", description: "Assistant UltiAI, tri de mails par LLM et agents connectés via MCP. Compatible avec tout fournisseur OpenAI-compatible — y compris vos modèles locaux.", icon: "mdi:creation-outline", wide: true, }, { title: "Collaboration temps réel", description: "Documents, feuilles et dessins co-édités en direct, avec curseurs partagés et historique.", icon: "mdi:account-multiple-outline", }, { title: "Automatisations avancées", description: "Règles de tri, webhooks à templates, tokens API à permissions fines pour vos agents et intégrations.", icon: "mdi:webhook", }, { title: "Ergonomie familière", description: "Une interface que vos équipes connaissent déjà : migration depuis Google ou Microsoft sans friction ni formation.", icon: "mdi:gesture-tap-button", }, ] export type LandingIntegration = { label: string icon: string } export const LANDING_INTEGRATIONS: LandingIntegration[] = [ { label: "IMAP / SMTP", icon: "mdi:email-sync-outline" }, { label: "OIDC / Authentik", icon: "mdi:shield-key-outline" }, { label: "OnlyOffice", icon: "mdi:file-document-edit-outline" }, { label: "Excalidraw", icon: "mdi:draw" }, { label: "Yjs temps réel", icon: "mdi:sync" }, { label: "Mistral", icon: "simple-icons:mistralai" }, { label: "OpenAI-compatible", icon: "mdi:robot-outline" }, { label: "MCP Agents", icon: "mdi:connection" }, { label: "Webhooks", icon: "mdi:webhook" }, { label: "Jitsi Meet", icon: "simple-icons:jitsi" }, { label: "PostgreSQL", icon: "simple-icons:postgresql" }, { label: "Docker", icon: "simple-icons:docker" }, { label: "Nextcloud", icon: "simple-icons:nextcloud" }, ]