Counterweight
Kitchen field kit · v1

Your kitchen
is the recipe.

A no-recipe cooking companion for improv cooks. Track what's actually in the pantry, cook from balance instead of instructions, and rescue food before it turns. Built for wet hands, big families, and the six o'clock question — what's for dinner.

174tiles
Painterly catalog
≤60sec
Restock 20 items
3recipes
One tap, live pantry
7weights
The balance method
§ 01 · The frame

Three surfaces, one product.

Counterweight is not five loose tools — it's a single cooking companion arranged around three moments: what's in stock, what to make, and what to do when the pot goes sideways.

Home · pantry

The truthful inventory.

Every item you cook with, rendered as a painterly tile. Tap once per unit to restock. Tap the mode switch and tap again to burn down as you use. Batches, freshness clocks, and frozen state — all handled quietly underneath.

Bananas
6
Tomato
4
Avocado
2
Blueberry
1
Salmon
2
Eggs
8
Cheese
1
Butter
0
Action · cook

Recipes from what you own.

Not "what's for dinner tonight" typed into a box. The live pantry is already the prompt. Pick a preset — kid-friendly, use-what's-expiring, unconventional pairings — and get three balanced options in seconds. Mark ingredients used and the counts follow.

Kid friendly Expiring first 30 min or less Unconventional
Coconut-lime salmon rice bowl
28 min · 4 servings
salmonricecoconut milkbananas — rescue
Overripe banana breakfast bread
55 min · rescue
3 bananaseggsbutter
Reference · field kit

Fix, Swap, Rescue.

The see-saw method as a permanent reference. Diagnose what's dominating the dish. Swap by job, not by name — soy sauce is salt + umami, not a bottle. Rescue burnt bottoms, broken sauces, and dishes that got too salty for anything but dilution.

Fat
Acid
Tilted — add a counterweight
§ 02 · How it works

Five moments in a real kitchen.

Not a feature list. The actual arc from grocery bag on the counter to dinner on the table — and the moments the app has to earn its keep.

01Restock the shelf

Twenty items, sixty seconds, zero typing.

You get home with the groceries. Open Counterweight, hit RESTOCK, and tap each item once per unit — ten green apples is ten taps on the green apple tile. Each tap fires a pulse ring in acid green, stamps a new batch with a use-by date, and merges with same-day batches so the pantry doesn't clutter.

No forms. No barcode dance. The tiles are big enough for one-handed taps while the other hand is holding milk.

"The moment restocking feels like a chore, the counts drift from reality, and the whole product dies. That's why we bet on tapping — not scanning."

Pantry · home
The kitchen
Restock Use Edit

Fruits

18 items · 4 stocked
Bananas
6
Green apples
10
Red apples
4
Lemons
3
Oranges
0
Limes
0
Blueberries
1
Cherries
0
02Live picture at a glance

The pantry knows what's about to turn.

Above the grid: four stat cards — fresh, expiring, today, frozen. Below that, a "use these first" strip with the eight worst offenders, tap-through to a Cook screen already pre-filtered to rescue them.

The Flavor Balance profile reads your whole pantry against the seven weights (salt, acid, sweet, fat, bitter, heat, umami) so you can see at a glance if you're heavy on fat and starving for acid — before you cook, not after.

Pantry · overview
Kitchen state
42
Fresh
7
Expiring
3
Today
12
Frozen
Use these first · tap for recipes
Bananas
3
Berries
1
Avocado
2
Chicken
1
Tomato
2
Flavor balance Well-stocked
Salt
Acid
Sweet
Fat
Bitr
Heat
Uma
03Ask the kitchen

Recipes generated from what's actually there.

The Cook tab knows your inventory — every count, every batch, every days-until-expiry. Pick one preset chip (kid-friendly · expiring first · 30 min · unconventional) or save your own, add an optional note, and press generate.

Three recipes come back. Each one names which pantry items it uses (and which it rescues — old bananas → banana bread), with a total time, a step count, and a balance readout showing which weights it hits. Tap "Mark ingredients used" after cooking and the counts burn down oldest-batch-first.

"Recipe apps assume you shopped for the recipe. This one assumes you already own dinner — it just doesn't know that yet."

