Skip to content

feat(brand): new xNet app icon and favicon - #640

Merged
crs48 merged 2 commits into
mainfrom
claude/sweet-hertz-93211b
Jul 28, 2026
Merged

feat(brand): new xNet app icon and favicon#640
crs48 merged 2 commits into
mainfrom
claude/sweet-hertz-93211b

Conversation

@crs48

@crs48 crs48 commented Jul 28, 2026

Copy link
Copy Markdown
Owner

Swaps every icon surface to the new geometric mandala mark, generated from a single 1024×1024 source.

Surfaces

Surface Files
Web apps/web/public/{favicon.ico,favicon.svg,apple-touch-icon.png,icons/icon-192.png,icons/icon-512.png}
Site site/public/favicon.svg
Expo apps/expo/assets/{icon.png,adaptive-icon.png}
Electron apps/electron/build/{icon.png,icon.ico,icon.icns}

No config changes — every path and image/svg+xml reference is unchanged, and theme_color/background_color stay #000000 in both manifests since the new mark is also on black.

Two judgement calls worth flagging

Cropped to the mark. In the source the mandala occupies only 46% of the frame. Left as-is it would be about 7px of filigree at 16px. The icons crop to a square centred on the mark at ~86% fill.

Small ICO frames are tone-ramped. This mark is much finer than the one it replaces. Downscaling averages a 1px white line over several pixels, so the lines drop to ~30% grey and the tab icon becomes a dark smudge. The ICO frames get a per-size gamma (0.50 at 16px → 0.85 at 128px); pure black stays pure black. Frames are passed explicitly via append_images — left to itself Pillow resizes the 256 internally and the ramp never applies.

Verified by reading the frames back out of the written .ico: 32px and up hold the geometry cleanly. At 16px this mark cannot show its structure at any setting — it resolves to a bright dense disc. That is the ceiling for filigree this fine, and it is still a large improvement on the unramped version.

The Android adaptive icon keeps the 0.72 inset, which puts the mark's outermost points at 0.62 of the canvas — inside the 0.66 safe circle with margin (measured, not assumed).

Not included

apps/expo/assets/splash.png is a separate placeholder asset and is untouched.

🤖 Generated with Claude Code

Swap every icon surface to the new geometric mandala mark, generated from
one 1024x1024 source: web favicon/apple-touch/PWA icons, the site favicon,
Expo icon and adaptive icon, and the Electron png/ico/icns.

The mark is far finer than the one it replaces, so the small ICO frames are
tone-ramped (gamma 0.50 at 16px up to 0.85 at 128px) — a straight downscale
averages the filigree into a grey smudge in the browser tab.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: xNet Test <test@xnet.dev>
@crs48
crs48 temporarily deployed to pr-640 July 28, 2026 05:48 — with GitHub Actions Inactive
github-actions Bot added a commit that referenced this pull request Jul 28, 2026
@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Preview removed for PR #640.

github-actions Bot added a commit that referenced this pull request Jul 28, 2026
@crs48
crs48 temporarily deployed to pr-640 July 28, 2026 05:58 — with GitHub Actions Inactive
github-actions Bot added a commit that referenced this pull request Jul 28, 2026
@crs48
crs48 merged commit eb8ee65 into main Jul 28, 2026
13 checks passed
@crs48
crs48 deleted the claude/sweet-hertz-93211b branch July 28, 2026 06:07
github-actions Bot added a commit that referenced this pull request Jul 28, 2026
crs48 added a commit that referenced this pull request Jul 28, 2026
…643)

Regenerates every icon surface from the refined mandala, and places the
mark before the wordmark in the landing and docs headers as a subtle
deboss.

## Icons

Same 11 files as [#640](#640),
regenerated from the refined source. No config changes — every path and
`image/svg+xml` reference is unchanged.

**Contrast work, which was the point of this pass:**

The refined render peaks at 235 rather than 255, so it reads dimmer
everywhere. Normalising to full white is the single largest gain.

Below 48px, extra brightness stops helping. Lifting uniformly raises the
faint tracery along with the bold strokes until everything converges on
one mid-grey — a brighter blob, not more structure. So small frames now
get **two** adjustments: a gamma above 1 *before* the downscale to dim
the secondary filigree so it stops averaging into the main strokes, and
a gamma below 1 *after* to restore what survives. Small frames are
consequently a deliberate simplification: the radiating star reads, the
fine tracery does not.

Measured by reading frames back out of the written `.ico`:

| size | p95 before | p95 now |
| --- | --- | --- |
| 16 | 133 | 156 |
| 32 | 142 | 147 (far more structure) |
| 48 | 140 | 150 |

**Known limitation:** at 256px+ the refined mark is still slightly
dimmer than the outgoing one (p95 173 vs 195). That is inherent to the
artwork — more mid-grey strokes, fewer pure-white. Large sizes are
lifted to 0.85 gamma; pushing further blows the fine strokes into a
white mass and loses the delicacy that makes the mark work at that size.

Android adaptive icon measured at 0.630 of canvas, inside the 0.66 safe
circle. The generator asserts this rather than assuming it.

## Site header

`site/public/mark.png` is a 96px white-with-alpha mask, applied via CSS
`mask-image` so the mark takes its colour from the deboss layers instead
of shipping a fixed-colour image. Two offset copies of that mask make
the engraving.

The treatment flips by theme, because a deboss cannot work identically
on both:

- **Light** — a genuine deboss: dark incision over a white lower edge.
- **Dark** — a black incision on a near-black header has nowhere to go
(the first attempt was effectively invisible), so the lit lower edge
carries the shape. Etched rather than pressed.

Dark measured at roughly half of light's contrast against its own
background and was raised to match: peak deviation 40 → 65, against
light's 79.

Applied to both `Nav.astro` and the docs `SiteTitle.astro`.

## Layout change this forced

The mark costs ~32px of nav width and **the row had no slack at 768px**
— it tipped the whole page into horizontal scroll. Verified by toggling
the mark and measuring `documentElement.scrollWidth`, not by eye.

- Link spacing tightens from `gap-5` to `gap-4` below `lg`. Desktop
spacing unchanged.
- The mark is hidden below `md`.

That second point needs stating plainly: **the nav already overflows by
67px at 640px on main, before any change here.** At the `sm` breakpoint
the links unhide and immediately overflow. This PR does not fix that
pre-existing bug, but keeps the mark out of that band so it adds nothing
to it. Confirmed the mark contributes exactly 0px of overflow at every
width tested.

## Not included

`apps/expo/assets/splash.png` remains a separate placeholder, untouched.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant