{% extends "base.html" %} {% block title %}Tickets — {{ brand }}{% endblock %} {% block content %}

Tickets

{{ tagline }}

{# ---------------- Filter Panel (dark) ---------------- #}

Filter & Search

{# ---------------- Card helpers ---------------- #} {% macro status_badge(s) -%} {% set label = s.replace('_',' ').title() %} {% if s == 'done' %} {{ label }} {% elif s in ['blocked','cancelled'] %} {{ label }} {% elif s in ['awaiting_review','needs_more_info'] %} {{ label }} {% elif s in ['in_progress','triage'] %} {{ label }} {% else %} {{ label }} {% endif %} {%- endmacro %} {% macro priority_chip(p) -%} {% if p == 'urgent' %} Priority: Urgent {% elif p == 'high' %} Priority: High {% elif p == 'low' %} Priority: Low {% else %} Priority: Normal {% endif %} {%- endmacro %} {# ---------------- Ticket Grid ---------------- #}
{% for t in tickets %}

#{{ t.id }} · {{ t.title }}

Opened by {{ t.created_by_name or t.created_by_id or 'Unknown' }}
{{ status_badge(t.status) }}

{{ t.description }}

{{ priority_chip(t.priority) }} {% if t.sprint %}Sprint: {{ t.sprint }}{% endif %} {% if t.due_at %}Due: {{ t.due_at.strftime('%Y-%m-%d') }}{% endif %} {% for label in t.label_list() %}{{ label }}{% endfor %}
{% if t.assignee_name or t.assignee_id %} Assigned to {{ t.assignee_name or ('<@' ~ t.assignee_id ~ '>') }} {% else %} Unassigned {% endif %}
Updated {{ t.updated_at.strftime('%Y-%m-%d %H:%M') }} UTC
{% else %}
No tickets found.
{% endfor %}
{% endblock %}