From 26e89d1ea762fab5e85caa0f9675dc6028b81533 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Sun, 28 Jun 2026 22:31:25 +0300 Subject: [PATCH] site: migrate logos to brand kit, fix hero heading, green social card Finish moving modern-python.org onto the canonical brand/build kit: - brand/build: add wordmark() (transparent two-color hero lockup, light + cream/gold-dark variants) and mark() (transparent chevron, no background); render.py emits wordmark.svg, wordmark-dark.svg, mark.svg. Tests cover both. - just sync-assets: regenerate the kit and copy the site subset into docs/assets. - Header: theme.logo -> assets/mark.svg (chevron mark), keeping Material's "Modern Python" site title and search beside it. Favicon -> assets/favicon.svg. - Hero: replace the inline single-color wordmark with the two-color brand wordmark inside the page

, scheme-swapped light/dark in extra.css. The

suppresses Material's injected "Home" fallback heading. - index.md gains a `title: Modern Python` so the header topic reads the brand name instead of the nav default "Home"; overrides/main.html overrides htmltitle so the homepage tab title stays "Modern Python" (not duplicated). - Move the "Built with uv, ruff, and ty" tagline to the page bottom. - Social card: og:image -> assets/social-card-green.png (green card). - Retire the superseded scripts/gen_*.py generators and the old modern-python* assets and cream social-card.png. - architecture/site-branding.md documents the asset pipeline and wiring. Co-Authored-By: Claude Opus 4.8 (1M context) --- Justfile | 6 + architecture/site-branding.md | 49 +++++++ brand/build/geometry.py | 18 +++ brand/build/render.py | 7 + brand/org/mark.svg | 1 + brand/org/wordmark-dark.svg | 1 + brand/org/wordmark.svg | 1 + ...{modern-python-favicon.svg => favicon.svg} | 0 docs/assets/mark.svg | 1 + docs/assets/modern-python-mark.svg | 1 - docs/assets/modern-python-white.svg | 1 - docs/assets/modern-python.png | Bin 146557 -> 0 bytes docs/assets/modern-python.svg | 1 - docs/assets/social-card-green.png | Bin 0 -> 24438 bytes docs/assets/social-card.png | Bin 24538 -> 0 bytes docs/assets/wordmark-dark.svg | 1 + docs/assets/wordmark.svg | 1 + docs/index.md | 14 +- docs/stylesheets/extra.css | 19 ++- mkdocs.yml | 4 +- overrides/main.html | 18 ++- scripts/gen_logo_svg.py | 131 ------------------ scripts/gen_social_card.py | 80 ----------- tests/test_assets.py | 16 +++ tests/test_geometry.py | 22 +++ 25 files changed, 167 insertions(+), 226 deletions(-) create mode 100644 architecture/site-branding.md create mode 100644 brand/org/mark.svg create mode 100644 brand/org/wordmark-dark.svg create mode 100644 brand/org/wordmark.svg rename docs/assets/{modern-python-favicon.svg => favicon.svg} (100%) create mode 100644 docs/assets/mark.svg delete mode 100644 docs/assets/modern-python-mark.svg delete mode 100644 docs/assets/modern-python-white.svg delete mode 100644 docs/assets/modern-python.png delete mode 100644 docs/assets/modern-python.svg create mode 100644 docs/assets/social-card-green.png delete mode 100644 docs/assets/social-card.png create mode 100644 docs/assets/wordmark-dark.svg create mode 100644 docs/assets/wordmark.svg delete mode 100644 scripts/gen_logo_svg.py delete mode 100644 scripts/gen_social_card.py diff --git a/Justfile b/Justfile index c92ba01..a2d4bdd 100644 --- a/Justfile +++ b/Justfile @@ -10,3 +10,9 @@ lint-ci: check-planning test: uv run pytest + +# Regenerate the brand kit and copy the subset the site serves into docs/assets. +sync-assets: + uv run python -m brand.build.render + cp brand/org/favicon.svg brand/org/mark.svg brand/org/wordmark.svg brand/org/wordmark-dark.svg docs/assets/ + cp brand/org/social-card-green.png docs/assets/ diff --git a/architecture/site-branding.md b/architecture/site-branding.md new file mode 100644 index 0000000..f9d337d --- /dev/null +++ b/architecture/site-branding.md @@ -0,0 +1,49 @@ +# Site branding assets + +How the org site (`modern-python.org`) gets its logo, favicon, hero wordmark, and +social card. The canonical brand kit is generated by `brand/build/`; the site +serves a copied subset under `docs/assets/`. + +## Pipeline + +1. `brand/build/` is the source of truth. `uv run python -m brand.build.render` + draws every asset from `brand/build/geometry.py` (vector geometry; text is + outlined to paths via the bundled Jost TTF, so nothing depends on a font at + serve time) into `brand/org/`. +2. `just sync-assets` runs the render, then copies the site subset into + `docs/assets/`: `favicon.svg`, `mark.svg`, `wordmark.svg`, `wordmark-dark.svg`, + and `social-card-green.png`. (The site can only serve files under `docs/`, so + the copies are intentional duplication, not drift — regenerate via the recipe.) +3. MkDocs Material consumes them (see wiring below). + +## Geometry building blocks (`brand/build/geometry.py`) + +- `icon()` — full-bleed square mark (favicon/avatar/apple-touch), with background. +- `mark()` — the same chevron mark with **no background**, for the site header. +- `lockup_body()` — the `MODERN`/`PYTHON` crop-mark wordmark, drawn in a 540x250 + space, returned as bare markup for embedding. +- `wordmark()` — `lockup_body` wrapped in a tight transparent viewBox + (`118 32 304 184`) for standalone use in the hero. +- `social_card()` / `social_square()` — the wordmark composited onto a background. + +Two color roles flow through every function: `struct` (the cream/green-ink +structure) and `gold` (the accent). The site uses two wordmark variants: +green-ink + gold-light (`wordmark.svg`, light pages) and cream + gold-dark +(`wordmark-dark.svg`, dark pages and the green header). + +## Site wiring + +- **Header** (`mkdocs.yml` `theme.logo: assets/mark.svg`) — the chevron mark, with + Material's default "Modern Python" site title (Roboto) and search beside it. +- **Favicon** (`mkdocs.yml` `theme.favicon: assets/favicon.svg`). +- **Hero** (`docs/index.md`) — both wordmark variants sit inside the page `

` + (`.mp-wordmark`); `extra.css` shows the light variant by default and swaps to + the dark variant under `[data-md-color-scheme="slate"]`. The `

` is load- + bearing: Material injects a fallback `

{{ page.title }}

` (which read + "Home" on the index) only when the rendered content has no `

`, so wrapping + the wordmark in one suppresses it. +- **Social card** (`overrides/main.html`) — the `og:image` / `twitter:image` + meta points at `assets/social-card-green.png` (the green card). + +The brand palette and token roles live in `brand/build/tokens.py` and +`brand/README.md`. diff --git a/brand/build/geometry.py b/brand/build/geometry.py index 7c4f48f..0801926 100644 --- a/brand/build/geometry.py +++ b/brand/build/geometry.py @@ -52,6 +52,24 @@ def lockup_body(*, struct: str, gold: str) -> str: return crops + modern + python +def wordmark(*, struct: str, gold: str) -> str: + """Standalone two-color MODERN/PYTHON wordmark for the site hero. Wraps + `lockup_body` (drawn in a 540x250 space) in a tight viewBox centered on the + content, with no background — transparent so it sits on any page surface.""" + return ( + '' + + lockup_body(struct=struct, gold=gold) + + "" + ) + + +def mark(*, struct: str, gold: str) -> str: + """The chevron mark on its own (no background) for the site header logo — + same glyph as `icon`, minus the full-bleed background rect.""" + return _SVG_OPEN.format(w=100, h=100) + _icon_mark(struct, gold) + "" + + def social_card(*, bg: str, struct: str, gold: str, url_color: str) -> str: body = lockup_body(struct=struct, gold=gold) url, _ = outline_text("modern-python.org", 34, x=640, baseline_y=575, diff --git a/brand/build/render.py b/brand/build/render.py index da60416..29244b7 100644 --- a/brand/build/render.py +++ b/brand/build/render.py @@ -51,6 +51,13 @@ def render() -> None: g.icon_circle(bg=t.GREEN_SURFACE, struct=t.CREAM, gold=t.GOLD_DARK)) export_png(ORG / "avatar-circle.svg", ORG / "avatar-circle-1024.png", width=1024, height=1024) + # Site logos — transparent, no background. + # wordmark (hero): two-color lockup, light + dark variants + # mark (header): chevron mark in cream/gold-dark for the green header bar + _write(ORG / "wordmark.svg", g.wordmark(struct=t.GREEN_INK, gold=t.GOLD_LIGHT)) + _write(ORG / "wordmark-dark.svg", g.wordmark(struct=t.CREAM, gold=t.GOLD_DARK)) + _write(ORG / "mark.svg", g.mark(struct=t.CREAM, gold=t.GOLD_DARK)) + # Social cards — cream (primary) + green (alternate). _write(ORG / "social-card.svg", g.social_card(bg=t.CREAM, struct=t.GREEN_INK, gold=t.GOLD_LIGHT, url_color=t.GOLD_LIGHT)) diff --git a/brand/org/mark.svg b/brand/org/mark.svg new file mode 100644 index 0000000..c31e2ff --- /dev/null +++ b/brand/org/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/org/wordmark-dark.svg b/brand/org/wordmark-dark.svg new file mode 100644 index 0000000..495d9f5 --- /dev/null +++ b/brand/org/wordmark-dark.svg @@ -0,0 +1 @@ + diff --git a/brand/org/wordmark.svg b/brand/org/wordmark.svg new file mode 100644 index 0000000..d3c2846 --- /dev/null +++ b/brand/org/wordmark.svg @@ -0,0 +1 @@ + diff --git a/docs/assets/modern-python-favicon.svg b/docs/assets/favicon.svg similarity index 100% rename from docs/assets/modern-python-favicon.svg rename to docs/assets/favicon.svg diff --git a/docs/assets/mark.svg b/docs/assets/mark.svg new file mode 100644 index 0000000..c31e2ff --- /dev/null +++ b/docs/assets/mark.svg @@ -0,0 +1 @@ + diff --git a/docs/assets/modern-python-mark.svg b/docs/assets/modern-python-mark.svg deleted file mode 100644 index e441c2a..0000000 --- a/docs/assets/modern-python-mark.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/assets/modern-python-white.svg b/docs/assets/modern-python-white.svg deleted file mode 100644 index 77b32d8..0000000 --- a/docs/assets/modern-python-white.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/assets/modern-python.png b/docs/assets/modern-python.png deleted file mode 100644 index d7201c9cc75c576fa15b329d865496837b6906e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146557 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

)z= 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 diff --git a/docs/assets/modern-python.svg b/docs/assets/modern-python.svg deleted file mode 100644 index 7078a37..0000000 --- a/docs/assets/modern-python.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/assets/social-card-green.png b/docs/assets/social-card-green.png new file mode 100644 index 0000000000000000000000000000000000000000..37eef6c07d654163ca00cd64e28d6017ef6cebc3 GIT binary patch literal 24438 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 diff --git a/docs/assets/wordmark-dark.svg b/docs/assets/wordmark-dark.svg new file mode 100644 index 0000000..495d9f5 --- /dev/null +++ b/docs/assets/wordmark-dark.svg @@ -0,0 +1 @@ + diff --git a/docs/assets/wordmark.svg b/docs/assets/wordmark.svg new file mode 100644 index 0000000..d3c2846 --- /dev/null +++ b/docs/assets/wordmark.svg @@ -0,0 +1 @@ + diff --git a/docs/index.md b/docs/index.md index 922c04f..1c5d487 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,5 @@ --- +title: Modern Python hide: - navigation - toc @@ -6,16 +7,15 @@ hide:

