Match banner brand, print splash, optional crop, and demo seed (#6)
Deploy Beta / unit-tests (push) Successful in 32s
Deploy Beta / docker (push) Successful in 32s
Deploy Beta / deploy-beta (push) Successful in 2m23s

## Summary
- Rebrand public site, portal, and emails from Ecoprint orange to the PRINTFORGE banner palette (navy / cyan / lime).
- Replace the loading splash with a CSS 3D-print animation; product uploads get a default-on smart crop + background filter checkbox.
- Add `manage.py seed_demo` for client walkthroughs on dev/beta only (refuses prod).

Closes #5.

## Test plan
- [ ] Public pages and buttons are cyan/lime, not orange
- [ ] Splash shows a printer building a model (or a static print if reduced motion)
- [ ] Product edit: smart-crop checked by default; uncheck stores the original photo
- [ ] `uv run python manage.py seed_demo` fills shop, contacts, leads, orders, campaigns
- [ ] `DJANGO_ENV=prod` seed_demo exits with an error

Reviewed-on: #6
This commit was merged in pull request #6.
This commit is contained in:
2026-09-07 04:06:52 -07:00
parent 04e75ec7a3
commit 23a6035ba8
19 changed files with 34722 additions and 65 deletions
+1 -1
View File
@@ -82,7 +82,7 @@ def plain_text_to_email_html(text: str) -> str:
lines = [html.escape(line) for line in para.split("\n")]
joined = "<br>\n".join(lines)
joined = _URL_RE.sub(
r'<a href="\1" style="color:#00626c;text-decoration:underline;">\1</a>',
r'<a href="\1" style="color:#00aeef;text-decoration:underline;">\1</a>',
joined,
)
blocks.append(
+5 -5
View File
@@ -36,11 +36,11 @@
color: #212121;
font-family: "Work Sans", Poppins, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
}
a { color: #00626c; }
a { color: #00aeef; }
.email-btn {
display: inline-block;
padding: 12px 24px;
background-color: #00626c;
background-color: #00aeef;
color: #ffffff !important;
text-decoration: none;
border-radius: 4px;
@@ -66,7 +66,7 @@
<img src="{{ logo_url }}" alt="{{ brand_name|default:'Print Forge' }}" width="160" style="display:block;width:160px;max-width:70%;height:auto;">
</a>
{% else %}
<p style="margin:0;font-size:20px;font-weight:700;letter-spacing:0.5px;color:#00626c;">
<p style="margin:0;font-size:20px;font-weight:700;letter-spacing:0.5px;color:#00aeef;">
{{ brand_name }}
</p>
{% endif %}
@@ -82,7 +82,7 @@
</td>
</tr>
<tr>
<td style="height:3px;line-height:3px;font-size:0;background-color:#00626c;">&nbsp;</td>
<td style="height:3px;line-height:3px;font-size:0;background-color:#00aeef;">&nbsp;</td>
</tr>
<tr>
<td style="padding:28px 28px 8px;color:#212121;font-size:15px;line-height:1.6;font-family:'Work Sans',Poppins,-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif;">
@@ -102,7 +102,7 @@
{% if brand_tagline_html %}
{{ brand_tagline_html|safe }}
{% else %}
<a href="{{ site_url|default:'https://mkdrealtor.com' }}" style="color:#00626c;text-decoration:none;">{{ host_label|default:"mkdrealtor.com" }}</a>
<a href="{{ site_url|default:'https://mkdrealtor.com' }}" style="color:#00aeef;text-decoration:none;">{{ host_label|default:"mkdrealtor.com" }}</a>
{% if brand_tagline %}
&nbsp;·&nbsp; {{ brand_tagline }}
{% endif %}
@@ -5,7 +5,7 @@
{% block content %}
<p style="margin:0 0 16px;color:#212121;">Your {{ channel_display }} campaign has finished sending.</p>
<p style="margin:0 0 8px;font-size:18px;font-weight:600;color:#00626c;">{{ campaign_name }}</p>
<p style="margin:0 0 8px;font-size:18px;font-weight:600;color:#00aeef;">{{ campaign_name }}</p>
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="margin:20px 0;">
<tr>
@@ -32,7 +32,7 @@
{% if report_url %}
<p style="margin:24px 0 0;">
<a class="email-btn" href="{{ report_url }}" style="display:inline-block;padding:12px 24px;background-color:#00626c;color:#ffffff !important;text-decoration:none;border-radius:4px;font-weight:600;font-size:14px;">Open campaign report</a>
<a class="email-btn" href="{{ report_url }}" style="display:inline-block;padding:12px 24px;background-color:#00aeef;color:#ffffff !important;text-decoration:none;border-radius:4px;font-weight:600;font-size:14px;">Open campaign report</a>
</p>
{% endif %}
{% endblock %}
@@ -11,7 +11,7 @@
<p class="field-label" style="color:#6b7280;font-size:12px;text-transform:uppercase;letter-spacing:0.6px;margin:0 0 4px;">Email</p>
<p class="field-value" style="color:#212121;font-size:15px;margin:0 0 16px;">
<a href="mailto:{{ email }}" style="color:#00626c;text-decoration:none;">{{ email }}</a>
<a href="mailto:{{ email }}" style="color:#00aeef;text-decoration:none;">{{ email }}</a>
</p>
<p class="field-label" style="color:#6b7280;font-size:12px;text-transform:uppercase;letter-spacing:0.6px;margin:0 0 4px;">Phone</p>
@@ -25,7 +25,7 @@
{% if portal_url %}
<p style="margin:24px 0 0;">
<a class="email-btn" href="{{ portal_url }}" style="display:inline-block;padding:12px 24px;background-color:#00626c;color:#ffffff !important;text-decoration:none;border-radius:4px;font-weight:600;font-size:14px;">View in portal</a>
<a class="email-btn" href="{{ portal_url }}" style="display:inline-block;padding:12px 24px;background-color:#00aeef;color:#ffffff !important;text-decoration:none;border-radius:4px;font-weight:600;font-size:14px;">View in portal</a>
</p>
{% endif %}
{% endblock %}
@@ -15,11 +15,11 @@
{% block footer_note %}
{% if prefs_url or one_click_url %}
{% if prefs_url %}
<a href="{{ prefs_url }}" style="color:#00626c;text-decoration:underline;">Manage preferences</a>
<a href="{{ prefs_url }}" style="color:#00aeef;text-decoration:underline;">Manage preferences</a>
{% endif %}
{% if prefs_url and one_click_url %}&nbsp;·&nbsp;{% endif %}
{% if one_click_url %}
<a href="{{ one_click_url }}" style="color:#00626c;text-decoration:underline;">Unsubscribe from email</a>
<a href="{{ one_click_url }}" style="color:#00aeef;text-decoration:underline;">Unsubscribe from email</a>
{% endif %}
{% endif %}
{% endblock %}