@rmdes/indiekit-endpoint-site-config 1.0.0-beta.4 → 1.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,15 +52,12 @@ export const ACCENT_SUGGESTIONS = Object.freeze([
52
52
  *
53
53
  * @type {ReadonlyArray<{slug: string, label: string}>}
54
54
  */
55
- // NOTE: `slug` values are stable identifiers persisted in MongoDB and MUST NOT
56
- // change (renaming would orphan saved configs). The `neutral-zinc` and
57
- // `warm-gray` slugs now carry the Sage / Clay palettes — see surface-presets.js.
58
55
  export const SURFACE_PRESET_OPTIONS = Object.freeze([
59
- Object.freeze({ slug: "warm-stone", label: "Warm Stone" }),
60
- Object.freeze({ slug: "warm-gray", label: "Clay" }),
61
- Object.freeze({ slug: "stone", label: "Stone (Neutral)" }),
62
- Object.freeze({ slug: "cool-slate", label: "Cool Slate" }),
63
- Object.freeze({ slug: "neutral-zinc", label: "Sage" }),
56
+ Object.freeze({ slug: "warm-stone", label: "Warm Stone" }),
57
+ Object.freeze({ slug: "clay", label: "Clay" }),
58
+ Object.freeze({ slug: "stone", label: "Stone (Neutral)" }),
59
+ Object.freeze({ slug: "cool-slate", label: "Cool Slate" }),
60
+ Object.freeze({ slug: "sage", label: "Sage" }),
64
61
  ]);
65
62
 
66
63
  /**
@@ -44,6 +44,7 @@ function parseSocialFromBody(body) {
44
44
  export function parseIdentityBody(body) {
45
45
  return {
46
46
  name: safeString(body.name),
47
+ siteName: safeString(body.siteName),
47
48
  avatar: safeUrlOrEmpty(body.avatar),
48
49
  title: safeString(body.title),
49
50
  pronoun: safeString(body.pronoun),
@@ -1,20 +1,11 @@
1
1
  // Surface presets — the neutral/tinted base palettes offered in the branding
2
2
  // admin. Each is an 11-step tone ramp (50 lightest → 950 darkest).
3
3
  //
4
- // Design note (2026-06-06): the original five were warm-stone, cool-slate,
5
- // stone, neutral-zinc and warm-gray. Three of those (stone, neutral-zinc,
6
- // warm-gray) were near-identical Tailwind neutrals — stone and neutral-zinc
7
- // even shared an identical tone-50 (#fafafa) — so switching between them
8
- // produced no visible change in light mode (where the page background is
9
- // tone-50). To keep persisted configs valid, the SLUGS are unchanged, but the
10
- // `neutral-zinc` and `warm-gray` ramps were re-skinned into distinct hue
11
- // families (Sage / Clay). Labels live in lib/controllers/branding.js.
12
- //
13
- // warm-stone — warm taupe/brown (original rmendes.net palette)
14
- // cool-slate — blue-gray (Tailwind "slate")
15
- // stone — true neutral gray (Tailwind "neutral")
16
- // neutral-zinc — Sage: green-tinted neutral
17
- // warm-gray — Clay: terracotta/rose-tinted warm
4
+ // warm-stone warm taupe/brown (original rmendes.net palette)
5
+ // cool-slate blue-gray (Tailwind "slate")
6
+ // stone — true neutral gray (Tailwind "neutral")
7
+ // sage — green-tinted neutral
8
+ // clay — terracotta/rose-tinted warm
18
9
  //
19
10
  // `cool-slate` and `stone` ramps are from Tailwind CSS (MIT License,
20
11
  // Copyright (c) Tailwind Labs, Inc. — https://tailwindcss.com/docs/colors).
@@ -31,15 +22,15 @@ export const SURFACE_PRESETS = Object.freeze({
31
22
  600: "#475569", 700: "#334155", 800: "#1e293b",
32
23
  900: "#0f172a", 950: "#020617",
33
24
  }),
34
- // Sage — green-tinted neutral. Slug kept as "neutral-zinc" for persistence.
35
- "neutral-zinc": Object.freeze({
25
+ // Sage — green-tinted neutral.
26
+ "sage": Object.freeze({
36
27
  50: "#f3f7f1", 100: "#e6efe3", 200: "#cfe0ca",
37
28
  300: "#aecaa6", 400: "#82a878", 500: "#5e8a5a",
38
29
  600: "#496e47", 700: "#3a5638", 800: "#283a27",
39
30
  900: "#1a271a", 950: "#0e150e",
40
31
  }),
41
- // Clay — terracotta/rose-tinted warm. Slug kept as "warm-gray".
42
- "warm-gray": Object.freeze({
32
+ // Clay — terracotta/rose-tinted warm.
33
+ "clay": Object.freeze({
43
34
  50: "#faf4f1", 100: "#f4e7e1", 200: "#e8d2c7",
44
35
  300: "#d8b3a2", 400: "#c08b73", 500: "#a8705a",
45
36
  600: "#8a5642", 700: "#6d4334", 800: "#492d23",
@@ -37,6 +37,11 @@ export const DEFAULTS_SITE = Object.freeze({
37
37
  schemaVersion: 3,
38
38
  identity: Object.freeze({
39
39
  name: "",
40
+ // Site title / brand — drives the header, <title>, og:site_name and
41
+ // schema.org publisher. Distinct from `name` (the person, used by the
42
+ // h-card / hero). Empty falls back to `name` in the theme so single-author
43
+ // sites where the brand IS the person keep working with one field.
44
+ siteName: "",
40
45
  avatar: "",
41
46
  title: "",
42
47
  pronoun: "",
package/locales/en.json CHANGED
@@ -21,7 +21,7 @@
21
21
  "saved": "Identity saved successfully. Refresh your site to see changes.",
22
22
  "profile": {
23
23
  "legend": "Profile",
24
- "name": { "label": "Name", "hint": "Your name as shown in the h-card and OG metadata" },
24
+ "name": { "label": "Name", "hint": "The person's name, shown in the h-card, hero, and author cards. For the site/brand title, use Site title below." },
25
25
  "title": { "label": "Title", "hint": "Job title or tagline (e.g. 'Middleware Engineer')" },
26
26
  "avatar": { "label": "Avatar URL", "hint": "URL of your profile photo for the h-card" },
27
27
  "pronoun": { "label": "Pronouns", "hint": "e.g. she/her, he/him, they/them" },
@@ -55,7 +55,7 @@
55
55
  "preferences": {
56
56
  "legend": "Site preferences"
57
57
  },
58
- "name": "Site name",
58
+ "siteName": { "label": "Site title", "hint": "Shown in the site header, browser tab, and link previews. Leave blank to use your Name above (for single-author sites where the brand is the person)." },
59
59
  "description": "Description",
60
60
  "tagline": "Tagline",
61
61
  "defaultOgImage": "Default OpenGraph image URL",
package/locales/fr.json CHANGED
@@ -21,7 +21,7 @@
21
21
  "saved": "Identité enregistrée avec succès. Actualisez votre site pour voir les modifications.",
22
22
  "profile": {
23
23
  "legend": "Profil",
24
- "name": { "label": "Nom", "hint": "Votre nom tel qu'il apparaît dans la h-card et les métadonnées OG" },
24
+ "name": { "label": "Nom", "hint": "Le nom de la personne, affiché dans la h-card, le hero et les cartes d'auteur. Pour le titre du site/de la marque, utilisez Titre du site ci-dessous." },
25
25
  "title": { "label": "Titre", "hint": "Intitulé de poste ou slogan (ex. « Ingénieur middleware »)" },
26
26
  "avatar": { "label": "URL de l'avatar","hint": "URL de votre photo de profil pour la h-card" },
27
27
  "pronoun": { "label": "Pronoms", "hint": "ex. elle, il, iel" },
@@ -55,7 +55,7 @@
55
55
  "preferences": {
56
56
  "legend": "Préférences du site"
57
57
  },
58
- "name": "Nom du site",
58
+ "siteName": { "label": "Titre du site", "hint": "Affiché dans l'en-tête du site, l'onglet du navigateur et les aperçus de liens. Laissez vide pour utiliser votre Nom ci-dessus (pour les sites mono-auteur où la marque est la personne)." },
59
59
  "description": "Description",
60
60
  "tagline": "Slogan",
61
61
  "defaultOgImage": "Image OpenGraph par défaut",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rmdes/indiekit-endpoint-site-config",
3
- "version": "1.0.0-beta.4",
3
+ "version": "1.0.0-beta.6",
4
4
  "type": "module",
5
5
  "description": "Site identity, branding, and navigation configuration for Indiekit",
6
6
  "main": "index.js",
@@ -334,6 +334,12 @@
334
334
  <section class="hp-section">
335
335
  <h2>{{ __('siteConfig.identity.preferences.legend') }}</h2>
336
336
  <div class="hp-field-grid">
337
+ <div class="field field--full">
338
+ <label class="field__label" for="siteName">{{ __('siteConfig.identity.siteName.label') }}</label>
339
+ <input class="field__input" type="text" id="siteName" name="siteName"
340
+ value="{{ config.identity.siteName or '' }}">
341
+ <p class="field__hint">{{ __('siteConfig.identity.siteName.hint') }}</p>
342
+ </div>
337
343
  <div class="field">
338
344
  <label class="field__label" for="locale">{{ __('siteConfig.identity.locale') }}</label>
339
345
  <input class="field__input" type="text" id="locale" name="locale"