Cook · from live pantry
What's for dinner
Kid friendly Expiring first 30 min Unconventional Feeds 6
Read the pantry   ·   3 recipes
Banana bread & berry compote
55 min · rescues 4 items
3 bananasberrieseggsbutter
Sheet-pan chicken & tomato
32 min · balanced 6/7
chickentomatogarliclemon
Avocado toast + soft egg
12 min · easy
avocadobreadeggslemon
04Mid-cook, sideways pot

Diagnose the tilt, add the counterweight.

The dish tastes off. Open the Fix tab: what's wrong — too rich, too spicy, too sweet, too bitter, too bland? Tap the problem. The see-saw shows what's dominant and offers the two weights that biologically counter it. Add the counterweight. The see-saw balances. Taste again.

The Swap tab handles the other panic: out of an ingredient. It teaches you to swap by job (salt + umami) not by name (soy sauce). The Rescue tab is for when balance isn't the problem — you burnt the bottom, the sauce broke, the whole thing is over-salted.

Fix · the see-saw
Taste. Tilt. Counter.
Fat
Acid
Balanced — taste again
2 · Add the counterweight
+ Acid
+ Heat
Fat coats your tongue in a film. Acid strips it — a hard squeeze of lime brings the flavor back through.
05Burn down as you go

Inventory that stays honest without a chore.

Pull up the item, hit the stepper, or flip to USE mode and tap the tiles as you cook — each tap decrements the oldest batch first, so the salmon you bought Tuesday goes before the salmon you froze Friday.

Freeze a surplus? Tap the frost button on the edit sheet: the icon swaps to its frozen variant and the shelf life re-stamps to ninety days. Thaw and it becomes three. Bottles and spices track as a 0–100 level bar instead of a count — because a half-empty jar of soy sauce isn't 1, it's 47.

Salmon · edit
Fresh salmon
Restock Use Edit
2
1
3
8

Fresh salmon

2 batches · oldest 1d left
2
+
Freeze
Clear
§ 03 · What surrounds it

The parts you don't see.

Counterweight is a phone-first web app, but it lives inside a system — assets, models, and rails that make the tap feel instant and the recipes feel yours.

174 painterly tiles

A hand-generated icon library, transparent 256px, matched to the pantry catalog with a CI check that says every item resolves to a tile — or the deploy fails.

Assets

Supabase + RLS

Every batch, every level, every saved preset keyed to your user. Magic-link sign-in, row-level security, and a schema that's multi-user-ready when the household wants shared shelves.

Persistence

Claude Sonnet 4.6

Recipes and mid-cook diagnosis run through a server route with the API key never on your phone. Structured JSON, Zod-validated, one clean retry — no chatty preamble, no invented ingredients.

Intelligence

Freshness at read time

Days-until-expiry are computed from timestamps every render, never cached — so midnight rolls over cleanly and you never see "1d left" on a batch that already turned.

Correctness

Optimistic writes

Every tap updates the UI in under 100ms and queues the mutation in the background. Kitchen wifi drops? Your restock still happened. Reconciles when the pipe comes back.

Speed

Install to home screen

PWA-quality on iOS and Android. One tap from your home screen, full-screen, works on wet-handed kitchen phones. No app store, no update dance, no permissions circus.

Distribution
§ 04 · Glossary

Words we use.

Because a cooking companion should teach the vocabulary of the craft, not hide it.

Batch
A dated group of the same ingredient — the six bananas bought Tuesday are one batch, the three from Friday are another. Consumed oldest-first.
Level item
Jars, bottles, spice tins — anything that doesn't have a discrete count. Tracked as a 0–100 fill bar. Restock refills to 100, use decrements by 10.
The seven weights
Salt, Acid, Sweet, Fat, Bitter, Heat, Umami. The forces on the see-saw. Every dish is a balance among them.
See-saw
The mental model at the heart of the app. If a dish tips one way (too rich), you add its opposite (acid) to balance — never more of the same.
Freshness tone
The color of a tile's border. Green = healthy time left. Amber = ≤3d or ≤25% of shelf life. Red = ≤1d — use tonight or lose it.
Frozen state
A toggle on the edit sheet. Swaps the icon to its frozen variant and re-stamps the batch to +90 days. Thaw and it becomes +3 days.
§ 05 · Talk

Cook from what's
already there.

Counterweight is being built by Mike Perina at tangent.build — a household kitchen tool that any improv cook can point their family at. Early access is limited by design.