HTML Reports
The HTML Report System lets you create professional reports, labels, and specification sheets from your recipes and ingredients. Using customizable templates with a simple tag syntax, you can generate pick lists, nutrition labels, ingredient declarations, and more.
Whether you need to print product labels for commercial ice cream production or create a detailed specification sheet for a recipe, the report system gives you full control over the output format.

Where to Access Reports
Reports can be generated from several places in the application, depending on what data you want to include:
| Location | Report Type | Description |
|---|---|---|
| Recipes page | Recipe | Select a single recipe to generate a report for that recipe |
| Recipes page | Recipe (multiple) | Select multiple recipes to generate a combined report |
| Recipe Editor | Recipe | Generate a report for the recipe you’re currently editing |
| Ingredients page | Ingredient | Select a single ingredient for a detailed ingredient report |
| Ingredients page | Ingredient Comparison | Select multiple ingredients to generate a comparison table |
| Recipe Sets (Production) | Recipe Set | Generate pick lists, combined labels, or recipe cards for a production batch |
Additional report locations may be added in future updates, such as reports for Production batches.

Generate Report Dialog
When you click to generate a report, the Generate Report dialog appears.

Template Selection Choose from available templates using the dropdown. Default templates provided by the system are marked with a ⭐ star icon. Your custom templates appear without a star.
Format Settings Click “Format Settings” to expand additional options:
- Decimal Separator: Choose between period (1.23) or comma (1,23) for numeric values. This is useful for different regional formats.
Actions
- Generate: Creates the report using the selected template and opens the result
- Edit Templates: Opens the Template Editor to create or modify templates
- Close: Closes the dialog without generating
The system remembers your last selected template for each report type.
Report Output
After generating a report, the result dialog displays your rendered report with several output options:

- Copy HTML: Copies the formatted HTML to your clipboard. Paste into Word, email clients, or other applications that support rich formatting.
- Copy Text: Copies a plain text version with HTML tags removed.
- Print: Opens your browser’s print dialog. The report opens in a new window optimized for printing.
- Close: Returns to the previous screen.
Tip: When pasting HTML into Word or Google Docs, use “Paste” (not “Paste as Plain Text”) to preserve formatting.
Template Editor
The Template Editor is where you create and customize your report templates. It provides a full HTML editor with tools to help you build templates without memorizing the tag syntax.

Editor Layout
Top Toolbar
- Template dropdown: Select which template to edit
- Template Name: Edit the name of your template (disabled for default templates)
- New: Create a new blank template
- Save: Save changes to the current template
- Copy: Create a copy of the current template (useful for customizing defaults)
- Delete: Delete the current template (cannot delete default templates)
- AI Generate: Use AI to generate a template based on your description
- Copy AI Prompt: Copy a prompt you can use with external AI tools
- Close: Close the editor and return to the previous screen
Left Panel – HTML Editor A full-featured code editor (Monaco Editor) for writing your HTML template. Features include:
- Syntax highlighting for HTML
- Line numbers
- Undo/Redo support
- Word wrap
Right Panel – DataSet Browser Browse all available data fields you can use in your template:
- Table dropdown: Switch between different data tables (Recipe, RecipeData, Ingredients, etc.)
- Filter field: Search for specific fields by name
- Field list: Shows field names and example values from your current data
- Double-click any field to insert its tag at your cursor position in the editor
The panel can be collapsed using the arrow button to give more space to the editor.
Bottom Toolbar
- Formatting buttons: Bold, Italic, Underline – wraps selected text with HTML tags
- Insert buttons: Table structure, Table row, Line break
- Insert Repeat Block: Appears when viewing a multi-row table – inserts a REPEAT block template
- Preview: Opens a preview of your template with real data

