jammyphan.com · jar-design-lab · built 2026-07-28 · extends TSK-2026-0228 · prior rounds: jammy-phan-logo-lab · concept atlas

What should the jam jar actually look like?

Every jammyphan.com concept now carries a jam jar, and the logo has spent seven rounds fitting one into an uppercase A — but the jar's own form has never been decided in one place. This page is that place. It exists so "what does the jar look like" stops being re-answered independently by the site concepts and the logo track.

The dual constraint, from TSK-2026-0228: one silhouette has to work free-standing as a jam jar with no context at all, and nested as the counter of an uppercase A in the wordmark. Every variation below is therefore shown twice, and measured.

Nothing here is hand-drawn. The geometry is generated from parameters in build/jar.py, and every small-size image is a real raster (sharp, density 900) shown at its true pixel grid — so when a mark dies at 16px you watch it die instead of reading a claim that it survives.

01 The measurement that decides everything

Punching a jar into the A's solid mass leaves two ribs of ink between the counter and the letter's outer edges. Those ribs — not the jar — are what fails first. On a 512-unit canvas rendered at 16px, one pixel is 32 units, so a rib has to be roughly 50 units wide before it survives. Here is the same jar at seven counter widths.

counter 122u

25.8u rib · 0.81px at 16 dies
sweep-122-a at 32px32px ×3
sweep-122-a at 16px16px ×5

Jar is 3.8px wide at 16px.

counter 110u

31.0u rib · 0.97px at 16 dies
sweep-110-a at 32px32px ×3
sweep-110-a at 16px16px ×5

Jar is 3.4px wide at 16px.

counter 100u

35.3u rib · 1.1px at 16 marginal
sweep-100-a at 32px32px ×3
sweep-100-a at 16px16px ×5

Jar is 3.1px wide at 16px.

counter 90u

39.7u rib · 1.24px at 16 marginal
sweep-90-a at 32px32px ×3
sweep-90-a at 16px16px ×5

Jar is 2.8px wide at 16px.

counter 80u

44.0u rib · 1.37px at 16 marginal
sweep-80-a at 32px32px ×3
sweep-80-a at 16px16px ×5

Jar is 2.5px wide at 16px.

counter 71u

47.9u rib · 1.5px at 16 marginal
sweep-71-a at 32px32px ×3
sweep-71-a at 16px16px ×5

Jar is 2.2px wide at 16px.

counter 64u

50.9u rib · 1.59px at 16 marginal
sweep-64-a at 32px32px ×3
sweep-64-a at 16px16px ×5

Jar is 2.0px wide at 16px.

The sweep, as numbers

counter widthnarrowest ribrib at 16pxjar at 16pxverdict
122u25.8u0.81px3.8pxdies
110u31.0u0.97px3.4pxdies
100u35.3u1.1px3.1pxmarginal
90u39.7u1.24px2.8pxmarginal
80u44.0u1.37px2.5pxmarginal
71u47.9u1.5px2.2pxmarginal
64u50.9u1.59px2.0pxmarginal

Read the third and fourth columns against each other. That is the whole problem.

Finding: the jar-in-A cannot work at 16px. At any setting.

The two requirements move in opposite directions. Widen the counter so the jar carries real information and the A's ribs fall to 0.81px and alias into grey mush. Narrow it until the ribs survive (64u counter, 1.59px ribs) and the jar is 2.0px wide — a nick, carrying nothing. There is no width where both hold. This is not a drawing problem that a better curve fixes; it is arithmetic.

Seven rounds have circled this — Round 2 noted the jar is "inherently ~5% of the mark's width", Round 4 flagged that colour survives where outline dies, Round 6 added a mono twin per row. None of them put a number on it. The number is above.

So the answer is two marks, not one compromise. Which is what the resolution ladder below sets out — and it is good news, because each mark then gets to be excellent at its own job instead of mediocre at both.

02 Anatomy — the parameters

Six numbers describe the silhouette. Everything in this lab is these six plus a lid style, a fill treatment and a contents choice.

parameterrange exploredwhat it controls
neck_ratio0.55 – 0.92Mouth width over body width. The single biggest lever on "is this a jar or a glass".
height_ratio0.70 – 1.15Total height over body width. Below 1.0 reads preserves; above reads apothecary.
shoulder0.0 – 1.0Soft swell to crisp corner. Also the quietest way to buy back rib width.
neck_h0.14Neck height as a fraction of total. Held constant this round.
base_r0.18Base corner radius. Held constant — sharper reads industrial, rounder reads soft.
counter_w64 – 122uBody width when nested in the A. The favicon-survival number.

03 Axis — lid style

