Skip to content

Give the app a visual identity of its own - #7

Merged
BleakMidwinter90 merged 1 commit into
mainfrom
design/visual-identity
Aug 10, 2026
Merged

Give the app a visual identity of its own#7
BleakMidwinter90 merged 1 commit into
mainfrom
design/visual-identity

Conversation

@BleakMidwinter90

Copy link
Copy Markdown
Owner

The previous look was competent framework defaults — Tailwind's stock green, uniform rounded cards floating on drop shadows, emoji standing in for interface icons. Competent, and indistinguishable from everything else shipped this year.

Type

Instrument Serif for headline moments only: page titles, the balance score, empty states. Against Geist for interface text and Geist Mono for figures.

A serif is an unusual choice for an app like this, and that's the point — used sparingly it gives chorely a voice instead of the geometric-sans anonymity every product defaults to. Used everywhere it would read as a recipe blog, so it appears in about six places and nowhere else.

Figures are tabular throughout, so numbers in a column don't dance as they change.

Colour

A desaturated pine, mixed by hand rather than lifted from a framework palette, on a warm bone ground. Framework default colours are the single fastest way to look generic; green-700 is a fingerprint.

The pine inverts to a soft eucalyptus in dark mode so it stays genuinely legible rather than merely present. Ochre for late. Still nothing red anywhere — the restraint about tone is unchanged.

Structure

Hairline rules replace drop shadows throughout. Shadows imply floating cards; rules imply print, and this should feel printed. Lists are now single ruled panels rather than stacks of individually-shadowed cards, which takes a lot of visual noise out of the Today screen.

The landing page is now an asymmetric two-column layout with the form as a sticky companion, rather than another centred column of stacked boxes.

Icons

lucide-react for all interface chrome. Emoji remain only where a person chose them — avatars and chore icons — which is the one place they carry meaning rather than substituting for a design decision.

A bug this caught

Lucide icons were being passed from Server Components into Client Components. Those are function components, and React cannot serialise a function across the boundary, so every page under /home returned 500.

The build compiled without complaint and typecheck passed. It only surfaced by actually loading the pages. Nav icons are now passed as names and resolved on the client side (which also lets the icon respond to active state); button icons are passed as rendered elements, which serialise fine.

Verified

Every route loaded against the running server: /, /home, /home/balance, /home/chores, /home/settings, /join/[code] — all 200, zero server errors in the log. 119 tests, lint and typecheck clean, production build passes.

The previous look was competent framework defaults: Tailwind's stock green,
uniform rounded cards on drop shadows, emoji standing in for interface
icons. Competent, and identical to everything else shipped this year.

This is a considered replacement.

Type. Instrument Serif for headline moments only - page titles, the
balance score, empty states - against Geist for interface text and Geist
Mono for figures. A serif is an unusual choice here and that is the point:
used sparingly it gives the app a voice instead of geometric-sans
anonymity. Used everywhere it would read as a recipe blog, so it is
restricted to about six places.

Colour. A desaturated pine mixed by hand rather than lifted from a
framework palette, on a warm bone ground. Framework default colours are
the fastest possible way to look generic. The pine inverts to a soft
eucalyptus in dark mode so it stays legible rather than merely present.
Ochre for late, and still nothing red anywhere.

Structure. Hairline rules replace drop shadows throughout. Shadows imply
floating cards; rules imply print, and this should feel printed. Lists are
single ruled panels rather than stacks of separate cards, which removes a
great deal of visual noise from the Today screen.

Icons. lucide-react for all interface chrome. Emoji stay only where a
person chose them - avatars and chore icons - which is the one place they
carry meaning rather than substituting for a design decision.

Also adds a shared form-style module, so inputs cannot quietly drift out
of alignment with each other as the app grows.

Fixes a runtime bug introduced and caught while building this: Lucide
icons were being passed from Server Components into Client Components.
Those are function components, which React cannot serialise across the
boundary, so every page under /home returned 500. The build compiled
happily. Nav icons are now passed as names and resolved client-side;
button icons are passed as rendered elements.

Verified by loading every route against the running server: all 200, zero
server errors. 119 tests, lint and typecheck clean.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@BleakMidwinter90
BleakMidwinter90 merged commit 2c12554 into main Aug 10, 2026
2 checks passed
@BleakMidwinter90
BleakMidwinter90 deleted the design/visual-identity branch August 10, 2026 01:17
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