From e6384c1108e99438d829cf77c84749c3483cc4c0 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:10:46 +0300 Subject: [PATCH 01/13] docs: design per-project/family brand marks Spec for a per-repository logo system: one constant green+gold snake-frame with a single gold inner symbol per repo (two-colour, differentiated by shape). Covers all 17 repos across four families, generated in brand/build/ into brand/projects//. Records the rejected per-family-colour option as a decision. Large-format only; favicons stay the org mark. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../design.md | 178 ++++++++++++++++++ ...6-06-29-project-marks-single-gold-inner.md | 44 +++++ 2 files changed, 222 insertions(+) create mode 100644 planning/changes/2026-06-29.01-per-project-brand-marks/design.md create mode 100644 planning/decisions/2026-06-29-project-marks-single-gold-inner.md diff --git a/planning/changes/2026-06-29.01-per-project-brand-marks/design.md b/planning/changes/2026-06-29.01-per-project-brand-marks/design.md new file mode 100644 index 0000000..3b95882 --- /dev/null +++ b/planning/changes/2026-06-29.01-per-project-brand-marks/design.md @@ -0,0 +1,178 @@ +--- +summary: Per-project/family logo system — one constant snake-frame, gold inner symbol, one mark per repo, generated in brand/build/. +--- + +# Design: Per-project and per-family brand marks + +## Summary + +Extend the org brand kit (currently only the org favicon/social card) with a +**per-repository logo system**. Every repo gets a large-format mark built from +the **same green+gold "snake" frame** with a single **gold inner symbol** that +says what the project does. It is a strict two-colour system (forest green + +ochre gold on cream), differentiated by *symbol shape*, not colour. Marks are +generated programmatically in `brand/build/` (the same pipeline that draws the +org mark) and emitted under `brand/projects//`. The org favicon/avatar and +the small-size identity are unchanged — these new marks are **large-format only** +(docs hero, README banner). + +## Motivation + +The org mark shipped in `brand/org/` (favicon, avatar, social cards) and the +backstage story (`brand/STORY.md`, "Act 2 — the family that never shipped") +explicitly deferred the per-project system: *"the frame stays constant and an +inner glyph marks each sub-family."* `brand/projects/` exists but is empty, and +`brand/README.md` lists "per-project / per-repo marks, the subfamily system" as +a later task. This change delivers that system across all ~17 repos so each +project's docs site and README can carry a recognisable, on-brand mark. + +Research into comparable systems informed the approach: Astral (uv/ruff/ty) and +the JetBrains/Adobe families show that a **constant frame + a per-product inner +mark** reads as a family while staying individually identifiable, and that +leaning on *two* discriminators is only needed when marks must survive tiny +sizes. Because these marks are large-format only (favicons stay the org mark), +shape alone is a sufficient discriminator and a single accent colour (gold) +keeps the system tight. + +## Non-goals + +- Small-size / favicon use — every repo keeps the **org** mark as its favicon + and avatar. These project marks are for large contexts only. +- Per-family accent colours — explored (a "Heritage" palette: terracotta / + slate / plum / teal) and **deliberately dropped**; three colours read as busy + against the green+gold frame. See + `planning/decisions/2026-06-29-project-marks-single-gold-inner.md`. +- Redesigning the org mark, header logo, or wordmark — unchanged. +- Separate marks for the two project templates — they reuse the org chevron mark. +- The horizontal name lockup typography is specified at a high level only; exact + kerning/wordmark rendering is an implementation detail for `plan.md`. + +## Design + +### 1. The constant frame + +The two interlocked pinwheel "snakes" from the org mark, drawn parametrically on +a 100×100 viewBox with the snakes pushed to the edges so a large inner symbol +gets clearance: + +- **Geometry:** `margin = 9`, arm length `Lx = Ly = 53`, stroke `s = 11`. + Snake 1 (top-left corner) `struct` colour; snake 2 (bottom-right) `accent` + colour — same pinwheel construction as `geometry.py::_icon_mark`, but + parameterised by `(W, H, margin, Lx, Ly, stroke)` so the corners can be moved + and the canvas can be non-square if ever needed. +- **Colours (from `brand/build/tokens.py`):** `struct = GREEN_INK #356852`, + `accent = GOLD_LIGHT #c98a00`. The frame is identical on every mark. +- **Heads & tails:** square block-head at each arm's outer end; diagonal-cut + tail at the inner end — carried over from the org mark. + +This frame is a new function alongside the existing `icon()`/`mark()`; it does +not replace them. The org favicon/avatar keep the original tighter geometry. + +### 2. The inner symbol + +One gold symbol, centred at (50,50), nominal radius **r ≈ 23**, in +`GOLD_LIGHT #c98a00` with `CREAM #f4f1e8` for negative space / cut-outs (e.g. the +bolt inside a filled disc). Two-colour total (green + gold); no third hue. + +Filled "disc" marks (a gold disc with a cream symbol knocked out) are used where +the partner's own logo is a filled badge; line/figure marks are used elsewhere. +Every symbol is **redrawn in our geometry** — we evoke a partner, we do not paste +their logo (see Risk for the one exception). + +### 3. The per-repo symbols (17 repos, 4 families) + +**Dependency injection** (7): +| Repo | Inner symbol | +|------|--------------| +| `modern-di` | **dashed** dependency graph (3 nodes, dashed edges = "auto-wired by annotations") | +| `that-depends` | **solid** dependency graph (same 3 nodes, solid edges = the explicit predecessor) | +| `modern-di-fastapi` | lightning **bolt knocked out of a gold disc** (evokes FastAPI's teal disc+bolt) | +| `modern-di-litestar` | 5-point **star knocked out of a gold disc** (evokes Litestar's star) | +| `modern-di-faststream` | the **FastStream delta/stream** shape, recoloured gold | +| `modern-di-typer` | terminal window showing **`T>`** prompt (evokes Typer) | +| `modern-di-pytest` | **stepped bars** hanging from a crossbar, gold tints (evokes pytest's bar emblem) | + +**Templates** (2) — reuse the **org chevron mark** (no bespoke symbol): +`fastapi-sqlalchemy-template`, `litestar-sqlalchemy-template`. + +**Microservices, HTTP & messaging** (5): +| Repo | Inner symbol | +|------|--------------| +| `lite-bootstrap` | **rocket** (launch / bootstrap) | +| `httpware` | two interlocked **chain links** (middleware chain) | +| `faststream-redis-timers` | **stopwatch** (distributed timers) | +| `faststream-concurrent-aiokafka` | three **parallel lane arrows**, middle longest (staggered, concurrency) | +| `faststream-outbox` | **database cylinder publishing broadcast arcs** (DB emits events; transactional outbox) | + +**Utilities** (3): +| Repo | Inner symbol | +|------|--------------| +| `db-retry` | database **cylinder inside a two-head clockwise retry circle** | +| `eof-fixer` | **document with a newline-return (↵)** arrow | +| `semvertag` | a **price/version tag** with punch-hole | + +The three `faststream-*` messaging repos use their own concept symbols (timer / +lanes / outbox), *not* the FastStream delta — only the DI integration +`modern-di-faststream` co-brands with FastStream, per the "evoke the integrated +partner" rule that applies to the `modern-di-*` family. + +### 4. Build pipeline & outputs + +- Add symbol/frame functions to `brand/build/geometry.py` (parametric + `project_frame(...)` + one function per inner symbol). Reuse + `tokens.py` colours and `text.py` outlining for any text glyphs (`T>`). +- `brand/build/render.py` gains a pass that, for each repo in a manifest + (repo → symbol), writes `brand/projects//mark.svg` and rasterises + `mark-.png` (sizes TBD in plan; large-format, e.g. 512/1024) via the + existing `export_png` (`rsvg-convert`). +- A **horizontal lockup** (`lockup.svg`: the framed mark + the repo name set in + Jost, green/gold) is produced per repo for README banners. Name typography + reuses `text.py::outline_text`. +- `brand/README.md` table of "Deferred" items is updated to mark the per-project + system as shipped, and a short generation note is added. + +### 5. Prototype (validated) + +The full system was prototyped as standalone SVG generators and rendered with +`rsvg-convert` to verify every mark visually (centering checked against a +crosshair for `faststream-outbox` and `semvertag`; the `db-retry` circular-arrow +arrowheads were corrected to lead the arc with a butt cap). The implementation +ports that validated geometry into `brand/build/`. + +## Operations + +None out-of-repo for generation. Rolling each mark out to its repo's docs +site / README (copying `mark.svg` into each downstream repo, wiring MkDocs +`theme.logo`) is **per-repo follow-up work**, tracked separately — this change +produces the assets in this repo only. + +## Out of scope + +- Wiring the marks into each downstream repo's site/README (follow-up per repo). +- PNG size matrix and any `@2x` social-card variants per project. +- Animations or dark-mode inversions of the project marks. + +## Testing + +- `uv run python -m brand.build.render` produces a `mark.svg` (+ PNGs) for every + manifest repo with no errors; `brand/projects//` is populated. +- A contact-sheet render (all marks on one sheet) is eyeballed for consistency + and centering — the prototype workflow, retained as a dev check. +- SVGs are well-formed (parse) and use only `tokens.py` colours (a small test + asserting no stray hex values outside the token set is feasible). +- `just check-planning` passes; `architecture/` updated (see below). + +## Risk + +- **Trademark / partner-logo use (most likely concern).** `modern-di-faststream` + uses the *actual* FastStream delta path recoloured; the fastapi/litestar/typer/ + pytest cues are redrawn evocations, not copies. Likelihood medium, impact low + (these are clearly our snake-frame marks indicating an integration, fair-use + nominative). *Mitigation:* keep the FastStream path as the only literal partner + asset, recoloured into our palette; reconsider if any project objects. +- **Symbol legibility / taste.** Some glyphs (rocket, outbox arcs) are detailed; + at large format this is fine but a few may need a second pass. *Mitigation:* + the generator makes iteration cheap; review the contact sheet before shipping. +- **Architecture doc drift.** This adds a capability; `architecture/` must gain a + `brand-marks.md` (or extend `site-branding.md`) in the implementing PR per the + planning convention. diff --git a/planning/decisions/2026-06-29-project-marks-single-gold-inner.md b/planning/decisions/2026-06-29-project-marks-single-gold-inner.md new file mode 100644 index 0000000..557dba9 --- /dev/null +++ b/planning/decisions/2026-06-29-project-marks-single-gold-inner.md @@ -0,0 +1,44 @@ +--- +status: accepted +summary: Project marks use a single gold inner symbol; per-family accent colours rejected as too busy. +supersedes: null +superseded_by: null +--- + +# Project marks are two-colour (green+gold), differentiated by symbol not colour + +**Decision:** Every per-project mark uses the constant green+gold snake-frame +with a single **gold** inner symbol. Projects are told apart by the *shape* of +the inner symbol, not by colour. No per-family accent hue. + +## Context + +While designing the per-project system we evaluated giving each of the four +families its own accent colour for the inner symbol — a "Heritage" palette +(dependency-injection = terracotta, templates = slate blue, microservices = +plum, utilities = teal) and a brighter "Vivid" alternative. The research on +comparable systems (JetBrains, Adobe, Astral) recommends two discriminators +(shape **and** colour) — but only because those marks must survive favicon +sizes. Our project marks are **large-format only**; the org mark remains every +repo's favicon. + +Options on the table: +1. Green+gold frame + gold inner (one colour) — chosen. +2. Green+gold frame + per-family accent inner (three colours on the mark). +3. All-green frame + per-family accent inner. + +## Decision & rationale + +Rendered side by side, the per-family accent made each mark a **three-colour** +object (green frame + gold frame + accent inner), which read as busy and diluted +the org identity. Since favicon-size legibility is explicitly a non-goal, the +second discriminator (colour) buys little. A single gold inner keeps every mark +unmistakably part of one family, matches the existing brand palette exactly, and +means a new repo only needs a new *shape*, not a new colour to keep harmonious. +Templates don't even get a symbol — they reuse the org chevron mark. + +## Revisit trigger + +If the org ever needs these marks at favicon scale (shape alone insufficient to +disambiguate), or if a family grows large enough that a colour band materially +helps wayfinding on the org site, reopen and reconsider per-family accents. From 83d8b486e1f3b7b40d1233bff22144368d52978a Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:19:38 +0300 Subject: [PATCH 02/13] docs: implementation plan for per-project brand marks Nine TDD tasks: symbol module + helpers, the four families of inner symbols, the parametric project frame, the repo manifest + mark composition, rendering to brand/projects/, name lockups, and docs/architecture promotion. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../plan.md | 981 ++++++++++++++++++ 1 file changed, 981 insertions(+) create mode 100644 planning/changes/2026-06-29.01-per-project-brand-marks/plan.md diff --git a/planning/changes/2026-06-29.01-per-project-brand-marks/plan.md b/planning/changes/2026-06-29.01-per-project-brand-marks/plan.md new file mode 100644 index 0000000..8887b4d --- /dev/null +++ b/planning/changes/2026-06-29.01-per-project-brand-marks/plan.md @@ -0,0 +1,981 @@ +# per-project-brand-marks — implementation plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use +> superpowers:subagent-driven-development (recommended) or +> superpowers:executing-plans to implement this plan task-by-task. Steps +> use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Generate a large-format logo for every org repo — the constant +green+gold snake-frame with one gold inner symbol per repo — from `brand/build/` +into `brand/projects//`. + +**Spec:** [`design.md`](./design.md) + +**Branch:** `brand-project-marks` (already created) + +**Commit strategy:** Per-task commits. + +## Global constraints + +- **Colours come only from `brand/build/tokens.py`** — `GREEN_INK #356852` + (frame struct), `GOLD_LIGHT #c98a00` (frame accent + inner symbol), + `CREAM #f4f1e8` (negative space). The only exception: `pytest` bar tints + (declared in `symbols.py` as `_BAR_TINTS`). +- **Frame geometry is fixed:** 100×100 viewBox, `margin=9`, arm `Lx=Ly=53`, + stroke `s=11`. Inner symbol centred at `(50, 50)`, nominal radius `R=23`. +- **Two colours only** (green + gold); no per-family accent. Differentiate by + symbol shape. +- **Large-format only.** Do not touch the org favicon/avatar (`brand/org/`). +- All new code: imports at module level, annotate function args, `ty: ignore` + (not `type: ignore`) if a suppression is ever needed. +- Tooling: `uv run python -m brand.build.render` regenerates; `rsvg-convert` + rasterises PNGs (skipped gracefully if absent, per existing `export_png`). + +--- + +### Task 1: Symbol module scaffold + shared helpers + +**Files:** +- Create: `brand/build/symbols.py` +- Test: `tests/test_symbols.py` + +**Interfaces:** +- Produces: `_ah(tx,ty,ang,sz,fill=GOLD)`, `_cyl(cx,cy,r,h=0.78,w=1.0,fill=GOLD)`, + `_star5(cx,cy,R,color,inner=0.42)`, `_circ_arc(cx,cy,rad,a0,a1,w)` — all return + SVG-fragment `str`. Module constants `GOLD=GOLD_LIGHT`, `_BAR_TINTS`. + +- [ ] **Step 1: Write the failing test** + + ```python + # tests/test_symbols.py + from xml.dom import minidom + from brand.build import symbols as sym + + def _wrap(markup: str) -> str: + return f'{markup}' + + def test_helpers_emit_parseable_svg() -> None: + for markup in ( + sym._ah(50, 50, 0.0, 6), + sym._cyl(50, 50, 20), + sym._star5(50, 50, 18, sym.GOLD), + sym._circ_arc(50, 50, 20, 285, 425, 4.5), + ): + minidom.parseString(_wrap(markup)) # raises on malformed XML + ``` + +- [ ] **Step 2: Run test to verify it fails** + + Run: `uv run pytest tests/test_symbols.py -q` + Expected: FAIL — `ModuleNotFoundError`/`AttributeError` (symbols not defined). + +- [ ] **Step 3: Implement the module + helpers** + + ```python + # brand/build/symbols.py + import math + + from brand.build.tokens import CREAM, GOLD_LIGHT + + GOLD = GOLD_LIGHT + # pytest emblem bar tints (light->dark) — the one allowed non-token palette + _BAR_TINTS = ("#e6b14d", "#d99a1f", GOLD, "#9c6c00") + + + def _ah(tx: float, ty: float, ang: float, sz: float, fill: str = GOLD) -> str: + """Simple isoceles arrowhead, tip at (tx,ty) pointing toward `ang` (radians).""" + a1 = ang + math.radians(150) + a2 = ang - math.radians(150) + return ( + f'' + ) + + + def _cyl(cx: float, cy: float, r: float, h: float = 0.78, w: float = 1.0, fill: str = GOLD) -> str: + """Database cylinder centred on (cx,cy).""" + rx = 0.5 * r * w + return ( + f'' + f'' + f'' + f'' + ) + + + def _star5(cx: float, cy: float, radius: float, color: str, inner: float = 0.42) -> str: + """Five-pointed star centred on (cx,cy).""" + pts: list[tuple[float, float]] = [] + for i in range(5): + ao = -90 + i * 72 + pts.append((cx + radius * math.cos(math.radians(ao)), cy + radius * math.sin(math.radians(ao)))) + ai = ao + 36 + pts.append((cx + radius * inner * math.cos(math.radians(ai)), cy + radius * inner * math.sin(math.radians(ai)))) + body = " ".join(f"{x:.1f},{y:.1f}" for x, y in pts) + return f'' + + + def _circ_arc(cx: float, cy: float, rad: float, a0: float, a1: float, w: float) -> str: + """Clockwise arc a0->a1 (deg, increasing) with a leading arrowhead at a1.""" + a1s = a1 - 7 # stop the stroke short so the head caps it cleanly + x0 = cx + rad * math.cos(math.radians(a0)) + y0 = cy + rad * math.sin(math.radians(a0)) + x1 = cx + rad * math.cos(math.radians(a1s)) + y1 = cy + rad * math.sin(math.radians(a1s)) + large = 1 if (a1s - a0) % 360 > 180 else 0 + d = ( + f'' + ) + ex = cx + rad * math.cos(math.radians(a1)) + ey = cy + rad * math.sin(math.radians(a1)) + ang = math.radians(a1 + 90) # forward (clockwise) tangent + length = w * 3.0 + width = w * 1.7 + dx, dy = math.cos(ang), math.sin(ang) + px, py = -dy, dx + tip = (ex + 0.55 * length * dx, ey + 0.55 * length * dy) + base = (ex - 0.45 * length * dx, ey - 0.45 * length * dy) + d += ( + f'' + ) + return d + ``` + +- [ ] **Step 4: Run test to verify it passes** + + Run: `uv run pytest tests/test_symbols.py -q` + Expected: PASS (1 test). + +- [ ] **Step 5: Commit** + + ```bash + git add brand/build/symbols.py tests/test_symbols.py + git commit -m "feat(brand): symbol module scaffold + shared helpers" + ``` + +--- + +### Task 2: Dependency-injection symbols + +**Files:** +- Modify: `brand/build/symbols.py` +- Test: `tests/test_symbols.py` + +**Interfaces:** +- Produces (each `(cx,cy,r) -> str`): `graph(cx,cy,r,*,dashed)`, + `bolt_disc(cx,cy,r)`, `star_disc(cx,cy,r)`, `faststream(cx,cy,r)`, + `terminal(cx,cy,r)`, `bars(cx,cy,r)`, `chevron(cx,cy,r)`. Module constant + `FASTSTREAM_PATH`. + +- [ ] **Step 1: Write the failing test** + + ```python + # append to tests/test_symbols.py + import pytest + + DI_SYMBOLS = ["bolt_disc", "star_disc", "faststream", "terminal", "bars", "chevron"] + + @pytest.mark.parametrize("name", DI_SYMBOLS) + def test_di_symbol_parses(name: str) -> None: + markup = getattr(sym, name)(50, 50, 23) + minidom.parseString(_wrap(markup)) + + def test_graph_dashed_vs_solid() -> None: + assert "stroke-dasharray" in sym.graph(50, 50, 23, dashed=True) + assert "stroke-dasharray" not in sym.graph(50, 50, 23, dashed=False) + ``` + +- [ ] **Step 2: Run test to verify it fails** + + Run: `uv run pytest tests/test_symbols.py -q` + Expected: FAIL — `AttributeError` on the new symbol names. + +- [ ] **Step 3: Implement the DI symbols** + + ```python + # append to brand/build/symbols.py + FASTSTREAM_PATH = ( + "m499.61,356.87l-92.61-160.41-36.48-63.19-10.46,251.02c.07,2.86-.78,6.05-2.51,8.6" + "-2.98,4.41-7.42,5.31-9.92,2.02l.02-.03-68.85-90.48-107.13,38.09v.04c-3.89,1.38-7.11" + "-1.8-7.2-7.12-.05-3.08.97-6.22,2.6-8.57L327.1,58.07l-12.71-22.02c-25.95-44.94-90.82" + "-44.94-116.77,0l-92.61,160.41L12.39,356.87c-25.95,44.94,6.49,101.12,58.38,101.12" + "h370.45c51.9,0,84.33-56.18,58.38-101.12Z" + ) + + + def bolt_disc(cx: float, cy: float, r: float) -> str: + """FastAPI cue: lightning bolt knocked out of a gold disc.""" + norm = [(0.30, -0.80), (-0.42, 0.18), (0.05, 0.18), (-0.22, 0.82), (0.48, -0.22), (0.05, -0.22)] + pts = " ".join(f"{cx + dx * r * 0.82:.1f},{cy + dy * r * 0.82:.1f}" for dx, dy in norm) + return f'' + + + def star_disc(cx: float, cy: float, r: float) -> str: + """Litestar cue: star knocked out of a gold disc.""" + return f'' + _star5(cx, cy, r * 0.72, CREAM) + + + def faststream(cx: float, cy: float, r: float) -> str: + """FastStream's own delta/stream mark, recoloured gold (sized ~2r tall).""" + size = r * 2.1 + sc = size / 462.0 + return ( + f'' + f'' + ) + + + def terminal(cx: float, cy: float, r: float) -> str: + """Typer cue: terminal window showing a T> prompt.""" + return ( + f'' + f'T>' + ) + + + def bars(cx: float, cy: float, r: float) -> str: + """pytest cue: stepped bars hanging from a crossbar (gold tints), vertically centred.""" + bw = r * 0.34 + gap = r * 0.22 + x0 = cx - r + stub = r * 0.18 + cb = r * 0.2 + maxlen = r * 1.0 + total = stub + r * 0.12 + cb + maxlen + top = cy - total / 2 + y_stub = top + y_cb = top + stub + r * 0.12 + y_bar = y_cb + cb + heights = [1.0, 0.78, 0.55, 0.38] + out = [f''] + for i in range(4): + x = x0 + i * (bw + gap) + out.append(f'') + out.append(f'') + return "".join(out) + + + def chevron(cx: float, cy: float, r: float) -> str: + """The org chevron (used by templates and as a standalone cue).""" + return ( + f'' + ) + + + def graph(cx: float, cy: float, r: float, *, dashed: bool) -> str: + """Dependency graph: 3 nodes + two edges. dashed=auto-wired (modern-di), + solid=explicit (that-depends).""" + top = (cx, cy - 0.62 * r) + bl = (cx - 0.82 * r, cy + 0.6 * r) + br = (cx + 0.82 * r, cy + 0.6 * r) + nr = r * 0.24 + w = r * 0.15 + da = ' stroke-dasharray="4 3"' if dashed else "" + return ( + f'' + f'' + f'' + f'' + f'' + ) + ``` + +- [ ] **Step 4: Run test to verify it passes** + + Run: `uv run pytest tests/test_symbols.py -q` + Expected: PASS (helpers + 6 parametrized DI symbols + graph test). + +- [ ] **Step 5: Commit** + + ```bash + git add brand/build/symbols.py tests/test_symbols.py + git commit -m "feat(brand): dependency-injection inner symbols" + ``` + +--- + +### Task 3: Microservices/messaging symbols + +**Files:** +- Modify: `brand/build/symbols.py` +- Test: `tests/test_symbols.py` + +**Interfaces:** +- Produces (each `(cx,cy,r) -> str`): `rocket`, `chain`, `stopwatch`, + `lanes`, `outbox`. + +- [ ] **Step 1: Write the failing test** + + ```python + # append to tests/test_symbols.py + MSG_SYMBOLS = ["rocket", "chain", "stopwatch", "lanes", "outbox"] + + @pytest.mark.parametrize("name", MSG_SYMBOLS) + def test_msg_symbol_parses(name: str) -> None: + minidom.parseString(_wrap(getattr(sym, name)(50, 50, 23))) + ``` + +- [ ] **Step 2: Run test to verify it fails** + + Run: `uv run pytest tests/test_symbols.py -q` + Expected: FAIL — `AttributeError` on the new names. + +- [ ] **Step 3: Implement the messaging symbols** + + ```python + # append to brand/build/symbols.py + def rocket(cx: float, cy: float, r: float) -> str: + """lite-bootstrap: a rocket (launch).""" + body = ( + f'' + ) + fins = ( + f'' + f'' + ) + window = f'' + flame = f'' + return body + fins + window + flame + + + def chain(cx: float, cy: float, r: float) -> str: + """httpware: two interlocked chain links (middleware chain).""" + sw = r * 0.2 + return ( + f'' + f'' + ) + + + def stopwatch(cx: float, cy: float, r: float) -> str: + """faststream-redis-timers: a stopwatch.""" + c = cy + 0.07 * r + rr = r * 0.92 + face = ( + f'' + f'' + f'' + ) + btn = ( + f'' + f'' + ) + return face + btn + + + def lanes(cx: float, cy: float, r: float, length: float = 1.7) -> str: + """faststream-concurrent-aiokafka: three staggered parallel arrows (middle longest).""" + out = "" + for i, dy in enumerate((-0.55 * r, 0.0, 0.55 * r)): + ln = length * r * (0.72 if i != 1 else 1.0) + x1 = cx - length * r / 2 + x2 = x1 + ln + out += ( + f'' + ) + out += _ah(x2, cy + dy, 0.0, r * 0.3) + return out + + + def outbox(cx: float, cy: float, r: float) -> str: + """faststream-outbox: a database cylinder publishing concentric broadcast arcs.""" + base = _cyl(cx - 0.28 * r, cy + 0.28 * r, r * 0.72, 0.72) + bx, by = cx, cy - 0.02 * r + out = f'' + for k in (0.5, 0.82, 1.14): + kk = k * r * 0.72 + out += ( + f'' + ) + return base + out + ``` + +- [ ] **Step 4: Run test to verify it passes** + + Run: `uv run pytest tests/test_symbols.py -q` + Expected: PASS (5 new parametrized cases). + +- [ ] **Step 5: Commit** + + ```bash + git add brand/build/symbols.py tests/test_symbols.py + git commit -m "feat(brand): microservices/messaging inner symbols" + ``` + +--- + +### Task 4: Utility symbols + +**Files:** +- Modify: `brand/build/symbols.py` +- Test: `tests/test_symbols.py` + +**Interfaces:** +- Produces (each `(cx,cy,r) -> str`): `db_retry`, `eof_fixer`, `tag`. + +- [ ] **Step 1: Write the failing test** + + ```python + # append to tests/test_symbols.py + UTIL_SYMBOLS = ["db_retry", "eof_fixer", "tag"] + + @pytest.mark.parametrize("name", UTIL_SYMBOLS) + def test_util_symbol_parses(name: str) -> None: + minidom.parseString(_wrap(getattr(sym, name)(50, 50, 23))) + ``` + +- [ ] **Step 2: Run test to verify it fails** + + Run: `uv run pytest tests/test_symbols.py -q` + Expected: FAIL — `AttributeError`. + +- [ ] **Step 3: Implement the utility symbols** + + ```python + # append to brand/build/symbols.py + def db_retry(cx: float, cy: float, r: float) -> str: + """db-retry: a database cylinder inside a two-head clockwise retry circle.""" + rad = 0.92 * r + return _cyl(cx, cy, r * 0.6) + _circ_arc(cx, cy, rad, 285, 425, 4.5) + _circ_arc(cx, cy, rad, 105, 245, 4.5) + + + def eof_fixer(cx: float, cy: float, r: float) -> str: + """eof-fixer: a document with a newline-return (down-then-left) arrow.""" + doc = ( + f'' + ) + for i in range(3): + doc += ( + f'' + ) + doc += ( + f'' + ) + doc += _ah(cx - 0.2 * r, cy + 0.55 * r, math.pi, r * 0.24) + return doc + + + def tag(cx: float, cy: float, r: float) -> str: + """semvertag: a price/version tag with a punch-hole, vertically centred.""" + return ( + f'' + f'' + ) + ``` + +- [ ] **Step 4: Run test to verify it passes** + + Run: `uv run pytest tests/test_symbols.py -q` + Expected: PASS. + +- [ ] **Step 5: Commit** + + ```bash + git add brand/build/symbols.py tests/test_symbols.py + git commit -m "feat(brand): utility inner symbols" + ``` + +--- + +### Task 5: Parametric project frame + +**Files:** +- Modify: `brand/build/geometry.py` +- Test: `tests/test_projects.py` + +**Interfaces:** +- Produces: `project_frame(*, struct: str, accent: str, w: int = 100, h: int = 100, + m: int = 9, lx: int = 53, ly: int = 53, s: int = 11) -> str` — bare frame markup + (no `` wrapper), two pinwheeled L-snakes. + +- [ ] **Step 1: Write the failing test** + + ```python + # tests/test_projects.py + from xml.dom import minidom + from brand.build import geometry as g + from brand.build import tokens as t + + def test_project_frame_parses_and_uses_tokens() -> None: + frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) + minidom.parseString(f'{frame}') + assert t.GREEN_INK in frame and t.GOLD_LIGHT in frame + ``` + +- [ ] **Step 2: Run test to verify it fails** + + Run: `uv run pytest tests/test_projects.py -q` + Expected: FAIL — `AttributeError: module ... has no attribute 'project_frame'`. + +- [ ] **Step 3: Implement `project_frame`** + + ```python + # append to brand/build/geometry.py + def project_frame( + *, + struct: str, + accent: str, + w: int = 100, + h: int = 100, + m: int = 9, + lx: int = 53, + ly: int = 53, + s: int = 11, + ) -> str: + """Two pinwheeled L-snakes in opposite corners — the constant project frame. + Returns bare markup (no wrapper).""" + hs = s + 3 + parts = [ + f'', + f'', + f'', + f'', + f'', + f'', + ] + return "".join(parts) + ``` + +- [ ] **Step 4: Run test to verify it passes** + + Run: `uv run pytest tests/test_projects.py -q` + Expected: PASS. + +- [ ] **Step 5: Commit** + + ```bash + git add brand/build/geometry.py tests/test_projects.py + git commit -m "feat(brand): parametric project snake-frame" + ``` + +--- + +### Task 6: Repo manifest + mark composition + +**Files:** +- Create: `brand/build/projects.py` +- Test: `tests/test_projects.py` + +**Interfaces:** +- Consumes: `geometry.project_frame`, all `symbols.*` functions, `tokens.*`. +- Produces: `MANIFEST: dict[str, Callable[[], str]]` (17 repos → inner-symbol + thunks at `R=23`), `project_mark(repo: str) -> str` (full ``), + `ALLOWED_COLORS: frozenset[str]`. + +- [ ] **Step 1: Write the failing test** + + ```python + # append to tests/test_projects.py + import re + import pytest + from brand.build import projects as p + + EXPECTED_REPOS = { + "modern-di", "that-depends", "modern-di-fastapi", "modern-di-litestar", + "modern-di-faststream", "modern-di-typer", "modern-di-pytest", + "fastapi-sqlalchemy-template", "litestar-sqlalchemy-template", + "lite-bootstrap", "httpware", "faststream-redis-timers", + "faststream-concurrent-aiokafka", "faststream-outbox", + "db-retry", "eof-fixer", "semvertag", + } + + def test_manifest_covers_every_repo() -> None: + assert set(p.MANIFEST) == EXPECTED_REPOS + + @pytest.mark.parametrize("repo", sorted(EXPECTED_REPOS)) + def test_project_mark_is_valid_svg(repo: str) -> None: + svg = p.project_mark(repo) + minidom.parseString(svg) + assert svg.startswith(" None: + hexes = {h.lower() for h in re.findall(r"#[0-9a-fA-F]{6}", p.project_mark(repo))} + assert hexes <= p.ALLOWED_COLORS, f"{repo} stray colours: {hexes - p.ALLOWED_COLORS}" + + def test_templates_use_chevron() -> None: + # both templates share the org chevron (a polyline), not a bespoke symbol + for repo in ("fastapi-sqlalchemy-template", "litestar-sqlalchemy-template"): + assert " str: + """Full for a repo: constant frame + its gold inner symbol.""" + frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) + inner = MANIFEST[repo]() + return ( + '{frame}{inner}' + ) + ``` + +- [ ] **Step 4: Run test to verify it passes** + + Run: `uv run pytest tests/test_projects.py -q` + Expected: PASS (manifest coverage + 17 valid-SVG + 17 colour + templates). + +- [ ] **Step 5: Commit** + + ```bash + git add brand/build/projects.py tests/test_projects.py + git commit -m "feat(brand): repo manifest + project mark composition" + ``` + +--- + +### Task 7: Render marks to `brand/projects//` + +**Files:** +- Create: `brand/build/raster.py` +- Modify: `brand/build/render.py` +- Modify: `brand/build/projects.py` +- Test: `tests/test_projects.py` + +**Interfaces:** +- Produces: `raster.export_png(svg_path, png_path, *, width=None, height=None) -> bool` + (moved verbatim from `render.py`); `projects.render_projects(out_dir: Path | None = None) -> list[Path]` + — writes `mark.svg` (+ `mark-512.png`, `mark-1024.png`) per repo, returns the + written `mark.svg` paths. + +Why `raster.py`: `projects` needs `export_png` and `render` needs +`render_projects`. Putting `export_png` in a third module both import keeps every +import at module level with no cycle (`render → projects → raster`, `render → raster`). + +- [ ] **Step 1: Write the failing test** + + ```python + # append to tests/test_projects.py + from pathlib import Path + + def test_render_projects_writes_every_mark(tmp_path: Path) -> None: + written = p.render_projects(out_dir=tmp_path) + assert len(written) == len(EXPECTED_REPOS) + for repo in EXPECTED_REPOS: + svg = tmp_path / repo / "mark.svg" + assert svg.is_file() and svg.read_text(encoding="utf-8").startswith(" bool: + exe = shutil.which("rsvg-convert") + if exe is None: + return False + args = [exe] + if width is not None: + args += ["-w", str(width)] + if height is not None: + args += ["-h", str(height)] + args += [str(svg_path), "-o", str(png_path)] + subprocess.run(args, check=True) + return True + ``` + + Then in `render.py`: delete its local `export_png` def and `shutil`/`subprocess` + imports, and add at the top (module level): + + ```python + from brand.build.projects import render_projects + from brand.build.raster import export_png + ``` + +- [ ] **Step 3b: Implement `render_projects` and call it from `render()`** + + ```python + # in brand/build/projects.py — add to the top-level imports: + from pathlib import Path + + from brand.build.raster import export_png + + # ... after project_mark(); module-level constants then the function: + ROOT = Path(__file__).resolve().parents[2] + PROJECTS = ROOT / "brand" / "projects" + _PNG_SIZES = (512, 1024) + + + def render_projects(out_dir: Path | None = None) -> list[Path]: + """Write mark.svg (+ PNGs) for every repo under out_dir//.""" + base = out_dir if out_dir is not None else PROJECTS + written: list[Path] = [] + for repo in MANIFEST: + d = base / repo + d.mkdir(parents=True, exist_ok=True) + svg = d / "mark.svg" + svg.write_text(project_mark(repo) + "\n", encoding="utf-8") + for sz in _PNG_SIZES: + export_png(svg, d / f"mark-{sz}.png", width=sz, height=sz) + written.append(svg) + return written + ``` + + ```python + # in brand/build/render.py, inside render() after the org marks block: + # Per-project marks (brand/projects//). + render_projects() + ``` + +- [ ] **Step 4: Run the test + full render** + + Run: `uv run pytest tests/test_projects.py -q` + Expected: PASS. + Run: `uv run python -m brand.build.render` + Expected: no error; org marks still written to `brand/org/`; `ls brand/projects/` + shows all 17 repo folders, each with `mark.svg` (+ PNGs if `rsvg-convert` present). + +- [ ] **Step 5: Commit** + + ```bash + git add brand/build/raster.py brand/build/render.py brand/build/projects.py tests/test_projects.py brand/projects + git commit -m "feat(brand): render per-project marks to brand/projects/" + ``` + +--- + +### Task 8: Horizontal name lockup per repo + +**Files:** +- Modify: `brand/build/projects.py` +- Test: `tests/test_projects.py` + +**Interfaces:** +- Consumes: `text.outline_text`, `project_mark` internals. +- Produces: `project_lockup(repo: str) -> str` (mark at left + repo name in Jost + to its right); `render_projects` also writes `lockup.svg` per repo. + +- [ ] **Step 1: Write the failing test** + + ```python + # append to tests/test_projects.py + @pytest.mark.parametrize("repo", ["modern-di", "faststream-outbox", "semvertag"]) + def test_lockup_is_valid_and_names_repo(repo: str) -> None: + svg = p.project_lockup(repo) + minidom.parseString(svg) + assert svg.startswith(" None: + p.render_projects(out_dir=tmp_path) + assert (tmp_path / "modern-di" / "lockup.svg").is_file() + ``` + +- [ ] **Step 2: Run test to verify it fails** + + Run: `uv run pytest tests/test_projects.py -q -k lockup` + Expected: FAIL — `AttributeError: ... 'project_lockup'`. + +- [ ] **Step 3: Implement `project_lockup` and write it in `render_projects`** + + ```python + # add near the top imports of brand/build/projects.py + from brand.build.text import outline_text + + # add to brand/build/projects.py + _LOCKUP_H = 100 + _NAME_SIZE = 34 + _GAP = 18 + + + def project_lockup(repo: str) -> str: + """Framed mark on the left + the repo name in Jost (green) to its right.""" + mark_frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) + inner = MANIFEST[repo]() + name_x = _LOCKUP_H + _GAP + name_svg, name_w = outline_text( + repo, _NAME_SIZE, x=name_x, baseline_y=_LOCKUP_H / 2 + _NAME_SIZE * 0.34, + anchor="start", color=t.GREEN_INK, + ) + total_w = round(name_x + name_w + _GAP) + return ( + f'' + f'{mark_frame}{inner}' + f"{name_svg}" + ) + ``` + + ```python + # in render_projects(), inside the for-loop after writing mark.svg: + (d / "lockup.svg").write_text(project_lockup(repo) + "\n", encoding="utf-8") + ``` + +- [ ] **Step 4: Run the tests + render** + + Run: `uv run pytest tests/test_projects.py -q` + Expected: PASS. + Run: `uv run python -m brand.build.render` then `ls brand/projects/modern-di/` + Expected: `mark.svg`, `lockup.svg` (+ PNGs) present. + +- [ ] **Step 5: Commit** + + ```bash + git add brand/build/projects.py tests/test_projects.py brand/projects + git commit -m "feat(brand): per-project horizontal name lockups" + ``` + +--- + +### Task 9: Docs — README + architecture + finalize bundle + +**Files:** +- Modify: `brand/README.md` +- Create: `architecture/brand-marks.md` +- Modify: `planning/changes/2026-06-29.01-per-project-brand-marks/design.md` (summary) + +One sentence: document the shipped capability and promote it into +`architecture/`, per the planning convention. + +- [ ] **Step 1: Update `brand/README.md`** + + Replace the "Deferred" section's first line so per-project marks are no longer + listed as deferred; add a short subsection: + + ```markdown + ## Per-project marks (`brand/projects/`) + + Each repo gets a large-format mark: the constant green+gold snake-frame with + one gold inner symbol (see `brand/build/projects.py::MANIFEST`). Regenerate + with `uv run python -m brand.build.render`; outputs land in + `brand/projects//` as `mark.svg`, `lockup.svg` (+ PNGs). These are + large-format only — every repo's favicon/avatar stays the org mark. + ``` + +- [ ] **Step 2: Create `architecture/brand-marks.md`** + + ```markdown + # Brand marks + + The org's logo assets, generated by `brand/build/` (no frontmatter; living prose). + + ## Org marks (`brand/org/`) + Favicon, avatar, social cards — the interlocked-snakes pinwheel with a chevron. + Used everywhere small (favicons, avatars). See `site-branding.md` for site wiring. + + ## Per-project marks (`brand/projects//`) + One large-format logo per repo: the constant green+gold snake-frame + (`geometry.py::project_frame`, margin 9 / arm 53 / stroke 11) with a single + gold inner symbol (`symbols.py`) chosen per repo in `projects.py::MANIFEST`. + Two-colour (green + gold); repos differ by symbol shape, not colour. The two + project templates reuse the org chevron. `modern-di-faststream` is the only + mark using a partner's literal logo path (FastStream's, recoloured); other + integration cues are redrawn evocations. Outputs: `mark.svg`, `lockup.svg` + (+ `mark-512/1024.png`). Regenerate via `uv run python -m brand.build.render`. + ``` + +- [ ] **Step 3: Finalize the bundle summary** + + Edit the `summary:` in `design.md` to the realized result, e.g.: + `summary: Per-project marks shipped — 17 repos, constant snake-frame + gold inner symbol, generated into brand/projects/.` + +- [ ] **Step 4: Verify everything** + + Run: `uv run pytest -q` (full suite) → all green. + Run: `just check-planning` → `planning: OK`. + Run: `uv run python -m brand.build.render` → no error. + +- [ ] **Step 5: Commit** + + ```bash + git add brand/README.md architecture/brand-marks.md planning/changes/2026-06-29.01-per-project-brand-marks/design.md + git commit -m "docs(brand): document per-project marks + promote to architecture" + ``` + +--- + +## Notes for the executor + +- After all tasks: push the branch and open a PR (do not local-merge); watch CI. +- The validated visual prototype lives only in the brainstorm scratchpad; this + plan is the source of truth. If a rendered mark looks off, render a contact + sheet (`rsvg-convert` each `mark.svg` to PNG) and compare — the geometry here + is the version that passed visual review. +- Do not alter `brand/org/` (output) or the org-mark `render()` blocks; only + move `export_png` to `raster.py` and add the per-project pass. +- `terminal()` uses a live `` "T>" (generic monospace). Unlike the + org wordmark (outlined via `text.py` for font-independence), this is a tiny + glyph and renders fine with `rsvg-convert`'s default fonts. If a downstream + context needs font-independence, swap it to `text.outline_text` with Jost. From 45740c14ef9d0baa29c407d7295fe32d60112525 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:24:21 +0300 Subject: [PATCH 03/13] feat(brand): symbol module scaffold + shared helpers --- brand/build/symbols.py | 83 ++++++++++++++++++++++++++++++++++++++++++ tests/test_symbols.py | 18 +++++++++ 2 files changed, 101 insertions(+) create mode 100644 brand/build/symbols.py create mode 100644 tests/test_symbols.py diff --git a/brand/build/symbols.py b/brand/build/symbols.py new file mode 100644 index 0000000..8fc0445 --- /dev/null +++ b/brand/build/symbols.py @@ -0,0 +1,83 @@ +import math + +from brand.build.tokens import CREAM, GOLD_LIGHT + +GOLD = GOLD_LIGHT +# pytest emblem bar tints (light->dark) — the one allowed non-token palette +_BAR_TINTS = ("#e6b14d", "#d99a1f", GOLD, "#9c6c00") + + +def _ah(tx: float, ty: float, ang: float, sz: float, fill: str = GOLD) -> str: + """Simple isoceles arrowhead, tip at (tx,ty) pointing toward `ang` (radians).""" + a1 = ang + math.radians(150) + a2 = ang - math.radians(150) + return ( + f'' + ) + + +def _cyl( + cx: float, cy: float, r: float, h: float = 0.78, w: float = 1.0, fill: str = GOLD +) -> str: + """Database cylinder centred on (cx,cy).""" + rx = 0.5 * r * w + return ( + f'' + f'' + f'' + f'' + ) + + +def _star5(cx: float, cy: float, radius: float, color: str, inner: float = 0.42) -> str: + """Five-pointed star centred on (cx,cy).""" + pts: list[tuple[float, float]] = [] + for i in range(5): + ao = -90 + i * 72 + pts.append( + ( + cx + radius * math.cos(math.radians(ao)), + cy + radius * math.sin(math.radians(ao)), + ) + ) + ai = ao + 36 + pts.append( + ( + cx + radius * inner * math.cos(math.radians(ai)), + cy + radius * inner * math.sin(math.radians(ai)), + ) + ) + body = " ".join(f"{x:.1f},{y:.1f}" for x, y in pts) + return f'' + + +def _circ_arc(cx: float, cy: float, rad: float, a0: float, a1: float, w: float) -> str: + """Clockwise arc a0->a1 (deg, increasing) with a leading arrowhead at a1.""" + a1s = a1 - 7 # stop the stroke short so the head caps it cleanly + x0 = cx + rad * math.cos(math.radians(a0)) + y0 = cy + rad * math.sin(math.radians(a0)) + x1 = cx + rad * math.cos(math.radians(a1s)) + y1 = cy + rad * math.sin(math.radians(a1s)) + large = 1 if (a1s - a0) % 360 > 180 else 0 + d = ( + f'' + ) + ex = cx + rad * math.cos(math.radians(a1)) + ey = cy + rad * math.sin(math.radians(a1)) + ang = math.radians(a1 + 90) # forward (clockwise) tangent + length = w * 3.0 + width = w * 1.7 + dx, dy = math.cos(ang), math.sin(ang) + px, py = -dy, dx + tip = (ex + 0.55 * length * dx, ey + 0.55 * length * dy) + base = (ex - 0.45 * length * dx, ey - 0.45 * length * dy) + d += ( + f'' + ) + return d diff --git a/tests/test_symbols.py b/tests/test_symbols.py new file mode 100644 index 0000000..1375e30 --- /dev/null +++ b/tests/test_symbols.py @@ -0,0 +1,18 @@ +from xml.dom import minidom +from brand.build import symbols as sym + + +def _wrap(markup: str) -> str: + return ( + f'{markup}' + ) + + +def test_helpers_emit_parseable_svg() -> None: + for markup in ( + sym._ah(50, 50, 0.0, 6), + sym._cyl(50, 50, 20), + sym._star5(50, 50, 18, sym.GOLD), + sym._circ_arc(50, 50, 20, 285, 425, 4.5), + ): + minidom.parseString(_wrap(markup)) # raises on malformed XML From d1e9852adb669b055c6ae067421171d4e9eed77b Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:28:54 +0300 Subject: [PATCH 04/13] feat(brand): dependency-injection inner symbols --- brand/build/symbols.py | 91 ++++++++++++++++++++++++++++++++++++++++++ tests/test_symbols.py | 17 ++++++++ 2 files changed, 108 insertions(+) diff --git a/brand/build/symbols.py b/brand/build/symbols.py index 8fc0445..7f4f960 100644 --- a/brand/build/symbols.py +++ b/brand/build/symbols.py @@ -81,3 +81,94 @@ def _circ_arc(cx: float, cy: float, rad: float, a0: float, a1: float, w: float) f'{base[0] - width * px:.1f},{base[1] - width * py:.1f}" fill="{GOLD}"/>' ) return d + + +FASTSTREAM_PATH = ( + "m499.61,356.87l-92.61-160.41-36.48-63.19-10.46,251.02c.07,2.86-.78,6.05-2.51,8.6" + "-2.98,4.41-7.42,5.31-9.92,2.02l.02-.03-68.85-90.48-107.13,38.09v.04c-3.89,1.38-7.11" + "-1.8-7.2-7.12-.05-3.08.97-6.22,2.6-8.57L327.1,58.07l-12.71-22.02c-25.95-44.94-90.82" + "-44.94-116.77,0l-92.61,160.41L12.39,356.87c-25.95,44.94,6.49,101.12,58.38,101.12" + "h370.45c51.9,0,84.33-56.18,58.38-101.12Z" +) + + +def bolt_disc(cx: float, cy: float, r: float) -> str: + """FastAPI cue: lightning bolt knocked out of a gold disc.""" + norm = [(0.30, -0.80), (-0.42, 0.18), (0.05, 0.18), (-0.22, 0.82), (0.48, -0.22), (0.05, -0.22)] + pts = " ".join(f"{cx + dx * r * 0.82:.1f},{cy + dy * r * 0.82:.1f}" for dx, dy in norm) + return f'' + + +def star_disc(cx: float, cy: float, r: float) -> str: + """Litestar cue: star knocked out of a gold disc.""" + return f'' + _star5(cx, cy, r * 0.72, CREAM) + + +def faststream(cx: float, cy: float, r: float) -> str: + """FastStream's own delta/stream mark, recoloured gold (sized ~2r tall).""" + size = r * 2.1 + sc = size / 462.0 + return ( + f'' + f'' + ) + + +def terminal(cx: float, cy: float, r: float) -> str: + """Typer cue: terminal window showing a T> prompt.""" + return ( + f'' + f'T>' + ) + + +def bars(cx: float, cy: float, r: float) -> str: + """pytest cue: stepped bars hanging from a crossbar (gold tints), vertically centred.""" + bw = r * 0.34 + gap = r * 0.22 + x0 = cx - r + stub = r * 0.18 + cb = r * 0.2 + maxlen = r * 1.0 + total = stub + r * 0.12 + cb + maxlen + top = cy - total / 2 + y_stub = top + y_cb = top + stub + r * 0.12 + y_bar = y_cb + cb + heights = [1.0, 0.78, 0.55, 0.38] + out = [f''] + for i in range(4): + x = x0 + i * (bw + gap) + out.append(f'') + out.append(f'') + return "".join(out) + + +def chevron(cx: float, cy: float, r: float) -> str: + """The org chevron (used by templates and as a standalone cue).""" + return ( + f'' + ) + + +def graph(cx: float, cy: float, r: float, *, dashed: bool) -> str: + """Dependency graph: 3 nodes + two edges. dashed=auto-wired (modern-di), + solid=explicit (that-depends).""" + top = (cx, cy - 0.62 * r) + bl = (cx - 0.82 * r, cy + 0.6 * r) + br = (cx + 0.82 * r, cy + 0.6 * r) + nr = r * 0.24 + w = r * 0.15 + da = ' stroke-dasharray="4 3"' if dashed else "" + return ( + f'' + f'' + f'' + f'' + f'' + ) diff --git a/tests/test_symbols.py b/tests/test_symbols.py index 1375e30..932c291 100644 --- a/tests/test_symbols.py +++ b/tests/test_symbols.py @@ -1,4 +1,7 @@ from xml.dom import minidom + +import pytest + from brand.build import symbols as sym @@ -16,3 +19,17 @@ def test_helpers_emit_parseable_svg() -> None: sym._circ_arc(50, 50, 20, 285, 425, 4.5), ): minidom.parseString(_wrap(markup)) # raises on malformed XML + + +DI_SYMBOLS = ["bolt_disc", "star_disc", "faststream", "terminal", "bars", "chevron"] + + +@pytest.mark.parametrize("name", DI_SYMBOLS) +def test_di_symbol_parses(name: str) -> None: + markup = getattr(sym, name)(50, 50, 23) + minidom.parseString(_wrap(markup)) + + +def test_graph_dashed_vs_solid() -> None: + assert "stroke-dasharray" in sym.graph(50, 50, 23, dashed=True) + assert "stroke-dasharray" not in sym.graph(50, 50, 23, dashed=False) From d62ab6bdb7a5b32d9466a914b4cac3d41921f97d Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:33:51 +0300 Subject: [PATCH 05/13] feat(brand): microservices/messaging inner symbols --- brand/build/symbols.py | 70 ++++++++++++++++++++++++++++++++++++++++++ tests/test_symbols.py | 8 +++++ 2 files changed, 78 insertions(+) diff --git a/brand/build/symbols.py b/brand/build/symbols.py index 7f4f960..2bbf856 100644 --- a/brand/build/symbols.py +++ b/brand/build/symbols.py @@ -172,3 +172,73 @@ def graph(cx: float, cy: float, r: float, *, dashed: bool) -> str: f'' f'' ) + + +def rocket(cx: float, cy: float, r: float) -> str: + """lite-bootstrap: a rocket (launch).""" + body = ( + f'' + ) + fins = ( + f'' + f'' + ) + window = f'' + flame = f'' + return body + fins + window + flame + + +def chain(cx: float, cy: float, r: float) -> str: + """httpware: two interlocked chain links (middleware chain).""" + sw = r * 0.2 + return ( + f'' + f'' + ) + + +def stopwatch(cx: float, cy: float, r: float) -> str: + """faststream-redis-timers: a stopwatch.""" + c = cy + 0.07 * r + rr = r * 0.92 + face = ( + f'' + f'' + f'' + ) + btn = ( + f'' + f'' + ) + return face + btn + + +def lanes(cx: float, cy: float, r: float, length: float = 1.7) -> str: + """faststream-concurrent-aiokafka: three staggered parallel arrows (middle longest).""" + out = "" + for i, dy in enumerate((-0.55 * r, 0.0, 0.55 * r)): + ln = length * r * (0.72 if i != 1 else 1.0) + x1 = cx - length * r / 2 + x2 = x1 + ln + out += ( + f'' + ) + out += _ah(x2, cy + dy, 0.0, r * 0.3) + return out + + +def outbox(cx: float, cy: float, r: float) -> str: + """faststream-outbox: a database cylinder publishing concentric broadcast arcs.""" + base = _cyl(cx - 0.28 * r, cy + 0.28 * r, r * 0.72, 0.72) + bx, by = cx, cy - 0.02 * r + out = f'' + for k in (0.5, 0.82, 1.14): + kk = k * r * 0.72 + out += ( + f'' + ) + return base + out diff --git a/tests/test_symbols.py b/tests/test_symbols.py index 932c291..df4071e 100644 --- a/tests/test_symbols.py +++ b/tests/test_symbols.py @@ -33,3 +33,11 @@ def test_di_symbol_parses(name: str) -> None: def test_graph_dashed_vs_solid() -> None: assert "stroke-dasharray" in sym.graph(50, 50, 23, dashed=True) assert "stroke-dasharray" not in sym.graph(50, 50, 23, dashed=False) + + +MSG_SYMBOLS = ["rocket", "chain", "stopwatch", "lanes", "outbox"] + + +@pytest.mark.parametrize("name", MSG_SYMBOLS) +def test_msg_symbol_parses(name: str) -> None: + minidom.parseString(_wrap(getattr(sym, name)(50, 50, 23))) From 832fd5989f2a6cc0cdfc322191b963169af7940d Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:38:02 +0300 Subject: [PATCH 06/13] feat(brand): utility inner symbols --- brand/build/symbols.py | 35 +++++++++++++++++++++++++++++++++++ tests/test_symbols.py | 8 ++++++++ 2 files changed, 43 insertions(+) diff --git a/brand/build/symbols.py b/brand/build/symbols.py index 2bbf856..56c9f74 100644 --- a/brand/build/symbols.py +++ b/brand/build/symbols.py @@ -242,3 +242,38 @@ def outbox(cx: float, cy: float, r: float) -> str: f'fill="none" stroke="{GOLD}" stroke-width="{r * 0.72 * 0.14:.1f}"/>' ) return base + out + + +def db_retry(cx: float, cy: float, r: float) -> str: + """db-retry: a database cylinder inside a two-head clockwise retry circle.""" + rad = 0.92 * r + return _cyl(cx, cy, r * 0.6) + _circ_arc(cx, cy, rad, 285, 425, 4.5) + _circ_arc(cx, cy, rad, 105, 245, 4.5) + + +def eof_fixer(cx: float, cy: float, r: float) -> str: + """eof-fixer: a document with a newline-return (down-then-left) arrow.""" + doc = ( + f'' + ) + for i in range(3): + doc += ( + f'' + ) + doc += ( + f'' + ) + doc += _ah(cx - 0.2 * r, cy + 0.55 * r, math.pi, r * 0.24) + return doc + + +def tag(cx: float, cy: float, r: float) -> str: + """semvertag: a price/version tag with a punch-hole, vertically centred.""" + return ( + f'' + f'' + ) diff --git a/tests/test_symbols.py b/tests/test_symbols.py index df4071e..1f228ae 100644 --- a/tests/test_symbols.py +++ b/tests/test_symbols.py @@ -41,3 +41,11 @@ def test_graph_dashed_vs_solid() -> None: @pytest.mark.parametrize("name", MSG_SYMBOLS) def test_msg_symbol_parses(name: str) -> None: minidom.parseString(_wrap(getattr(sym, name)(50, 50, 23))) + + +UTIL_SYMBOLS = ["db_retry", "eof_fixer", "tag"] + + +@pytest.mark.parametrize("name", UTIL_SYMBOLS) +def test_util_symbol_parses(name: str) -> None: + minidom.parseString(_wrap(getattr(sym, name)(50, 50, 23))) From d7ddedfd3ee13a6a4716a1fa2999d7b6a521781f Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:42:14 +0300 Subject: [PATCH 07/13] feat(brand): parametric project snake-frame --- brand/build/geometry.py | 25 +++++++++++++++++++++++++ tests/test_projects.py | 8 ++++++++ 2 files changed, 33 insertions(+) create mode 100644 tests/test_projects.py diff --git a/brand/build/geometry.py b/brand/build/geometry.py index 0801926..1181b40 100644 --- a/brand/build/geometry.py +++ b/brand/build/geometry.py @@ -94,3 +94,28 @@ def social_square(*, bg: str, struct: str, gold: str) -> str: + f'{body}' + "" ) + + +def project_frame( + *, + struct: str, + accent: str, + w: int = 100, + h: int = 100, + m: int = 9, + lx: int = 53, + ly: int = 53, + s: int = 11, +) -> str: + """Two pinwheeled L-snakes in opposite corners — the constant project frame. + Returns bare markup (no wrapper).""" + hs = s + 3 + parts = [ + f'', + f'', + f'', + f'', + f'', + f'', + ] + return "".join(parts) diff --git a/tests/test_projects.py b/tests/test_projects.py new file mode 100644 index 0000000..b99510d --- /dev/null +++ b/tests/test_projects.py @@ -0,0 +1,8 @@ +from xml.dom import minidom +from brand.build import geometry as g +from brand.build import tokens as t + +def test_project_frame_parses_and_uses_tokens() -> None: + frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) + minidom.parseString(f'{frame}') + assert t.GREEN_INK in frame and t.GOLD_LIGHT in frame From d08612f7625a94b4da3c638a864b8b022692d557 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:45:25 +0300 Subject: [PATCH 08/13] feat(brand): repo manifest + project mark composition --- brand/build/projects.py | 46 +++++++++++++++++++++++++++++++++++++++++ tests/test_projects.py | 31 +++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 brand/build/projects.py diff --git a/brand/build/projects.py b/brand/build/projects.py new file mode 100644 index 0000000..f8dea90 --- /dev/null +++ b/brand/build/projects.py @@ -0,0 +1,46 @@ +from collections.abc import Callable + +from brand.build import geometry as g +from brand.build import symbols as sym +from brand.build import tokens as t + +R = 23 +_CX = _CY = 50 + +ALLOWED_COLORS: frozenset[str] = frozenset( + c.lower() for c in (t.GREEN_INK, t.GOLD_LIGHT, t.CREAM, *sym._BAR_TINTS) +) + +MANIFEST: dict[str, Callable[[], str]] = { + # dependency injection + "modern-di": lambda: sym.graph(_CX, _CY, R, dashed=True), + "that-depends": lambda: sym.graph(_CX, _CY, R, dashed=False), + "modern-di-fastapi": lambda: sym.bolt_disc(_CX, _CY, R), + "modern-di-litestar": lambda: sym.star_disc(_CX, _CY, R), + "modern-di-faststream": lambda: sym.faststream(_CX, _CY, R), + "modern-di-typer": lambda: sym.terminal(_CX, _CY, R), + "modern-di-pytest": lambda: sym.bars(_CX, _CY, R), + # templates — reuse the org chevron + "fastapi-sqlalchemy-template": lambda: sym.chevron(_CX, _CY, R - 1), + "litestar-sqlalchemy-template": lambda: sym.chevron(_CX, _CY, R - 1), + # microservices, http & messaging + "lite-bootstrap": lambda: sym.rocket(_CX, _CY, R), + "httpware": lambda: sym.chain(_CX, _CY, R), + "faststream-redis-timers": lambda: sym.stopwatch(_CX, _CY, R), + "faststream-concurrent-aiokafka": lambda: sym.lanes(_CX, _CY, R), + "faststream-outbox": lambda: sym.outbox(_CX, _CY, R), + # utilities + "db-retry": lambda: sym.db_retry(_CX, _CY, R), + "eof-fixer": lambda: sym.eof_fixer(_CX, _CY, R), + "semvertag": lambda: sym.tag(_CX, _CY, R), +} + + +def project_mark(repo: str) -> str: + """Full for a repo: constant frame + its gold inner symbol.""" + frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) + inner = MANIFEST[repo]() + return ( + '{frame}{inner}' + ) diff --git a/tests/test_projects.py b/tests/test_projects.py index b99510d..a6ea886 100644 --- a/tests/test_projects.py +++ b/tests/test_projects.py @@ -1,8 +1,39 @@ +import re from xml.dom import minidom +import pytest from brand.build import geometry as g from brand.build import tokens as t +from brand.build import projects as p def test_project_frame_parses_and_uses_tokens() -> None: frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) minidom.parseString(f'{frame}') assert t.GREEN_INK in frame and t.GOLD_LIGHT in frame + +EXPECTED_REPOS = { + "modern-di", "that-depends", "modern-di-fastapi", "modern-di-litestar", + "modern-di-faststream", "modern-di-typer", "modern-di-pytest", + "fastapi-sqlalchemy-template", "litestar-sqlalchemy-template", + "lite-bootstrap", "httpware", "faststream-redis-timers", + "faststream-concurrent-aiokafka", "faststream-outbox", + "db-retry", "eof-fixer", "semvertag", +} + +def test_manifest_covers_every_repo() -> None: + assert set(p.MANIFEST) == EXPECTED_REPOS + +@pytest.mark.parametrize("repo", sorted(EXPECTED_REPOS)) +def test_project_mark_is_valid_svg(repo: str) -> None: + svg = p.project_mark(repo) + minidom.parseString(svg) + assert svg.startswith(" None: + hexes = {h.lower() for h in re.findall(r"#[0-9a-fA-F]{6}", p.project_mark(repo))} + assert hexes <= p.ALLOWED_COLORS, f"{repo} stray colours: {hexes - p.ALLOWED_COLORS}" + +def test_templates_use_chevron() -> None: + # both templates share the org chevron (a polyline), not a bespoke symbol + for repo in ("fastapi-sqlalchemy-template", "litestar-sqlalchemy-template"): + assert " Date: Mon, 29 Jun 2026 22:50:12 +0300 Subject: [PATCH 09/13] feat(brand): render per-project marks to brand/projects/ Co-Authored-By: Claude Sonnet 4.6 --- brand/build/projects.py | 22 ++++++++++++++ brand/build/raster.py | 23 +++++++++++++++ brand/build/render.py | 27 ++++-------------- brand/projects/db-retry/mark-1024.png | Bin 0 -> 33411 bytes brand/projects/db-retry/mark-512.png | Bin 0 -> 15463 bytes brand/projects/db-retry/mark.svg | 1 + brand/projects/eof-fixer/mark-1024.png | Bin 0 -> 13447 bytes brand/projects/eof-fixer/mark-512.png | Bin 0 -> 6221 bytes brand/projects/eof-fixer/mark.svg | 1 + .../fastapi-sqlalchemy-template/mark-1024.png | Bin 0 -> 23646 bytes .../fastapi-sqlalchemy-template/mark-512.png | Bin 0 -> 10798 bytes .../fastapi-sqlalchemy-template/mark.svg | 1 + .../mark-1024.png | Bin 0 -> 14075 bytes .../mark-512.png | Bin 0 -> 6411 bytes .../faststream-concurrent-aiokafka/mark.svg | 1 + .../projects/faststream-outbox/mark-1024.png | Bin 0 -> 25504 bytes brand/projects/faststream-outbox/mark-512.png | Bin 0 -> 11642 bytes brand/projects/faststream-outbox/mark.svg | 1 + .../faststream-redis-timers/mark-1024.png | Bin 0 -> 30563 bytes .../faststream-redis-timers/mark-512.png | Bin 0 -> 13901 bytes .../projects/faststream-redis-timers/mark.svg | 1 + brand/projects/httpware/mark-1024.png | Bin 0 -> 19961 bytes brand/projects/httpware/mark-512.png | Bin 0 -> 9012 bytes brand/projects/httpware/mark.svg | 1 + brand/projects/lite-bootstrap/mark-1024.png | Bin 0 -> 20584 bytes brand/projects/lite-bootstrap/mark-512.png | Bin 0 -> 9490 bytes brand/projects/lite-bootstrap/mark.svg | 1 + .../mark-1024.png | Bin 0 -> 23646 bytes .../litestar-sqlalchemy-template/mark-512.png | Bin 0 -> 10798 bytes .../litestar-sqlalchemy-template/mark.svg | 1 + .../projects/modern-di-fastapi/mark-1024.png | Bin 0 -> 27304 bytes brand/projects/modern-di-fastapi/mark-512.png | Bin 0 -> 12505 bytes brand/projects/modern-di-fastapi/mark.svg | 1 + .../modern-di-faststream/mark-1024.png | Bin 0 -> 25394 bytes .../modern-di-faststream/mark-512.png | Bin 0 -> 11619 bytes brand/projects/modern-di-faststream/mark.svg | 1 + .../projects/modern-di-litestar/mark-1024.png | Bin 0 -> 28842 bytes .../projects/modern-di-litestar/mark-512.png | Bin 0 -> 13382 bytes brand/projects/modern-di-litestar/mark.svg | 1 + brand/projects/modern-di-pytest/mark-1024.png | Bin 0 -> 13384 bytes brand/projects/modern-di-pytest/mark-512.png | Bin 0 -> 6118 bytes brand/projects/modern-di-pytest/mark.svg | 1 + brand/projects/modern-di-typer/mark-1024.png | Bin 0 -> 15789 bytes brand/projects/modern-di-typer/mark-512.png | Bin 0 -> 7026 bytes brand/projects/modern-di-typer/mark.svg | 1 + brand/projects/modern-di/mark-1024.png | Bin 0 -> 25149 bytes brand/projects/modern-di/mark-512.png | Bin 0 -> 11491 bytes brand/projects/modern-di/mark.svg | 1 + brand/projects/semvertag/mark-1024.png | Bin 0 -> 14515 bytes brand/projects/semvertag/mark-512.png | Bin 0 -> 6449 bytes brand/projects/semvertag/mark.svg | 1 + brand/projects/that-depends/mark-1024.png | Bin 0 -> 24321 bytes brand/projects/that-depends/mark-512.png | Bin 0 -> 11036 bytes brand/projects/that-depends/mark.svg | 1 + tests/test_projects.py | 9 ++++++ 55 files changed, 76 insertions(+), 22 deletions(-) create mode 100644 brand/build/raster.py create mode 100644 brand/projects/db-retry/mark-1024.png create mode 100644 brand/projects/db-retry/mark-512.png create mode 100644 brand/projects/db-retry/mark.svg create mode 100644 brand/projects/eof-fixer/mark-1024.png create mode 100644 brand/projects/eof-fixer/mark-512.png create mode 100644 brand/projects/eof-fixer/mark.svg create mode 100644 brand/projects/fastapi-sqlalchemy-template/mark-1024.png create mode 100644 brand/projects/fastapi-sqlalchemy-template/mark-512.png create mode 100644 brand/projects/fastapi-sqlalchemy-template/mark.svg create mode 100644 brand/projects/faststream-concurrent-aiokafka/mark-1024.png create mode 100644 brand/projects/faststream-concurrent-aiokafka/mark-512.png create mode 100644 brand/projects/faststream-concurrent-aiokafka/mark.svg create mode 100644 brand/projects/faststream-outbox/mark-1024.png create mode 100644 brand/projects/faststream-outbox/mark-512.png create mode 100644 brand/projects/faststream-outbox/mark.svg create mode 100644 brand/projects/faststream-redis-timers/mark-1024.png create mode 100644 brand/projects/faststream-redis-timers/mark-512.png create mode 100644 brand/projects/faststream-redis-timers/mark.svg create mode 100644 brand/projects/httpware/mark-1024.png create mode 100644 brand/projects/httpware/mark-512.png create mode 100644 brand/projects/httpware/mark.svg create mode 100644 brand/projects/lite-bootstrap/mark-1024.png create mode 100644 brand/projects/lite-bootstrap/mark-512.png create mode 100644 brand/projects/lite-bootstrap/mark.svg create mode 100644 brand/projects/litestar-sqlalchemy-template/mark-1024.png create mode 100644 brand/projects/litestar-sqlalchemy-template/mark-512.png create mode 100644 brand/projects/litestar-sqlalchemy-template/mark.svg create mode 100644 brand/projects/modern-di-fastapi/mark-1024.png create mode 100644 brand/projects/modern-di-fastapi/mark-512.png create mode 100644 brand/projects/modern-di-fastapi/mark.svg create mode 100644 brand/projects/modern-di-faststream/mark-1024.png create mode 100644 brand/projects/modern-di-faststream/mark-512.png create mode 100644 brand/projects/modern-di-faststream/mark.svg create mode 100644 brand/projects/modern-di-litestar/mark-1024.png create mode 100644 brand/projects/modern-di-litestar/mark-512.png create mode 100644 brand/projects/modern-di-litestar/mark.svg create mode 100644 brand/projects/modern-di-pytest/mark-1024.png create mode 100644 brand/projects/modern-di-pytest/mark-512.png create mode 100644 brand/projects/modern-di-pytest/mark.svg create mode 100644 brand/projects/modern-di-typer/mark-1024.png create mode 100644 brand/projects/modern-di-typer/mark-512.png create mode 100644 brand/projects/modern-di-typer/mark.svg create mode 100644 brand/projects/modern-di/mark-1024.png create mode 100644 brand/projects/modern-di/mark-512.png create mode 100644 brand/projects/modern-di/mark.svg create mode 100644 brand/projects/semvertag/mark-1024.png create mode 100644 brand/projects/semvertag/mark-512.png create mode 100644 brand/projects/semvertag/mark.svg create mode 100644 brand/projects/that-depends/mark-1024.png create mode 100644 brand/projects/that-depends/mark-512.png create mode 100644 brand/projects/that-depends/mark.svg diff --git a/brand/build/projects.py b/brand/build/projects.py index f8dea90..0c5df6e 100644 --- a/brand/build/projects.py +++ b/brand/build/projects.py @@ -1,8 +1,10 @@ from collections.abc import Callable +from pathlib import Path from brand.build import geometry as g from brand.build import symbols as sym from brand.build import tokens as t +from brand.build.raster import export_png R = 23 _CX = _CY = 50 @@ -36,6 +38,11 @@ } +ROOT = Path(__file__).resolve().parents[2] +PROJECTS = ROOT / "brand" / "projects" +_PNG_SIZES = (512, 1024) + + def project_mark(repo: str) -> str: """Full for a repo: constant frame + its gold inner symbol.""" frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) @@ -44,3 +51,18 @@ def project_mark(repo: str) -> str: '{frame}{inner}' ) + + +def render_projects(out_dir: Path | None = None) -> list[Path]: + """Write mark.svg (+ PNGs) for every repo under out_dir//.""" + base = out_dir if out_dir is not None else PROJECTS + written: list[Path] = [] + for repo in MANIFEST: + d = base / repo + d.mkdir(parents=True, exist_ok=True) + svg = d / "mark.svg" + svg.write_text(project_mark(repo) + "\n", encoding="utf-8") + for sz in _PNG_SIZES: + export_png(svg, d / f"mark-{sz}.png", width=sz, height=sz) + written.append(svg) + return written diff --git a/brand/build/raster.py b/brand/build/raster.py new file mode 100644 index 0000000..90f19bc --- /dev/null +++ b/brand/build/raster.py @@ -0,0 +1,23 @@ +import shutil +import subprocess +from pathlib import Path + + +def export_png( + svg_path: Path, + png_path: Path, + *, + width: int | None = None, + height: int | None = None, +) -> bool: + exe = shutil.which("rsvg-convert") + if exe is None: + return False + args = [exe] + if width is not None: + args += ["-w", str(width)] + if height is not None: + args += ["-h", str(height)] + args += [str(svg_path), "-o", str(png_path)] + subprocess.run(args, check=True) + return True diff --git a/brand/build/render.py b/brand/build/render.py index 29244b7..34ce574 100644 --- a/brand/build/render.py +++ b/brand/build/render.py @@ -1,9 +1,9 @@ -import shutil -import subprocess from pathlib import Path from brand.build import geometry as g from brand.build import tokens as t +from brand.build.projects import render_projects +from brand.build.raster import export_png ROOT = Path(__file__).resolve().parents[2] ORG = ROOT / "brand" / "org" @@ -14,26 +14,6 @@ def _write(path: Path, content: str) -> None: path.write_text(content + "\n", encoding="utf-8") -def export_png( - svg_path: Path, - png_path: Path, - *, - width: int | None = None, - height: int | None = None, -) -> bool: - exe = shutil.which("rsvg-convert") - if exe is None: - return False - args = [exe] - if width is not None: - args += ["-w", str(width)] - if height is not None: - args += ["-h", str(height)] - args += [str(svg_path), "-o", str(png_path)] - subprocess.run(args, check=True) - return True - - def render() -> None: ORG.mkdir(parents=True, exist_ok=True) ic = dict(bg=t.GREEN_SURFACE, struct=t.CREAM, gold=t.GOLD_DARK) @@ -74,6 +54,9 @@ def render() -> None: g.social_square(bg=t.GREEN_SURFACE, struct=t.CREAM, gold=t.GOLD_DARK)) export_png(ORG / "social-square-green.svg", ORG / "social-square-green.png", width=640, height=640) + # Per-project marks (brand/projects//). + render_projects() + def main() -> None: render() diff --git a/brand/projects/db-retry/mark-1024.png b/brand/projects/db-retry/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..b78163a8aaad6c2ffe02252292725eabe741dd3a GIT binary patch literal 33411 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 literal 0 HcmV?d00001 diff --git a/brand/projects/db-retry/mark.svg b/brand/projects/db-retry/mark.svg new file mode 100644 index 0000000..d485876 --- /dev/null +++ b/brand/projects/db-retry/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/eof-fixer/mark-1024.png b/brand/projects/eof-fixer/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..5cb2683c4bf23b1f9cc6e0362c4466b6bd652485 GIT binary patch literal 13447 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 I6Lk5%07znEqW}N^ literal 0 HcmV?d00001 diff --git a/brand/projects/eof-fixer/mark.svg b/brand/projects/eof-fixer/mark.svg new file mode 100644 index 0000000..517087a --- /dev/null +++ b/brand/projects/eof-fixer/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/fastapi-sqlalchemy-template/mark-1024.png b/brand/projects/fastapi-sqlalchemy-template/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5e42a6d4245fd00b57becf97593f4c97d8405e GIT binary patch literal 23646 zcmeIac~q0<);9hi2(}`$^(ZKlmHE^t zMcd%VkJ=rK%y*rmym(d6op7CedFFOP+Go;d_V0czUjEI9i)-*lkK?D@P0Wqf9`|1Q z?q|n3-Q{V{r)M}k;ld@lnX8RWu`T1_rRGXSUURE!&ofq2VR!#0|53SZJcD86!~@(X zo8^>Z6MDQlgmG`{yo$w>;x!8ER?I4UFPjt!Gc4BYmmY~QBz0D#mN=PG;aNcv6I#F=ei8%d?ff(S_Lu8K(oCwCY_zo z)u1FlZ28+&+iCw_-&(L1#)#}n-SO~=Gc%&(ubg4d!(&&+IVoI^2)!m7uN>RzlHHFw zcIm!JJm16)=T-)NMBDQvJaw}mE$p#Zb#^Zs7g^k7H&?8|ZCm%kvz{^bVo~?tf#_T1 zN@1g=mnCi1(|gm#YcINb8m~__j=yUyt`g!A<(nwv#juzPwaE49{%Z+_zDAD}Y^%GE z8xfb5{j_G29f!EN)m1S(?j2~Zc#$S{hZm!uftz!S6FRe#|Dnxz$W-ipQW!TgvNmXo zfr-<`bhk=b_~2Vp35B|%DjHnR3H?A&J?zYkT%uf&w**i3PdsR>O?X+!v}4?B zw3(dGHgs#8bURSpiMcn!1_c{ngB*IwyDqyB6>;O@Wrad9%ob_rkY9ZPTh6GlI!NID z4cY0&m5$=|3k(S?ADv6E!IrgHC?>iuJNnw1{md3}-+{+EPgB#^Yx^YvILne{4>w^7 z!MCkq&C9ak{cPN{OwBJr0yNLvxBcj&ZxXjgI@egOADR(DT4Oa=Hq5gpNNbOaD}{Kh z6(cvpnU!|qrygGssffX>O_7P|+zIiV*+lL`iq1;)Wa}1g$4*k=cx1CX8ZFhne>|2K zFWytjL(td-&tX}-fFBI&=0P)HFECIXh6R%0Etrso{=_5*=uff`Ix=P;Ad3F_?`t50 z|B3`b;r{|k4CMNH9cK7{hdR}hW$@?!F#gT4>QAUAzLT=k#0q2)tkczxE#`vlp6vN% z20PrzJ!P?862yl|Sd=#=p7WRyywsVgXutTF`$T6GG7ha@j2}rUoeG#JuAIZN>^eEw z{b`xZc!q>vT#B8o99D3k31~&Ifx>YFGuLSv)xijrU{mB9A^v*vCdAu80*8K?+PYe_ z);e3LhMi1BL~|~rVOn~b@!S$CI7-*0^fGq6XN%|`D8z3mmw{nkudmfo=js}R_zbp! zO%iagRtv?r0hEx6IYL%nFQyUOKfJXI@=| zxj%s8Mn}Vwy2pj4GI4Ao(5mTLZ!LA5Me;hu(@jBpk-yr1o_V!ljHN(jB^BCo\bC4*JB%bfM(^KY8_NgH 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 diff --git a/brand/projects/faststream-concurrent-aiokafka/mark-1024.png b/brand/projects/faststream-concurrent-aiokafka/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..4f79910ad102b84b7be02d16c6f867e6abfbccd4 GIT binary patch literal 14075 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 literal 0 HcmV?d00001 diff --git a/brand/projects/faststream-concurrent-aiokafka/mark-512.png b/brand/projects/faststream-concurrent-aiokafka/mark-512.png new file mode 100644 index 0000000000000000000000000000000000000000..2f01630d37c127cf5709042bb393f7389e113725 GIT binary patch literal 6411 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 K<7K~j{{5dTH`9jz literal 0 HcmV?d00001 diff --git a/brand/projects/faststream-concurrent-aiokafka/mark.svg b/brand/projects/faststream-concurrent-aiokafka/mark.svg new file mode 100644 index 0000000..750137d --- /dev/null +++ b/brand/projects/faststream-concurrent-aiokafka/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/faststream-outbox/mark-1024.png b/brand/projects/faststream-outbox/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..a7190204bf896c18bd93a38f643d6fd9b1904d25 GIT binary patch literal 25504 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 UM*TlwG!gRnaoZ17TWH7s2N%jWQ2+n{ literal 0 HcmV?d00001 diff --git a/brand/projects/faststream-outbox/mark-512.png b/brand/projects/faststream-outbox/mark-512.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd3c8ef6bf953643c5ecb04d1200d3cfdb87396 GIT binary patch literal 11642 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 diff --git a/brand/projects/faststream-redis-timers/mark-1024.png b/brand/projects/faststream-redis-timers/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..df941a7f91a15678c3d3264eca370b14a21075d1 GIT binary patch literal 30563 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 J1y}9{{x3bL91j2h literal 0 HcmV?d00001 diff --git a/brand/projects/faststream-redis-timers/mark-512.png b/brand/projects/faststream-redis-timers/mark-512.png new file mode 100644 index 0000000000000000000000000000000000000000..42e62dd5c616d3a07989d8e29591f7de780750e9 GIT binary patch literal 13901 zcmd^mbyQT*_wNkd-5|{%At|M#NSAaYNC`+w*B~G%FfcTNN=Zsc*GLYnh$4t|NXQIB zOT9aOzw74g#-iwk!xu_Gy;KefJ+<@ z5drY$D0t>C@Q2`uj>bdK4ff|vcSR-$#0k=RsA3Xa_~%zxp-n)<&B1Jti~kloRTWZC zoP_(u$UaSdl94FAVb_3FvsLYK8Ml3)G&HXHnsaUrkLn>_!=hE0${;B{Rl5b(-ZL{p z5vzxMCLc%jR2qp#Cc~qmoZP5sG#i&BU0o)3&x6;wD4mv;DCJ$YE{gmo3vn}ewf@h) zl_3unaWw_&7Ae`TxKle#y%D78p5Km&>Q@_h^tMfdLx;-lDkWs9`X=zm^(OCBOi-E>T3Via z(NkhT6q|`DDp6zWxmeixby@JG_{w}S=6zezd>^0G7nPgfnXjEgo%nD~WS_&Rt_p)C7~q^9*dIy{bzZ$A&Zt2%BzL%1WxCzgaRXY>C^F*GfHs) z?lVl389-VYBuE@iEh8`>QY}Hw|1pD0*|J7A)c?1nLU|SoPRRrz0RJ0L1z#<#E5syK z3ZcOBYGel-I&kmFFpA1wv5$7#?+*16KPxyDzQgbLGl^8Bn;#`^qRRlCFnJe#h&+FM zrLyR+`RDybg!h?xY|y%b#u#z90*czi2G}ZiyZY^7ij*w{4V}bGarhcPhFx{g84TS2 zawyt<%cm(U#UhF0mK^mpV(wb;-l!N=G|H8sI7Xz<4ns)QS=DKs@&X`GSpLR*(3a z+o`SpFGPSHQDwFRKyq?o2{=dp5;o&xhx`Av_PnXwEvJM3qB#Q<3 zM~Waih)!b>cQ%kRTV`j@-CsHB?=>{t9T-5BswpON_YreW zhhevf3R@aS^O&7ifU$Ia0OuDP4%2c{}eJQ&ritd zdFFAi`OpjrU?b)if@9J^KV^JJZv9>zfYk8|-~w--zz^1;7~5n1^voJT}2FAR~!VTMO4pbO!=F=;}S9W)Ng%oMO!#*d~3f#!Y-r#y9vO1pu znfkALD3xa5Ip(gr5!t(%u^0&60F0}-e27X_j4Y_m6G15aPUml=$X!F?r zzK<(~&WD{^9}S9KZS4UZ&gOQ|<1vT14Y?Wt0WK_49Yd8klv2JUN`uFW3>NM|SlVxe zOPtckm09lM|3)bcl7h+tUBT)1lns=M$$T7Wv;RI1iaRW*Pc2OWR;3XCkakLKiFa2b zAq|h9bNI}jU@k-Y>!@HnMR9+iKqEkDJW=$IuT%EV&@{_K&p*`=kyGq$I~p<}OKmjg z$#`^fm!M;v-^HcW?97v>v}#L&sAq8xHLAM!`UW#cNTOSxpN0(f!dqc{<7s?#pccKX zZE9fm;v|%cpR13c{_2E`Jvk)Add)jR)e{_82isgKEE5G7SH_HAnb1pFs*#y(QS)y_1EAMr^MxlBSvLnTNsyv9IY766PKUVY_ zNG2Bf>hN#7La%t)<;TBRc~zFxSoDEyqs<2p$+1MRr^u; zI3`?j!rT1pI9fO5OW^H+Kd|E4a6e;f5vpBDU<#H(3)-KanJCTJ6%lla5ZE#D=y;e$ z-r_NbFDDI=^~{E`QEn)_fg5!`yS4|X=X*Ve=Do7)l2>2+WR;o}?G`dM^KgnR`cysG z+hUBTSxM`p9=SBLlJ&5BOTm~lmw=6!jrn_H zi`fQ-sx5ffE!=-;EtnUzQhMi$*S~4HwQNrMB?C)J_1Qs$Klo4~RzIFE|7Mc=8{K^A zTRMtSU+!8|^qLG4+phe$h82ZC`xnyO=`$WumgrNNdPN1o%NY2{T$p#TqhNxZ$`py)0=nx z8{IPh+bFP3gMmgam3%4M{G=thzP_huO}#3dUADHf4~1dZ9-Jor$LyV!Roy_r4_j@a zF|=sfD7$iXS%To7XwKr=9NDYSiu=G@1A6r5EpmfocLlLQ#xOIh-JV(FD08|6xUuY}YCPZ9(o!`Kx*QQ&3E*S{?AFkLJ> z72A=2-EtmN0V?G;wI1?+@9)KfN$PU_;zA@(XrU;N+^~(NoTx>Qb!iw~><(ZJVOrhx zzVd8JUU>Sw3fv}4k%lz{&(1d9+C9dk)v}-Yg0fx&l{Zs#@1Jy!@cMN^44?W?qx-sC z^FAW_AMO+Gzd{d#JfO{>fy6LWJo&5yUha2j9=L@tkgHx2=INI&AIFTRZ>^9yyJ)e| z9dB}GxQJWX{Tzec-|eVZb_nT}YLAJuGgq(AQWH9@bUub`F0*S93-SC(mJ+)b-C{xG9cU(B<;?m1Vz z=o-<=vywv={*Afx_<@$cFl%N%qps&BP}dIdvh2?ONy%X^UyaXCGEkMM6ty`I?r_m_ z)h`(bmk}t4`w;nviSbp3K;DwdwqJ8bN!e_8cGK@8!#JDkxc`|9Q=OkK?quolTNy~OpitSDn9oUT9Agbo}Dz~>K4mo&Z^5o z5Y%$1QvBI%zQO51rzeNs*tQ;}CbePxAwCU{!-kQ58ca>u&S2N}7Vcw^$nQUEn}sgO zUk{nv@Y+gSVsRbw93QN|UiZH>)WTIC-Zr|e5K+j2BOcET&wS@~y<7`5r3xzS{|Mu{ zmQvT}E}pny=jL!MR0z8`vxmvt4DVVF7=!}X?VlvM*(fg|@!}7lX{o}_=Sh+gjgE$N zAz1G~@+Od=3H5mF8)9j*{!(zc`@WuQT2Umy{GWF{F8Q4agkeJAPb#+Mh58y0Q8Ez; z$b!)|n|8pC-T%(JSG~i!fJgDHwHV=!HgUvTJ-feN+^8j&6gdTYk^DXKkR&I-;gz=b z#r;fa@Q#flL;r-Np;s}oLS`Z^#gGrx5Z}Wk1kRgOsV?}{4vYhIA?-UysOq%xgX!Yr z=+F(N(tCWuVQ=dlcR17;Ed801wpGL{Rjy&2(u-|9M9;=pZ+Y`3N*J`GDU{>;=&8@G z=-#K(8RR&RlXmmI{+en`OkRK^E@>^l8owQty%<2sJ!?}j+T@n+rfZAb;QTdVVKC=^ zc;n9i3MibXiod&KgS$5k$Hx_Vvizn<@w)DmE^-MjMf!frX&?1xtG`U*5Nef~{i~9? ztxRyMihcCWje z^xSP|_o>jt?%MZnj?W3(#Kr;u$+EXSc`k6@wLP_^sNiO^0rcLpRyLE_7Ur#7F7wP% zXPF~ZFdR{E{;>xzm!G!4MxWnrl;@)g3GDt9q)wQdH^(wBC{y@}3*PpUV)1ggLP9|; z6<^s?fZ~y0+M##)_H5I>JL0WEM7VUn6g+w{vghGCpHtZVm5^i0a4w27#d+=WKwqC& zAY#MHm_4TD?~YY~tM0rScM|YYmF$`yG` z16eCEBZS}mym9OJ(IGg+-iTw$nvF%6U@=>zOXM9j;{fxsUq=X?Xm6Jm&C(Cj$orCG zITB9*c`{dG`k2miU+NV8R2X92qHwy-YAm;s8=$84dWBYzj`Vu|lZYe5XBP-=Pfx-v z@71S$3;Hw2id&d7#~poWCcFY22gtGj%}7Vq=icH8CzlAd3$w4U=<|JjLf>nZ#VEs_ z18$O8<0$@>U}IK|S*_V}FUKc+A7p-}!Ob!DG|_T{W~u6RgXPVuvTVSLtrKwJ<=N*F z%(e#{%cVt%49>9E6&{2?Ac(C>!s;|6!tVMFy&HqU&X}4Odiupnh&- z!~klJo7dIHv&&Koj9u##5+32c?=9(qeoJJqG+msGK4O+Ud&D5QQCrc+j7Vf29`2QUU8vaoRrozVsZ2_*}EHG zr}P}x^lJVu@BK9vC7td(WY>i`f*tkc}2uG18Y&T&rjhY z_kA39ely7~8H3$TfrU!_UZ;usR?j=(^!^q+$k*>2NrQM_C)O}icCoif`X2Sz23!mH zmcwK5mG8Kgj*=#_72my!_IVGa%%tt2ZguyD-bO4Kd!z5!2aGN-ZCkge#2C3~3jm5@ zv$b1EleqcS~I=u+ngnrO$wWd^qbGM?E2VBdBuVurQyrF2Dg&Ey$08Xsn9cTu*< zSlTb!HapAnTNZuH5(bUh3Sg#`&8xboWUqlVR4c3ENkM1&1&#@gdUmD1cAvakwFL-X z4ddJ6z$K+oxBK#IxEEO9cO5!pxs#Y@DR7N*N+*}!Q=Alvp+CF5Z5QvsdaTRN&TIIR z5|mb&B!r)abNev^Xk&9|aE~6>TRV%UnAOvQwe`M13~4`@(& za6V6JQfR&i#iJL`8FvSfl@3t#D*5dZ-LCHh85^GnA(8y0I!DQmc}DCFuB4A9kN37UD%wZb*UBrApYq)Oh+KUO(~>z5%^9eo#? zKZWzAoJH}qEe~53w-DmaFVb`UBw;t5W8rmcgr`6w4%=0UqPQ zISnEul&*wCxu|#w^KN_X{1sU&x~(%W%m9+I&WOLpJNqN;ai$Ht#$%#rvX`$*6tM&u zg-IvlE9*7+rOP2mjhv*oix;Ax0RoMswaqAB`3H%IG=mejYB4nrEvJnE-{ZCu-O8I} zWiEO!2iz$g2(ZDcF@Q<2XDTx3gaTeoN{@4{;HON)!Urogl)xo>o3NUh=7p2)widuG zUBAv8w?~7`)CVTKP=%(oQzGC>$A#IUlbg{U{M1UTcIEtz%`Fo!29rNz zE`+(6oI5=sl!yIzaz-v@e^klaq8jC>i+X{?Pg^YG9|3~84vJKe0@@Xl57*|^*7eZP zSQK9Zi80F&FA^p_g7ZdKP4=#uzJQ-v5}SYrmtROyp}N8ZD)plPKz;QmE`cZ7#_d?a zHEZUxn#KVUs0CPEHw6zzRF~?wx}BdlY`qFzxfr=ma2*CLPLb-1shBF&1E`l&Vtc}2 z->F52@0ELb*T}dmc*0AjD^`JaU6U0Moy$%%BX1J0y|n`mKg{_t5|#o44dJ{Q#|w_k zDAc^8mO68n@1^m;!;Gw_+r+@4`s)ZhfwlYkTdu@@rR8}FS=P}9Bbx)isX@-ez_fw8 zGN6tKEOJ)?X3~C`yAQC9Go>e%`q2>JMPLwLSMgHgkAR=fi;G0h}T+v zrJFjK`8#1O%FF<}tkJIJ3ENh~RdjMjO>w#9pn>HHD4d)WDnZTD$(vvqfgV{X;M8#M z2#L64XVRf+_J2Y4k1utnz!&gNS|`nRqG-+KR^oR?mm*pQfTST0axbZ&M5krBYNL9E zmmadgc>h)s%DkST0W2^|z^j6|oWU1PDNu zd2-vax$6_gnO~M0=Q(c_yJGt>>}7YPAU7b!T7&erCOCv~h~DwSkq;U# zWgVR?^TQOLH!@k|aJpFim%-6eQf1ze0#}DPb(dncpj24qlh>xrf=hNl8YNC6VO3ol zm%FZ&4Qxjr&YK$D9#HA|k%`4xz4ed|9LmEAt5$z`Hs_N?dE=B|$^2o?Zo2EG0{$Ca zz}shO^|ok#))dz?93&tX>HqP}AE&Te8ne_a7$YNme9{c!dSpOlte?)M02F)YG!I59 zKEd%a>CAZ6F}F8fL$%Fg9)GV2@0K1I^UHnfJfNP@e=4BQqlp#1^y)gPGFj0@VT!8I zr9|w4bee?EU0Ah;saGYr?=vm~N_Ylaf+P!@h<2DvGxS2&fkZ1@xqG6j+^Mpn$K zM=IDjZ;uY{Wu7WeWULY?V`T#KboumSf(_0PI(=fgs2n1j+EvlxgB^!^m&@Z<}8Z$Bq&ZORIsbu&Q(95 zkX-)9471fT!!*|y4{59;Z3GDOVBeIc38#f3E=LSXTneISdVlY4#WsisQo<;4lstwy z-s11OFs;<%i34%RdooIrJ`-O#Pc9tVoW5R&{!|-W!suDlPZ-?RS!{4@@u`Xn7|Vp_G|MKNW|NuBNJ{L z`sD!PcZ*~;a83v~ zNe{-OzzhUjMw}(Bqm#=<)|bKa0L;qd)$_!jG&NNk3}$UkHVOa*fn;=!K;sTyoi28Y z0rUJ*0P6SR{Z9&8q%DwcU~@g=Sj2{w-|`&+ztVLaQlo)~ zZQOuSngD?~>4&B<2%1x8Gp?A}SjzjddQT_+=Z#U)NTm6HX2OHkSz7iyYzvIs;lV*K z*aY%GH}xw~kUu@&JkBCtux$%qGgbdIX9ZR-j6_KEX$nwY=Cz#W1!~-kupr)~i}@AY zIR$=|P+*?58aaPkd2HmYRRCl_<@ZX{SPTNZPbcVby{pI@g0Lu|)?&Pg z$IVNZepv%sEC+7+10X2gu)50ZV>|| zW89tsF+YZYp75U_V_KIgWpz<|?e0&E(Rsv7bmqm4NmXXF07=G zvDx^5TbM3;av2h_kS}XI@2*9HIOEx!El0X(MStTOFkgJWSSGWnpiMo~DT^P>>EI-Q zCt}y08$shz74xeeu7Dd3`>3ILgLp|uq;;p?7-RscXIb?yD~j4aJ!CJty;+RJg?(hi z!?`atD%=|g-A?rX<^XuSlsbYXkW0lldGvKrX1kJe`CUr}sGjfPl-?B6mPQ+w?_RRY zJY&C0&&ZM2m9q)&-s zdTL4nnFX1^L0foT-*GPZCJb5e$AQFBosDZ|J(|`9 zPW%xi3zycD*SIywe2XMCT5Jk;`dZbqAy=ub^PfjmIugTiGnT~MJryvM?Zb_VzIE^v zd=N0h0`(x0Wm+-rkKxZjf+bs^G9`gDW3_0A#bt>ei}uWn*U-=HO|Z_`(k8aVj$iDG zD`e%#ai!{3Et%W^PLMNITC9GIs%*k_Z1DHsKn1Wh^zYSBqSfODQfNVxHBmHDHj466 zB<9SPHG0>K;^303@!JcC;`w93y?m8RZ*9KCOqDvgjqktF+X`_@@dVy@-<_#?t$8rT zG8A91??`X*_$?L5N4tAqkCvA}tKu^aAeG{ndytQm!tp=)FM+o}SK-caUOdRhF z|4{f!ctcb*#sm7g37O{ez#xvp33kW%Z7@D!qPO+Un=-jWEIF2ljxY z$i(NC$r=v!hRhkgOfm-KbAKp0qK3jb6*yH%$tFT9Yi5ypv1(pl`ACi2+7hcZ+mNJY z$ovaYy4l+QOJ{dK2-=W>DI2FN0T>A?+)qRAKHAj8p>%Clk9A}(8X=bvcAl#F{zw`d zmDw%E0uV}0ZR5o_U4hq$mymv`((&h!V4p*j#i3%KUKs+%UcTRXGf>JxP69b5X`@Pv zmBQFs3Qjk(h%se!D^U0Led(c@x3h<{yt#C+d1oC%#1X4o+|r^$W@A|Ghrw*XC2ce^ z>%-+XRs<`C)LkAQhMA=J=mKf$qz}1(|7&Z2MN%LajHA{^2Iq+^A1RpoUSVO+fz|v2 zAPse#y59~#40En!Fl?i0(V}^ETv95o3?P}CzU^8xF*k?DkkKm%r5e)^58Ch3E=(lJmv*SU1r?pGx*YyZbMmw=bUtC1FeJ2g zbk=cQ2XSKgfsxxa==9(KXynN+Ya#*kZ6)Befk?JmYwRkZd!QER5@I5}w-;0yr&qXp zgNDR@Fb*B&zOOn?8MB1=|MSTzP8>hGoVe6)4qP4;`Cvgi@d)ar6wyYeHK|e z+UlXY_bWvz*(o^vmxpS&cwaMuwBX}2GFY5Kgq~2Qk#TbruxqoBBNJJfXJ<+F-HBuD zTI(%VS(4sNt8RKWtvuw#lXW~Xh4eT|}-=JLIVPYgK45a75W6?h_7x>l89f7La9(IlRnn@k`%d5oF96 zU7%j+*Xu-}rhZwa9-WA+$II2+k+L;k#C_I)*kRJqNR9kk?R7oR9bY(5wM)4D+GzE0 zLYF{1b;pxs@26;)Ws$dh_%0!&n$ya|O2gnj-w(Gg$p{c;s(OLqQ8iG~aVych7_mSvZf0e`30^ zey}1Wf3*c%e(eU)0D0H;v*L~;&pQJGxGSEUzyB+xM6Y*22gsUF;y}GOI5_ExRrE$v#o<*%+8T^)OM5fbKlcQ|Bw9A`B7Wr<95@3A@;6QG45eOAxf2Ufb%7)yA8rS^j z$k%nT-!pNZDl8sZ&D{m`pLC_r0L>5EzICr)y}R36`(1=E%=BNZ8Zz%(6ZP8l6y~6O z`Ln3bn8f%{d64lWA37g8YIoCpoH|Mv{VST;)0)liV#+)yE{Fcwkkhv0D;;tQpnV6C zoVfSp-SF30YPsexa@AVQlEJ8s2Ug3ZKE1%7i5}$9Ik$U;_D1xCOnsyd!wDNg{Cp4# z%S-uI1sv9GGPRY_wM%86nTFiopWM0k0%(Wni`f%rpX0|XqLk+d23P-}%w_iPN%EFl zVAtuIsJ<*Cw`v7kUiC-^VFHE+f&b;9TTi0#-$E&YOq!+9jW)#UD|S2bK>!<8GSsi5U1A-MveR zA$!AS6;%?|6&l;rIV2kZpo$Pmp5~j)}|a(@!_o zuZi%8XouHX)9#~x1s@eVtQHgB-6kf{^Ys_NEQVaAtScnUxLcvrmA$Ur!N2GuZ5E4E ziNfiCf|>mM6GyN<3+tMi*Y)&J^LJ`Mdd=yH{@WFll$f|jt7P2X6(N)*U%q$N7;dRz z^&QwfE6ZK1el@>eB!5hQ(a9Pw`+-i5_4h;=M8Ocsp(fi?(MO3XQgbJ)^(6sz*>gEv z(fyYr8w(GLK*_cx{eEJX$0F0=!e!Y+&dt9CVTq{JD6b=&>wrs@Yej?-xN}RvT;^?nV%H z#aqj0@b?q5vw<4%6M{wN9oOw5&5(h^&6o6LMH9b+8P2yimhK zrk4jD_g9v2LMibv=+Q_BcV++Ge>$QZDzpG512EF|alC8>0g4MvVzm{mTI+HPZOdJJ z%evn=o>HvnRN08%!wzsw<|=wNV!;AF+msAVYcmob@E6ItXvUNk`ow&+6wq0!7j68g z=+bvj^?|WDpx^_oOYj*tdXVGwCz0I_*?Wk`w83&PPfXDVt!q4+TR2Ms_#&@?lP3(j zrr^6hAW7-{Xh>K*-i?Su#I=%(9j{ojF>rq%uw!^9$JEY+SLa&j5vsp=-4&m4 zwACmCh-%vGeoe6wc&Xs5|2MvFBBgi*#T37veFB^E^11v;L+^Q8GO||OhcvnvzO!I7 z4=XmXIpwU3bH=73Wu*}58EgJ)o6Fxz*j)FgSHB(gNhvmXxv#4*}3QCb=Esu{+hW`EHrqBbtIY+kKVyNZRU4>Nc@!T)1= z=KtS(LGT`Et1lhy2!z&IO3HEf?Gm#ouQMY8L#DDmGx^9w-;j{^G>4KeVQX3;lzf%J z0LEkHiRt3%TP2zTb8gB%k`BZxQYqypSd{aJ1W}sH)mEfU#eIHzGn8SK0bt(FjWL1Q zmlia*k9l;TT@N;dL8ns54p1eyIgR9stT3YZ-q>KA;Do2cZBF*id2onfx3PH*7gv}Kp%bvXqZyexwmU8edZiE&6xNr zl3LMJhcS!HWth_Swk22ekxRs4lja{tAL)Zd)sMsgrWH4G zZYA;uz9^xOLrBBh@1f*M1J^fu&*kyo*bE@|L#8;j)PU9*ktg;QU9Rb++yJa*J z0T)_|<@=xXk;ea}!ufqkm^my`$w(Rpb}$yH@V^DPV|*?}1$;}9ktDdT08OekbH>Zf zIc2MbAW-G_6g3}OIkiIH#ptj0P(g04KW9B*a`T8q_72;FgI^#A3C-lyxZP;=^=a3D zx`0bKNioj;WLRo8O>i#4e$i2LCmcAMcL6#qh+&j#&7hl#Pg+2*%{gVtxL1s=m+Wut zg7qiDQW<0TiUuLYHsj5Q00^a`R7hEAg24(P1nLW-q)a qcDGKtT>sA>SpEC<3f_D}Y5ug5--3mI0{A`*q@||+u diff --git a/brand/projects/httpware/mark-1024.png b/brand/projects/httpware/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..07f5309febcdd0b050b73e51f96d75b8e3481c7e GIT binary patch literal 19961 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 VG&(n93_gPav^4b8%T?`O{0~*I`8fap literal 0 HcmV?d00001 diff --git a/brand/projects/httpware/mark.svg b/brand/projects/httpware/mark.svg new file mode 100644 index 0000000..e24e7ba --- /dev/null +++ b/brand/projects/httpware/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/lite-bootstrap/mark-1024.png b/brand/projects/lite-bootstrap/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..9d29e58fb193c7256f3bc920ca7fcecb4fcf3ab8 GIT binary patch literal 20584 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 E56K diff --git a/brand/projects/litestar-sqlalchemy-template/mark-1024.png b/brand/projects/litestar-sqlalchemy-template/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5e42a6d4245fd00b57becf97593f4c97d8405e GIT binary patch literal 23646 zcmeIac~q0<);9hi2(}`$^(ZKlmHE^t zMcd%VkJ=rK%y*rmym(d6op7CedFFOP+Go;d_V0czUjEI9i)-*lkK?D@P0Wqf9`|1Q z?q|n3-Q{V{r)M}k;ld@lnX8RWu`T1_rRGXSUURE!&ofq2VR!#0|53SZJcD86!~@(X zo8^>Z6MDQlgmG`{yo$w>;x!8ER?I4UFPjt!Gc4BYmmY~QBz0D#mN=PG;aNcv6I#F=ei8%d?ff(S_Lu8K(oCwCY_zo z)u1FlZ28+&+iCw_-&(L1#)#}n-SO~=Gc%&(ubg4d!(&&+IVoI^2)!m7uN>RzlHHFw zcIm!JJm16)=T-)NMBDQvJaw}mE$p#Zb#^Zs7g^k7H&?8|ZCm%kvz{^bVo~?tf#_T1 zN@1g=mnCi1(|gm#YcINb8m~__j=yUyt`g!A<(nwv#juzPwaE49{%Z+_zDAD}Y^%GE z8xfb5{j_G29f!EN)m1S(?j2~Zc#$S{hZm!uftz!S6FRe#|Dnxz$W-ipQW!TgvNmXo zfr-<`bhk=b_~2Vp35B|%DjHnR3H?A&J?zYkT%uf&w**i3PdsR>O?X+!v}4?B zw3(dGHgs#8bURSpiMcn!1_c{ngB*IwyDqyB6>;O@Wrad9%ob_rkY9ZPTh6GlI!NID z4cY0&m5$=|3k(S?ADv6E!IrgHC?>iuJNnw1{md3}-+{+EPgB#^Yx^YvILne{4>w^7 z!MCkq&C9ak{cPN{OwBJr0yNLvxBcj&ZxXjgI@egOADR(DT4Oa=Hq5gpNNbOaD}{Kh z6(cvpnU!|qrygGssffX>O_7P|+zIiV*+lL`iq1;)Wa}1g$4*k=cx1CX8ZFhne>|2K zFWytjL(td-&tX}-fFBI&=0P)HFECIXh6R%0Etrso{=_5*=uff`Ix=P;Ad3F_?`t50 z|B3`b;r{|k4CMNH9cK7{hdR}hW$@?!F#gT4>QAUAzLT=k#0q2)tkczxE#`vlp6vN% z20PrzJ!P?862yl|Sd=#=p7WRyywsVgXutTF`$T6GG7ha@j2}rUoeG#JuAIZN>^eEw z{b`xZc!q>vT#B8o99D3k31~&Ifx>YFGuLSv)xijrU{mB9A^v*vCdAu80*8K?+PYe_ z);e3LhMi1BL~|~rVOn~b@!S$CI7-*0^fGq6XN%|`D8z3mmw{nkudmfo=js}R_zbp! zO%iagRtv?r0hEx6IYL%nFQyUOKfJXI@=| zxj%s8Mn}Vwy2pj4GI4Ao(5mTLZ!LA5Me;hu(@jBpk-yr1o_V!ljHN(jB^BCo\bC4*JB%bfM(^KY8_NgH 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 diff --git a/brand/projects/modern-di-fastapi/mark-1024.png b/brand/projects/modern-di-fastapi/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..7f5d0320c5146bb436ff17ee9514a21afb3e1380 GIT binary patch literal 27304 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 E0npVX!vFvP literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di-fastapi/mark-512.png b/brand/projects/modern-di-fastapi/mark-512.png new file mode 100644 index 0000000000000000000000000000000000000000..57315b322be47a1fb4316c3c6abec25d2f555930 GIT binary patch literal 12505 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 Na2>?e;w!fw{4bRQYv}+0 literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di-fastapi/mark.svg b/brand/projects/modern-di-fastapi/mark.svg new file mode 100644 index 0000000..bd7f074 --- /dev/null +++ b/brand/projects/modern-di-fastapi/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-faststream/mark-1024.png b/brand/projects/modern-di-faststream/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..d94bb1c5a0a5a008150f6c44d8518318ac169370 GIT binary patch literal 25394 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 z zc(oSBJ3)q_+S9w-=+!RvfSLR4!?sY1)tK$G^3=|?(X!M6KJ1$B)dUnL@4ZeyAF0$W z_e+hC{XAZr?gPJikh49oQ1;sRIN$$>+$4q0lSxgKSr;#grc*Oy&4L7k&O?2!Q_FyA zh!{_Km{6IjV^P;X@CaT0e(>`H*T(;l)Z~p*oP8V_j literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di-faststream/mark-512.png b/brand/projects/modern-di-faststream/mark-512.png new file mode 100644 index 0000000000000000000000000000000000000000..102352d7891af8582970a8ccd790a8c676487fc1 GIT binary patch literal 11619 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 literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di-faststream/mark.svg b/brand/projects/modern-di-faststream/mark.svg new file mode 100644 index 0000000..65fe4ab --- /dev/null +++ b/brand/projects/modern-di-faststream/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-litestar/mark-1024.png b/brand/projects/modern-di-litestar/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..496002041ca02fd145979a8f8542cb5c1db1fdab GIT binary patch literal 28842 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 literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di-litestar/mark.svg b/brand/projects/modern-di-litestar/mark.svg new file mode 100644 index 0000000..d9d6918 --- /dev/null +++ b/brand/projects/modern-di-litestar/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-pytest/mark-1024.png b/brand/projects/modern-di-pytest/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..8f712b4128f3110ee6beb8a41cbddf54c1c07771 GIT binary patch literal 13384 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

