{% extends "base.html" %} {% load common_extras %} {% comment %} The flow list. Everything below the toolbar is the _list_rows.html partial, so the list has exactly one renderer: the filters fetch it, and every mutation answers with a `flowsChanged` event that makes it re-fetch itself. Two things the redesign changed here. **The tab strip.** Flows, Sequences and Templates were three separate rail rows; they are three views of one job, so they are tabs under one row now. The strip comes from `flow_tab_groups` in the context processor — same nav data, same single active-state convention. **One primary action.** The header used to offer Import, a name field and Create at equal weight. Creating a flow is the thing people come here to do, so "New flow" is the header's only button; the modal it opens asks where to start from — blank, a template, or a file — which is where Import lives now (HANDOFF §3, "Create flow"). No Tailwind utility here sets a property a design-system class already owns — see ground rule 9 in docs/agent-prompts/layer-2.md. Colours come from the theme tokens rather than from utility palettes, which is what keeps the white-label swap in styles.css meaningful. {% endcomment %} {% block title %}Flows · DemandTrail Messaging{% endblock %} {% block sub_nav %}{% include "partials/_sub_nav.html" with groups=flow_tab_groups %}{% endblock %} {% block alpine_components %}{{ block.super }}{% include "partials/_list_behaviours.html" %}{% endblock %} {% block content %}
A flow replies for you when something happens: a comment, a keyword, a reply to your story.
{{ template_total }} ready-made flow{{ template_total|pluralize }}. Pick one and change the words to suit you.