# MeltMind JSON Authoring Guide This guide explains every JSON file inside `data/meltmind/`, what information belongs in it, and how detailed each answer should be. You may continue answering the easier Markdown forms inside `answers/`. Edit the JSON files directly only when you are comfortable with JSON syntax. ## JSON basics ### Text values Text must be inside double quotes: ```json "plain_explanation": "A warm, fudgy brownie with a soft centre." ``` Use one or two factual sentences for short explanations. Detailed descriptions may contain several sentences. ### Numbers Numbers must not use quotes, currency symbols, commas, or percentage signs: ```json "price_inr": 30, "serves_min": 1, "comfort_food_score": 90 ``` ### Yes, no, and unknown Use real JSON booleans when a field expects yes or no: ```json "made_to_order": true, "easy_to_share": false, "premium_add_on": null ``` Use `null` when a factual value has not been verified. Do not write `"null"`, `"unknown"`, or an empty string in boolean or numeric fields. Some dietary fields intentionally use the controlled text values `"yes"`, `"no"`, and `"unknown"`. ### Lists Use arrays for multiple values: ```json "textures": [ "gooey", "soft", "slightly crunchy" ] ``` Do not write comma-separated lists inside one string: ```json "textures": "gooey, soft, crunchy" ``` ### IDs IDs connect information across files. Use lowercase snake case: ```json "product_id": "pistachio_royale", "ingredient_id": "pistachio_cream", "add_on_id": "extra_chocolate_sauce" ``` References must exactly match the ID used in the source file. ### Dates Use `YYYY-MM-DD`: ```json "last_verified_date": "2026-06-10" ``` ### Duplicating entries When adding another product, ingredient, FAQ, example, or test: 1. Copy the complete object between `{` and `}`. 2. Add a comma after the previous object. 3. Change its ID and contents. 4. Keep all field names unchanged. ## How detailed should information be? Prefer specific, decision-useful facts. Weak: ```json "plain_explanation": "A tasty brownie." ``` Strong: ```json "plain_explanation": "A single-serve fudgy brownie with a soft centre and a lightly crisp top, designed for customers who want a straightforward chocolate dessert." ``` Weak: ```json "best_for_customer_preferences": [ "chocolate lovers" ] ``` Strong: ```json "best_for_customer_preferences": [ "customers who want a classic chocolate-first dessert", "customers who prefer a soft centre with a lightly crisp top", "first-time MeltRoom customers who want a simple starting point" ] ``` Do not add promotional claims that cannot be verified. --- # File Guide ## `product_knowledge.json` ### Purpose This is the most important MeltMind knowledge file. It contains deep facts for every product and powers: - Product explanations - Product comparisons - Preference matching - Allergy and dietary answers - Pairings and add-ons - Serving recommendations Create one complete object inside `products` for every product in `data/menu.json`. Do not enter prices or image paths here. ### `product_id` and `product_name` - `product_id`: Stable snake-case identifier used by other files. - `product_name`: Must exactly match the name in `data/menu.json`. ### `identity` - `tagline`: Short emotional line, ideally 3–8 words. - `plain_explanation`: Literal explanation for someone unfamiliar with it. - `sales_description`: Attractive but truthful description. - `what_makes_it_different`: Concrete distinction from similar products. - `signature_components`: Most defining ingredients or components. - `customer_friendly_keywords`: Searchable words customers may use. - `common_customer_names`: Nicknames, shortened names, or common misspellings. ### `sensory_profile` - `sweetness`: `low`, `balanced`, `high`, or `very_high`. - `chocolate_intensity`: `none`, `low`, `medium`, `high`, or `very_high`. - `richness`: Same intensity scale. - `flavour_notes`: All noticeable flavours. - `primary_flavour`: The most dominant flavour. - `secondary_flavours`: Supporting flavours. - `textures`: Every meaningful texture experienced while eating. - `temperature_served`: Example: `"warm"` or `"chilled"`. - `aroma_notes`: Smells noticeable before or while eating. - `aftertaste`: What remains after the bite. - `portion_feeling`: Example: `"light snack"`, `"satisfying"`, or `"very filling"`. ### `composition` Enter what is physically inside the product: - `ingredient_ids`: IDs from `ingredients.json`. - `base`: Main foundation. - `filling`: Interior filling, or an empty string if none. - `toppings`: Visible finishing components. - `sauces`: Included sauces. - `contains_ice_cream`: `true`, `false`, or `null`. - `preparation_summary`: Clear preparation explanation. - `made_to_order`: `true`, `false`, or `null`. ### `serving` - `serves_min` and `serves_max`: Realistic numeric serving range. - `portion_description`: Explain portion size in customer-friendly language. - `easy_to_share`: Whether it can practically be shared. - `travel_friendly`: Whether it survives transport well. - `best_eaten_within_minutes`: Number of minutes, or `null`. - `storage_guidance`: Verified storage and reheating advice. The public `data/menu.json` file also contains `can_be_served_for`. Enter a short customer-facing range such as `"1 person"`, `"1-2 people"`, or `"2-3 people"`. This value should agree with `serves_min` and `serves_max`. ### `dietary_and_safety` This section must be verified by MeltRoom. - Dietary fields use `"yes"`, `"no"`, or `"unknown"`. - `allergen_ids`: Confirmed allergens from `ingredients.json`. - `possible_cross_contact_allergen_ids`: Possible kitchen cross-contact. - `removable_allergen_ids`: Allergens that can genuinely be removed. - `non_removable_allergen_ids`: Allergens inherent to the product. - `allergy_customer_message`: Exact approved response MeltMind should provide. ### `recommendation_profile` Use descriptive phrases rather than isolated words: - `best_for_moods`: Examples: `"comfort after a stressful day"`. - `best_for_occasions`: Examples: `"casual solo treat"`, `"birthday sharing"`. - `best_for_group_types`: Examples: `"one person"`, `"friends sharing"`. - `best_for_customer_preferences`: Specific reasons someone would like it. - `avoid_for_preferences`: Reasons it may be unsuitable. - Score fields should be numbers from `0` to `10`. ### `pairing_and_customization` Use exact IDs: - `compatible_add_on_ids`: Add-ons that can be ordered with it. - `recommended_add_on_ids`: Best add-ons, not every possible add-on. - `recommended_product_ids`: Products that pair well. - `not_recommended_with_product_ids`: Pairings that are redundant or poor. - `customization_notes`: Real customization possibilities. - `upsell_reason`: Honest reason an add-on improves the experience. ### `comparison_guidance` This helps Chat with MeltMind answer questions like “Which is sweeter?” - List similar, richer, lighter, sweeter, and less-sweet product IDs. - Write full comparison facts in `comparison_talking_points`. ### `owner_notes` Record real staff and customer knowledge: - Why it sells well - Common praise - Common confusion - Common objections - How experienced staff explains it - Who verified the information and when ### Example ```json { "product_id": "example_brownie", "product_name": "Example Brownie", "identity": { "tagline": "The classic chocolate beginning", "plain_explanation": "A single-serve fudgy brownie with a soft centre and lightly crisp top.", "sales_description": "A warm, chocolate-first classic made for straightforward comfort.", "what_makes_it_different": "It has no heavy toppings, making the brownie itself the focus.", "signature_components": [ "fudgy brownie base" ], "customer_friendly_keywords": [ "classic", "simple", "fudgy" ], "common_customer_names": [ "original brownie" ] } } ``` --- ## `ingredients.json` ### Purpose Contains the ingredient and allergen truth used for explanations and safety checks. ### `allergen_catalogue` Create one entry for every relevant allergen: - `allergen_id`: Stable ID used across all files. - `display_name`: Customer-friendly name. - `customer_warning`: Approved general warning. - `cross_contact_possible`: `true`, `false`, or `null`. ### `ingredients` Create entries for meaningful ingredients and prepared components, such as: - Brownie base - Chocolate sauce - Pistachio cream - Ice cream - Cookie crumble Fields: - `ingredient_type`: Example: `"base"`, `"sauce"`, `"topping"`, `"filling"`. - `plain_explanation`: What it is. - `why_meltroom_uses_it`: Why it matters to the product. - `flavour_contribution` and `texture_contribution`: Arrays of specific effects. - `quality_or_sourcing_notes`: Only verified quality or sourcing information. - `allergen_ids`: IDs from `allergen_catalogue`. - `dietary_labels`: Example: `"vegetarian"` or `"eggless"`. - `used_in_product_ids`: Every product containing it. - `can_be_removed_after_ordering`: Whether staff can omit it. - `customer_faq_notes`: Useful facts customers commonly ask about. Example: ```json { "ingredient_id": "example_chocolate_sauce", "name": "Example Chocolate Sauce", "ingredient_type": "sauce", "plain_explanation": "A smooth chocolate sauce added as a finishing drizzle.", "why_meltroom_uses_it": "It increases chocolate intensity and adds a glossy, soft finish.", "flavour_contribution": [ "deep chocolate" ], "texture_contribution": [ "smooth", "saucy" ], "quality_or_sourcing_notes": "", "allergen_ids": [ "milk" ], "dietary_labels": [ "vegetarian" ], "used_in_product_ids": [], "can_be_removed_after_ordering": true, "customer_faq_notes": [] } ``` --- ## `add_ons.json` ### Purpose Defines only the customizations customers can actually purchase. Enter one object for each add-on: - `add_on_id`: Stable snake-case ID. - `name`: Customer-facing name. - `price_inr`: Numeric price without `₹`. - `description`: What it adds. - `availability`: `available`, `seasonal`, `temporarily_unavailable`, or `unknown`. - `compatible_product_ids`: Exact products that support it. - `compatible_categories`: Categories that generally support it. - `incompatible_product_ids`: Exceptions. - Contribution fields: Specific flavour, texture, sweetness, richness, and portion effects. - `allergen_ids`: Confirmed allergen IDs. - `best_for_preferences`: Who will enjoy it. - `avoid_for_preferences`: When not to recommend it. - `recommended_when`: Situations where it adds real value. - `upsell_message`: Honest customer-facing suggestion. - `premium_add_on`: `true`, `false`, or `null`. --- ## `business_profile.json` ### Purpose Contains approved facts Chat with MeltMind uses when answering questions about MeltRoom. ### Sections - `brand`: Identity, description, personality, differentiators, speciality, promise, and approved vocabulary. - `story`: Founder information, origin story, milestones, quote, and vision. - `quality`: Ingredient, preparation, freshness, packaging, and quality-control explanations. - `contact`: Exact contact links and address. - `service`: Operating hours, delivery areas, ordering channels, and payments. - `approved_short_answers`: Polished answers for the most frequent questions. - Verification fields: Who approved the file and when. For `operating_hours`, use clear strings: ```json "operating_hours": [ "Monday-Saturday: 12:00 PM-10:00 PM", "Sunday: Closed" ] ``` --- ## `operations_and_policies.json` ### Purpose Contains operational rules and safety boundaries. All information must be approved by MeltRoom. ### Sections - `ordering`: Minimum order, notice periods, customization, confirmation, and change rules. - `delivery_and_pickup`: Availability, areas, fees, estimates, and delays. - `returns_and_issues`: Cancellation, refund, incorrect order, damage, and reporting rules. - `food_safety`: Approved allergy disclaimer, storage, reheating, and consumption guidance. - `chatbot_boundaries`: Claims MeltMind must never make, topics requiring human help, and the exact handoff message. Use `null` for unknown numeric or boolean values. Keep policy explanations complete enough that MeltMind can answer without improvising. --- ## `recommendation_rules.json` ### Purpose Controls Design Your Perfect Melt. These rules are enforced by Python and take priority over language-model suggestions. ### `hard_constraints` These are rules that must never be violated. Keep safety and budget constraints as `true`. `maximum_add_on_budget_percentage` may be numeric when MeltRoom wants a percentage cap: ```json "maximum_add_on_budget_percentage": 20 ``` Use `null` when add-ons may use any portion of the customer's total budget: ```json "maximum_add_on_budget_percentage": null ``` The complete order must still respect `never_exceed_budget`. ### `portion_rules` Add multiple ranges for realistic group sizes: ```json { "group_size_min": 2, "group_size_max": 3, "recommended_total_servings_min": 2, "recommended_total_servings_max": 4, "variety_target": 2, "notes": "Recommend at least two different products when budget permits." } ``` ### `scoring_weights` Values represent relative importance. They do not have to total 100, but a larger number means greater influence. ### `mood_mapping` For each mood, add phrases customers use, preferred product attributes, avoided attributes, and the tone MeltMind should use when explaining the plan. ### `occasion_mapping` Define the variety, sharing, and premium expectations for birthdays, movie nights, gifts, solo treats, and other occasions. ### `plan_styles` These represent different plans MeltMind can offer, such as Best Match, Best Value, and Premium Experience. `weight_overrides` changes scoring for that specific plan. ### `upsell_rules` Set strict limits so upselling remains useful rather than aggressive. --- ## `faq.json` ### Purpose Contains approved direct answers for frequent questions. For every FAQ: - `faq_id`: Unique snake-case ID. - `category`: Example: `"menu"`, `"ordering"`, `"allergens"`, `"delivery"`. - `question`: Canonical question. - `alternate_questions`: Other ways customers ask the same thing. - `approved_answer`: Complete factual answer MeltMind may use. - Related IDs: Products and ingredients involved. - `related_policy_section`: Example: `"food_safety.allergy_disclaimer"`. - `follow_up_suggestions`: Helpful next questions or actions. - `requires_human_handoff`: Whether MeltMind should redirect the customer. - Verification fields. Create separate FAQ entries when two questions require meaningfully different answers. --- ## `language_dictionary.json` ### Purpose Helps MeltMind understand informal language, product nicknames, misspellings, and customer intent. ### Sections - `preference_phrases`: Group exact customer phrases by meaning. - `product_aliases`: Map nicknames and misspellings to product IDs. - `category_aliases`: Map informal category names. - `intent_examples`: Add many realistic messages for each request type. - `supported_languages`: Define supported languages and words that should not be translated. Use phrases customers genuinely say. Do not write model-generated variations unless they represent likely customer language. --- ## `customer_examples.json` ### Purpose Stores ideal examples that demonstrate how MeltMind should behave. These may later support prompts or fine-tuning. ### `chat_examples` - `customer_message`: Exact user message. - `conversation_context`: Earlier messages required to understand it. - `detected_intent`: Expected intent. - `facts_that_must_be_used`: Facts required in the answer. - `facts_that_must_not_be_claimed`: Hallucinations or unsafe claims to avoid. - `tools_that_should_be_called`: Expected tools such as `compare_products`. - `ideal_response`: Excellent final response. - `ideal_follow_up_question`: Helpful next question. - `ideal_actions`: Example: `"offer_add_to_basket"`. ### `designer_examples` Record the original request, expected structured preferences, required and forbidden products, add-ons, maximum total, and ideal explanation. Create examples for simple, vague, difficult, and safety-sensitive requests. --- ## `evaluation_cases.json` ### Purpose Contains tests, not teaching examples. These determine whether MeltMind is correct. ### Test types - `chat_tests`: Factual answers, comparisons, and tool behavior. - `designer_tests`: Budget, group, preference, availability, and allergen compliance. - `safety_tests`: Questions MeltMind must refuse or hand to a human. - `quality_targets`: Required overall quality metrics. Tests should be strict and difficult. Include cases where the correct behavior is to say that information is unknown. --- ## `customer_evidence.json` ### Purpose Stores anonymized real-world feedback and impact measurements. ### Sections - `testimonials`: Approved customer quotes. - `product_feedback`: Specific likes, dislikes, customer language, and business insights. - `impact_baseline`: Measurements before MeltMind. - `impact_after_meltmind`: The same measurements after customers use MeltMind. Never include private customer information without permission. For percentage fields, enter a number between `0` and `100` without `%`. --- # Recommended Workflow 1. Answer the Markdown forms naturally. 2. Verify ingredients, allergens, serving sizes, and policies. 3. Transfer verified facts into JSON. 4. Ensure all referenced IDs exist. 5. Validate JSON syntax. 6. Build recommendation tools. 7. Add realistic customer examples. 8. Add strict evaluation cases. 9. Measure real customer impact.