Left image in each pair is free-standing; right is the same silhouette nested in the A.

two-step mason

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
lid-mason-a at 32px32px ×3
lid-mason-a at 16px16px ×5

Band wide/low/square, disc narrow/high/round. The read comes from the delta between them, not from either alone.

flat lacquer disc

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
lid-disc-a at 32px32px ×3
lid-disc-a at 16px16px ×5

One clean slab. Quietest, and the only lid that never muddies at 16px — but it also reads as a tin, not a preserve.

screw band + knurl

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
lid-band-a at 32px32px ×3
lid-band-a at 16px16px ×5

Most literal. The knurl ridges are the first detail to vanish; shown here specifically so you can watch them go.

no hardware

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
lid-none-a at 32px32px ×3
lid-none-a at 16px16px ×5

The jar carried entirely by the shoulder. Cleanest letterform, weakest jar.

04 Axis — body proportions

One parameter moved at a time, so the comparison means something.

squat · h/w 0.70

24.5u narrowest rib · 0.77px at 16 · 1.53px at 32 dies
body-squat-a at 32px32px ×3
body-squat-a at 16px16px ×5

Wider than tall. Reads as preserves — the round-2 finding that a squat jar reads 'jam' where a tall one reads 'test tube'.

canonical · h/w 0.84

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
body-canon-a at 32px32px ×3
body-canon-a at 16px16px ×5

The Round-6 proportion, kept as the reference point so this round is comparable rather than a restart.

tall · h/w 1.15

22.3u narrowest rib · 0.7px at 16 · 1.39px at 32 dies
body-tall-a at 32px32px ×3
body-tall-a at 16px16px ×5

Slides toward apothecary/test-tube. Also pushes the counter into the crossbar, which the generator has to compensate for.

narrow neck · 0.55

26.0u narrowest rib · 0.81px at 16 · 1.62px at 32 dies
body-neck-narrow-a at 32px32px ×3
body-neck-narrow-a at 16px16px ×5

A decanter shoulder. Strongest jar silhouette of the set, and the flare buys back a little stem width.

wide neck · 0.92

22.5u narrowest rib · 0.7px at 16 · 1.41px at 32 dies
body-neck-wide-a at 32px32px ×3
body-neck-wide-a at 16px16px ×5

Nearly a tumbler. The shoulder disappears and with it most of the jar information.

soft shoulder · 0.0

27.5u narrowest rib · 0.86px at 16 · 1.72px at 32 dies
body-soft-a at 32px32px ×3
body-soft-a at 16px16px ×5

A round swell instead of a corner. Widest surviving stem in the set — the curve pulls ink back into the ribs.

05 Axis — fill line and label

fill 0.75 · deep headspace

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
fill-low-a at 32px32px ×3
fill-low-a at 16px16px ×5

Lots of glass above the jam. Airy, but at small sizes the jar becomes a thin band of colour on a big empty shape.

fill 0.62 · canonical

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
fill-mid-a at 32px32px ×3
fill-mid-a at 16px16px ×5

Enough jam to carry colour, enough headspace to still read as a vessel.

fill 0.42 · brimming

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
fill-high-a at 32px32px ×3
fill-high-a at 16px16px ×5

Colour survives smallest here. The risk is it stops reading as a jar and starts reading as a filled rectangle.

label band

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
fill-label-a at 32px32px ×3
fill-label-a at 16px16px ×5

A knocked-out wrap label. Adds a second horizontal — which competes with the fill line rather than reinforcing it.

06 Axis — contents

The crushed-seed scatter is the Round-7 anti-boba fix, now a seeded generator rather than baked coordinates: independent rx/ry per speck, ratio never 1.0 (a circle reads as boba), rotation randomised, and reproducible from the seed.

empty glass

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
cont-empty-a at 32px32px ×3
cont-empty-a at 16px16px ×5

Pure silhouette. Most typographically disciplined, and the only one that is honestly monochrome-native.

jam only

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
cont-jam-a at 32px32px ×3
cont-jam-a at 16px16px ×5

One flat mass under a sagging meniscus.

suspended fruit

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
cont-fruit-a at 32px32px ×3
cont-fruit-a at 16px16px ×5

The Round-4 A8 move. Colour survives where drawn outline dies — but the pieces merge into one blob below ~32px.

crushed seed

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
cont-specks-a at 32px32px ×3
cont-specks-a at 16px16px ×5

The Round-7 anti-boba fix, now generated rather than baked: independent rx/ry, ratio never 1.0, seeded so it is reproducible.

07 The three readings

Does the jar-profile counter actually earn its keep, or would a plain window plus lid hardware say the same thing? The middle card is the control.

