{name}
{desc}
{NOTES[key]}
#!/usr/bin/env python3 """Builds the logo concept review page, inlining each generated SVG.""" import pathlib import re import gen_logos HERE = pathlib.Path(__file__).parent LOGOS = HERE / "logos" NOTES = { "apex": ( "Strongest speed signal in the set, and the gauge reads as an instrument cluster " "rather than a generic dial. Verified weakness: the tick marks disappear by 24px " "and the needle loses its point, so the status-bar version needs the ticks removed." ), "route": ( "Describes what the app records rather than what it rides on — the most specific " "idea of the three. The accent segment reads as recording progress. " "Ambiguous at 24px — the trace could be almost anything." ), "heading": ( "Cleanest silhouette of the outlined concepts and the second-best small-size " "performer. The accent arc marks where the arrow points, so ring and arrow read as " "one object, and it reduces to a single flat color more cleanly than the other two — which makes it the natural pick for the status-bar icon." ), } # The status-bar icon must be a flat single-color silhouette; Android discards # color and alpha nuance. Worth previewing since it rules some concepts out. MONO_CSS = """ .mono svg *, .mono svg { fill: #fff !important; stroke: #fff !important; } """ def inner_svg(key: str) -> str: raw = (LOGOS / f"rippr-{key}.svg").read_text() return re.sub(r"^$", "", raw).strip() def card(letter: str, key: str, name: str, desc: str) -> str: body = inner_svg(key) def mark(size, extra_class="", guide=False): g = '' if guide else "" return ( f'' f'{g}' ) sizes = "".join( f'
{desc}
{NOTES[key]}
Rippr · icon direction
Each concept is drawn on Android's 108-unit adaptive-icon canvas, so whichever you pick converts straight to a vector drawable with no redrawing. The dashed circle marks the safe zone — anything outside it can be cropped by an OEM mask. The small tiles are the real test: a launcher icon is seen at 48px and the status-bar icon is a flat 24px silhouette.
The chosen mark becomes ic_launcher_foreground.xml as a vector drawable,
paired with #101418 as the adaptive background, replacing the placeholder
compass. Its monochrome variant replaces
android.R.drawable.ic_menu_compass in the recording notification. Source
SVGs live in design/logos/; regenerate with
python3 design/gen_logos.py.