Personnalisation
Adapter HeartCo à votre marque : nom, couleurs, emails, sidebar, pages légales.
Branding
Fichier : src/lib/config/branding.ts
Toute la configuration de marque est centralisée dans l'objet APP_CONFIG. Chaque valeur est configurable via variable d'environnement :
Identité
| Propriété | Par défaut | Variable d'environnement |
|---|---|---|
| Nom | HeartCo | NEXT_PUBLIC_APP_NAME |
| Nom court | HC | NEXT_PUBLIC_APP_SHORT_NAME |
| Tagline | "Lancez votre SaaS en 1 semaine" | NEXT_PUBLIC_APP_TAGLINE |
| Description | "Le boilerplate SaaS production-ready..." | NEXT_PUBLIC_APP_DESCRIPTION |
| URL | http://localhost:3000 | NEXT_PUBLIC_APP_URL |
| Domaine | heartco.fr | NEXT_PUBLIC_APP_DOMAIN |
Emails
| Propriété | Par défaut | Variable d'environnement |
|---|---|---|
| Email principal | hello@heartco.fr | NEXT_PUBLIC_APP_EMAIL |
| Support | support@heartco.fr | NEXT_PUBLIC_SUPPORT_EMAIL |
| No-reply | noreply@heartco.fr | NEXT_PUBLIC_NOREPLY_EMAIL |
Couleurs
| Propriété | Valeur | Usage |
|---|---|---|
| Primary | #6366f1 (Indigo) | Boutons, liens, accents |
| Secondary | #8b5cf6 (Violet) | Gradients, éléments secondaires |
Réseaux sociaux
Configurables via APP_CONFIG.social : twitter, linkedin, github, discord, instagram, youtube (vides par défaut).
Informations légales
| Propriété | Variable d'environnement |
|---|---|
| Raison sociale | NEXT_PUBLIC_COMPANY_NAME |
| N° d'immatriculation | NEXT_PUBLIC_REGISTRATION_NUMBER |
| N° TVA | NEXT_PUBLIC_VAT_NUMBER |
| Adresse | NEXT_PUBLIC_COMPANY_ADDRESS |
Exemple de personnalisation
Pour rebaptiser l'app "MonSaaS" :
NEXT_PUBLIC_APP_NAME="MonSaaS"
NEXT_PUBLIC_APP_SHORT_NAME="MS"
NEXT_PUBLIC_APP_TAGLINE="La solution tout-en-un pour votre business"
NEXT_PUBLIC_APP_DOMAIN="monsaas.fr"
NEXT_PUBLIC_APP_EMAIL="contact@monsaas.fr"
NEXT_PUBLIC_SUPPORT_EMAIL="support@monsaas.fr"
NEXT_PUBLIC_NOREPLY_EMAIL="noreply@monsaas.fr"
NEXT_PUBLIC_COMPANY_NAME="MonSaaS SAS"Tailwind et thème
Fichier principal
src/styles/globals.css contient les tokens CSS et la configuration Tailwind v4.
Tokens CSS sémantiques
HeartCo utilise des custom properties CSS pour le thème clair et sombre :
:root {
--background: ...;
--foreground: ...;
--primary: ...;
--primary-foreground: ...;
--secondary: ...;
--card: ...;
--border: ...;
--ring: ...;
/* ... */
}
.dark {
--background: ...;
--foreground: ...;
/* ... variantes sombres */
}Couleurs personnalisées
:root {
--color-brand: #6366f1;
--color-deep-navy: #0d1b2a;
--color-ai-blue: ...;
--color-ai-cyan: ...;
}Dark mode
Le dark mode est géré par next-themes. Utiliser toujours les tokens CSS sémantiques, jamais de couleurs hardcodées :
// ✅ Correct — utilise les tokens
<div className="bg-background text-foreground border-border">
// ❌ INTERDIT — couleurs hardcodées
<div className="bg-white text-gray-900 border-gray-200">Fusion de classes
Utiliser cn() (clsx + tailwind-merge) pour merger les classes :
import { cn } from "~/lib/utils";
<button className={cn(
"px-4 py-2 rounded-md",
variant === "primary" && "bg-primary text-primary-foreground",
variant === "outline" && "border border-input",
className
)} />Navigation (Sidebar)
Fichier : src/lib/navigation/nav-config.ts
Structure
La sidebar est organisée en 8 sections avec des couleurs sémantiques :
| Section | Couleur | Icône |
|---|---|---|
| Dashboard | Indigo | LayoutDashboard |
| Copilote IA | Violet | Sparkles |
| Commercial | Emerald | Users |
| Facturation | Amber | Receipt |
| Finance | Sky | TrendingUp |
| Opérations | Orange | Wrench |
| Équipe | Teal | UserCog |
Modifier un item
Pour changer le label, l'icône ou le chemin d'un module :
// src/lib/navigation/nav-config.ts
{
id: "crm",
label: "Mon CRM", // ← Modifier le label
path: "/dashboard/crm",
icon: Target, // ← Changer l'icône (Lucide)
badge: "core",
moduleId: "MODULE_CRM",
}Items du footer
3 items fixes en bas de la sidebar :
- Marketplace —
/dashboard/marketplace - Aide —
/help - Paramètres —
/dashboard/parametres
Badges
| Badge | Affichage | Usage |
|---|---|---|
core | — | Module inclus dans le plan |
addon | Badge payant | Module à la carte |
vertical | Badge vertical | Module vertical (BTP) |
tag: NEW | Pastille "NEW" | Nouveau module |
tag: BETA | Pastille "BETA" | Module en bêta |
Pages légales
Les pages légales sont dans le route group src/app/(legal)/ :
| Page | Chemin | Fichier |
|---|---|---|
| CGU | /cgu | src/app/(legal)/cgu/page.tsx |
| CGV | /cgv | src/app/(legal)/cgv/page.tsx |
| Mentions légales | /mentions-legales | src/app/(legal)/mentions-legales/page.tsx |
| Politique cookies | /politique-cookies | src/app/(legal)/politique-cookies/page.tsx |
| Politique confidentialité | /politique-confidentialite | src/app/(legal)/politique-confidentialite/page.tsx |
Pour personnaliser, modifiez directement le contenu des pages. Les informations légales (raison sociale, adresse) sont tirées de APP_CONFIG.legal.
Templates d'emails
Dossier : src/lib/emails/templates/
6 templates lifecycle prêts à l'emploi :
| Template | Déclencheur | Description |
|---|---|---|
email-verification.ts | Inscription | Lien de vérification (24h) |
trial-welcome.ts | Début trial | Bienvenue + 3 features à essayer |
trial-reminder-7days.ts | J-7 trial | Rappel avec incitation upgrade |
trial-reminder-2days.ts | J-2 trial | Rappel urgent conversion |
trial-expired.ts | Fin trial | Stats d'usage + plans payants |
newsletter-onboarding.ts | J+3 inscription | Tips personnalisés par feature |
Personnaliser un template
Les templates utilisent Resend avec du HTML inline. Pour modifier :
- Ouvrir le fichier template dans
src/lib/emails/templates/ - Modifier le HTML, les textes, les couleurs
- Les variables dynamiques (nom, lien, etc.) sont passées en paramètre
Templates de relance
Les relances (src/lib/emails/relances.ts) utilisent des variables de substitution :
| Variable | Description |
|---|---|
{{clientName}} | Nom du client |
{{invoiceNumber}} | Numéro de facture |
{{amount}} | Montant dû |
{{dueDate}} | Date d'échéance |
{{daysPastDue}} | Jours de retard |
{{orgName}} | Nom de l'organisation |
{{signature}} | Signature configurée |