Inspiration
Having ingredients does not always mean knowing what to cook. We often repeat familiar meals while overlooking dishes from other cultures that use the same ingredients.
Cooksy started with a question: What could the world’s kitchens teach us to make with what we already have? From Kenyan favourites to unfamiliar regional dishes, we wanted to make culinary discovery practical—from choosing a meal to cooking it.
What it does
Cooksy turns available ingredients into a guided cooking experience:
- Build your pantry: type ingredients naturally or upload a photo, then review and confirm the names.
- Explore or discover: browse 15 culinary regions or discover meals worldwide.
- Compare five suggestions: see which ingredients you have and which essentials are missing.
- Choose a dish: receive a full recipe with quantities and ordered instructions.
- Preview and cook: review nutrition estimates, request an AI-generated serving image and follow step-by-step cook-along guidance.
One shared pantry connects the experience, so users can switch between exploration and discovery without entering their ingredients again.
How we built it
Jac is the foundation of Cooksy—from the interface to the culinary graph and application logic.
We model ingredients, recipes and culinary traditions as nodes connected by typed edges. Recipe requirements carry quantities and preparation details, while ordered step relationships support the cooking experience.
Jac walkers perform the graph operations: retrieving culinary context, enriching meal options, matching available ingredients, assembling selected recipes and managing cooking sessions. Ingredient coverage and ranking are calculated in Jac rather than delegated to the model.
For culinary reasoning, Jac’s by llm functions connect to OpenAI through typed inputs and structured outputs. The LLM proposes dishes and interprets regional context; Jac validates those proposals before they enter the workflow. Discovery checks graph memory first, requests additional candidates when needed and prepares a full recipe only after the user selects a dish.
The frontend is also written in Jac, compiling into a React interface. Typed server functions connect pantry review, discovery, recipe details and cook-along controls to the backend.
Specialised image inference runs in a companion Hugging Face Space:
- MobileNetV3 Small suggests ingredient labels from photographs.
- Stable Diffusion XL on ZeroGPU generates illustrative serving previews.
Small Python adapters connect these services to Cooksy. Graph traversal, orchestration, validation, matching, nutrition arithmetic and cooking-state transitions remain in Jac.
Nutrition combines sourced USDA reference values with optional, labelled AI estimates for missing information. Jac calculates ingredient totals and per-serving values while preserving unknowns and distinguishing estimates from reference data.
Challenges we ran into
Recognising regional dishes. Early suggestions leaned toward generic combinations rather than established local dishes. We improved the model guidance to prioritise local names and defining preparations, including considering githeri for maize and beans in a Kenyan context.
Debugging hosted responses. Larger JSON responses failed in the JacHammer preview despite successful server requests. Support helped resolve this by disabling response compression.
Hosting image models. The sandbox struggled with local image-model dependencies. Moving inference to Hugging Face allowed photo recognition and SDXL previews to work without loading those models into Cooksy’s server.
Handling uncertainty. Photo suggestions require correction and confirmation, generated images may differ from the dish, and nutrition estimates clearly identify assumptions and missing information.
Accomplishments that we're proud of
We built a connected journey from ingredients to global discovery, recipe selection and guided cooking.
Both Hugging Face photo recognition and SDXL serving-image generation have worked through Cooksy. The application combines a shared pantry, 15 culinary regions and graph-backed matching with structured LLM reasoning.
We are particularly proud that Jac carries the application across the frontend, server operations, graph model and cooking workflow, with Python limited to specialised image-service adapters.
The latest implementation passed 59 Jac tests, compiler checks, a client build and browser checks covering discovery, nutrition, cooking and mobile layouts. Automated inference tests use mocked responses; model accuracy still needs broader evaluation.
What we learned
An agentic application needs clear responsibilities. The LLM contributes culinary knowledge, Jac manages relationships and calculations, and users confirm uncertain inputs.
Working with Jac taught us to express application behaviour through graph relationships and walkers. The same ingredient and recipe relationships support discovery, matching, recipe preparation and nutrition calculations.
Regional context matters: familiar ingredients should lead to culturally meaningful suggestions. We also learned to treat model hosting as a separate engineering concern and design useful recovery paths when services are unavailable.
What's next for Cooksy
We want to:
- Improve food-specific photo recognition.
- Evaluate regional recipes with local cooks.
- Expand nutrition coverage.
- Add durable personal recipe storage.
- Improve image-service availability and caching.
Shared GPU queues and quotas currently affect image generation, while server restarts clear recipe and preview caches. Improving those foundations will help Cooksy become a more dependable everyday cooking companion.
Our direction remains simple: Your Ingredients. The World’s Kitchens.
Log in or sign up for Devpost to join the conversation.