Template Syntax Reference
Templates use a mustache-style tag syntax with double curly braces. Tags are replaced with actual data when the report is generated.
Basic Tags
Insert a value from the data:
{{TableName.FieldName}}
Example:
<h2>{{Recipe.Name}}</h2>
<p>Total weight: {{Recipe.FinalWeight}} g</p>
Format Specifier for Decimals
Control the number of decimal places for numeric values:
{{TableName.FieldName:N}}
Where N is the number of decimal places (0, 1, 2, 3, etc.)
Example:
<p>PAC: {{RecipeData.PAC:1}}</p> <!-- Shows: 245.7 -->
<p>PAC: {{RecipeData.PAC:0}}</p> <!-- Shows: 246 -->
Pre-formatted Label Fields
Fields starting with lbl (like lblEU_Fat, lblUS_Calories) are pre-formatted with proper decimal places and units according to EU or US labeling regulations.
Important: Do NOT add units after lbl fields – they already include them!
<!-- Correct -->
<p>Fat: {{RecipeData.lblEU_Fat}}</p> <!-- Shows: 12.5 g -->
<!-- Wrong - will show double units -->
<p>Fat: {{RecipeData.lblEU_Fat}} g</p> <!-- Shows: 12.5 g g -->
Repeat Blocks
Loop over multi-row tables like Ingredients or RecipeSet:
{{#REPEAT:TableName}}
... content repeated for each row ...
{{/REPEAT:TableName}}
Example – Ingredient list:
<table>
<tr>
<th>Ingredient</th>
<th>Weight</th>
</tr>
{{#REPEAT:Ingredients}}
<tr>
<td>{{Ingredients.Name}}</td>
<td>{{Ingredients.Weight}} g</td>
</tr>
{{/REPEAT:Ingredients}}
</table>
Conditional Blocks
Show content only if a field has a value (not empty):
{{#IF:TableName.FieldName}}
... content shown only if field has a value ...
{{/IF:TableName.FieldName}}
Example – Show allergens only if present:
{{#IF:Recipe.Contains}}
<p><strong>Contains:</strong> {{Recipe.Contains}}</p>
{{/IF:Recipe.Contains}}
{{#IF:Recipe.MayContain}}
<p><strong>May contain traces of:</strong> {{Recipe.MayContain}}</p>
{{/IF:Recipe.MayContain}}
Combining Tags
You can combine different tag types in a single template:
<h1>{{Recipe.Name}}</h1>
<p>Net weight: {{Recipe.FinalWeight}} g</p>
<h3>Ingredients</h3>
{{#REPEAT:Ingredients}}
<p>{{Ingredients.Name}}: {{Ingredients.Weight:0}} g ({{Ingredients.WeightPercent:1}}%)</p>
{{/REPEAT:Ingredients}}
{{#IF:Recipe.Contains}}
<p><strong>Allergens:</strong> {{Recipe.Contains}}</p>
{{/IF:Recipe.Contains}}
<h3>Nutrition per 100g</h3>
<p>Energy: {{RecipeData.lblEU_EnergyKcal}}</p>
<p>Fat: {{RecipeData.lblEU_Fat}}</p>
Available Data Tables
The data available depends on the report type. Use the DataSet Browser in the Template Editor to explore all available fields and see example values.

Common Tables and Fields
Recipe (single row)
| Field | Description |
|---|---|
| Name | Recipe name |
| Info | Recipe description |
| MixWeight | Weight before processing (grams) |
| FinalWeight | Weight after evaporation (grams) |
| Contains | Standard allergens present |
| MayContain | Allergens that may be present as traces |
| IngredientsFormatted | Ingredient list with allergens highlighted in bold |
| Tags | Recipe tags |
RecipeData (single row – calculated values)
| Field | Description |
|---|---|
| lblEU_EnergyKcal | Energy in kcal (EU format with unit) |
| lblEU_Fat | Fat per 100g (EU format with unit) |
| lblEU_Carbohydrates | Carbohydrates per 100g (EU format with unit) |
| lblEU_Protein | Protein per 100g (EU format with unit) |
| lblEU_Salt | Salt per 100g (EU format with unit) |
| PAC | Freezing point depression (numeric) |
| POD | Relative sweetness (numeric) |
| MSNF | Milk solids non-fat (numeric) |
US format fields are also available (lblUS_Calories, lblUS_Fat, etc.)
Ingredients (multi-row – use with REPEAT)
| Field | Description |
|---|---|
| Name | Ingredient name |
| Category | Ingredient category |
| Weight | Weight in grams |
| WeightPercent | Percentage of total recipe |
| Cost | Cost for this amount |
| CostKg | Cost per kilogram |
RecipeSet (multi-row – use with REPEAT)
| Field | Description |
|---|---|
| Index | Row number (1, 2, 3…) |
| Name | Recipe name |
| Quantity | Number of units |
| UnitWeight | Weight per unit |
| TotalWeight | Total weight (Quantity × UnitWeight) |
| IngredientsFormatted | Formatted ingredient list for this recipe |
| Contains | Allergens for this recipe |
Tip: The DataSet Browser shows ALL available fields with their current values. Use the filter to quickly find fields by name.
Default Templates
The system includes several ready-to-use templates. You cannot edit default templates directly, but you can copy them to create your own customized version.
Recipe Set Templates
- Pick List: A simple table listing recipes with quantities and weights – perfect for production planning
- Recipe Cards: Individual cards for each recipe showing ingredients and allergens
- Compact Label: A combined label with nutrition facts and allergen information
Recipe Templates
- Recipe Label: Standard product label format
- Professional Specification Sheet: Comprehensive spec sheet with nutrition panels, ice cream science metrics, and composition data
Ingredient Templates
- Ingredient Data Sheet: Detailed report for a single ingredient
- Ingredient Comparison: Side-by-side comparison table for multiple ingredients
- Ingredient List: Simple list format for multiple ingredients

Creating Custom Templates
Starting from a Default Template
The easiest way to create a custom template is to start from an existing one:
- Select a default template from the dropdown
- Click Copy – this creates an editable copy
- Rename the template to something descriptive
- Modify the HTML as needed
- Click Preview to test your changes
- Click Save when satisfied
Building from Scratch
- Click New to create a blank template
- Give it a descriptive name
- Write your HTML using the tag syntax
- Use the DataSet Browser to find available fields – double-click to insert
- For multi-row tables (Ingredients, RecipeSet), click Insert Repeat Block to add the loop structure
- Use Preview frequently to check your progress
- Save your work
Template Design Tips
For print-ready templates:
- Use inline CSS styles (not external stylesheets)
- Add
page-break-inside: avoid;to keep elements together - Use
page-break-before: always;to force new pages - Use pt or mm units for precise sizing
- Avoid complex gradients (may not print well)
General best practices:
- Use
border-collapse: collapse;on tables - Right-align numbers, left-align text
- Use consistent padding (8-12px for table cells)
- Test with Preview before saving
AI Template Generation
The Template Editor includes AI-powered template generation to help you create templates quickly.

Using AI Generate
- Click AI Generate in the toolbar
- Describe what kind of template you want in plain language
- Click Generate
- The AI creates an HTML template based on your description
- Review the result in the editor
- Modify as needed and save
Example prompts:
- “A simple pick list with recipe names and quantities in a clean table”
- “A product label with nutrition facts in EU format and allergen warnings”
- “An ingredient comparison table showing fat, protein, and sugar content”
Copy AI Prompt

If you prefer to use an external AI tool (like Claude or ChatGPT), click Copy AI Prompt to copy a pre-built prompt that includes:
- The template syntax rules
- All available fields from your current data
- Instructions for creating a template
You can paste this into any AI assistant to get template suggestions.
Tips & Best Practices
Use conditional blocks for optional content Wrap allergen sections in {{#IF}} blocks so they don’t show up empty when there are no allergens.
Don’t add units to lbl fields Fields like lblEU_Fat already include the unit (e.g., “12.5 g”). Adding another “g” will result in “12.5 g g”.
Use format specifiers for clean numbers Instead of showing “245.67892”, use {{RecipeData.PAC:1}} to show “245.7”.
Preview often Click Preview frequently while building templates to catch issues early.
Copy before customizing Always copy a default template before modifying – you can’t undo changes to the original defaults.
Test with different data If your template will be used with different recipes, test it with recipes that have varying amounts of data (some with allergens, some without, etc.).
Use the DataSet Browser Don’t try to memorize field names. Use the DataSet Browser to explore available fields and double-click to insert them correctly.
This feature is available to registered users. The report system continues to evolve – additional report types and locations may be added in future updates.