This is an experimental feature... more info coming soon
This is a general guide to our dynamic content editing features. For more specific guides see.
Attributes.. coming soon
Condition builder.. coming soon
Content snippets
What they are: Reusable blocks you maintain in Content snippets (your app’s snippet library). They can be simple text/HTML or include dynamic content.
Insert in this editor
Coaches see a hint: Type
/to insert a snippet.Press
/to open the snippet picker, search or browse, then select a snippet to insert at the cursor.
If nothing appears, create snippets first in Content snippets; the app may show a message that none were found until you do.
Dynamic snippets and the picker
Your picker may include an option like Pre-render dynamic snippets (with in-app help):
On: templates can appear filled in so you can see what you’re inserting.
Off: snippets may be inserted with raw template syntax so personalization still happens when athletes view the content.
Tip: Use snippets for repeating cues, warm-ups, or standard disclaimers; combine with Preview with athlete to verify the full page (main text + inserted snippets) reads correctly.
You can learn more about managing and using your Snippets here.
Attributes
Attributes are custom fields you create and then fill in per athlete.
Examples: strengths, weaknesses, focus areas, dietary needs, injury notes, goals, equipment—anything you want to refer to when you write plans or messages.
Why use them: Once attributes exist, you can use them in supported editors so text can automatically include the right value for that athlete (e.g. “Your focus this block is…” pulling from their focus attribute).
Tip: Start with a small set of attributes you’ll actually use in your templates. You can add more later.
You can create and edit your attributes from the Settings menu.
Dynamic Content Editor
In places that support it (for example workout descriptions), you may see an editor that goes beyond basic formatting.
What you can do:
Insert merge fields so the text can show each athlete’s name or values from their attributes.
Use dynamic content so parts of the message can change based on those values (for example, different sentences for different situations).
What you see vs what your athlete sees:
While editing, you’re usually working with the template (placeholders and rules), not a final “one-size-fits-all” paragraph.
When your athlete views the content, the app fills in their information so the description reads personally for them.
Practical tip: After you add merge fields or dynamic blocks, preview or check the workout as an athlete (or on a test athlete) if you can, so you’re happy with how it reads when values are empty or unusual. The preview is the button with the "eye" icon in the editor toolbar.
Toolbar overview
Along with normal formatting (bold, italic, lists, headings, links, clear formatting), the editor adds a set of personalization controls in the same toolbar row:
Control | Purpose |
Insert merge field | Dropdown to insert athlete data / attributes into the text. |
Build conditional block | Opens the condition builder (branching / workflow-style icon). |
Edit raw HTML | Code ( |
Preview with athlete | Eye icon—see how the content renders for a specific athlete (or with no client). |
Insert merge fields
Click the Insert merge field dropdown.
Choose the field you want (for example an attribute you’ve configured for athletes, or other placeholders your site offers).
If prompted, choose how the value should appear (e.g. default display vs other options your product supports).
Optionally set a default when the athlete has no value—helps avoid awkward blanks.
Merge fields pull live values when the athlete views the content, so one template can read differently per person.
Inserting Merge fields and attributes
Build conditional block (condition builder)
Open it: Click the Build conditional block button in the toolbar (branching / workflow icon). The tooltip explains that you can show different content based on athlete attributes (e.g. tips only for certain groups, or extra notes when an attribute is present).
In the dialog:
if/elsifbranches: For each branch you choose an attribute, a value (dropdown if the attribute has preset options, or type a value), and the text that should appear when that branch matches.else: Default text when none of the branches match.Use Add branch for additional
elsifrows.Click Insert block to place the configured block into the editor.
You must configure the block correctly (including attributes where required); the dialog will warn you if something mandatory is missing.
In plain terms: This is how you personalize paragraphs, not just single values—without writing code yourself.
Open conditional block builder
Preview with athlete
Open it: Click the Preview with athlete button (eye icon).
In the dialog:
Preview with no client — See how the template behaves without tying it to one athlete’s data. Useful for fallbacks and empty attributes.
Choose an athlete — Use the athlete selector / switcher in the dialog to pick who you’re previewing as. The rendered result appears below, using that athlete’s merge fields and attributes.
If you haven’t picked anyone yet, the dialog will guide you: select a client or use Preview with no client to see a render.
Tip: After you change merge fields, conditional blocks, or snippets, preview with two or three different athletes and once with no client so you’re happy with every branch and empty-state behavior.
Preview with a client/athlete
Edit raw HTML (advanced)
The Edit raw HTML (</>) action opens the underlying markup/template for people who need fine control. Most coaches can stay in the visual editor, merge fields, conditional blocks, and / snippets; treat raw HTML as optional and advanced.
Practices that work well
Design attributes first — A small, consistent set of attributes makes merge fields and conditions easier to maintain.
Name snippets clearly — Easier to find when typing
/.Preview early and often — Especially after new conditions or after inserting dynamic snippets.
Check edge cases — Preview with athletes who are missing optional attribute values, and with no client, so defaults and
elsebranches read well.
Quick reference
Goal | What to do |
Insert a personalized value | Insert merge field → pick field → confirm options/default. |
Different text per attribute value | Build conditional block → branches + |
Reuse saved text | Type |
See the real result | Preview with athlete → choose athlete or Preview with no client. |
Advanced markup | Edit raw HTML (optional). |




