Join the community:
#bento on Matrix (matrix.ben-to.fr)
Support the project:
Ko-fi
Public Matrix room — open the link above in Element, FluffyChat, or any client (#bento:matrix.ben-to.fr).
An interactive recipe generator with pixel art, allowing you to create recipe variants from modular bases.
Bento is a web application that turns recipe creation into an interactive and fun experience. Users can create recipe variants by combining modular bases with specific ingredients and steps, all with a retro pixel art design.
The app works instantly, no signup or account needed.
- Choose your recipe base: cake, onigiri, empanada, etc.
- Select a variant: lemon cake, kimchi onigiri, veggie empanada, etc.
- Review ingredients: automatic combination of base + variant ingredients
- Follow steps: ordered sequence of preparation steps
- Export recipe: generate markdown or JSON format
- Each ingredient is represented by a pixel art icon
- Retro and playful design
- Modular recipe system with bases and variants
- Step-by-step recipe generation
The goal is not to save recipes but to let users:
- 📝 Generate recipes in markdown or JSON format
- 🎮 Have fun exploring recipe variants and combinations
- 🌱 Discover modular cooking concepts
- 📚 Learn about recipe structure and ingredient relationships
- Frontend: Vanilla JS/TS, HTML, CSS
- Hosting: Infomaniak
- Database: IndexedDB
- Runtime: Bun
- Style: All pixel art, retro
- UX: Intuitive and playful interface
- Responsive: Mobile and desktop friendly
- Eco-friendly: Optimized, local-first
- Privacy-respecting: No intrusive ads
- Minimalist: Simple and efficient stack
- Educational: Discover modular cooking concepts
This app demonstrates you can build a modern experience without a heavy framework:
- ⚡ Maximum performance - No framework overhead
- 📦 Minimal bundle - Only the code you need
- 🎯 Full control - No hidden "magic"
- 🚀 Fast startup - Bun + vanilla JS
- 🧠 Learning - Understand the fundamentals
bento/
├── app.ts # Main entry point
├── index.html # Main HTML page with templates
├── features/ # Feature-based architecture
│ ├── recipe/ # Recipe system (bases, variants, ingredients)
│ ├── router/ # Navigation management
│ ├── translate/ # Multi-language support
│ ├── export/ # Recipe export functionality
│ └── composer/ # Recipe composition interface
├── docs/ # Generated documentation
│ └── feature-documentation.md
├── scripts/ # Utility scripts
│ └── generate-feature-docs.ts
└── public/ # Static assets
└── style.css
Create recipes from bases and variants:
// Base recipe
const cakeBase = {
ingredients: [
'sugar_powder',
'butter_soft',
'eggs',
'flour_t55',
'baking_powder',
],
steps: [
{ id: 'melt_butter', order: 10 },
{ id: 'mix_butter_sugar', order: 20 },
{ id: 'add_flour_baking_powder', order: 40 },
],
}
// Variant recipe
const lemonCakeVariant = {
ingredients: ['lemon', 'lemon_juice'],
steps: [{ id: 'add_lemon_zest_juice', order: 30 }],
}Steps are automatically ordered and merged:
// Final recipe combines base + variant steps
const finalSteps = [
{ id: 'melt_butter', order: 10 },
{ id: 'mix_butter_sugar', order: 20 },
{ id: 'add_lemon_zest_juice', order: 30 }, // From variant
{ id: 'add_flour_baking_powder', order: 40 },
].sort((a, b) => a.order - b.order)Generate recipes in multiple formats:
// Export to Markdown
const markdown = recipe.toMd()
// Export to JSON
const json = recipe.toJson()Code organized by business features:
- Recipe: Base and variant management
- Router: Navigation management
- Export: Recipe export functionality
- Composer: Recipe composition interface
The project uses Cucumber for BDD tests, allowing you to describe behavior in natural language:
Feature: Recipe Generation
As a user
I want to create recipe variants
So that I can explore different cooking options
Scenario: Creating a lemon cake
When I select "cake" as base
And I choose "lemon" variant
Then I should see the combined recipe
And the steps should be properly orderedFeature documentation is generated automatically:
bun run docs:features📖 See the feature documentation
- Bun installed
# Clone the project
git clone <repository>
cd bento
# Install dependencies
bun install# Start the dev server
bun run dev
# Run integration tests
bun run test:integration
# Generate documentation
bun run docs:features# Production build
bun run build| Script | Description |
|---|---|
bun run dev |
Development server |
bun run test:integration |
Cucumber integration tests |
bun run docs:features |
Generate feature documentation |
bun run build |
Production build |
bun run coverage |
Generate coverage report |
bun run badge:coverage |
Update the coverage badge |
bun run validate:recipes |
Validate recipe system integrity |
The coverage badge is generated automatically from test results:
# Generate the badge from current coverage
bun run badge:coverage
# Generate the badge with a specific coverage
bun run badge:coverage 85- 🟢 Bright Green: 90%+ (Excellent)
- 🟢 Green: 80-89% (Good)
- 🟡 Yellow Green: 70-79% (Acceptable)
- 🟡 Yellow: 60-69% (Needs improvement)
- 🟠 Orange: 50-59% (Low)
- 🔴 Red: <50% (Critical)
- No framework overhead
- Minimal bundle
- Ultra-fast startup with Bun
- Vanilla JavaScript/TypeScript code
- No abstract concepts to learn
- Full control over architecture
- Clear and predictable architecture
- BDD tests for quality
- Auto-generated documentation
- Recipe system validation to prevent regressions
- Easy to add new ingredients
- Modular structure
- No framework limitations
- Base ingredients: Sugar, butter, eggs, flour, baking powder
- Variants: Lemon cake, chocolate cake, vanilla cake
- Steps: Melt butter → Mix ingredients → Add flavorings → Bake
- Base ingredients: Rice, water, salt
- Variants: Kimchi onigiri, cheese onigiri
- Steps: Wash rice → Cook rice → Season → Shape
- Base ingredients: Flour, water, salt, oil
- Variants: Savory veggie empanada, black bean empanada
- Steps: Mix dough → Knead → Rest → Fill and cook
- Liquids: Water, lemon juice, oils
- Powders: Salt, sugar, spices, baking powder
- Fats: Butter, margarine
- Grains: Rice, flour varieties
- Vegetables: Onions, peppers, corn
- Proteins: Eggs, beans, tempeh
Join #bento on Matrix — same invitation link as in the page header (project home server).
Please read the Contributing Guide for detailed instructions, naming conventions, feature structure, and workflow before opening a pull request.
- Fork the project
- Create a feature branch (
git checkout -b feature/NewIngredient) - Commit your changes (
git commit -m 'Add new ingredient') - Push to the branch (
git push origin feature/NewIngredient) - Open a Pull Request
This project is MIT licensed. See the LICENSE file for details.
Kazerlelutin
- 🎨 Gif creator
- ⌨️ JavaScript developer
- 🌐 Portfolio