# Render Guide The template at `assets/template.html` uses `{{...}}` placeholders. Most are self-explanatory; this guide covers how to fill the standup card and the HTML shapes to inject for `{{PROJECT_SECTIONS}}`, `{{TIMELINE_EVENTS}}`, `{{TODAY_BANNER}}`, `{{STAT_JIRA_ISSUES}}`, `{{STAT_CONFLUENCE_PAGES}}`, and `{{OPEN_THREADS}}`. The CSS is tuned to the Bitwarden brand palette, so fill placeholders rather than regenerating styles. ## Escape untrusted text PR titles, review and comment bodies, commit messages, branch names, repository names, session prompts, Jira issue summaries and statuses, transition `from`/`to` names, and Confluence page titles and space keys are free text, and on any shared repository other people author much of it. Before inserting any of it into the page, HTML-escape these five characters: | Character | Replacement | | --------- | ----------- | | `&` | `&` | | `<` | `<` | | `>` | `>` | | `"` | `"` | | `'` | `'` | Escape `&` first so the other replacements are not double-escaped. For example, a PR titled `Fix focus & "Save" button` renders as `Fix <input> focus & "Save" button`. Markup the recap adds itself (``, ``, ``) goes around escaped text, never inside it. Only use `href` values that are `https://github.com/...` URLs, or a Jira/Confluence `url` that begins with that source's `site_url` over `https`. A Jira issue with a `url` of `null` renders its key as plain text, not a link. The template's Content-Security-Policy is a second line of defense: it lets only the page's own script run and blocks outbound requests other than the brand fonts. Leave the `