Template
Extract always-on public/portal/UTM plus optional email_sms, directmail, blog, payments, social, and social_ai so new client sites can be bootstrapped from this seed. Refs #1 Refs #2 Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
2.0 KiB
HTML
58 lines
2.0 KiB
HTML
{% extends "portal_base.html" %}
|
|
{% block title %}Leads · Portal{% endblock %}
|
|
{% block topbar_title %}Lead inbox{% endblock %}
|
|
{% block portal_content %}
|
|
<div class="toolbar">
|
|
<form class="toolbar-filters" method="get">
|
|
<input type="search" name="q" value="{{ q }}" placeholder="Search name or email">
|
|
<select name="status">
|
|
<option value="">All statuses</option>
|
|
{% for value, label in status_choices %}
|
|
<option value="{{ value }}" {% if status_filter == value %}selected{% endif %}>{{ label }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<button class="btn btn-sm btn-ghost" type="submit">Filter</button>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="panel">
|
|
<div class="panel-b" style="padding:0">
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th>Lead</th>
|
|
<th>Interest</th>
|
|
<th>UTM / source</th>
|
|
<th>Status</th>
|
|
<th>Received</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for lead in leads %}
|
|
<tr>
|
|
<td>
|
|
<a href="{% url 'leads:detail' lead.pk %}">{{ lead.contact }}</a><br>
|
|
<span class="muted">{{ lead.contact.email }}{% if lead.contact.phone %} · {{ lead.contact.phone }}{% endif %}</span>
|
|
</td>
|
|
<td class="muted">{{ lead.message|truncatechars:40|default:"—" }}</td>
|
|
<td>
|
|
{% if lead.attribution %}
|
|
{{ lead.attribution.utm_source|default:"direct" }}
|
|
{% if lead.attribution.utm_medium %}/ {{ lead.attribution.utm_medium }}{% endif %}
|
|
{% if lead.attribution.utm_campaign %}/ {{ lead.attribution.utm_campaign }}{% endif %}
|
|
{% else %}
|
|
—
|
|
{% endif %}
|
|
</td>
|
|
<td><span class="badge badge-{{ lead.status }}">{{ lead.get_status_display }}</span></td>
|
|
<td>{{ lead.created_at|date:"M j, g:i A" }}</td>
|
|
</tr>
|
|
{% empty %}
|
|
<tr><td colspan="5" class="empty-state">No leads match.</td></tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|