Inspiration
Recipe sites start from a grocery list. A weeknight starts from a half loaf, a bunch of kale, and a squash on the counter, and sometimes from what a neighbor left on the step. The useful question is what should leave the kitchen tonight.
Fallow is that starting point. The name is the unplanted field: ground you did not sow, which still has something to eat. We built it for Hyperbloom October, a UI/UX and web design hackathon, around three nights the interface has to survive. Maya cooks after class and will not shop on the way home. Jonah shares a fridge and needs to see what is close to the bin, and what can be offered without a group chat. Amina reads more comfortably in large type and wants to leave rosemary on the step. Those are design constraints, not quotes from real people.
What it does
Fallow is a weeknight kitchen. It starts from the food you already have, the dates it will spoil, and a small porch of neighbor gifts, then walks you through one dinner at a time.
The kitchen lists what you have by fridge, pantry, and counter, sorted by use-by. "Use today" and "Use tomorrow" are written out. You can search, filter to Use soon or Keeps, and add an ingredient with a simple name so a meal can recognize it.
This week orders meals by what spoils first. Ready dinners come before meals that are one ingredient away. A gap names the neighbor who has it: Priya's ginger, Amina's rosemary, Leo's lemon, Sam's carrots. Claim the ginger and carrot soup becomes cookable. If you already have that food, the claim is noted on what is in the kitchen.
Cook mode shows one step. Arrow keys move it. Space starts, pauses, and resumes a timer that announces itself, with a chime you can turn off. The page asks the phone to keep the screen awake. On the last step you can clear the perishables that meal used, or leave them. Tonight's plan updates either way.
Share treats an extra as a gift with a time and a place. Offering it removes it from your kitchen. Taking it back puts it back. Plan is seven nights as an agenda: Tonight, Tomorrow, then the weekday. Filling open nights only uses meals you can already cook. You can still choose one that is waiting on a neighbor.
Reading holds text size, a paper theme, a night theme, high contrast, reduced motion, and timer sound. The kitchen, the plan, and those settings stay in this browser. Salt and water are assumed. Everything else is named. There is no account.
How we built it
Fallow is a frontend prototype in React 19, TypeScript, and Vite. There is no server. State lives in one reducer and is saved to localStorage under fallow-kitchen-v1. The URL hash is the route (#week, #kitchen, #cook, #share, #plan), so a refresh keeps your place in a recipe. A toast offers undo after adding, removing, offering, claiming, planning, or finishing dinner.
Matching is plain functions. Food due today or tomorrow is urgent. Food due within four days is soon. Everything else keeps. Six sample recipes match on simple names. Ready meals sort ahead of incomplete ones, then by the soonest perishable they use, then by time. A missing ingredient is paired with an unclaimed neighbor offer when the names match.
Cook mode is its own session. One instruction is on screen, with the ingredients that step uses marked present or missing. The countdown is anchored to a timestamp so a pause stays honest. Step changes and timer start, pause, resume, and finish are announced in a live region. The chime is three quiet sine tones from the Web Audio API. While a recipe is open, the page requests a screen wake lock and asks again if the tab becomes visible. Arrow keys are ignored inside dialogs and form fields, and Space does not steal the timer from a focused button.
The week is a vertical agenda so large type still has a line to sit on. Every choice is a button. Focus is visible, controls are labeled, and the main region takes focus when the view changes. Urgency is a sentence. Color repeats it. Themes, type scale, and reduced motion are set on the document so the whole kitchen follows.
Challenges we ran into
The order of information was the hard part. Seven cramped columns collapse once type gets large, and a recipe grid sorted by appetite hides the bread that spoils today. The week became an agenda, and spoilage ranks the meals.
Cook mode had to work with wet hands and with a screen reader at the same time. One instruction, large Previous and Next, and a timer that speaks. A repeated announcement string gets swallowed, so each message is cleared and set again on the next frame. Wake Lock is best-effort: some browsers refuse it, and the lock drops when the tab is hidden.
Inventory had to stay consistent with no backend. Offering removes food from the kitchen and remembers the original item so Take back can restore it. Claiming adds it to the counter with a short use-by, unless that name is already there. Finishing dinner can clear only the perishables that recipe used, and it writes the meal onto tonight. Undo has to put back the kitchen, the offers, the plan, and the step.
Exact names are deliberate and brittle. "Ginger" is recognizable. "Fresh ginger root" is not. The add form says so. We also kept a few easy patterns out: dragging looks like a kitchen and fails for the keyboard, and an account would put a login between someone and the step.
Accomplishments that we're proud of
You can walk a full night. Enter the kitchen, cook the meal that spoils first, clear what you used or leave it, claim Priya's ginger, and watch carrot soup move into the meals you can cook. The same path works from the keyboard, and a refresh keeps the step.
Reading settings are part of the product. Small, medium, and large type, paper, night, and high contrast, reduced motion, and a timer you can silence. The agenda still holds when the type is large, on a phone and on a wide screen.
The interface is specific about its limits. Sample neighbors are fictional. There are no nutrition claims and no medical advice. A gift has a neighbor, a place, and a time, so it feels like a porch. Changes announce themselves, and the ones that alter the kitchen can be undone.
What we learned
Inclusive design showed up in the structure. If the week is seven columns, large type has nowhere to go. If the only path is a drag, the kitchen is closed to the keyboard. If color is the only sign that bread spoils today, that sign is missing for a lot of people.
Starting from the fridge changed every screen after it: the headline, the sort, the gap line that names a neighbor, and the last step that asks whether to clear the kale. A quiet product is a set of choices you can point at.
Local-first was enough for the hackathon and honest about what we had not built. The sample neighbors let us design claim, offer, and take-back without pretending there was a network behind the blue tin by the door.
What's next for Fallow
A real porch. Priya, Amina, Leo, and Sam exist only in this browser. Next is a small shared board for one building or one block: a gift, a time, a place, and a way to take it back, still without a feed or an account standing in front of it.
Name matching that forgives ordinary kitchen language, so "ginger root" and "Ginger" meet. A shared use-by list for two people using one fridge. More recipes, still ordered by what should be used first. The cook card already prints. The surface we want to keep tuning is a phone propped by the stove, with one step on screen and the display staying awake.
Log in or sign up for Devpost to join the conversation.