You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/blog/custom-theme.en.md
-2Lines changed: 0 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,9 +4,7 @@ date: 2026-06-16
4
4
author: "Felix Leger"
5
5
description: "What a full custom vanityURLs theme buys, what it costs, and how to keep the instance upgradeable."
6
6
tags: ["branding", "customization", "case-study"]
7
-
featured: false
8
7
---
9
-
10
8
I have been [using vanityURLs since 2024](/showcase/f-l-ca/). That is the useful boundary. The engine stays boring and the public surface gets personality.
11
9
12
10
For [f-l.ca](https://f-l.ca/), I wanted something else, the engine stays boring and the public surface feel unmistakably mine.
J'utilise [vanityURLs depuis 2024](/fr/showcase/f-l-ca/). C'est la frontière utile. Le moteur reste ennuyeux et la surface publique gagne de la personnalité.
12
10
13
11
Pour [f-l.ca](https://f-l.ca/), je voulais autre chose : un moteur ennuyeux, mais une surface publique qui me ressemble immédiatement.
@@ -29,15 +27,15 @@ Pour [f-l.ca](https://f-l.ca/), je voulais autre chose : un moteur ennuyeux, mai
29
27
30
28
Pour le chemin mécanique, consultez [Marque](/fr/docs/reference/brand/) et [Surcharges custom](/fr/docs/reference/custom-overrides/).
31
29
32
-
## L'URL Est L'Interface
30
+
## L'url est l'interface
33
31
34
32
Mon thème tourne autour d'une idée simple : le lien lui-même devrait être l'objet principal de la page.
35
33
36
34
Quand quelqu'un tape un slug, la flèche ronde devient l'action.
37
35
38
36
Quand un chemin est invalide, l'écran _shake_ et montre le chemin au visiteur au lieu de changer de système visuel.
39
37
40
-
## Le Mode Custom Complet A Un Coût
38
+
## Le mode custom complet a un coût
41
39
42
40
Ce n'est pas le chemin le plus rapide, vous pouvez demander à mon co-mainteneur {{< emoji name="smiling" decorative="true" >}}. Le mode custom complet veut dire que l'instance fournit ses propres pages publiques dans `custom/public`, y compris les variantes anglaises et françaises, les pages de consultation et les pages d'état.
43
41
@@ -53,7 +51,7 @@ Cela veut aussi dire que le thème doit se comporter comme du code produit :
53
51
54
52
Les pages par défaut de vanityURLs absorbent la majorité de cette maintenance. Un thème custom donne plus de contrôle. Il retire aussi quelques garde-fous.
55
53
56
-
## Garder Les Noms Produit Hors Des Fichiers Custom
54
+
## Garder les noms produit hors des fichiers custom
57
55
58
56
Une frontière que je ne franchirais pas concerne les noms de fichiers. Cette frontière compte au build.
59
57
@@ -63,15 +61,15 @@ Le build copie `defaults/public` d'abord, puis superpose `custom/public`.[^overl
63
61
64
62
La séparation est simple : donner leurs propres noms d'assets aux pages web et d'état custom, et laisser les pages qui restent vanilla utiliser les fichiers `v8s-*` gérés.
65
63
66
-
## C'est Une Autre Frontière De Confiance
64
+
## C'est une autre frontière de confiance
67
65
68
66
Au 16 juin 2026, la documentation des pages publiques de vanityURLs indique que le HTML custom reçoit un profil CSP compatible et sandboxé, tandis que le CSS, le JavaScript, les images, les polices et les manifests référencés sont servis comme assets normaux.[^csp]
69
67
70
68
C'est le bon défaut pour des pages copiées ou écrites à la main. Il permet du CSS et du JavaScript même hôte sans accorder la confiance des pages produit.
71
69
72
70
Il y a un coût. Le JavaScript custom ne devrait pas dépendre des cookies de l'hôte, de `localStorage` côté hôte, ou d'API same-origin protégées quand le sandbox omet `allow-same-origin`. Heureusement, vanityURLs n'utilise pas ces capacités.
73
71
74
-
## La Marque Vit Dans Les Petits Choix
72
+
## La marque vit dans les petits choix
75
73
76
74
Le travail de marque n'est pas le formulaire de slug. Ça, c'est l'interface.
77
75
@@ -85,7 +83,7 @@ Les pages par défaut utilisent le helper produit `v8s-theme.js` pour que les li
85
83
86
84
Je n'ai pas personnalisé les pages opérateur : `_stats` et `_tests`. Ce ne sont pas des surfaces de marque publiques.
87
85
88
-
## Dire A La Maintenance Ce Qui Est Intentionnel
86
+
## Dire à la maintenance ce qui est intentionnel
89
87
90
88
Le fichier de maintenance est `custom/v8s-custom-overrides.json`. vanityURLs utilise ce JSON pour que [npm run doctor](/fr/docs/reference/public-pages/#ignorer-doctor-volontairement)[^doctor] et [v8s-fix](/fr/docs/command-line-interface/v8s-fix/) sachent quelles différences custom ne doivent pas être réparées vers `/defaults`.
0 commit comments