Some checks are pending
E2E / Playwright e2e (push) Waiting to run
- Refactored metadata for contacts, administration, and Ulticards pages to utilize dynamic app names and descriptions. - Introduced new product pages for Ultiai, Ultical, Ulticards, Ultidrive, Ultimail, and Ultimeet with appropriate metadata. - Enhanced layout components to ensure consistent styling and functionality across new product sections. - Updated various components to replace hardcoded labels with dynamic references to improve maintainability and consistency.
231 lines
7.5 KiB
TypeScript
231 lines
7.5 KiB
TypeScript
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<string, LandingAppGradient>
|
|
|
|
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<Record<string, string>> = {
|
|
"/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"),
|
|
iconDark: suitePublicAsset("/agenda-mark-dark.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" },
|
|
]
|