window

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
read-window-a at 32px32px ×3
read-window-a at 16px16px ×5

Solid A, jar-shaped hole, no hardware. Pure negative space — the FedEx principle, the object built from the letter's own mass.

vessel

17.6u narrowest rib · 0.55px at 16 · 1.1px at 32 dies
read-vessel-a at 32px32px ×3
read-vessel-a at 16px16px ×5

The A itself is the jar: apex wears the lid, counter is a neutral window. Control case for whether the jar-profile earns its keep.

both

25.8u narrowest rib · 0.81px at 16 · 1.61px at 32 dies
read-both-a at 32px32px ×3
read-both-a at 16px16px ×5

Lid hardware AND jar-profile counter — what Rounds 6 and 7 shipped. Most information, most to lose at size.

08 The resolution ladder

What section 01 forces: each size gets the mark that can actually hold it.

16 – 24px

Solid jar

Favicon, avatar. Filled silhouette only — no strokes, no knurl, no label. A 7-unit outline is 0.22px at this size; mass is the only thing that survives.

32 – 64px

Jar-in-A

App icon, profile mark. Ribs are 1.61px at 32 — thin but holding. Below this it stops being an A.

≥ 120px

Full wordmark

Site header, resume, deck. The jar-in-A inside "J A MMY PHAN", where the counter has room to say jar and the letter still reads first.

any

Mono twin

One-colour contexts. Contents convert to even-odd knockouts so they punch through instead of vanishing into the fill.

The two marks, side by side at true size

solid jar — the small mark

final-solid at 64px64px ×2
final-solid at 32px32px ×3
final-solid at 16px16px ×5

Survives 16px intact. Lid, glass and jam band all still legible. This is the favicon.

outline jar — for contrast

final-outline at 64px64px ×2
final-outline at 32px32px ×3
final-outline at 16px16px ×5

Same silhouette, drawn as an outline. At 16px it is grey mush around a pink band — proof that the small cut has to be authored as mass, not reduced from the large one.

jar-in-A — the large mark

final-a at 64px64px ×2
final-a at 32px32px ×3
final-a at 16px16px ×5

Excellent at 64px, holding at 32px, gone at 16px. Exactly as the arithmetic predicted.

mono twins

One-colour cuts of both marks.

09 The escape pod

New this round. The pod wraps the jar for atmospheric entry across six site concepts, so its proportions get locked here rather than improvised six times. Built from the silhouette language Jammy referenced — sphere, circular porthole, lattice panels, thick hinged hatch, comet plume, crater crash with light shafting out of the opening — drawn as an original shape rather than a copy of a specific ship.

closed — the wrap

pod-closed at 64px64px ×2
pod-closed at 32px32px ×3
pod-closed at 16px16px ×5

Jar visible through the porthole as the hatch seals. Porthole is 0.50R; the jar inside sits at 0.46R body width.

flight — the entry burn

pod-flight at 64px64px ×2
pod-flight at 32px32px ×3
pod-flight at 16px16px ×5

Plume streams up, behind a pod that is falling — a plume below reads as thrust, which is the opposite story. Compression glow rides the leading edge.

crashed — the arrival

pod-crashed at 64px64px ×2
pod-crashed at 32px32px ×3
pod-crashed at 16px16px ×5

Hatch thrown open on its hinge, interior lit, light shafting up out of the opening. The jar leaves from here.

10 Recommendation — the canonical numbers

Lock this, and hand it to the concepts

All seven site concepts draw in hand-rolled canvas 2D, not SVG. So the handoff is not a shared file — it is this ratio table, re-drawn at each concept's own scale and in its own materials (lacquer lid in Hạ Long, brass in Bamboo House, instrument-white in Stratos).

propertyvaluewhy
neck_ratio0.75Shoulder reads at distance without the neck becoming a bottle.
height_ratio0.84Squat enough to read preserves, not apothecary. Round-2 finding, re-confirmed.
shoulder0.45A defined corner that still curves — the soft end buys rib width but blurs the jar.
neck_h0.14Enough neck to step, not enough to read as a bottle.
base_r0.18Rounded, not industrial.
lidtwo-step masonBand wide/low/square + disc narrow/high/round. Survives to 32px; the knurl variant does not.
fill0.62Colour carries small, headspace still reads as vessel.
contentscrushed seedSpecks at large sizes; they merge into one honest mass small, which is fine.
counter_w (in A)122uOptimised for the wordmark, deliberately not for the favicon — that job goes to the solid mark.
jam#E0316E → #8E1140The established jam palette.
seed specks#96123FNever black. Darker raspberry, or it reads as dirt.
pod porthole0.50RLarge enough that the jar inside is legible at 64px.