{"id":51040685,"url":"https://github.com/kazerlelutin/bento","last_synced_at":"2026-06-22T10:33:59.351Z","repository":{"id":291178756,"uuid":"973358408","full_name":"kazerlelutin/bento","owner":"kazerlelutin","description":"Bento generator","archived":false,"fork":false,"pushed_at":"2026-04-27T14:57:53.000Z","size":1467,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-27T16:28:55.424Z","etag":null,"topics":["bun","cook","generator","pixel-art"],"latest_commit_sha":null,"homepage":"https://ben-to.fr/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kazerlelutin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-26T20:14:33.000Z","updated_at":"2026-04-27T14:59:51.000Z","dependencies_parsed_at":"2025-06-26T23:08:02.884Z","dependency_job_id":"a51d6b14-6703-45ed-a90f-fc2616891b85","html_url":"https://github.com/kazerlelutin/bento","commit_stats":null,"previous_names":["kazerlelutin/bento"],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/kazerlelutin/bento","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazerlelutin%2Fbento","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazerlelutin%2Fbento/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazerlelutin%2Fbento/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazerlelutin%2Fbento/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kazerlelutin","download_url":"https://codeload.github.com/kazerlelutin/bento/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazerlelutin%2Fbento/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34645684,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","cook","generator","pixel-art"],"created_at":"2026-06-22T10:33:58.411Z","updated_at":"2026-06-22T10:33:59.338Z","avatar_url":"https://github.com/kazerlelutin.png","language":"HTML","funding_links":["https://ko-fi.com/kazerlelutin","https://ko-fi.com/V7V46KBQ9"],"categories":[],"sub_categories":[],"readme":"# 🍱 BENTO - Interactive Recipe Generator\n\n**Join the community:**  \n[#bento on Matrix (matrix.ben-to.fr)](https://matrix.to/#/#bento:matrix.ben-to.fr)\n\n**Support the project:**  \n[Ko-fi](https://ko-fi.com/kazerlelutin)\n\n_Public Matrix room — open the link above in Element, FluffyChat, or any client (`#bento:matrix.ben-to.fr`)._\n\n[![Bun](https://img.shields.io/badge/Runtime-Bun-000000?style=for-the-badge\u0026logo=bun)](https://bun.sh/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Tests](https://img.shields.io/badge/Tests-Cucumber-23D96C?style=for-the-badge\u0026logo=cucumber\u0026logoColor=white)](https://cucumber.io/)\n[![License](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\n\n[![Coverage](https://img.shields.io/badge/Coverage-93%25-brightgreen?style=for-the-badge)](https://github.com/kazerlelutin/bento)\n[![Build Status](https://img.shields.io/badge/Build-Passing-brightgreen?style=for-the-badge)](https://github.com/kazerlelutin/bento)\n[![Dependencies](https://img.shields.io/badge/Dependencies-Up%20to%20date-brightgreen?style=for-the-badge)](https://github.com/kazerlelutin/bento)\n\n\u003e An interactive recipe generator with pixel art, allowing you to create recipe variants from modular bases.\n\n## 🎌 Concept\n\n**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.\n\n## 🧭 How it works\n\n### ✨ **No account required**\n\nThe app works instantly, no signup or account needed.\n\n### 🎯 **Guided journey**\n\n1. **Choose your recipe base**: cake, onigiri, empanada, etc.\n2. **Select a variant**: lemon cake, kimchi onigiri, veggie empanada, etc.\n3. **Review ingredients**: automatic combination of base + variant ingredients\n4. **Follow steps**: ordered sequence of preparation steps\n5. **Export recipe**: generate markdown or JSON format\n\n### 🎨 **Visual experience**\n\n- Each ingredient is represented by a pixel art icon\n- Retro and playful design\n- Modular recipe system with bases and variants\n- Step-by-step recipe generation\n\n## 📤 Goal: Create, not store\n\nThe goal is **not to save recipes** but to let users:\n\n- 📝 **Generate recipes** in markdown or JSON format\n- 🎮 **Have fun** exploring recipe variants and combinations\n- 🌱 **Discover** modular cooking concepts\n- 📚 **Learn** about recipe structure and ingredient relationships\n\n## 🧠 Technology \u0026 Values\n\n### 🛠️ **Tech stack**\n\n- **Frontend**: Vanilla JS/TS, HTML, CSS\n- **Hosting**: Infomaniak\n- **Database**: IndexedDB\n- **Runtime**: Bun\n\n### 🎨 **Design**\n\n- **Style**: All pixel art, retro\n- **UX**: Intuitive and playful interface\n- **Responsive**: Mobile and desktop friendly\n\n### 🌱 **Values**\n\n- **Eco-friendly**: Optimized, local-first\n- **Privacy-respecting**: No intrusive ads\n- **Minimalist**: Simple and efficient stack\n- **Educational**: Discover modular cooking concepts\n\n## 🚀 Why No Framework?\n\nThis app demonstrates you can build a modern experience **without a heavy framework**:\n\n- ⚡ **Maximum performance** - No framework overhead\n- 📦 **Minimal bundle** - Only the code you need\n- 🎯 **Full control** - No hidden \"magic\"\n- 🚀 **Fast startup** - Bun + vanilla JS\n- 🧠 **Learning** - Understand the fundamentals\n\n## 📁 Architecture\n\n```\nbento/\n├── app.ts                 # Main entry point\n├── index.html             # Main HTML page with templates\n├── features/              # Feature-based architecture\n│   ├── recipe/            # Recipe system (bases, variants, ingredients)\n│   ├── router/            # Navigation management\n│   ├── translate/         # Multi-language support\n│   ├── export/            # Recipe export functionality\n│   └── composer/          # Recipe composition interface\n├── docs/                  # Generated documentation\n│   └── feature-documentation.md\n├── scripts/               # Utility scripts\n│   └── generate-feature-docs.ts\n└── public/                # Static assets\n    └── style.css\n```\n\n## 🔧 Main Features\n\n### 1. **Modular Recipe System**\n\nCreate recipes from bases and variants:\n\n```typescript\n// Base recipe\nconst cakeBase = {\n  ingredients: [\n    'sugar_powder',\n    'butter_soft',\n    'eggs',\n    'flour_t55',\n    'baking_powder',\n  ],\n  steps: [\n    { id: 'melt_butter', order: 10 },\n    { id: 'mix_butter_sugar', order: 20 },\n    { id: 'add_flour_baking_powder', order: 40 },\n  ],\n}\n\n// Variant recipe\nconst lemonCakeVariant = {\n  ingredients: ['lemon', 'lemon_juice'],\n  steps: [{ id: 'add_lemon_zest_juice', order: 30 }],\n}\n```\n\n### 2. **Ordered Step System**\n\nSteps are automatically ordered and merged:\n\n```typescript\n// Final recipe combines base + variant steps\nconst finalSteps = [\n  { id: 'melt_butter', order: 10 },\n  { id: 'mix_butter_sugar', order: 20 },\n  { id: 'add_lemon_zest_juice', order: 30 }, // From variant\n  { id: 'add_flour_baking_powder', order: 40 },\n].sort((a, b) =\u003e a.order - b.order)\n```\n\n### 3. **Recipe Export**\n\nGenerate recipes in multiple formats:\n\n```typescript\n// Export to Markdown\nconst markdown = recipe.toMd()\n\n// Export to JSON\nconst json = recipe.toJson()\n```\n\n### 4. **Feature-based Architecture**\n\nCode organized by business features:\n\n- **Recipe**: Base and variant management\n- **Router**: Navigation management\n- **Export**: Recipe export functionality\n- **Composer**: Recipe composition interface\n\n## 🧪 BDD Tests\n\nThe project uses Cucumber for BDD tests, allowing you to describe behavior in natural language:\n\n```gherkin\nFeature: Recipe Generation\n  As a user\n  I want to create recipe variants\n  So that I can explore different cooking options\n\n  Scenario: Creating a lemon cake\n    When I select \"cake\" as base\n    And I choose \"lemon\" variant\n    Then I should see the combined recipe\n    And the steps should be properly ordered\n```\n\n### Documentation Generation\n\nFeature documentation is generated automatically:\n\n```bash\nbun run docs:features\n```\n\n📖 **[See the feature documentation](./docs/feature-documentation.md)**\n\n## 🛠️ Installation \u0026 Usage\n\n### Prerequisites\n\n- [Bun](https://bun.sh/) installed\n\n### Installation\n\n```bash\n# Clone the project\ngit clone \u003crepository\u003e\ncd bento\n\n# Install dependencies\nbun install\n```\n\n### Development\n\n```bash\n# Start the dev server\nbun run dev\n\n# Run integration tests\nbun run test:integration\n\n# Generate documentation\nbun run docs:features\n```\n\n### Build\n\n```bash\n# Production build\nbun run build\n```\n\n## 📊 Available Scripts\n\n| Script                     | Description                      |\n| -------------------------- | -------------------------------- |\n| `bun run dev`              | Development server               |\n| `bun run test:integration` | Cucumber integration tests       |\n| `bun run docs:features`    | Generate feature documentation   |\n| `bun run build`            | Production build                 |\n| `bun run coverage`         | Generate coverage report         |\n| `bun run badge:coverage`   | Update the coverage badge        |\n| `bun run validate:recipes` | Validate recipe system integrity |\n\n## 🏷️ Badges \u0026 Quality\n\n### Coverage Badges\n\nThe coverage badge is generated automatically from test results:\n\n```bash\n# Generate the badge from current coverage\nbun run badge:coverage\n\n# Generate the badge with a specific coverage\nbun run badge:coverage 85\n```\n\n### Badge Colors\n\n- 🟢 **Bright Green**: 90%+ (Excellent)\n- 🟢 **Green**: 80-89% (Good)\n- 🟡 **Yellow Green**: 70-79% (Acceptable)\n- 🟡 **Yellow**: 60-69% (Needs improvement)\n- 🟠 **Orange**: 50-59% (Low)\n- 🔴 **Red**: \u003c50% (Critical)\n\n## 🎯 Approach Advantages\n\n### ✅ **Performance**\n\n- No framework overhead\n- Minimal bundle\n- Ultra-fast startup with Bun\n\n### ✅ **Simplicity**\n\n- Vanilla JavaScript/TypeScript code\n- No abstract concepts to learn\n- Full control over architecture\n\n### ✅ **Maintainability**\n\n- Clear and predictable architecture\n- BDD tests for quality\n- Auto-generated documentation\n- Recipe system validation to prevent regressions\n\n### ✅ **Scalability**\n\n- Easy to add new ingredients\n- Modular structure\n- No framework limitations\n\n## 🌱 Supported Recipes\n\n### 🍰 **Cake Base**\n\n- **Base ingredients**: Sugar, butter, eggs, flour, baking powder\n- **Variants**: Lemon cake, chocolate cake, vanilla cake\n- **Steps**: Melt butter → Mix ingredients → Add flavorings → Bake\n\n### 🍙 **Onigiri Base**\n\n- **Base ingredients**: Rice, water, salt\n- **Variants**: Kimchi onigiri, cheese onigiri\n- **Steps**: Wash rice → Cook rice → Season → Shape\n\n### 🥟 **Empanada Base**\n\n- **Base ingredients**: Flour, water, salt, oil\n- **Variants**: Savory veggie empanada, black bean empanada\n- **Steps**: Mix dough → Knead → Rest → Fill and cook\n\n### 🧂 **Ingredient Categories**\n\n- **Liquids**: Water, lemon juice, oils\n- **Powders**: Salt, sugar, spices, baking powder\n- **Fats**: Butter, margarine\n- **Grains**: Rice, flour varieties\n- **Vegetables**: Onions, peppers, corn\n- **Proteins**: Eggs, beans, tempeh\n\n## 💬 Community\n\n**[Join #bento on Matrix](https://matrix.to/#/#bento:matrix.ben-to.fr)** — same invitation link as in the page header (project home server).\n\n## 🤝 Contributing\n\nPlease read the [Contributing Guide](./CONTRIBUTING.md) for detailed instructions, naming conventions, feature structure, and workflow before opening a pull request.\n\n1. Fork the project\n2. Create a feature branch (`git checkout -b feature/NewIngredient`)\n3. Commit your changes (`git commit -m 'Add new ingredient'`)\n4. Push to the branch (`git push origin feature/NewIngredient`)\n5. Open a Pull Request\n\n## 📝 License\n\nThis project is MIT licensed. See the `LICENSE` file for details.\n\n## 👨‍💻 Author\n\n**Kazerlelutin**\n\n- 🎨 [Gif creator](https://giphy.com/kazerlelutin)\n- ⌨️ JavaScript developer\n- 🌐 [Portfolio](https://kazerlelutin.space/)\n\n---\n\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/V7V46KBQ9)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkazerlelutin%2Fbento","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkazerlelutin%2Fbento","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkazerlelutin%2Fbento/lists"}