Skip to content

Brand

Gurbani Soul — Brand Book

16 min readUpdated

Page actions

ChatGPT and Claude are third-party services. The link gives them this page's public address and a short instruction. This site records nothing.

The Gurbani Soul brand: the gold rule, palette, typography, mark, components, voice, accessibility and the gates before shipping.

Status: adopted — G1 passed 2026-09-18; phase 2 shipped to integration (PRs #28–#31). G3 and G4 were closed on 2026-09-26 for the first App Store submission (1.3.10, see the gates in §12). Scope: the iOS app, its widgets, icon and share card. The Knowledge Base website is a separate scholarly property and keeps its own name and theme.

Companion files: tokens.json (source of truth) · contrast-report.md (generated by scripts/brand/contrast_report.py; every ratio quoted here comes from it).


1. Brand idea

Gurbani Soul is a quiet, exact companion to Sri Guru Granth Sahib Ji. Verbatim, cited by Ang, never invented.

LayerNameRole
ProductGurbani SoulWhat people download and open
EndorserBuilt by AlgorythmosCredit line only (About, store listing)
The textSri Guru Granth Sahib Ji · Ang NNever branded, never abbreviated, never styled as a product

Personality: reverent · exact · warm · unhurried · plain-spoken.

Colour story: gold leads — the gold of Harmandir Sahib and of basanti — on warm paper and warm ink. Red is a rare accent. Gurmukhi is always set in ink, never in a brand colour.

2. Where the palette comes from, and what we leave behind

The palette values are taken from a McDonald’s brand kit held locally as reference (Brand-files/, git-ignored).

We take: the hex values; an 8-pt spacing grid; radii 4 / 8 / 12; short spring motion; one primary action per screen; red under ~10% of any screen; no gold or red body text; sentence case; flat before gradient; a pre-ship checklist.

We leave, without exception: the Golden Arches in any form; the “Token” (a gold mark on a red rounded square); cropped-arch graphics; watermark patterns; the Speedee typeface; price badges; food-photography rules; the playful retail voice and tagline.

The kit’s printed contrast ratios are inaccurate (it states 11.2:1 and 1.9:1 where the real figures are 9.94:1 and 1.69:1). This book quotes only computed values.

3. Colour

3.1 The one rule that makes gold work

Brand gold #FFBC0D is 1.69:1 on white and 1.58:1 on reader paper. It cannot be text, an icon, a link or an unbordered shape in light mode. So the accent is two tokens:

TokenUseRequirement
accentFillThe literal brand gold. Prominent fills only: primary button, selected pill, hero card, widget ruleAlways carries a 1-pt accent border in light mode
accentApp tint, SF Symbols, links, toggles, borders, focus>= 3:1 on card and paper
accentTextAccent-coloured words on a surface>= 4.5:1 on canvas, card, paper
onAccentLabel sitting on accentFill>= 4.5:1 on the fill

In dark mode all three gold tokens are the same #FFBC0D (10–11:1 on warm ink) — gold is at its best there.

3.2 “Soul Gold” — the default palette

TokenLightDarkLight, Increase ContrastDark, Increase Contrast
accentFill#FFBC0D#FFBC0D#8A6100#FFC72C
accent#A87900#FFBC0D#8A6100#FFC72C
accentText#8A6100#FFBC0D#5C4100#FFC72C
onAccent#2B1A05#2B1A05#FFFFFF#2B1A05
accentDeep (hero second stop)#FFB81C#C08B00#6E4E00#D9A200

Worst-case measured ratios: accentText 4.96 (light canvas); accent 3.64 (light paper); onAccent 5.54 (light Increase Contrast). Full table in the contrast report.

3.3 Supporting brand colours

ColourLightDarkRoleLimits
Brand red#DA291C#DA291CFill only: badge, count, one-off emphasis; white label 4.87:1Never text (4.36:1 on canvas). Under ~10% of a screen. Never behind or beside Gurmukhi
Maroon#8A1538#E0658AOptional categorical / specialPasses as text on all legs
Kraft#B69A81#B69A81Dividers, paper tint, illustrationNever text (2.48–2.65:1)

The status reds, greens and blues stay exactly as they are (Ink.positive / negative / info / special). Ink.negative #B33528 remains the only text red.

3.4 Surfaces — unchanged

Light: system grouped backgrounds (#F2F2F7 canvas, #FFFFFF card) and reader paper #FBF7F0. Dark: the warm ink ramp #151210 / #1E1A17 / #282320, paper #171412. Never pure black, never the kit’s neutral greys — gold needs warmth under it, and this ramp is already regression-tested.

3.5 The other accents stay

Saffron, Gold (antique, #B07D12), Indigo and Teal remain in the accent picker with their current values and labels. Anyone who already chose one keeps it; only readers who never chose move to Soul Gold.

3.6 Categorical colour (Lineage, Insights, Clock, echo bands)

Meaning is never carried by colour alone — pair with a label or symbol. With gold as the lead, contributor kinds and chart series must stay clear of #FFBC0D and #DA291C; keep the existing info-blue / special-violet / teal set, and move “Guru” from saffron to accent so it follows the palette.

3.7 Theme-group colours (Constellation, theme chips)

The 54 corpus themes sit in six theological groups (web /themes and iOS ThemesScreen). Each group has one colour, themeGroup.* in tokens.json, so a theme’s star, chip or legend swatch says which family it belongs to:

RoleGroupLightDark
themeGroup.divineThe Divine Realitykesri #9C4D10#F2A060
themeGroup.conditionThe Human Condition & Illusionsearth #6B5440#CDB39A
themeGroup.vicesThe Five Vicesplum #7B3F91#D7A0EA
themeGroup.pathThe Path & Praxisteal #1D6B67#62CEC4
themeGroup.virtuesVirtues & Divine Attributesleaf #3E6A1E#A6D47A
themeGroup.statesSpiritual Statessky #1F62A6#8EC2F5

Rules: every leg clears 4.5:1 on all four surfaces (the contrast report checks it), so a group colour may label text as well as fill a star. None is red or brand gold — the Five Vices are plum, never red beside Gurmukhi, and the centre of any constellation stays Soul Gold (accentFill with its accent edge). Colour never carries the group alone: the legend names it and every star has a text label or list twin.

4. Typography

TextFaceRule
GurmukhiSant Lipi (bundled, OFL)Untouched. Ink colour only. Reader size setting and Dynamic Type preserved
Screen titles, section headings, hero linesWarm serif, headings only — candidates Fraunces, Source Serif 4 (both OFL)Always relativeTo: a text style so it scales to AX5; never below 17 pt; never for buttons, tabs, lists
Everything elseSan Francisco (system)System text styles, no fixed point sizes

Choosing the serif (gate G1), in order: sits calmly beside Sant Lipi; clear lining numerals for Ang numbers; holds up at AX5 without truncation; font file size; OFL text shipped next to the font as with Sant Lipi. Recommendation going in: Source Serif 4 (quieter, more bookish); Fraunces is the expressive alternative.

Style: sentence case everywhere. No all-caps. Emphasis by weight, not by colour.

5. The mark and the app icon

The mark is ੴ set in Sant Lipi — flat, single colour, never outlined, shadowed, tilted or gradient-filled. It is never cropped, redrawn or merged with another symbol. Clear space in a layout: half the mark’s height on every side. Minimum size 16 pt. Permitted colours: brand gold, warm ink #171412, paper #FBF7F0, white.

The app icon — v2, “Pothi & Naad” (chosen by the product owner 2026-10-14)

ੴ above an open pothi drawn in two lines, with rings of naad rising from the pothi’s spine.

AppearanceFieldMark and pothiRings
DefaultTop-lit gold, #FFCE45 → #F09A00Warm ink #171412White, one even tone
DarkTop-lit warm ink, #2B221B → #0E0C0ABrand gold #FFBC0DGold, faint
TintedBlack (the system applies the tint)WhiteWhite, faint

The icon has its own grid; the layout clear-space rule above would keep it too small to read.

  • Mark: Sant Lipi at weight 800, 80% of the tile width, centred on visual mass rather than its bounding box. The stroke must stay at or above 2 px at the 58 px size, and the kaar at least 8% inside the icon mask.
  • Pothi: two lines, 40 px on the 1024 canvas. A plain open book, not a depiction of a Bir.
  • Light and depth live in the field only. The mark and the pothi are one flat colour in every appearance. The icon field is a permitted gradient, alongside the share-card rule (§6).
  • Layered icon (iOS 26 and later): the same geometry as an Icon Composer document, with the system’s specular highlight turned off so the mark is never embossed.
  • Red is not used in the icon. The field is warmer and deeper than the literal brand gold, and the mark on it is ink, so the tile cannot be read as a gold mark on red (§2).

Source of truth: ios/tools/make_app_icon.swift in gurbani-soul-ios (make app-icon), which refuses to run when a rule above is broken. The web, PWA and wiki icons are built from the same outlines by frontend/scripts/gen-icons.mjs (frontend/scripts/app-icon/). The favicons carry the mark and the pothi without the rings, which are noise at 16–32 px.

Launch screen: the icon’s ੴ and pothi without the field or the rings — warm ink on paper, brand gold on warm ink in dark — 200 pt with the artwork about 186 pt wide, written by the same make app-icon. While the integrity check runs, the app shows the same logo on the same background, centred on the screen, so the launch screen hands over without a jump.

The ੴ set inside the app (About, widgets) and on the open-graph cards stays the light weight in a single colour; it is the mark in a layout, not the icon.

Icon v1 (2026-09-18 to 2026-10-14)
ConceptDescriptionNotes
A (chosen for v1)Gold ੴ on warm ink #171412Distinctive on a home screen; furthest from any food-brand look; dark and tinted variants are trivial
BInk ੴ on brand goldStrongest colour ownership; closer to retail yellow
CGold ੴ on paperSoftest; weakest contrast at small sizes

Flat ExtraLight ੴ at about half the tile width. Replaced because the stroke was about 1.3 px at 58 px and the black tile disappeared on dark backgrounds.

6. Components

ComponentSpec
Primary buttonaccentFill + 1-pt accent border (light) · onAccent label · radius 4 · one per screen
Secondary buttonCard surface · hairline · accentText label
Selected pillAs primary button, radius 8
CardUnchanged: shadow in light, hairline in dark, radius 12
Explore hubNo hero slab: a dated masthead (Source Serif 4 hero line), then cards on the Card surface. The only gold fill is the Featured today capsule: accentFill + 1-pt accent border, onAccent label (the selected-pill recipe). Card previews (ribbon, dot field, dial, sky) use accent tints and the family/voice tokens; Gurmukhi raag names and the one quoted verse are ink. Gradient accentFill -> accentDeep allowed only on the share-card rule
Focus highlightaccent at 18%
GlowA radial/linear accentFill (or accent) wash at ≤14% over an AA-checked surface — a light, never a text background. Used on the Nitnem hero, the Raag Clock now-card, Lineage, and every widget’s PaperGround. Distinct from the opaque accentFill→accentDeep gradient, which stays limited to the share-card rule.
Reader paperInk.paper (default), Ink.paperWarm (#FDF6E3 light — hue-shifted, still clears every accent pair), or Night (the warm-ink dark scheme forced on the reader subtree; no new colours).
Share card (VerseCard)Paper surface, ink Gurmukhi, gold rule, full citation “Sri Guru Granth Sahib Ji · Ang N”
WidgetsCard surface, gold rule, accentText labels; same tokens as the app. The Raag Now dial (PaharDialRenderer) is the same face as the app: accentFill current watch with an accent stroke, accent hand; lock-screen accessories render it mono. The 12-hour analog face (ClockHandsLayer) uses ink tapered hands and an accent seconds hand (app only; widgets show hour/minute at the entry minute); the day/date number is accentText.
Badge / countBrand red fill, white label — the only routine use of red

Website exception (owner decision, 2026-10-18): the marketing site never uses red, except the HELP heart — a solid heart with “HELP” set inside it in white (4.87:1), in the top bar on every page (desktop and phones), linking to /contribute. It is the heart’s fill only, set through the single --contribute-heart token in frontend/src/styles/marketing.css; never text, never a background, never beside Gurmukhi. BrandDisciplineInSource allows exactly that one declaration.

7. Voice

Reverent, plain, exact. Short sentences. Say what a thing is. Never playful about the text, never promotional inside the reader, never “AI” as a selling point. Every quotation carries its Ang. Explanation is always labelled as explanation. UI strings that tests depend on are frozen unless the test suite is updated with them.

8. Accessibility

All text pairs >= 4.5:1 and all UI pairs >= 3:1 across light, dark and both Increase Contrast modes — proven by the contrast report and, once implemented, by ThemeContrastTests. Tap targets >= 44 pt. Dynamic Type to AX5. Reduce Motion honoured through the existing motion helpers. Gold, red and maroon are never the sole signal of state.

9. Do / Don’t

DoDon’t
Let gold lead; one gold action per screenSet words, icons or links in #FFBC0D on a light surface
Border every gold fill in light modePut a gold mark on a red square
Keep Gurmukhi in ink on paperColour, tint or decorate scripture text
Use red for a badge, sparinglyUse red for text, large areas, or near Gurbani
Use the serif for headings onlySet buttons, lists or body in the serif
Cite “Sri Guru Granth Sahib Ji · Ang N”Call the text “Gurbani Soul”

10. Pre-ship checklist

  • ☐ python3 scripts/brand/contrast_report.py exits 0
  • ☐ No hex outside DesignTokens.swift; no raw system colours in screens
  • ☐ Every gold fill bordered in light mode; one primary action per screen
  • ☐ Red under ~10% and never text
  • ☐ Light, dark, Increase Contrast and AX5 screenshots reviewed
  • ☐ Widgets and share card match the app
  • ☐ Icon: no red; mark and pothi one flat colour; three flat variants, the layered icon and the launch logo present; make app-icon runs clean
  • ☐ Scripture text, corpus and database untouched

11. Governance

tokens.json is the source of truth, and the app is pinned to it. gurbani-soul-ios’s BrandTokensParityTests (gurbani-soul-ios PR #20) checks ios/App/Shared/DesignTokens.swift against this file in all four legs (light, dark, lightHC, darkHC): AccentPalette.soul (accent, accentFill, accentText, onAccent, accentDeep), the Ink surfaces (canvas, card, paper, paperWarm) and status colours (positive, negative, info, special), the theme-group colours (themeGroup.*), and Theme.Space / Theme.Radius. The test reads a copy vendored by the iOS repo’s scripts/vendor_sync.py and pinned by platform commit and sha256 in its vendor.lock.json, so the app moves only when it re-vendors. It fails closed both ways: a value changed on either side, or a role added, renamed or removed here, fails with the role and leg named. brand.red, brand.onRed, brand.maroon, brand.kraft and radius.button are declared there as having no Swift token; giving one a token means adding it to the test’s mapping.

A colour change, in order:

  1. Here — edit tokens.json, re-run python3 scripts/brand/contrast_report.py (must exit 0) and commit both (contrast_report.py --check, in make docs-check and the wiki’s docs job, fails if they disagree). CI also holds the web theme (frontend/src/theme.ts, WebThemeMatchesTokens) and the wiki theme (docs-site/src/styles/theme.css, tools/docs_check.py) to the light and dark legs, so they change in the same PR.
  2. Release — the change reaches a platform release tag (or another ref the iOS repo can pin).
  3. Vendor — in gurbani-soul-ios, make vendor-sync-platform REF=<tag or commit> re-vendors the file and updates vendor.lock.json; BrandTokensParityTests now fails on every role and leg that moved.
  4. Swift — change the literal in DesignTokens.swift to match and commit it with the vendored file and the lock; the test is green again.

Decisions are logged below.

DateDecision
2026-09-18Palette values adopted from the reference kit; marks, typeface and voice rejected
2026-09-18Accent split into accentFill / accent after literal gold measured 1.69:1 on white
2026-09-18New palette case soul; existing gold palette left untouched
2026-09-18Brand red is fill-only; Ink.negative stays the text red
2026-09-18G1 passed: icon concept A (gold ੴ on warm ink) and Source Serif 4 for headings chosen by the product owner
2026-10-14Icon v2, “Pothi & Naad” chosen by the product owner: a bold ੴ above an open pothi, ink on gold; gold on warm ink in dark mode. G3 to be re-run on it
2026-09-18accentDeep given Increase Contrast legs so the hero label holds 4.5:1 at both gradient ends
2026-09-18Source Serif 4 (variable, SIL OFL 1.1, from adobe-fonts/source-serif) bundled for navigation titles and hero lines only; widgets stay on the system face
2026-10-18Website exception: brand red allowed only as the fill of the HELP heart (links to /contribute) (--contribute-heart), chosen by the product owner; the BrandDisciplineInSource gate allows exactly that one declaration
2026-09-26DesignTokens.swift pinned to tokens.json in all four legs by gurbani-soul-ios BrandTokensParityTests (PR #20), against a copy vendored by commit; a colour change now flows JSON → release → make vendor-sync-platform → Swift literal
2026-10-23Six theme-group colours (themeGroup.*) added for Constellation v2 (a new mini-palette, decided by the product owner; values proposed in the palette PR): one per theological group, AA as text on every surface, no red, no gold

Visual audit set

Screenshots are local audit evidence (git-ignored): ios/App/new_shots/brand-<date>/{light,dark}/ — reader, search_results, themes, clock, explore_hub, more_display. Re-capture after any token, type or icon change and compare with the previous dated set. First set: brand-2026-09-18.

12. Gates before any code

GateOwnerPass condition
G1 VisualProduct ownerSpecimen sheet approved; icon concept and serif chosen
G2 ContrastScriptZero failures, four legs, real surfaces
G3 SensitivityGranthi / scholar, with the scripture-fidelity charterੴ treatment, icon, and any red near Gurbani accepted
G4 LegalProfessional clearance, with the pending trademark reviewGold-and-red palette without Arches or Token cleared for the App Store

Status at the first submission (1.3.10, 2026-09-26):

  • G3 closed 2026-09-26. The ੴ icon treatment, the launch screen and the default traditional saroop were accepted with no change requested, recorded by the owner. The review pack is kept with the release records.
  • G4 closed 2026-09-26 by the owner on a documented self-search (trademark registers in Australia, the US, the EU and WIPO, both app stores, and the trade-dress rule above); full professional clearance is scheduled after launch. The search record is private and stays out of the public repositories.

Status at icon v2 (2026-10-14):

  • G3 is open again for the icon and the launch screen. The 2026-09-26 acceptance covered icon v1 and the v1 launch screen. Icon v2 changes the weight and the field and adds an open pothi beneath ੴ, and the launch screen now matches it, so both go back to the scholar before any release that carries them.
  • G4 to be re-checked for the gold field: the self-search note should record that an ink mark on gold, with no red and no arch, was considered.

Status at the Knowledge Base redesign (web 1.4.0):

  • G3 for the web themes is open. The five themes copied from the app are approved. The eight web-only themes, and the rule that Gurmukhi is ink in every theme, have not been seen by a scholar; they ship marked review in docs/brand/web-themes.json. The owner waived the review for the 1.4.0 release on 2026-10-13; it runs after the release, and a theme can be withdrawn by setting it to held.

13. Implementation map (phase 2 — shipped in PRs #28–#31; kept as the record)

One pull request per step, tests green at each:

  1. Tokens — add soul, accentFill, AccentPalette.brandDefault in ios/App/Shared/DesignTokens.swift; default read from it in RootView.swift (two sites), PaletteKey, Theme.accent; AccentColor.colorset -> #A87900 / #FFBC0D. For the four existing palettes accentFill == accent, so nothing of theirs moves. Tests: existing assertions kept; onAccent asserted on accentFill; asset-parity pinned to brandDefault; JSON-to-Swift parity planned (it landed after the repo split as gurbani-soul-ios PR #20; see §11).
  2. Components — fills to accentFill + border (Buttons.swift, ModePill.swift, Explore hero); VerseCard, FocusHighlight; hard-coded saffron in Widgets/SGGSWidgets.swift; Lineage “Guru” colour.
  3. Type — bundle the serif and its OFL text; UIAppFonts in project.yml for app and widget; Brand.heading(_:relativeTo:) beside Brand.gurmukhi.
  4. Icon and launch — new values in ios/tools/make_app_icon.swift; regenerate with make app-icon, which writes the icon and the launch logo (since the repo split this lives in gurbani-soul-ios; see §5).
  5. Docs and CI — store listing, test plan, screenshots, changelog; script the token-leak check.