Point, snap, done.
12,000+ foods and their portions, from one photo.
Pantry is the kit behind every Platewise surface: the landing page, the app, social and email. One set of tokens, a handful of components, and rules for keeping the food the loudest thing on screen.
Four rules for deciding between two good options.
Interface stays white and quiet so the plate and its numbers carry the colour. No decoration that competes with the scan.
Every view has one thing it wants you to do, in one green or ink button. Everything else is secondary.
Real units on every value, tabular figures, and the macro colours never change meaning.
Celebrate habits, not weight. No red for “over”, no guilt, no good and bad foods.
Five groups, all from one CSS file. Click a chip to copy its hex.
Ink carries text and dark surfaces. Muted is for supporting copy.
White first. Tints appear one per card, never side by side in the same hue.
One hue, five jobs. Green fills, green-btn sits under white text, green-d and green-ink are the only green text.
Macro colours are fixed: protein violet, carbs sun, fat coral. They appear only inside data.
Secondary text that sits on green and ink fills.
Every text pair meets WCAG AA (4.5:1). These are the approved pairs, and the three that look fine but fail.
| Sample | Text | On | Ratio | Result |
|---|---|---|---|---|
| Aa | --ink | --bg | 17.2:1 | AA pass |
| Aa | --muted | --bg | 5.5:1 | AA pass |
| Aa | --green-d | --bg | 4.5:1 | AA pass |
| Aa | --green-ink | --mint | 5.8:1 | AA pass |
| Aa | white | --green-btn | 5.4:1 | AA pass |
| Aa | --on-green | --green-btn | 4.9:1 | AA pass |
| Aa | --lime | --ink | 13.3:1 | AA pass |
| Aa | --on-dark-muted | --ink | 8.7:1 | AA pass |
| Aa | white | --green | 2.6:1 | fail · don't use |
| Aa | --green-d | --mint | 4.0:1 | fail · don't use |
| Aa | --lime | --bg | 1.3:1 | fail · don't use |
Plus Jakarta Sans, 400 to 800. Display sizes are fluid between phone and desktop.
display-hero66px · 800 / 1.04 / −4.5%display-cta56px · 800 / 1.05 / −4%display-section52px · 800 / 1.08 / −3%stat58px · 800 / 1.0 / −4%card-title21px · 800 / 1.2 / −2%lede19px · 400 / 1.55 / 0body15px · 500 / 1.55 / 0kicker13px · 800 / caps / +14%data-label12px · 800 / tabularContent sits in a 1200px wrap with 24px gutters. Card grids use a 20px gap; sections breathe at 110–120px.
gap-xs8pxIcon to label, chipsgap-sm12pxButton rows, macro gridgap-md20pxCard gridsgutter24pxPage sidespad-card28pxCard paddingpad-plan32pxPlan padding, hero CTA gaphead-gap56pxSection head to contentsection110pxSection paddingSoft and friendly. Anything you can press is a pill. Shadows are kept for things that float above the page.
radius-xs · 8pxLabelsradius-sm · 14pxStore buttonsradius-md · 18pxFloating cardsradius · 24pxCardsradius-plan · 28pxPlansradius-cta · 40pxBandsradius-pill · fullButtons, pillsflatInline content, tablesshadowHovered cardsshadow-btnGreen buttonsshadow-lgFloating objects24px grid, 2.2–2.4px stroke, round caps and joins. Icons share the geometry of the viewfinder mark.
Motion explains the product: the scan animates, chrome doesn't. The first screen is never hidden behind an entrance animation, and everything respects reduced-motion settings.
| Token | Value | Use |
|---|---|---|
dur-fast | 200ms | Hover, press, colour |
dur-reveal | 800ms | Below-the-fold fade up (28px) |
dur-float | 6–7s | Floating cards and phone bob |
dur-scan | 7s loop | Scan line, boxes, macro fill |
ease-out | cubic-bezier(.2,.7,.2,1) | Reveals, hover lifts |
Protein is always violet, carbs sun, fat coral. Every bar carries its label and value; colour never works alone. Progress toward a goal is green, never red.
Macro bars · 7px · track #EEF2F4
Donut · 16px stroke · 3% gaps
Weekly bars · today in Green · goal dashed
One primary per view. Action green is for the thing the page exists for; Ink is the nav and dark-ground primary; Ghost is everything secondary.
The landing page's one call to action. Always App Store first, always as a pair, never beside another primary.
The signature component. A box snaps around each food after the scan line passes, labelled with the food and its calories.
One small stat beside the phone. It may overlap the phone's frame, never the app content inside it. One per hero.
A feature tile: tag, title, one line and a live visual. One dark lead card per grid; the rest take one tint each.
12,000+ foods and their portions, from one photo.
Protein, carbs, fat and 30+ micronutrients.
Your week at a glance, against your goal.
Exactly one plan is highlighted. It goes dark, gets the lime badge and the green button.
Unlimited scanning and a personal AI coach.
Results describe habits and goals, never weight lost. One featured card per section, in Action green.
“I just take a picture. It's the first habit I've actually kept.”
“It split my burrito bowl into 7 ingredients.”
Native details and summary, so keyboards and screen readers work. One open at a time; open items turn soft and the plus turns on a lime disc.
Platewise identifies foods with 98% accuracy in testing. Tap any item to adjust it.
Yes, in two taps from your account settings.
Every colour as a CSS custom property, defined once in app/globals.css.
| Token | Value | Use | |
|---|---|---|---|
--ink | #0B1D26 | Text, dark surfaces | |
--ink-2 | #1E3340 | Nav links, quotes | |
--muted | #5B6B75 | Ledes, card copy | |
--logo-grey | #65747D | Logo strip only | |
--line | #E4EBEE | Hairlines, borders | |
--bg | #FFFFFF | Page, raised cards | |
--soft | #F4F8F5 | Quiet cards, open FAQ | |
--cream | #FFF8EE | Warm card | |
--mint | #DDF7EA | Green tint, chips | |
--tint-sky | #EEF4FF | Barcode card | |
--tint-violet | #F4F0FF | Voice card | |
--tint-coral | #FFF1EC | Integrations card | |
--green | #12B76A | Logo, charts, progress | |
--green-d | #08875A | Text on white only | |
--green-btn | #077A51 | Buttons, green bands | |
--green-btn-hover | #06623F | Hover, pressed | |
--green-ink | #066B47 | Text on tints | |
--lime | #C8F169 | Highlight, scan line | |
--violet | #7B61FF | Protein, voice | |
--sun | #FFC940 | Carbs, stars | |
--coral | #FF7A59 | Fat, streaks | |
--sky | #3BA7FF | Integrations | |
--track | #EEF2F4 | Empty bars | |
--on-green | #E6FAEF | Body on action green | |
--on-dark-muted | #A9BDB6 | Body on ink |