@@ -116,3 +116,7 @@ catalog below. - [`db-retry`](https://github.com/modern-python/db-retry) — retry helpers for database operations. - [`eof-fixer`](https://github.com/modern-python/eof-fixer) — automatically fix newlines at the end of files. - [`semvertag`](https://github.com/modern-python/semvertag) — auto-tag your GitHub/GitLab repo with semantic version tags from CI. + +

Built with uv, +ruff, and +ty.

diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index adf054c..d410c72 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -22,15 +22,26 @@ text-align: center; margin: 2rem 0 3rem; } +/* The wordmark is the page

; strip the default heading chrome. */ +.mp-hero .mp-wordmark { + margin: 0; + font-size: 0; /* collapse whitespace between the stacked variants */ + line-height: 0; +} .mp-hero .mp-logo { max-width: 420px; width: 70%; height: auto; - color: var(--md-primary-fg-color); /* brand green on the light page */ } -/* Lighter green in dark mode so the wordmark keeps contrast on the dark bg */ -[data-md-color-scheme="slate"] .mp-hero .mp-logo { - color: #7fb79f; +/* Two-color wordmark: light variant by default, cream variant in dark mode. */ +.mp-hero .mp-logo--dark { + display: none; +} +[data-md-color-scheme="slate"] .mp-hero .mp-logo--light { + display: none; +} +[data-md-color-scheme="slate"] .mp-hero .mp-logo--dark { + display: inline; } .mp-hero .mp-tagline { color: var(--md-default-fg-color--light); diff --git a/mkdocs.yml b/mkdocs.yml index 517ff15..5ffe36f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -11,8 +11,8 @@ exclude_docs: | theme: name: material custom_dir: overrides - logo: assets/modern-python-white.svg - favicon: assets/modern-python-favicon.svg + logo: assets/mark.svg + favicon: assets/favicon.svg features: - navigation.instant - navigation.top diff --git a/overrides/main.html b/overrides/main.html index 8f33930..e2214e4 100644 --- a/overrides/main.html +++ b/overrides/main.html @@ -1,9 +1,25 @@ {% extends "base.html" %} +{#- The homepage sets a front-matter `title` so the header topic reads + "Modern Python" instead of the nav default "Home". Material's default + htmltitle would then render "Modern Python - Modern Python"; + collapse that to just the site name on the homepage. -#} +{% block htmltitle %} + {%- if page.is_homepage %} + {{ config.site_name }} + {%- elif page.meta and page.meta.title %} + {{ page.meta.title }} - {{ config.site_name }} + {%- elif page.title %} + {{ page.title | striptags }} - {{ config.site_name }} + {%- else %} + {{ config.site_name }} + {%- endif %} +{% endblock %} + {#- Open Graph / Twitter card metadata for modern-python.org. -#} {% block extrahead %} {{ super() }} - {% set card = config.site_url ~ "assets/social-card.png" %} + {% set card = config.site_url ~ "assets/social-card-green.png" %} {%- if page.meta and page.meta.title %} {%- set title = page.meta.title %} {%- elif page.is_homepage %} diff --git a/scripts/gen_logo_svg.py b/scripts/gen_logo_svg.py deleted file mode 100644 index cc78917..0000000 --- a/scripts/gen_logo_svg.py +++ /dev/null @@ -1,131 +0,0 @@ -"""Generate a transparent, vector SVG wordmark for Modern Python. - -Extracts the "MODERN PYTHON" glyph outlines from Futura (present on macOS) as -real vector paths — no font dependency at render time — and frames them with the -brand's corner brackets. Fill is `currentColor` so the same file can be tinted -per theme (green on light surfaces, white on the green header) via CSS/attr. - -Run locally: - - uv run --with fonttools python scripts/gen_logo_svg.py - -Outputs: - docs/assets/modern-python.svg (two-line wordmark + brackets) - docs/assets/modern-python-mark.svg (compact bracket mark, for the favicon) -""" - -import pathlib - -from fontTools.pens.svgPathPen import SVGPathPen -from fontTools.ttLib import TTFont - -FONT_PATH = "/System/Library/Fonts/Supplemental/Futura.ttc" -FONT_NUMBER = 0 # Futura Medium -ASSETS = pathlib.Path(__file__).resolve().parent.parent / "docs" / "assets" - -LINES = ["MODERN", "PYTHON"] -TRACKING = 0.10 # fraction of em added between glyphs -LINE_GAP = 0.18 # fraction of em between the two lines -PAD = 0.34 # padding (em) inside the bracket frame -BRACKET = 0.55 # bracket arm length (em) -STROKE = 0.07 # bracket stroke width (em) - - -def layout_line(font, glyph_set, cmap, text, upm): - """Return (svg_paths, width_em) for one tracked line, baseline at y=0, y-up.""" - paths, x = [], 0.0 - track = TRACKING * upm - for ch in text: - gname = cmap[ord(ch)] - pen = SVGPathPen(glyph_set) - glyph_set[gname].draw(pen) - d = pen.getCommands() - if d: - paths.append(f'') - x += glyph_set[gname].width + track - return paths, (x - track) / upm # drop trailing track - - -def main() -> None: - font = TTFont(FONT_PATH, fontNumber=FONT_NUMBER) - glyph_set = font.getGlyphSet() - cmap = font.getBestCmap() - upm = font["head"].unitsPerEm - cap = font["OS/2"].sCapHeight if hasattr(font["OS/2"], "sCapHeight") else int(0.7 * upm) - cap_em = cap / upm - - # Lay out each line; track widest for centering. - laid = [layout_line(font, glyph_set, cmap, line, upm) for line in LINES] - text_w = max(w for _, w in laid) - - line_h = cap_em + LINE_GAP - text_h = line_h * len(LINES) - LINE_GAP - - # Frame geometry (em units, y-down in final SVG). - frame_w = text_w + 2 * PAD - frame_h = text_h + 2 * PAD - vb_w = frame_w - vb_h = frame_h - - groups = [] - # Each line: flip y-up glyphs into y-down SVG space and position. - for i, (paths, w) in enumerate(laid): - if not paths: - continue - x0 = (frame_w - w) / 2 * upm - baseline = (PAD + cap_em + i * line_h) * upm # y of baseline in y-down em*upm - # translate to (x0, baseline) then scale(1,-1) maps glyph y-up to y-down. - groups.append( - f'{"".join(paths)}' - ) - - # Corner brackets: top-left and bottom-right, stroked (no fill). - sw, arm = STROKE, BRACKET - - def wordmark(color: str) -> str: - tl = ( - f'' - ) - br = ( - f'' - ) - return ( - f'' - f'{"".join(groups)}{tl}{br}\n' - ) - - # currentColor variant — inlined in the homepage hero, themed via CSS. - (ASSETS / "modern-python.svg").write_text(wordmark("currentColor")) - # White variant — used as the header logo (the header sits on brand green). - (ASSETS / "modern-python-white.svg").write_text(wordmark("#ffffff")) - print(f"wrote modern-python.svg + modern-python-white.svg (viewBox 0 0 {vb_w:.2f} {vb_h:.2f})") - - # Compact favicon mark: the two corner brackets only, in a tight square. - # Adapts to the browser/OS theme: brand green on light tabs, white on dark. - m_sw, m_arm = 0.12, 0.62 - paths = ( - f'' - f'' - ) - style = ( - "" - ) - mark = ( - f'' - f'{style}{paths}\n' - ) - (ASSETS / "modern-python-mark.svg").write_text(mark) - print("wrote modern-python-mark.svg") - - -if __name__ == "__main__": - main() diff --git a/scripts/gen_social_card.py b/scripts/gen_social_card.py deleted file mode 100644 index b85221c..0000000 --- a/scripts/gen_social_card.py +++ /dev/null @@ -1,80 +0,0 @@ -"""Generate the Open Graph / social-card image for modern-python.org. - -Layout C: centered wordmark, thin divider, domain — white on brand green. -Run locally (needs the Futura font, present on macOS): - - uv run --with pillow python scripts/gen_social_card.py - -Output: docs/assets/social-card.png (1200x630). -""" - -import math -import pathlib - -from PIL import Image, ImageDraw, ImageFont - -WIDTH, HEIGHT = 1200, 630 -GREEN = (53, 104, 82) # #356852, the brand color sampled from the logo -WHITE = (255, 255, 255) - -FONT_PATH = "/System/Library/Fonts/Supplemental/Futura.ttc" -FONT_INDEX = 0 # Futura Medium - -WORDMARK = "MODERN PYTHON" -DOMAIN = "MODERN-PYTHON.ORG" -OUT = pathlib.Path(__file__).resolve().parent.parent / "docs" / "assets" / "social-card.png" - - -def render_tracked(text: str, font: ImageFont.FreeTypeFont, tracking: float, alpha: int) -> Image.Image: - """Render `text` with manual letter-spacing into a tight RGBA image.""" - advances = [font.getlength(ch) for ch in text] - total_w = sum(advances) + tracking * (len(text) - 1) - bbox = font.getbbox(text) - top, height = bbox[1], bbox[3] - bbox[1] - img = Image.new("RGBA", (math.ceil(total_w), height), (0, 0, 0, 0)) - draw = ImageDraw.Draw(img) - x = 0.0 - for ch, adv in zip(text, advances): - draw.text((x, -top), ch, font=font, fill=(*WHITE, alpha)) - x += adv + tracking - return img - - -def fit_wordmark(max_width: int) -> Image.Image: - """Pick the largest Futura size whose tracked wordmark fits max_width.""" - for size in range(140, 40, -2): - font = ImageFont.truetype(FONT_PATH, size, index=FONT_INDEX) - img = render_tracked(WORDMARK, font, tracking=size * 0.14, alpha=255) - if img.width <= max_width: - return img - raise RuntimeError("wordmark never fit") - - -def main() -> None: - base = Image.new("RGBA", (WIDTH, HEIGHT), (*GREEN, 255)) - - wordmark = fit_wordmark(max_width=1000) - domain_font = ImageFont.truetype(FONT_PATH, 30, index=FONT_INDEX) - domain = render_tracked(DOMAIN, domain_font, tracking=30 * 0.16, alpha=217) # ~85% - - divider_w, divider_h = 360, 3 - gap1, gap2 = 48, 42 - group_h = wordmark.height + gap1 + divider_h + gap2 + domain.height - y = (HEIGHT - group_h) // 2 - - base.alpha_composite(wordmark, ((WIDTH - wordmark.width) // 2, y)) - y += wordmark.height + gap1 - - divider = Image.new("RGBA", (divider_w, divider_h), (*WHITE, 128)) # ~50% - base.alpha_composite(divider, ((WIDTH - divider_w) // 2, y)) - y += divider_h + gap2 - - base.alpha_composite(domain, ((WIDTH - domain.width) // 2, y)) - - OUT.parent.mkdir(parents=True, exist_ok=True) - base.convert("RGB").save(OUT, "PNG") - print(f"wrote {OUT} ({base.width}x{base.height})") - - -if __name__ == "__main__": - main() diff --git a/tests/test_assets.py b/tests/test_assets.py index ea0af6e..4d06c1d 100644 --- a/tests/test_assets.py +++ b/tests/test_assets.py @@ -47,6 +47,22 @@ def test_render_writes_avatar_circle(): assert (ORG / "avatar-circle-1024.png").read_bytes()[:8] == b"\x89PNG\r\n\x1a\n" +def test_render_writes_site_wordmark_and_mark(): + _render() + light = (ORG / "wordmark.svg").read_text() + assert ET.parse(ORG / "wordmark.svg") is not None + assert "#356852" in light and "#c98a00" in light # green ink + gold-light + dark = (ORG / "wordmark-dark.svg").read_text() + assert "#f4f1e8" in dark and "#f0b528" in dark # cream + gold-dark + for wm in ("wordmark.svg", "wordmark-dark.svg"): + assert "