x+6w3Ckd8UWLux{s_TLcw*E%$s$Fgw@|x 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 literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di-pytest/mark.svg b/brand/projects/modern-di-pytest/mark.svg new file mode 100644 index 0000000..8f9f56a --- /dev/null +++ b/brand/projects/modern-di-pytest/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-typer/mark-1024.png b/brand/projects/modern-di-typer/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..aea2e207d14724b8d8bb89a7e70a7dc77270d612 GIT binary patch literal 15789 zcmeHucU05aw(tocSSaH-hztnMh@f=o2q8F(B3%cSL8OdQL!bG&}g z*;Z!#_v--wGIj@k{sjOD*pvWkCE*|ZR;|nMkK_pl+n<3D`Il3jp9H`*VE6Oh!%

  • Gci)GP@>r#h;uy=e-~8|+ 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 literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di-typer/mark-512.png b/brand/projects/modern-di-typer/mark-512.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd79f399760aba26ab5ae02962e9ee85710cebe GIT binary patch literal 7026 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 literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di-typer/mark.svg b/brand/projects/modern-di-typer/mark.svg new file mode 100644 index 0000000..775a240 --- /dev/null +++ b/brand/projects/modern-di-typer/mark.svg @@ -0,0 +1 @@ +T> diff --git a/brand/projects/modern-di/mark-1024.png b/brand/projects/modern-di/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..32a3c7371168c3125294a5e22d18b4d474b8b329 GIT binary patch literal 25149 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 literal 0 HcmV?d00001 diff --git a/brand/projects/modern-di/mark.svg b/brand/projects/modern-di/mark.svg new file mode 100644 index 0000000..11ed548 --- /dev/null +++ b/brand/projects/modern-di/mark.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/semvertag/mark-1024.png b/brand/projects/semvertag/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..32df472ca09d45d392206b094fca5ce064445278 GIT binary patch literal 14515 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 literal 0 HcmV?d00001 diff --git a/brand/projects/semvertag/mark-512.png b/brand/projects/semvertag/mark-512.png new file mode 100644 index 0000000000000000000000000000000000000000..edf82b9b0c8c61540d663730e126013455e0b185 GIT binary patch literal 6449 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 Yd7-l3>xCT7M)JAn diff --git a/brand/projects/that-depends/mark-1024.png b/brand/projects/that-depends/mark-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..54cef5fcbf231dc023819ef927ba9febdee3b30a GIT binary patch literal 24321 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 literal 0 HcmV?d00001 diff --git a/brand/projects/that-depends/mark.svg b/brand/projects/that-depends/mark.svg new file mode 100644 index 0000000..9263cde --- /dev/null +++ b/brand/projects/that-depends/mark.svg @@ -0,0 +1 @@ + diff --git a/tests/test_projects.py b/tests/test_projects.py index a6ea886..4bc4ecf 100644 --- a/tests/test_projects.py +++ b/tests/test_projects.py @@ -1,4 +1,5 @@ import re +from pathlib import Path from xml.dom import minidom import pytest from brand.build import geometry as g @@ -37,3 +38,11 @@ def test_templates_use_chevron() -> None: # both templates share the org chevron (a polyline), not a bespoke symbol for repo in ("fastapi-sqlalchemy-template", "litestar-sqlalchemy-template"): assert " None: + written = p.render_projects(out_dir=tmp_path) + assert len(written) == len(EXPECTED_REPOS) + for repo in EXPECTED_REPOS: + svg = tmp_path / repo / "mark.svg" + assert svg.is_file() and svg.read_text(encoding="utf-8").startswith(" Date: Mon, 29 Jun 2026 22:54:44 +0300 Subject: [PATCH 10/13] feat(brand): per-project horizontal name lockups --- brand/build/projects.py | 24 +++++++++++++++++++ brand/projects/db-retry/lockup.svg | 1 + brand/projects/eof-fixer/lockup.svg | 1 + .../fastapi-sqlalchemy-template/lockup.svg | 1 + .../faststream-concurrent-aiokafka/lockup.svg | 1 + brand/projects/faststream-outbox/lockup.svg | 1 + .../faststream-redis-timers/lockup.svg | 1 + brand/projects/httpware/lockup.svg | 1 + brand/projects/lite-bootstrap/lockup.svg | 1 + .../litestar-sqlalchemy-template/lockup.svg | 1 + brand/projects/modern-di-fastapi/lockup.svg | 1 + .../projects/modern-di-faststream/lockup.svg | 1 + brand/projects/modern-di-litestar/lockup.svg | 1 + brand/projects/modern-di-pytest/lockup.svg | 1 + brand/projects/modern-di-typer/lockup.svg | 1 + brand/projects/modern-di/lockup.svg | 1 + brand/projects/semvertag/lockup.svg | 1 + brand/projects/that-depends/lockup.svg | 1 + tests/test_projects.py | 10 ++++++++ 19 files changed, 51 insertions(+) create mode 100644 brand/projects/db-retry/lockup.svg create mode 100644 brand/projects/eof-fixer/lockup.svg create mode 100644 brand/projects/fastapi-sqlalchemy-template/lockup.svg create mode 100644 brand/projects/faststream-concurrent-aiokafka/lockup.svg create mode 100644 brand/projects/faststream-outbox/lockup.svg create mode 100644 brand/projects/faststream-redis-timers/lockup.svg create mode 100644 brand/projects/httpware/lockup.svg create mode 100644 brand/projects/lite-bootstrap/lockup.svg create mode 100644 brand/projects/litestar-sqlalchemy-template/lockup.svg create mode 100644 brand/projects/modern-di-fastapi/lockup.svg create mode 100644 brand/projects/modern-di-faststream/lockup.svg create mode 100644 brand/projects/modern-di-litestar/lockup.svg create mode 100644 brand/projects/modern-di-pytest/lockup.svg create mode 100644 brand/projects/modern-di-typer/lockup.svg create mode 100644 brand/projects/modern-di/lockup.svg create mode 100644 brand/projects/semvertag/lockup.svg create mode 100644 brand/projects/that-depends/lockup.svg diff --git a/brand/build/projects.py b/brand/build/projects.py index 0c5df6e..82f43b8 100644 --- a/brand/build/projects.py +++ b/brand/build/projects.py @@ -5,6 +5,7 @@ from brand.build import symbols as sym from brand.build import tokens as t from brand.build.raster import export_png +from brand.build.text import outline_text R = 23 _CX = _CY = 50 @@ -42,6 +43,10 @@ PROJECTS = ROOT / "brand" / "projects" _PNG_SIZES = (512, 1024) +_LOCKUP_H = 100 +_NAME_SIZE = 34 +_GAP = 18 + def project_mark(repo: str) -> str: """Full for a repo: constant frame + its gold inner symbol.""" @@ -53,6 +58,24 @@ def project_mark(repo: str) -> str: ) +def project_lockup(repo: str) -> str: + """Framed mark on the left + the repo name in Jost (green) to its right.""" + mark_frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) + inner = MANIFEST[repo]() + name_x = _LOCKUP_H + _GAP + name_svg, name_w = outline_text( + repo, _NAME_SIZE, x=name_x, baseline_y=_LOCKUP_H / 2 + _NAME_SIZE * 0.34, + anchor="start", color=t.GREEN_INK, + ) + total_w = round(name_x + name_w + _GAP) + return ( + f'' + f'{mark_frame}{inner}' + f"{name_svg}" + ) + + def render_projects(out_dir: Path | None = None) -> list[Path]: """Write mark.svg (+ PNGs) for every repo under out_dir//.""" base = out_dir if out_dir is not None else PROJECTS @@ -64,5 +87,6 @@ def render_projects(out_dir: Path | None = None) -> list[Path]: svg.write_text(project_mark(repo) + "\n", encoding="utf-8") for sz in _PNG_SIZES: export_png(svg, d / f"mark-{sz}.png", width=sz, height=sz) + (d / "lockup.svg").write_text(project_lockup(repo) + "\n", encoding="utf-8") written.append(svg) return written diff --git a/brand/projects/db-retry/lockup.svg b/brand/projects/db-retry/lockup.svg new file mode 100644 index 0000000..ad84956 --- /dev/null +++ b/brand/projects/db-retry/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/eof-fixer/lockup.svg b/brand/projects/eof-fixer/lockup.svg new file mode 100644 index 0000000..86a0be9 --- /dev/null +++ b/brand/projects/eof-fixer/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/fastapi-sqlalchemy-template/lockup.svg b/brand/projects/fastapi-sqlalchemy-template/lockup.svg new file mode 100644 index 0000000..821e65b --- /dev/null +++ b/brand/projects/fastapi-sqlalchemy-template/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/faststream-concurrent-aiokafka/lockup.svg b/brand/projects/faststream-concurrent-aiokafka/lockup.svg new file mode 100644 index 0000000..e9ba271 --- /dev/null +++ b/brand/projects/faststream-concurrent-aiokafka/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/faststream-outbox/lockup.svg b/brand/projects/faststream-outbox/lockup.svg new file mode 100644 index 0000000..a5f9ac9 --- /dev/null +++ b/brand/projects/faststream-outbox/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/faststream-redis-timers/lockup.svg b/brand/projects/faststream-redis-timers/lockup.svg new file mode 100644 index 0000000..541115c --- /dev/null +++ b/brand/projects/faststream-redis-timers/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/httpware/lockup.svg b/brand/projects/httpware/lockup.svg new file mode 100644 index 0000000..1017649 --- /dev/null +++ b/brand/projects/httpware/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/lite-bootstrap/lockup.svg b/brand/projects/lite-bootstrap/lockup.svg new file mode 100644 index 0000000..8cbb036 --- /dev/null +++ b/brand/projects/lite-bootstrap/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/litestar-sqlalchemy-template/lockup.svg b/brand/projects/litestar-sqlalchemy-template/lockup.svg new file mode 100644 index 0000000..0d7a02d --- /dev/null +++ b/brand/projects/litestar-sqlalchemy-template/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-fastapi/lockup.svg b/brand/projects/modern-di-fastapi/lockup.svg new file mode 100644 index 0000000..0aa20d0 --- /dev/null +++ b/brand/projects/modern-di-fastapi/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-faststream/lockup.svg b/brand/projects/modern-di-faststream/lockup.svg new file mode 100644 index 0000000..8fc54a0 --- /dev/null +++ b/brand/projects/modern-di-faststream/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-litestar/lockup.svg b/brand/projects/modern-di-litestar/lockup.svg new file mode 100644 index 0000000..d92aa98 --- /dev/null +++ b/brand/projects/modern-di-litestar/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-pytest/lockup.svg b/brand/projects/modern-di-pytest/lockup.svg new file mode 100644 index 0000000..b4c0d1e --- /dev/null +++ b/brand/projects/modern-di-pytest/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/modern-di-typer/lockup.svg b/brand/projects/modern-di-typer/lockup.svg new file mode 100644 index 0000000..629cf55 --- /dev/null +++ b/brand/projects/modern-di-typer/lockup.svg @@ -0,0 +1 @@ +T> diff --git a/brand/projects/modern-di/lockup.svg b/brand/projects/modern-di/lockup.svg new file mode 100644 index 0000000..31051ab --- /dev/null +++ b/brand/projects/modern-di/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/semvertag/lockup.svg b/brand/projects/semvertag/lockup.svg new file mode 100644 index 0000000..38a7869 --- /dev/null +++ b/brand/projects/semvertag/lockup.svg @@ -0,0 +1 @@ + diff --git a/brand/projects/that-depends/lockup.svg b/brand/projects/that-depends/lockup.svg new file mode 100644 index 0000000..2436945 --- /dev/null +++ b/brand/projects/that-depends/lockup.svg @@ -0,0 +1 @@ + diff --git a/tests/test_projects.py b/tests/test_projects.py index 4bc4ecf..db0e8d7 100644 --- a/tests/test_projects.py +++ b/tests/test_projects.py @@ -46,3 +46,13 @@ def test_render_projects_writes_every_mark(tmp_path: Path) -> None: for repo in EXPECTED_REPOS: svg = tmp_path / repo / "mark.svg" assert svg.is_file() and svg.read_text(encoding="utf-8").startswith(" None: + svg = p.project_lockup(repo) + minidom.parseString(svg) + assert svg.startswith(" None: + p.render_projects(out_dir=tmp_path) + assert (tmp_path / "modern-di" / "lockup.svg").is_file() From 3938dd0fd6e613cf4d1fbd6091db7747a46215bd Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:59:17 +0300 Subject: [PATCH 11/13] style: normalize ruff formatting across brand/build and tests Co-Authored-By: Claude Sonnet 4.6 --- brand/build/geometry.py | 46 ++++++++++++++++++++-------- brand/build/projects.py | 10 +++++-- brand/build/render.py | 66 +++++++++++++++++++++++++++++++---------- brand/build/symbols.py | 39 ++++++++++++++++++------ brand/build/text.py | 4 ++- brand/build/tokens.py | 8 ++--- tests/conftest.py | 1 + tests/test_assets.py | 30 +++++++++++++------ tests/test_geometry.py | 30 +++++++++---------- tests/test_projects.py | 39 +++++++++++++++++++----- tests/test_text.py | 12 ++++---- 11 files changed, 202 insertions(+), 83 deletions(-) diff --git a/brand/build/geometry.py b/brand/build/geometry.py index 1181b40..96fe650 100644 --- a/brand/build/geometry.py +++ b/brand/build/geometry.py @@ -19,27 +19,40 @@ def _icon_mark(struct: str, gold: str) -> str: def icon(*, bg: str, struct: str, gold: str) -> str: """Full-bleed square icon — favicon, apple-touch, GitHub avatar.""" - return (_SVG_OPEN.format(w=100, h=100) - + f'' - + _icon_mark(struct, gold) + "") + return ( + _SVG_OPEN.format(w=100, h=100) + + f'' + + _icon_mark(struct, gold) + + "" + ) def icon_circle(*, bg: str, struct: str, gold: str, scale: float = 0.74) -> str: """Padded variant centered for circular crops (e.g. Telegram). The mark is scaled about the center so it fits inside the inscribed circle with margin.""" - return (_SVG_OPEN.format(w=100, h=100) - + f'' - + f'{_icon_mark(struct, gold)}' - + "") + return ( + _SVG_OPEN.format(w=100, h=100) + + f'' + + f'{_icon_mark(struct, gold)}' + + "" + ) def lockup_body(*, struct: str, gold: str) -> str: """The MODERN/PYTHON crop-mark lockup, drawn in a 540x250 coordinate space. Returned as bare markup (no wrapper, no background) for embedding.""" - modern, _ = outline_text("MODERN", 50, x=270, baseline_y=126, anchor="middle", - color=struct, fit_width=210) - python, _ = outline_text("PYTHON", 50, x=270, baseline_y=166, anchor="middle", - color=gold, fit_width=210) + modern, _ = outline_text( + "MODERN", + 50, + x=270, + baseline_y=126, + anchor="middle", + color=struct, + fit_width=210, + ) + python, _ = outline_text( + "PYTHON", 50, x=270, baseline_y=166, anchor="middle", color=gold, fit_width=210 + ) crops = ( '' f'' @@ -72,8 +85,15 @@ def mark(*, struct: str, gold: str) -> str: 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, - anchor="middle", color=url_color, letter_spacing=4) + url, _ = outline_text( + "modern-python.org", + 34, + x=640, + baseline_y=575, + anchor="middle", + color=url_color, + letter_spacing=4, + ) return ( _SVG_OPEN.format(w=1280, h=640) + f'' diff --git a/brand/build/projects.py b/brand/build/projects.py index 82f43b8..4c3f9d8 100644 --- a/brand/build/projects.py +++ b/brand/build/projects.py @@ -64,14 +64,18 @@ def project_lockup(repo: str) -> str: inner = MANIFEST[repo]() name_x = _LOCKUP_H + _GAP name_svg, name_w = outline_text( - repo, _NAME_SIZE, x=name_x, baseline_y=_LOCKUP_H / 2 + _NAME_SIZE * 0.34, - anchor="start", color=t.GREEN_INK, + repo, + _NAME_SIZE, + x=name_x, + baseline_y=_LOCKUP_H / 2 + _NAME_SIZE * 0.34, + anchor="start", + color=t.GREEN_INK, ) total_w = round(name_x + name_w + _GAP) return ( f'' - f'{mark_frame}{inner}' + f"{mark_frame}{inner}" f"{name_svg}" ) diff --git a/brand/build/render.py b/brand/build/render.py index 34ce574..4248c1e 100644 --- a/brand/build/render.py +++ b/brand/build/render.py @@ -23,13 +23,25 @@ def render() -> None: export_png(ORG / "favicon.svg", ORG / f"favicon-{sz}.png", width=sz, height=sz) # apple-touch (same mark, already full-bleed/square) _write(ORG / "apple-touch-icon.svg", g.icon(**ic)) - export_png(ORG / "apple-touch-icon.svg", ORG / "apple-touch-icon-180.png", width=180, height=180) + export_png( + ORG / "apple-touch-icon.svg", + ORG / "apple-touch-icon-180.png", + width=180, + height=180, + ) # avatar (same mark, large raster) _write(ORG / "avatar.svg", g.icon(**ic)) export_png(ORG / "avatar.svg", ORG / "avatar-1024.png", width=1024, height=1024) - _write(ORG / "avatar-circle.svg", - 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) + _write( + ORG / "avatar-circle.svg", + 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 @@ -39,20 +51,44 @@ def render() -> None: _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)) + _write( + ORG / "social-card.svg", + g.social_card( + bg=t.CREAM, struct=t.GREEN_INK, gold=t.GOLD_LIGHT, url_color=t.GOLD_LIGHT + ), + ) export_png(ORG / "social-card.svg", ORG / "social-card.png", width=1280, height=640) - _write(ORG / "social-card-green.svg", - g.social_card(bg=t.GREEN_SURFACE, struct=t.CREAM, gold=t.GOLD_DARK, url_color=t.GOLD_DARK)) - export_png(ORG / "social-card-green.svg", ORG / "social-card-green.png", width=1280, height=640) + _write( + ORG / "social-card-green.svg", + g.social_card( + bg=t.GREEN_SURFACE, struct=t.CREAM, gold=t.GOLD_DARK, url_color=t.GOLD_DARK + ), + ) + export_png( + ORG / "social-card-green.svg", + ORG / "social-card-green.png", + width=1280, + height=640, + ) # Square (Telegram / square social) — cream + green. - _write(ORG / "social-square.svg", - g.social_square(bg=t.CREAM, struct=t.GREEN_INK, gold=t.GOLD_LIGHT)) - export_png(ORG / "social-square.svg", ORG / "social-square.png", width=640, height=640) - _write(ORG / "social-square-green.svg", - g.social_square(bg=t.GREEN_SURFACE, struct=t.CREAM, gold=t.GOLD_DARK)) - export_png(ORG / "social-square-green.svg", ORG / "social-square-green.png", width=640, height=640) + _write( + ORG / "social-square.svg", + g.social_square(bg=t.CREAM, struct=t.GREEN_INK, gold=t.GOLD_LIGHT), + ) + export_png( + ORG / "social-square.svg", ORG / "social-square.png", width=640, height=640 + ) + _write( + ORG / "social-square-green.svg", + g.social_square(bg=t.GREEN_SURFACE, struct=t.CREAM, gold=t.GOLD_DARK), + ) + export_png( + ORG / "social-square-green.svg", + ORG / "social-square-green.png", + width=640, + height=640, + ) # Per-project marks (brand/projects//). render_projects() diff --git a/brand/build/symbols.py b/brand/build/symbols.py index 56c9f74..6f42ca5 100644 --- a/brand/build/symbols.py +++ b/brand/build/symbols.py @@ -94,14 +94,25 @@ def _circ_arc(cx: float, cy: float, rad: float, a0: float, a1: float, w: float) def bolt_disc(cx: float, cy: float, r: float) -> str: """FastAPI cue: lightning bolt knocked out of a gold disc.""" - norm = [(0.30, -0.80), (-0.42, 0.18), (0.05, 0.18), (-0.22, 0.82), (0.48, -0.22), (0.05, -0.22)] - pts = " ".join(f"{cx + dx * r * 0.82:.1f},{cy + dy * r * 0.82:.1f}" for dx, dy in norm) + norm = [ + (0.30, -0.80), + (-0.42, 0.18), + (0.05, 0.18), + (-0.22, 0.82), + (0.48, -0.22), + (0.05, -0.22), + ] + pts = " ".join( + f"{cx + dx * r * 0.82:.1f},{cy + dy * r * 0.82:.1f}" for dx, dy in norm + ) return f'' def star_disc(cx: float, cy: float, r: float) -> str: """Litestar cue: star knocked out of a gold disc.""" - return f'' + _star5(cx, cy, r * 0.72, CREAM) + return f'' + _star5( + cx, cy, r * 0.72, CREAM + ) def faststream(cx: float, cy: float, r: float) -> str: @@ -139,11 +150,17 @@ def bars(cx: float, cy: float, r: float) -> str: y_cb = top + stub + r * 0.12 y_bar = y_cb + cb heights = [1.0, 0.78, 0.55, 0.38] - out = [f''] + out = [ + f'' + ] for i in range(4): x = x0 + i * (bw + gap) - out.append(f'') - out.append(f'') + out.append( + f'' + ) + out.append( + f'' + ) return "".join(out) @@ -178,7 +195,7 @@ def rocket(cx: float, cy: float, r: float) -> str: """lite-bootstrap: a rocket (launch).""" body = ( f'' ) fins = ( @@ -247,7 +264,11 @@ def outbox(cx: float, cy: float, r: float) -> str: def db_retry(cx: float, cy: float, r: float) -> str: """db-retry: a database cylinder inside a two-head clockwise retry circle.""" rad = 0.92 * r - return _cyl(cx, cy, r * 0.6) + _circ_arc(cx, cy, rad, 285, 425, 4.5) + _circ_arc(cx, cy, rad, 105, 245, 4.5) + return ( + _cyl(cx, cy, r * 0.6) + + _circ_arc(cx, cy, rad, 285, 425, 4.5) + + _circ_arc(cx, cy, rad, 105, 245, 4.5) + ) def eof_fixer(cx: float, cy: float, r: float) -> str: @@ -273,7 +294,7 @@ def tag(cx: float, cy: float, r: float) -> str: """semvertag: a price/version tag with a punch-hole, vertically centred.""" return ( f'' f'' ) diff --git a/brand/build/text.py b/brand/build/text.py index c030964..be637d0 100644 --- a/brand/build/text.py +++ b/brand/build/text.py @@ -49,7 +49,9 @@ def outline_text( for ch in text: gname = cmap.get(ord(ch)) if gname is None: - raise ValueError(f"character {ch!r} (U+{ord(ch):04X}) not in {font_path.name} cmap") + raise ValueError( + f"character {ch!r} (U+{ord(ch):04X}) not in {font_path.name} cmap" + ) pen = SVGPathPen(glyphset) glyphset[gname].draw(pen) d = pen.getCommands() diff --git a/brand/build/tokens.py b/brand/build/tokens.py index 2b6ecb1..829b767 100644 --- a/brand/build/tokens.py +++ b/brand/build/tokens.py @@ -1,6 +1,6 @@ # Palette — concrete colors (no CSS variables anywhere downstream). -GREEN_INK = "#356852" # snakes/text on cream (the "structure" color on light) +GREEN_INK = "#356852" # snakes/text on cream (the "structure" color on light) GREEN_SURFACE = "#2f5e4a" # green backgrounds (favicon/avatar/green card) -GOLD_LIGHT = "#c98a00" # gold accent on cream -GOLD_DARK = "#f0b528" # gold accent on green/dark -CREAM = "#f4f1e8" # light surface; also the light "ink" on green (not pure white) +GOLD_LIGHT = "#c98a00" # gold accent on cream +GOLD_DARK = "#f0b528" # gold accent on green/dark +CREAM = "#f4f1e8" # light surface; also the light "ink" on green (not pure white) diff --git a/tests/conftest.py b/tests/conftest.py index e3a10a2..879baa0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,4 +6,5 @@ def parse_svg(): def _parse(svg: str) -> ET.Element: return ET.fromstring(svg) # raises on malformed XML + return _parse diff --git a/tests/test_assets.py b/tests/test_assets.py index 4d06c1d..bb8eca2 100644 --- a/tests/test_assets.py +++ b/tests/test_assets.py @@ -30,13 +30,15 @@ def test_render_writes_avatar_and_apple_touch(): _render() assert (ORG / "avatar.svg").exists() ET.parse(ORG / "avatar.svg") - apple = (ORG / "apple-touch-icon.svg") + apple = ORG / "apple-touch-icon.svg" assert apple.exists() assert 'points="45,40 57,50 45,60"' in apple.read_text() assert 'points="45,40 57,50 45,60"' in (ORG / "avatar.svg").read_text() if shutil.which("rsvg-convert"): assert (ORG / "avatar-1024.png").read_bytes()[:8] == b"\x89PNG\r\n\x1a\n" - assert (ORG / "apple-touch-icon-180.png").read_bytes()[:8] == b"\x89PNG\r\n\x1a\n" + assert (ORG / "apple-touch-icon-180.png").read_bytes()[ + :8 + ] == b"\x89PNG\r\n\x1a\n" def test_render_writes_avatar_circle(): @@ -51,15 +53,15 @@ 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 + 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 + assert "#f4f1e8" in dark and "#f0b528" in dark # cream + gold-dark for wm in ("wordmark.svg", "wordmark-dark.svg"): - assert "{body}') - assert "M138 122 L138 50 L210 50" in body # TL crop + assert "M138 122 L138 50 L210 50" in body # TL crop assert "M402 128 L402 200 L330 200" in body # BR crop assert "#356852" in body and "#c98a00" in body - assert "= 4 # 2 crops + >=2 glyph paths - assert 'points="134,120 142,120 142,122 134,130"' in body # TL snake tail - assert 'points="406,130 398,130 398,128 406,120"' in body # BR snake tail + assert "= 4 # 2 crops + >=2 glyph paths + assert 'points="134,120 142,120 142,122 134,130"' in body # TL snake tail + assert 'points="406,130 398,130 398,128 406,120"' in body # BR snake tail def test_wordmark_is_transparent_two_color_lockup(parse_svg): svg = g.wordmark(struct="#356852", gold="#c98a00") el = parse_svg(svg) - assert el.attrib["viewBox"] == "118 32 304 184" # tight, centered on the lockup - assert " None: frame = g.project_frame(struct=t.GREEN_INK, accent=t.GOLD_LIGHT) - minidom.parseString(f'{frame}') + minidom.parseString( + f'{frame}' + ) assert t.GREEN_INK in frame and t.GOLD_LIGHT in frame + EXPECTED_REPOS = { - "modern-di", "that-depends", "modern-di-fastapi", "modern-di-litestar", - "modern-di-faststream", "modern-di-typer", "modern-di-pytest", - "fastapi-sqlalchemy-template", "litestar-sqlalchemy-template", - "lite-bootstrap", "httpware", "faststream-redis-timers", - "faststream-concurrent-aiokafka", "faststream-outbox", - "db-retry", "eof-fixer", "semvertag", + "modern-di", + "that-depends", + "modern-di-fastapi", + "modern-di-litestar", + "modern-di-faststream", + "modern-di-typer", + "modern-di-pytest", + "fastapi-sqlalchemy-template", + "litestar-sqlalchemy-template", + "lite-bootstrap", + "httpware", + "faststream-redis-timers", + "faststream-concurrent-aiokafka", + "faststream-outbox", + "db-retry", + "eof-fixer", + "semvertag", } + def test_manifest_covers_every_repo() -> None: assert set(p.MANIFEST) == EXPECTED_REPOS + @pytest.mark.parametrize("repo", sorted(EXPECTED_REPOS)) def test_project_mark_is_valid_svg(repo: str) -> None: svg = p.project_mark(repo) minidom.parseString(svg) assert svg.startswith(" None: hexes = {h.lower() for h in re.findall(r"#[0-9a-fA-F]{6}", p.project_mark(repo))} - assert hexes <= p.ALLOWED_COLORS, f"{repo} stray colours: {hexes - p.ALLOWED_COLORS}" + assert hexes <= p.ALLOWED_COLORS, ( + f"{repo} stray colours: {hexes - p.ALLOWED_COLORS}" + ) + def test_templates_use_chevron() -> None: # both templates share the org chevron (a polyline), not a bespoke symbol @@ -47,12 +68,14 @@ def test_render_projects_writes_every_mark(tmp_path: Path) -> None: svg = tmp_path / repo / "mark.svg" assert svg.is_file() and svg.read_text(encoding="utf-8").startswith(" None: svg = p.project_lockup(repo) minidom.parseString(svg) assert svg.startswith(" None: p.render_projects(out_dir=tmp_path) assert (tmp_path / "modern-di" / "lockup.svg").is_file() diff --git a/tests/test_text.py b/tests/test_text.py index bfd0acf..b3b0c0c 100644 --- a/tests/test_text.py +++ b/tests/test_text.py @@ -2,8 +2,9 @@ def test_outline_returns_group_and_paths(parse_svg): - g, width = outline_text("MODERN", 50, x=270, baseline_y=126, - anchor="middle", color="#356852") + g, width = outline_text( + "MODERN", 50, x=270, baseline_y=126, anchor="middle", color="#356852" + ) el = parse_svg(g) assert el.tag.endswith("g") assert el.attrib["fill"] == "#356852" @@ -19,8 +20,7 @@ def test_width_grows_with_length(): def test_fit_width_pins_rendered_width(): - _, w = outline_text("MODERN", 50, x=270, baseline_y=126, - anchor="middle", fit_width=210) + _, w = outline_text( + "MODERN", 50, x=270, baseline_y=126, anchor="middle", fit_width=210 + ) assert abs(w - 210.0) < 1e-6 - - From c531087ca3b5275a2b400f07bfa47bbdd7c1d738 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 22:59:22 +0300 Subject: [PATCH 12/13] docs(brand): document per-project marks + promote to architecture Co-Authored-By: Claude Sonnet 4.6 --- architecture/brand-marks.md | 17 +++++++++++++++++ brand/README.md | 11 +++++++++-- .../design.md | 2 +- 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 architecture/brand-marks.md diff --git a/architecture/brand-marks.md b/architecture/brand-marks.md new file mode 100644 index 0000000..482786d --- /dev/null +++ b/architecture/brand-marks.md @@ -0,0 +1,17 @@ +# Brand marks + +The org's logo assets, generated by `brand/build/` (no frontmatter; living prose). + +## Org marks (`brand/org/`) +Favicon, avatar, social cards — the interlocked-snakes pinwheel with a chevron. +Used everywhere small (favicons, avatars). See `site-branding.md` for site wiring. + +## Per-project marks (`brand/projects//`) +One large-format logo per repo: the constant green+gold snake-frame +(`geometry.py::project_frame`, margin 9 / arm 53 / stroke 11) with a single +gold inner symbol (`symbols.py`) chosen per repo in `projects.py::MANIFEST`. +Two-colour (green + gold); repos differ by symbol shape, not colour. The two +project templates reuse the org chevron. `modern-di-faststream` is the only +mark using a partner's literal logo path (FastStream's, recoloured); other +integration cues are redrawn evocations. Outputs: `mark.svg`, `lockup.svg` +(+ `mark-512/1024.png`). Regenerate via `uv run python -m brand.build.render`. diff --git a/brand/README.md b/brand/README.md index f383b97..2925f4e 100644 --- a/brand/README.md +++ b/brand/README.md @@ -38,7 +38,14 @@ lockup** pulls them into crop marks framing `MODERN` / `PYTHON` set in **Jost** | `social-card-green.svg` / `.png` | 1280×640, green alternate | | `social-square.svg` / `.png`, `social-square-green.*` | 640×640 (Telegram) | +## Per-project marks (`brand/projects/`) + +Each repo gets a large-format mark: the constant green+gold snake-frame with +one gold inner symbol (see `brand/build/projects.py::MANIFEST`). Regenerate +with `uv run python -m brand.build.render`; outputs land in +`brand/projects//` as `mark.svg`, `lockup.svg` (+ PNGs). These are +large-format only — every repo's favicon/avatar stays the org mark. + ## Deferred (not in this kit) -Per-project / per-repo marks, the subfamily system, and any inner glyphs are a -later task. The header nav logo redesign is also a follow-up. +The header nav logo redesign is a follow-up. diff --git a/planning/changes/2026-06-29.01-per-project-brand-marks/design.md b/planning/changes/2026-06-29.01-per-project-brand-marks/design.md index 3b95882..f6eee5f 100644 --- a/planning/changes/2026-06-29.01-per-project-brand-marks/design.md +++ b/planning/changes/2026-06-29.01-per-project-brand-marks/design.md @@ -1,5 +1,5 @@ --- -summary: Per-project/family logo system — one constant snake-frame, gold inner symbol, one mark per repo, generated in brand/build/. +summary: Per-project marks shipped — 17 repos, constant snake-frame + gold inner symbol, generated into brand/projects/. --- # Design: Per-project and per-family brand marks From 65f1c43e4a7bde8bfe606e465c98b46e49d78dd6 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 29 Jun 2026 23:32:07 +0300 Subject: [PATCH 13/13] fix(brand): make modern-di-typer mark path-based (bold >T), font-independent --- brand/build/symbols.py | 33 ++++++++++++++---- brand/projects/modern-di-typer/lockup.svg | 2 +- brand/projects/modern-di-typer/mark-1024.png | Bin 15789 -> 16254 bytes brand/projects/modern-di-typer/mark-512.png | Bin 7026 -> 7520 bytes brand/projects/modern-di-typer/mark.svg | 2 +- .../design.md | 2 +- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/brand/build/symbols.py b/brand/build/symbols.py index 6f42ca5..0262ab8 100644 --- a/brand/build/symbols.py +++ b/brand/build/symbols.py @@ -126,14 +126,33 @@ def faststream(cx: float, cy: float, r: float) -> str: def terminal(cx: float, cy: float, r: float) -> str: - """Typer cue: terminal window showing a T> prompt.""" - return ( - f'' - f'T>' + """Typer cue: terminal window showing a bold >T prompt (notched chevron + T), + drawn as paths so it is font-independent.""" + screen = ( + f'' + ) + # prompt chevron "❯": constant-thickness angle with a back V-notch + chx = cx - 0.40 * r + reach, hgt, th = 0.30 * r, 0.34 * r, 0.20 * r + pts = [ + (chx - reach, cy - hgt), + (chx - reach + th, cy - hgt), + (chx + reach, cy - th * 0.15), + (chx + reach, cy + th * 0.15), + (chx - reach + th, cy + hgt), + (chx - reach, cy + hgt), + (chx - reach + th * 1.7, cy), + ] + chevron = '' + # bold T + tx = cx + 0.42 * r + half, hbar, stem, h = 0.32 * r, 0.16 * r, 0.16 * r, 0.62 * r + tee = ( + f'' + f'' ) + return screen + chevron + tee def bars(cx: float, cy: float, r: float) -> str: diff --git a/brand/projects/modern-di-typer/lockup.svg b/brand/projects/modern-di-typer/lockup.svg index 629cf55..caf815a 100644 --- a/brand/projects/modern-di-typer/lockup.svg +++ b/brand/projects/modern-di-typer/lockup.svg @@ -1 +1 @@ -T> + diff --git a/brand/projects/modern-di-typer/mark-1024.png b/brand/projects/modern-di-typer/mark-1024.png index aea2e207d14724b8d8bb89a7e70a7dc77270d612..92660a6b285025070523759e736b25cd6d67c96c 100644 GIT binary patch literal 16254 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

  • Gci)GP@>r#h;uy=e-~8|+ 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 diff --git a/brand/projects/modern-di-typer/mark-512.png b/brand/projects/modern-di-typer/mark-512.png index 8bd79f399760aba26ab5ae02962e9ee85710cebe..969a8f5e4cd68733eb804a30ad2ea1e898522b81 100644 GIT binary patch literal 7520 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 diff --git a/brand/projects/modern-di-typer/mark.svg b/brand/projects/modern-di-typer/mark.svg index 775a240..9da6270 100644 --- a/brand/projects/modern-di-typer/mark.svg +++ b/brand/projects/modern-di-typer/mark.svg @@ -1 +1 @@ -T> + diff --git a/planning/changes/2026-06-29.01-per-project-brand-marks/design.md b/planning/changes/2026-06-29.01-per-project-brand-marks/design.md index f6eee5f..5062da4 100644 --- a/planning/changes/2026-06-29.01-per-project-brand-marks/design.md +++ b/planning/changes/2026-06-29.01-per-project-brand-marks/design.md @@ -89,7 +89,7 @@ their logo (see Risk for the one exception). | `modern-di-fastapi` | lightning **bolt knocked out of a gold disc** (evokes FastAPI's teal disc+bolt) | | `modern-di-litestar` | 5-point **star knocked out of a gold disc** (evokes Litestar's star) | | `modern-di-faststream` | the **FastStream delta/stream** shape, recoloured gold | -| `modern-di-typer` | terminal window showing **`T>`** prompt (evokes Typer) | +| `modern-di-typer` | terminal window showing **`>T`** prompt (evokes Typer) | | `modern-di-pytest` | **stepped bars** hanging from a crossbar, gold tints (evokes pytest's bar emblem) | **Templates** (2) — reuse the **org chevron mark** (no bespoke symbol):