generated from westfarn/web_django_template
Ship Print Forge shop site (colors, photos, 3D viewer) (#2)
## Summary - Rebrand the Django client template as Print Forge (`client_site` → `print_forge`) with shop + shipping enabled. - Product listings support multiple photos, color variants (shared price/description/STL, per-color stock and photos), and a photo-first / 3D-second gallery. - Public pages use 3D printer / printed-toy photography instead of leftover t-shirt mockups; beta CI deploys on `master`. Closes #1 Infra: [server-infra#27](ai_ml_operations/server-infra#27) (easy deploy beta). ## Test plan - [ ] Product page shows photo first, 3D model second; color swatches swap photos and stock - [ ] Portal can upload multiple photos and per-color qty/images; STL stays shared - [ ] Public home/about/gallery have no t-shirt mockups - [ ] `manage.py test` passes - [ ] After server-infra#27: beta deploy to `print-forge-preview.aimloperations.com` Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
@@ -34,6 +34,20 @@ def site_branding(request):
|
||||
}
|
||||
|
||||
|
||||
def shop_cart(request):
|
||||
from django.apps import apps as django_apps
|
||||
|
||||
if not django_apps.is_installed("shop"):
|
||||
return {"cart_count": 0}
|
||||
session = getattr(request, "session", None)
|
||||
if session is None:
|
||||
return {"cart_count": 0}
|
||||
from shop.services import cart_lines
|
||||
|
||||
lines = cart_lines(session)
|
||||
return {"cart_count": sum(line["quantity"] for line in lines)}
|
||||
|
||||
|
||||
def tianji_tracking(request):
|
||||
match = getattr(request, "resolver_match", None)
|
||||
url_name = getattr(match, "url_name", "") or ""
|
||||
@@ -63,6 +77,15 @@ def tianji_tracking(request):
|
||||
nav_section = "social_accounts"
|
||||
elif namespace == "social":
|
||||
nav_section = "social"
|
||||
elif namespace == "shop_portal":
|
||||
if url_name.startswith("product"):
|
||||
nav_section = "shop_products"
|
||||
elif url_name.startswith("order"):
|
||||
nav_section = "shop_orders"
|
||||
elif url_name == "sales":
|
||||
nav_section = "shop_sales"
|
||||
elif namespace == "shop":
|
||||
nav_section = "shop"
|
||||
|
||||
return {
|
||||
"tianji_enabled": getattr(settings, "TIANJI_ENABLED", False)
|
||||
|
||||
@@ -50,11 +50,11 @@ def _tagline_with_site_link(tagline: str, site_url: str) -> str:
|
||||
def email_brand_context(**extra):
|
||||
site_url = (getattr(settings, "PUBLIC_SITE_URL", None) or "").rstrip("/")
|
||||
if not site_url:
|
||||
site_url = "https://example.com"
|
||||
site_url = "https://printforgeprints.com"
|
||||
|
||||
logo_url = _absolute_static_url(site_url, _LOGO_STATIC_PATH)
|
||||
|
||||
brand_name = getattr(settings, "SITE_NAME", None) or "Your Company"
|
||||
brand_name = getattr(settings, "SITE_NAME", None) or "Print Forge"
|
||||
brand_legal = getattr(settings, "CREDIT_NAME", None) or brand_name
|
||||
tagline = getattr(settings, "SITE_TAGLINE", None) or ""
|
||||
host_label = site_url.replace("https://", "").replace("http://", "")
|
||||
|
||||
@@ -5,8 +5,9 @@ from django.conf import settings
|
||||
class ContactForm(forms.Form):
|
||||
INTEREST_CHOICES = [
|
||||
("general", "General inquiry"),
|
||||
("quote", "Request a quote"),
|
||||
("support", "Support"),
|
||||
("custom", "Custom toy / print"),
|
||||
("order", "Order question"),
|
||||
("wholesale", "Wholesale"),
|
||||
("other", "Something else"),
|
||||
]
|
||||
|
||||
|
||||
@@ -62,8 +62,8 @@
|
||||
<tr>
|
||||
<td align="center" style="padding:28px 24px 20px;border-bottom:1px solid #d9e3e4;">
|
||||
{% if logo_url %}
|
||||
<a href="{{ site_url|default:'https://mkdrealtor.com' }}" style="text-decoration:none;">
|
||||
<img src="{{ logo_url }}" alt="{{ brand_name|default:'Your Company' }} · EXIT Realty" width="160" style="display:block;width:160px;max-width:70%;height:auto;">
|
||||
<a href="{{ site_url|default:'https://printforgeprints.com' }}" style="text-decoration:none;">
|
||||
<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;">
|
||||
|
||||
@@ -37,4 +37,4 @@
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block footer_note %}Campaign summary from {{ brand_name|default:"Monica Dhillon" }}.{% endblock %}
|
||||
{% block footer_note %}Campaign summary from {{ brand_name|default:"Print Forge" }}.{% endblock %}
|
||||
|
||||
@@ -11,6 +11,6 @@ Suppressed: {{ suppressed }}
|
||||
{% if report_url %}Report: {{ report_url }}
|
||||
{% endif %}
|
||||
—
|
||||
{{ brand_name|default:"Monica Dhillon" }}
|
||||
{{ brand_name|default:"Print Forge" }}
|
||||
{{ site_url|default:"https://mkdrealtor.com" }}
|
||||
{% if brand_tagline %}{{ brand_tagline }}{% endif %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
New contact form inquiry — {{ brand_name|default:"Monica Dhillon" }}
|
||||
New contact form inquiry — {{ brand_name|default:"Print Forge" }}
|
||||
|
||||
Name: {{ name }}
|
||||
Email: {{ email }}
|
||||
@@ -12,6 +12,6 @@ Message:
|
||||
{% if portal_url %}View in portal: {{ portal_url }}
|
||||
{% endif %}
|
||||
—
|
||||
{{ brand_name|default:"Monica Dhillon" }}
|
||||
{{ brand_name|default:"Print Forge" }}
|
||||
{{ site_url|default:"https://mkdrealtor.com" }}
|
||||
{% if brand_tagline %}{{ brand_tagline }}{% endif %}
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
—
|
||||
{% if prefs_url %}Manage preferences: {{ prefs_url }}
|
||||
{% endif %}{% if one_click_url %}Unsubscribe from email: {{ one_click_url }}
|
||||
{% endif %}{{ brand_name|default:"Monica Dhillon" }}
|
||||
{% endif %}{{ brand_name|default:"Print Forge" }}
|
||||
{{ site_url|default:"https://mkdrealtor.com" }}
|
||||
{% if brand_tagline %}{{ brand_tagline }}{% endif %}
|
||||
|
||||
@@ -1,46 +1,15 @@
|
||||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% block title %}404 · {{ SITE_NAME }}{% endblock %}
|
||||
{% block body %}
|
||||
<div class="page">
|
||||
<section class="section section-single bg-gray-800 primary-overlay" style="background-image: url({% static 'images/bg-image-7.jpg' %});">
|
||||
<div class="section-single-inner">
|
||||
<div class="section-single-dummy"></div>
|
||||
<div class="section-single-main">
|
||||
<div class="container">
|
||||
<div class="row row-30">
|
||||
<div class="col-sm-6 text-center text-sm-left">
|
||||
<p class="text-extra-large">404</p>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="section-single-main-content">
|
||||
<h6 class="title-decorated title-decorated-lg">Page not found</h6>
|
||||
<p><span class="text-width-2">That page may have moved or the link is outdated. Let’s get you back on track.</span></p>
|
||||
<a class="button button-lg button-primary button-winona" href="{% url 'public:home' %}">Back to home</a>
|
||||
<a class="button button-lg button-default-outline button-winona" href="{% url 'public:contact' %}" style="margin-left:8px">Contact Monica</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-minimal section-single-footer">
|
||||
<div class="container">
|
||||
<div class="footer-minimal-inner">
|
||||
<a class="brand" href="{% url 'public:home' %}">
|
||||
<img src="{% static 'brand/exit_logo.png' %}" alt="EXIT Realty · {{ SITE_NAME }}" width="151" height="44"/>
|
||||
</a>
|
||||
<div class="footer-aside-copy" style="text-align:left">
|
||||
<p class="rights">
|
||||
<span>© </span><span>{% now "Y" %}</span><span> </span><span>{{ SITE_NAME }} · MKDRealtor.com</span>
|
||||
</p>
|
||||
<p class="footer-made-by">
|
||||
Made by <a href="{{ CREDIT_URL }}" target="_blank" rel="noopener noreferrer">{{ CREDIT_NAME }}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% block content %}
|
||||
{% include "public/_breadcrumbs.html" with title="404" %}
|
||||
<section class="section section-lg bg-gray-100 text-center">
|
||||
<div class="container">
|
||||
<div class="title-3"><span class="text-primary">404</span></div>
|
||||
<h3 class="font-base text-uppercase">Page Not Found</h3>
|
||||
<p>That page may have moved or the link is outdated.</p>
|
||||
<a class="button button-lg button-gray-5" href="{% url 'public:home' %}">Go to home page</a>
|
||||
<a class="button button-lg button-primary" href="{% url 'public:contact' %}">Contact us</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
{% load static %}
|
||||
<section class="breadcrumbs-custom bg-image context-dark scroll-handler" style="background-image: url({% static 'images/bg-breadcrumbs.jpg' %});">
|
||||
<div class="image-overlay" data-canvas-src="{% static 'images/bg-breadcrumbs.jpg' %}" style="background-image: url({% static 'images/bg-breadcrumbs.jpg' %});"></div>
|
||||
<div class="breadcrumbs-main">
|
||||
<div class="container">
|
||||
<h2 class="breadcrumbs-custom-title scroll-title">{{ title }}</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="breadcrumbs-panel">
|
||||
<div class="container">
|
||||
<ul class="breadcrumbs-custom-path">
|
||||
<li><a href="{% url 'public:home' %}">Home</a></li>
|
||||
<li class="active">{{ title }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -3,7 +3,7 @@
|
||||
{% block title %}About {{ SITE_NAME }}{% endblock %}
|
||||
{% block og_title %}About {{ SITE_NAME }}{% endblock %}
|
||||
{% block twitter_title %}About {{ SITE_NAME }}{% endblock %}
|
||||
{% block meta_description %}About {{ SITE_NAME }}. {{ SITE_TAGLINE }}. {{ CONTACT_SERVICE_AREA }}.{% endblock %}
|
||||
{% block meta_description %}About {{ SITE_NAME }}. {{ SITE_TAGLINE }}. {{ CONTACT_SERVICE_AREA }}. 3D printed toys, custom prints, and nationwide shipping.{% endblock %}
|
||||
{% block og_description %}About {{ SITE_NAME }}. {{ SITE_TAGLINE }}. {{ CONTACT_SERVICE_AREA }}.{% endblock %}
|
||||
{% block twitter_description %}About {{ SITE_NAME }}. {{ SITE_TAGLINE }}. {{ CONTACT_SERVICE_AREA }}.{% endblock %}
|
||||
{% block structured_data %}
|
||||
@@ -15,7 +15,7 @@
|
||||
"url": "{{ PUBLIC_SITE_URL }}{% url 'public:about' %}",
|
||||
"description": "{{ SITE_TAGLINE|escapejs }}",
|
||||
"mainEntity": {
|
||||
"@type": "Organization",
|
||||
"@type": "Store",
|
||||
"name": "{{ SITE_NAME|escapejs }}",
|
||||
"url": "{{ PUBLIC_SITE_URL }}/",
|
||||
"telephone": "{{ CONTACT_PHONE|escapejs }}",
|
||||
@@ -25,35 +25,68 @@
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<section class="breadcrumbs-custom bg-image context-dark" style="background-image: url({% static 'images/breadcrumbs-image-1.jpg' %});">
|
||||
<div class="breadcrumbs-custom-inner">
|
||||
<div class="container breadcrumbs-custom-container">
|
||||
<div class="breadcrumbs-custom-main">
|
||||
<p class="breadcrumbs-custom-subtitle title-decorated">About</p>
|
||||
<h1 class="text-uppercase breadcrumbs-custom-title">{{ SITE_NAME }}</h1>
|
||||
{% include "public/_breadcrumbs.html" with title="About Us" %}
|
||||
<section class="section section-xl bg-default">
|
||||
<div class="container">
|
||||
<div class="row row-30 row-lg-50">
|
||||
<div class="col-md-6">
|
||||
<article class="video">
|
||||
<img class="video-image" src="{% static 'images/video-1-549x384.jpg' %}" alt="Close-up of a 3D printer nozzle over the build plate" width="549" height="384"/>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="inset-xl-left-70">
|
||||
<h2>A Few Words <span class="text-italic font-weight-thin">About Us</span></h2>
|
||||
<article class="quote-minimal">
|
||||
<div class="heading-3 quote-minimal-text">
|
||||
<p class="q">{{ SITE_NAME }} is a 3D printed toy shop. We print playable figures, gifts, and custom pieces.</p>
|
||||
</div>
|
||||
</article>
|
||||
<p class="big">We design and print toys you can hold — not just display. Ready-to-ship designs live in the shop. Custom work starts with a call or email. {% if CONTACT_SERVICE_AREA %}Based in {{ CONTACT_SERVICE_AREA }},{% endif %} we ship nationwide.</p>
|
||||
<p class="big">Questions about filament, size, or a classroom set? We answer the phone: <a href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="breadcrumbs-custom-path">
|
||||
<li><a href="{% url 'public:home' %}">Home</a></li>
|
||||
<li class="active">About</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section section-lg">
|
||||
<div class="container">
|
||||
<div class="row row-50">
|
||||
<div class="col-lg-8">
|
||||
<h2>Who we are</h2>
|
||||
<p>{% if SITE_TAGLINE %}{{ SITE_TAGLINE }}. {% endif %}Replace this paragraph with the client’s story, team, and what customers should expect.</p>
|
||||
<p>{% if CONTACT_SERVICE_AREA %}{{ CONTACT_SERVICE_AREA }}. {% endif %}Every site seeded from this template gets a unique public app — swap photos, copy, and service pages per brand.</p>
|
||||
<a class="button button-primary button-winona" href="{% url 'public:contact' %}">Contact us</a>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
{% if CONTACT_PHONE %}<p><strong>Phone</strong><br><a href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a></p>{% endif %}
|
||||
{% if CONTACT_EMAIL %}<p><strong>Email</strong><br><a href="mailto:{{ CONTACT_EMAIL }}">{{ CONTACT_EMAIL }}</a></p>{% endif %}
|
||||
{% if CONTACT_ADDRESS %}<p><strong>Address</strong><br>{{ CONTACT_ADDRESS }}</p>{% endif %}
|
||||
</div>
|
||||
<section class="section bg-default">
|
||||
<div class="row no-gutters bordered-1">
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<article class="box-classic">
|
||||
<div class="box-classic-icon linearicons-cube"></div>
|
||||
<div class="heading-3 box-classic-title">3D Printed</div>
|
||||
<div class="big box-classic-text">Printed in-house so we control quality, color, and turnaround.</div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<article class="box-classic">
|
||||
<div class="box-classic-icon linearicons-mustache-glasses"></div>
|
||||
<div class="heading-3 box-classic-title">Custom Design</div>
|
||||
<div class="big box-classic-text">Bring a character, a gift idea, or a one-off print — we will quote it.</div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<article class="box-classic">
|
||||
<div class="box-classic-icon linearicons-truck"></div>
|
||||
<div class="heading-3 box-classic-title">Ships Nationwide</div>
|
||||
<div class="big box-classic-text">Weekday print-and-ship, plus local pickup when it works for you.</div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-xl-3">
|
||||
<article class="box-classic">
|
||||
<div class="box-classic-icon linearicons-heart"></div>
|
||||
<div class="heading-3 box-classic-title">Made to Play</div>
|
||||
<div class="big box-classic-text">Toys first. Durable prints for kids, collectors, and gift-givers.</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section section-xl bg-default text-center">
|
||||
<div class="container">
|
||||
<a class="button button-lg button-primary" href="{% url 'public:contact' %}">Contact us</a>
|
||||
{% if "shop" in enabled_features %}
|
||||
<a class="button button-lg button-default-outline" href="{% url 'shop:list' %}">Shop toys</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
{% block og_title %}Contact {{ SITE_NAME }} · Get in Touch{% endblock %}
|
||||
{% block twitter_title %}Contact {{ SITE_NAME }} · Get in Touch{% endblock %}
|
||||
{% block meta_description %}Contact {{ SITE_NAME }}. {{ CONTACT_SERVICE_AREA }}. Call{% if CONTACT_PHONE %} {{ CONTACT_PHONE }}{% endif %}{% if CONTACT_EMAIL %} or email {{ CONTACT_EMAIL }}{% endif %}.{% endblock %}
|
||||
{% block og_description %}Contact {{ SITE_NAME }}. {{ CONTACT_SERVICE_AREA }}. Call{% if CONTACT_PHONE %} {{ CONTACT_PHONE }}{% endif %}{% if CONTACT_EMAIL %} or email {{ CONTACT_EMAIL }}{% endif %}.{% endblock %}
|
||||
{% block twitter_description %}Contact {{ SITE_NAME }}. {{ CONTACT_SERVICE_AREA }}. Call{% if CONTACT_PHONE %} {{ CONTACT_PHONE }}{% endif %}{% if CONTACT_EMAIL %} or email {{ CONTACT_EMAIL }}{% endif %}.{% endblock %}
|
||||
{% block og_description %}Contact {{ SITE_NAME }}. Call{% if CONTACT_PHONE %} {{ CONTACT_PHONE }}{% endif %}{% if CONTACT_EMAIL %} or email {{ CONTACT_EMAIL }}{% endif %}.{% endblock %}
|
||||
{% block twitter_description %}Contact {{ SITE_NAME }}. Call{% if CONTACT_PHONE %} {{ CONTACT_PHONE }}{% endif %}{% if CONTACT_EMAIL %} or email {{ CONTACT_EMAIL }}{% endif %}.{% endblock %}
|
||||
{% block structured_data %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
@@ -15,7 +15,7 @@
|
||||
"url": "{{ PUBLIC_SITE_URL }}{% url 'public:contact' %}",
|
||||
"description": "Contact {{ SITE_NAME|escapejs }}. {{ CONTACT_SERVICE_AREA|escapejs }}.",
|
||||
"mainEntity": {
|
||||
"@type": "Organization",
|
||||
"@type": "Store",
|
||||
"name": "{{ SITE_NAME|escapejs }}",
|
||||
"url": "{{ PUBLIC_SITE_URL }}/",
|
||||
"telephone": "{{ CONTACT_PHONE|escapejs }}",
|
||||
@@ -35,88 +35,61 @@
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<section class="breadcrumbs-custom bg-image context-dark" style="background-image: url({% static 'images/breadcrumbs-image-1.jpg' %});">
|
||||
<div class="breadcrumbs-custom-inner">
|
||||
<div class="container breadcrumbs-custom-container">
|
||||
<div class="breadcrumbs-custom-main">
|
||||
<p class="breadcrumbs-custom-subtitle title-decorated">Contact</p>
|
||||
<h1 class="text-uppercase breadcrumbs-custom-title">Get in touch</h1>
|
||||
</div>
|
||||
<ul class="breadcrumbs-custom-path">
|
||||
<li><a href="{% url 'public:home' %}">Home</a></li>
|
||||
<li class="active">Contact</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section section-sm">
|
||||
{% include "public/_breadcrumbs.html" with title="Contact Us" %}
|
||||
<section class="section section-xl bg-default">
|
||||
<div class="container">
|
||||
<div class="layout-bordered">
|
||||
{% if CONTACT_PHONE %}
|
||||
<div class="layout-bordered-item wow-outer">
|
||||
<div class="layout-bordered-item-inner wow slideInUp">
|
||||
<div class="icon icon-lg mdi mdi-phone text-primary"></div>
|
||||
<ul class="list-0"><li><a class="link-default" href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a></li></ul>
|
||||
<div class="row row-30 row-md-50">
|
||||
<div class="col-lg-4 col-xl-5">
|
||||
<div class="inset-xl-right-70">
|
||||
<h3>Have Any Questions?</h3>
|
||||
<h5 class="title-6">Custom prints, order questions, or wholesale — we reply by phone and email.</h5>
|
||||
<ul class="list-contacts">
|
||||
{% if CONTACT_PHONE %}
|
||||
<li><span class="icon mdi mdi-phone"></span><a class="big" href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a></li>
|
||||
{% endif %}
|
||||
{% if CONTACT_ADDRESS or CONTACT_SERVICE_AREA %}
|
||||
<li><span class="icon mdi mdi-map-marker"></span><span class="big">{% if CONTACT_ADDRESS %}{{ CONTACT_ADDRESS }}{% else %}{{ CONTACT_SERVICE_AREA }}{% endif %}</span></li>
|
||||
{% endif %}
|
||||
{% if CONTACT_EMAIL %}
|
||||
<li><span class="icon mdi mdi-email-outline"></span><a class="big" href="mailto:{{ CONTACT_EMAIL }}">{{ CONTACT_EMAIL }}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if CONTACT_EMAIL %}
|
||||
<div class="layout-bordered-item wow-outer">
|
||||
<div class="layout-bordered-item-inner wow slideInUp">
|
||||
<div class="icon icon-lg mdi mdi-email text-primary"></div>
|
||||
<a class="link-default" href="mailto:{{ CONTACT_EMAIL }}">{{ CONTACT_EMAIL }}</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if CONTACT_ADDRESS or CONTACT_SERVICE_AREA %}
|
||||
<div class="layout-bordered-item wow-outer">
|
||||
<div class="layout-bordered-item-inner wow slideInUp">
|
||||
<div class="icon icon-lg mdi mdi-map-marker text-primary"></div>
|
||||
<span class="link-default">{% if CONTACT_ADDRESS %}{{ CONTACT_ADDRESS }}{% else %}{{ CONTACT_SERVICE_AREA }}{% endif %}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section bg-gray-100 contact-form-section">
|
||||
<div class="container section-lg">
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<h3 class="text-uppercase">Send a message</h3>
|
||||
<form class="rd-form contact-message-form" method="post" action="{% url 'public:contact' %}">
|
||||
<div class="col-lg-8 col-xl-7">
|
||||
<form class="rd-form" method="post" action="{% url 'public:contact' %}">
|
||||
{% csrf_token %}
|
||||
<div class="row row-10">
|
||||
<div class="col-md-6">
|
||||
<div class="row row-20 gutter-20">
|
||||
<div class="col-sm-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.first_name.id_for_label }}">First name</label>
|
||||
{{ form.first_name }}
|
||||
{{ form.first_name.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-sm-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.last_name.id_for_label }}">Last name</label>
|
||||
{{ form.last_name }}
|
||||
{{ form.last_name.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.email.id_for_label }}">Email</label>
|
||||
{{ form.email }}
|
||||
{{ form.email.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-sm-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.phone.id_for_label }}">Phone</label>
|
||||
{{ form.phone }}
|
||||
{{ form.phone.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.email.id_for_label }}">E-mail</label>
|
||||
{{ form.email }}
|
||||
{{ form.email.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<p class="form-label-outside" style="margin:8px 0 4px">Mailing address <span style="font-weight:400;color:#6b7280">(optional — for postcards)</span></p>
|
||||
<p class="form-label-outside">Mailing address <span style="font-weight:400;color:#6b7280">(optional)</span></p>
|
||||
</div>
|
||||
<div class="col-12" data-address-autocomplete data-suggest-url="{% url 'address_suggest' %}">
|
||||
<div class="form-wrap address-ac-wrap">
|
||||
@@ -124,29 +97,29 @@
|
||||
{{ form.address_line1 }}
|
||||
{{ form.address_line1.errors }}
|
||||
</div>
|
||||
<div class="row row-10">
|
||||
<div class="col-md-6">
|
||||
<div class="row row-20 gutter-20">
|
||||
<div class="col-sm-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.address_line2.id_for_label }}">Apt / suite</label>
|
||||
{{ form.address_line2 }}
|
||||
{{ form.address_line2.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-sm-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.address_city.id_for_label }}">City</label>
|
||||
{{ form.address_city }}
|
||||
{{ form.address_city.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-sm-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.address_state.id_for_label }}">State</label>
|
||||
{{ form.address_state }}
|
||||
{{ form.address_state.errors }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-sm-6">
|
||||
<div class="form-wrap">
|
||||
<label class="form-label-outside" for="{{ form.address_zip.id_for_label }}">ZIP</label>
|
||||
{{ form.address_zip }}
|
||||
@@ -173,8 +146,19 @@
|
||||
<div class="col-12">{{ form.captcha }}{{ form.captcha.errors }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<p style="font-size:13px;color:#6b7280;margin:12px 0 20px;">By submitting, you agree I may contact you about your inquiry by email and SMS (if you provide a phone number). You can change preferences or unsubscribe anytime from links in messages, or reply STOP to SMS.{% if form.captcha %} Protected by reCAPTCHA.{% endif %}</p>
|
||||
<button class="button button-primary button-winona" type="submit" data-tianji-event="contact_form_submit">Send message</button>
|
||||
<div class="group-lg group-custom-1">
|
||||
<div class="group-custom-ie">
|
||||
<div class="unit unit-spacing-md form-text">
|
||||
<div class="unit-left"><span class="icon mdi mdi-information-outline"></span></div>
|
||||
<div class="unit-body">
|
||||
<p>By submitting, you agree we may contact you about your inquiry by email and SMS (if you provide a phone number). Unsubscribe anytime.{% if form.captcha %} Protected by reCAPTCHA.{% endif %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button class="button button-gray-5" type="submit" data-tianji-event="contact_form_submit">Send Message</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -3,77 +3,191 @@
|
||||
{% block title %}{{ SITE_NAME }}{% if SITE_TAGLINE %} · {{ SITE_TAGLINE }}{% endif %}{% endblock %}
|
||||
{% block og_title %}{{ SITE_NAME }}{% endblock %}
|
||||
{% block twitter_title %}{{ SITE_NAME }}{% endblock %}
|
||||
{% block meta_description %}{{ SITE_NAME }}{% if SITE_TAGLINE %} — {{ SITE_TAGLINE }}.{% endif %} {{ CONTACT_SERVICE_AREA }}.{% endblock %}
|
||||
{% block meta_description %}{{ SITE_NAME }}{% if SITE_TAGLINE %} — {{ SITE_TAGLINE }}.{% endif %} {{ CONTACT_SERVICE_AREA }}. Custom 3D printed toys, ready to ship.{% endblock %}
|
||||
{% block og_description %}{{ SITE_NAME }}{% if SITE_TAGLINE %} — {{ SITE_TAGLINE }}.{% endif %} {{ CONTACT_SERVICE_AREA }}.{% endblock %}
|
||||
{% block twitter_description %}{{ SITE_NAME }}{% if SITE_TAGLINE %} — {{ SITE_TAGLINE }}.{% endif %} {{ CONTACT_SERVICE_AREA }}.{% endblock %}
|
||||
{% block structured_data %}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"@type": "Store",
|
||||
"name": "{{ SITE_NAME|escapejs }}",
|
||||
"url": "{{ PUBLIC_SITE_URL }}/",
|
||||
"image": "{{ PUBLIC_SITE_URL }}{% static 'images/slider-minimal-slide-1-1920x968.jpg' %}",
|
||||
"image": "{{ PUBLIC_SITE_URL }}{% static 'images/slider-image-01-1132x657.jpg' %}",
|
||||
"telephone": "{{ CONTACT_PHONE|escapejs }}",
|
||||
"email": "{{ CONTACT_EMAIL|escapejs }}"{% if CONTACT_ADDRESS %},
|
||||
"email": "{{ CONTACT_EMAIL|escapejs }}",
|
||||
"description": "{{ SITE_TAGLINE|escapejs }}"{% if CONTACT_ADDRESS %},
|
||||
"address": "{{ CONTACT_ADDRESS|escapejs }}"{% endif %}{% if CONTACT_SERVICE_AREA %},
|
||||
"areaServed": "{{ CONTACT_SERVICE_AREA|escapejs }}"{% endif %}
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<div class="swiper-container swiper-slider swiper-slider-minimal" data-loop="false" data-slide-effect="fade" data-autoplay="false" data-simulate-touch="true">
|
||||
<section class="section swiper-container swiper-slider swiper-slider-4" data-autoplay="5000" data-simulate-touch="false" data-slide-effect="fade">
|
||||
<div class="swiper-wrapper">
|
||||
<div class="swiper-slide" data-slide-bg="{% static 'images/slider-minimal-slide-1-1920x968.jpg' %}">
|
||||
<div class="container">
|
||||
<div class="jumbotron-classic-content">
|
||||
<div class="wow-outer">
|
||||
<div class="title-docor-text font-weight-bold title-decorated text-uppercase wow slideInLeft text-white">{{ SITE_NAME }}</div>
|
||||
<div class="swiper-slide bg-gray-100">
|
||||
<div class="swiper-slide-caption section-lg section-inset-2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 index-1">
|
||||
<h1 class="swiper-title decorative-line" data-caption-animate="fadeIn" data-caption-delay="100">Your <span class="font-weight-thin text-italic">Best<br class="d-none d-lg-block"></span> Toy
|
||||
</h1>
|
||||
<h4 class="swiper-title-2" data-caption-animate="fadeInUp" data-caption-delay="250">Print Forge makes 3D printed toys you can hold, play with, and gift — from ready-to-ship favorites to custom prints.</h4>
|
||||
<div class="swiper-button" data-caption-animate="fadeInUp" data-caption-delay="400">
|
||||
{% if "shop" in enabled_features %}
|
||||
<a class="button button-lg button-primary" href="{% url 'shop:list' %}" data-tianji-event="hero_cta">shop now</a>
|
||||
{% else %}
|
||||
<a class="button button-lg button-primary" href="{% url 'public:contact' %}" data-tianji-event="hero_cta">get in touch</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 position-static">
|
||||
<div class="float-img swiper-slide-custom"><img src="{% static 'images/slider-image-01-1132x657.jpg' %}" alt="3D printer laying down orange parts on the build plate" width="1132" height="657"/></div>
|
||||
</div>
|
||||
</div>
|
||||
<h1 class="text-uppercase text-white font-weight-bold wow-outer"><span class="wow slideInDown" data-wow-delay=".2s">{% if SITE_TAGLINE %}{{ SITE_TAGLINE }}{% else %}Welcome{% endif %}</span></h1>
|
||||
<p class="text-white wow-outer"><span class="wow slideInDown" data-wow-delay=".35s">{% if CONTACT_SERVICE_AREA %}{{ CONTACT_SERVICE_AREA }}. {% endif %}Tell us what you need — we will follow up promptly.</span></p>
|
||||
<div class="wow-outer button-outer">
|
||||
<a class="button button-md button-primary button-winona wow slideInDown" href="{% url 'public:contact' %}" data-wow-delay=".4s" data-tianji-event="hero_cta" data-tianji-event-destination="contact">Start a conversation</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="swiper-slide text-left bg-gray-100">
|
||||
<div class="swiper-slide-caption section-lg section-inset-2">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 index-1">
|
||||
<h1 class="swiper-title decorative-line" data-caption-animate="fadeInDown" data-caption-delay="100">Made <span class="font-weight-thin text-italic">to<br class="d-none d-lg-block"></span> Order
|
||||
</h1>
|
||||
<h4 class="swiper-title-2" data-caption-animate="fadeInUp" data-caption-delay="250">Need something you do not see in the shop? Call or email and we will print a custom piece{% if CONTACT_SERVICE_AREA %} for {{ CONTACT_SERVICE_AREA }} and beyond{% endif %}.</h4>
|
||||
<div class="swiper-button" data-caption-animate="fadeInUp" data-caption-delay="400">
|
||||
<a class="button button-lg button-primary" href="{% url 'public:contact' %}">custom request</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 position-static">
|
||||
<div class="float-img swiper-slide-custom"><img src="{% static 'images/slider-image-02-1132x657.jpg' %}" alt="3D printer running in the workshop" width="1132" height="657"/></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section class="section section-lg">
|
||||
<div class="swiper-pagination"></div>
|
||||
<div class="swiper-button-prev"></div>
|
||||
<div class="swiper-button-next"></div>
|
||||
</section>
|
||||
|
||||
<section class="section section-xl bg-default text-center">
|
||||
<div class="container">
|
||||
<h2 class="text-uppercase text-center wow-outer"><span class="wow slideInDown">How we can help</span></h2>
|
||||
<div class="row row-50">
|
||||
<div class="col-md-4 wow-outer">
|
||||
<article class="box-chloe wow slideInUp">
|
||||
<div class="box-chloe__icon linearicons-phone"></div>
|
||||
<div class="box-chloe__main">
|
||||
<h3 class="box-chloe__title">Talk with us</h3>
|
||||
<p>A real person answers. Share your goals and we will map the next step.</p>
|
||||
</div>
|
||||
</article>
|
||||
<h2 class="wow fadeInDown">Featured <span class="text-italic font-weight-thin">Toys</span></h2>
|
||||
{% if featured_products %}
|
||||
<div class="row row-xl row-30 row-md-50 row-xl-70">
|
||||
{% for product in featured_products %}
|
||||
{% cycle 'product-1-292x256.png' 'product-2-292x256.png' 'product-3-292x256.png' 'product-4-292x256.png' 'product-5-292x256.png' 'product-6-292x256.png' as product_img silent %}
|
||||
<div class="col-sm-6 col-lg-4 wow fadeInUp">
|
||||
{% include "shop/_product_card.html" with product=product product_img=product_img %}
|
||||
</div>
|
||||
<div class="col-md-4 wow-outer">
|
||||
<article class="box-chloe wow slideInUp" data-wow-delay=".05s">
|
||||
<div class="box-chloe__icon linearicons-register"></div>
|
||||
<div class="box-chloe__main">
|
||||
<h3 class="box-chloe__title">Stay informed</h3>
|
||||
<p>Opt in on the contact form for email, SMS, or mail — only the channels you choose.</p>
|
||||
</div>
|
||||
</article>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="big">The shop is warming up. Browse soon — or ask us to print a custom toy today.</p>
|
||||
<a class="button button-lg button-primary" href="{% url 'public:contact' %}">Request a custom toy</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section section-xxl section-offset-1">
|
||||
<div class="container">
|
||||
<div class="row row-50 align-items-center justify-content-center justify-content-lg-between">
|
||||
<div class="col-sm-8 col-md-6 col-lg-5 wow fadeInLeft">
|
||||
<div class="box-nina">
|
||||
<img class="media-1" src="{% static 'images/box-nina-img-364x474.jpg' %}" alt="3D printer finishing a silver figurine" width="364" height="474"/>
|
||||
<img class="media-2" src="{% static 'images/box-nina-img-mini-217x328.jpg' %}" alt="Orange filament feeding into a printer" width="217" height="328"/>
|
||||
<div class="text">About</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 wow-outer">
|
||||
<article class="box-chloe wow slideInUp" data-wow-delay=".1s">
|
||||
<div class="box-chloe__icon linearicons-apartment"></div>
|
||||
<div class="box-chloe__main">
|
||||
<h3 class="box-chloe__title">Work with us</h3>
|
||||
<p>Replace this copy with your services. Brand, photos, and pages are unique to each client site.</p>
|
||||
<div class="col-md-6 col-lg-5">
|
||||
<div class="row row-30 row-lg-50">
|
||||
<div class="col-sm-6 col-md-12 wow fadeInRight">
|
||||
<article class="box-creative text-center text-sm-left">
|
||||
<div class="unit unit-spacing-1 flex-column flex-md-row align-items-center align-items-sm-start">
|
||||
<div class="unit-left"><div class="box-creative-icon linearicons-cube"></div></div>
|
||||
<div class="unit-body">
|
||||
<div class="heading-4 box-creative-title">3D Printed</div>
|
||||
<div class="big box-creative-text">Every toy is printed in-house so details stay sharp and pieces stay playable.</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</article>
|
||||
<div class="col-sm-6 col-md-12 wow fadeInRight">
|
||||
<article class="box-creative text-center text-sm-left">
|
||||
<div class="unit unit-spacing-1 flex-column flex-md-row align-items-center align-items-sm-start">
|
||||
<div class="unit-left"><div class="box-creative-icon linearicons-mustache-glasses"></div></div>
|
||||
<div class="unit-body">
|
||||
<div class="heading-4 box-creative-title">Custom Design</div>
|
||||
<div class="big box-creative-text">Bring a character, a gift idea, or a classroom set — we will quote a print.</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-12 wow fadeInRight">
|
||||
<article class="box-creative text-center text-sm-left">
|
||||
<div class="unit unit-spacing-1 flex-column flex-md-row align-items-center align-items-sm-start">
|
||||
<div class="unit-left"><div class="box-creative-icon linearicons-truck"></div></div>
|
||||
<div class="unit-body">
|
||||
<div class="heading-4 box-creative-title">Ships Nationwide</div>
|
||||
<div class="big box-creative-text">Orders pack and ship on weekdays. Local {{ CONTACT_SERVICE_AREA }} pickup by request.</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center" style="margin-top:24px">
|
||||
<a class="button button-primary button-winona" href="{% url 'public:about' %}">About us</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section section-xxl bg-gray-100">
|
||||
<div class="container">
|
||||
<div class="row row-8 gutter-8" data-lightgallery="group">
|
||||
<div class="col-md-6">
|
||||
<div class="row row-8 gutter-8">
|
||||
<div class="col-lg-11 col-xl-9 box-style-2 wow fadeInLeft">
|
||||
<h2>Latest <span class="text-italic font-weight-thin">Prints</span></h2>
|
||||
<p class="big text-gray-800">A look at the kinds of toys and figures we print — colorful, detailed, and ready to play.</p>
|
||||
</div>
|
||||
<div class="col-lg-12 offset-top-6 wow fadeInUp">
|
||||
<article class="thumbnail thumbnail-1"><a class="thumbnail-figure" data-lightgallery="item" href="{% static 'images/gallery-22-1200x800-original.jpg' %}"><img src="{% static 'images/gallery-22-582x299.jpg' %}" alt="3D printer finishing a silver figurine" width="582" height="299"/><div class="thumbnail-overlay"><div class="thumbnail-text">Printed figurines</div></div></a></article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-12 col-lg-6 wow fadeInUp">
|
||||
<article class="thumbnail thumbnail-1"><a class="thumbnail-figure" data-lightgallery="item" href="{% static 'images/gallery-4-1200x800-original.jpg' %}"><img src="{% static 'images/gallery-23-287x252.jpg' %}" alt="Red and white 3D printed ornaments on the build plate" width="287" height="252"/><div class="thumbnail-overlay"><div class="thumbnail-text">Colorful prints</div></div></a></article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-12 col-lg-6 wow fadeInUp" data-wow-delay=".05s">
|
||||
<article class="thumbnail thumbnail-1"><a class="thumbnail-figure" data-lightgallery="item" href="{% static 'images/gallery-23-1200x800-original.jpg' %}"><img src="{% static 'images/quote-1-287x252.jpg' %}" alt="Fresh orange prints lifted off the build plate" width="287" height="252"/><div class="thumbnail-overlay"><div class="thumbnail-text">Off the bed</div></div></a></article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="row row-8 gutter-8">
|
||||
<div class="col-sm-6 col-md-12 col-lg-6 wow fadeInUp">
|
||||
<article class="thumbnail thumbnail-1"><a class="thumbnail-figure" data-lightgallery="item" href="{% static 'images/gallery-20-800x1200-original.jpg' %}"><img src="{% static 'images/gallery-20-287x252.jpg' %}" alt="Orange filament spool on the printer" width="287" height="252"/><div class="thumbnail-overlay"><div class="thumbnail-text">Color and filament</div></div></a></article>
|
||||
</div>
|
||||
<div class="col-sm-6 col-md-12 col-lg-6 wow fadeInUp" data-wow-delay=".05s">
|
||||
<article class="thumbnail thumbnail-1"><a class="thumbnail-figure" data-lightgallery="item" href="{% static 'images/gallery-2-1200x800-original.jpg' %}"><img src="{% static 'images/gallery-21-287x252.jpg' %}" alt="Close-up of a 3D printer laying down a layer" width="287" height="252"/><div class="thumbnail-overlay"><div class="thumbnail-text">In the printer</div></div></a></article>
|
||||
</div>
|
||||
<div class="col-lg-12 wow fadeInUp" data-wow-delay=".05s">
|
||||
<article class="thumbnail thumbnail-1"><a class="thumbnail-figure" data-lightgallery="item" href="{% static 'images/gallery-21-1200x800-original.jpg' %}"><img src="{% static 'images/gallery-22-582x558.jpg' %}" alt="Desktop 3D printer in a workshop" width="582" height="558"/><div class="thumbnail-overlay"><div class="thumbnail-text">Custom work</div></div></a></article>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section section-xl bg-gray-100 text-center">
|
||||
<div class="container">
|
||||
<div class="row justify-content-md-center">
|
||||
<div class="col-md-11 col-lg-9 col-xl-8">
|
||||
<h2>Have a <span class="text-italic font-weight-thin">Question?</span></h2>
|
||||
<h5>Call {{ CONTACT_PHONE }} or email {{ CONTACT_EMAIL }} — or send a note and we will reply.</h5>
|
||||
<a class="button button-lg button-primary" href="{% url 'public:contact' %}">Contact Print Forge</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -3,47 +3,34 @@
|
||||
{% block title %}Terms of Service · {{ SITE_NAME }}{% endblock %}
|
||||
{% block og_title %}Terms of Service · {{ SITE_NAME }}{% endblock %}
|
||||
{% block twitter_title %}Terms of Service · {{ SITE_NAME }}{% endblock %}
|
||||
{% block meta_description %}Terms of Service for {{ SITE_NAME }} / MKDRealtor.com — how we use analytics, protect your information, and never sell or share personal data with third parties for marketing.{% endblock %}
|
||||
{% block og_description %}Terms of Service for {{ SITE_NAME }} / MKDRealtor.com — how we use analytics, protect your information, and never sell or share personal data with third parties for marketing.{% endblock %}
|
||||
{% block twitter_description %}Terms of Service for {{ SITE_NAME }} / MKDRealtor.com — how we use analytics, protect your information, and never sell or share personal data with third parties for marketing.{% endblock %}
|
||||
{% block meta_description %}Terms of Service for {{ SITE_NAME }} — how we use analytics, protect your information, and never sell or share personal data with third parties for marketing.{% endblock %}
|
||||
{% block og_description %}Terms of Service for {{ SITE_NAME }} — how we use analytics and protect your information.{% endblock %}
|
||||
{% block twitter_description %}Terms of Service for {{ SITE_NAME }} — how we use analytics and protect your information.{% endblock %}
|
||||
{% block content %}
|
||||
<section class="breadcrumbs-custom bg-image context-dark" style="background-image: url({% static 'images/breadcrumbs-image-1.jpg' %});">
|
||||
<div class="breadcrumbs-custom-inner">
|
||||
<div class="container breadcrumbs-custom-container">
|
||||
<div class="breadcrumbs-custom-main">
|
||||
<p class="breadcrumbs-custom-subtitle title-decorated">Legal</p>
|
||||
<h1 class="text-uppercase breadcrumbs-custom-title">Terms of Service</h1>
|
||||
</div>
|
||||
<ul class="breadcrumbs-custom-path">
|
||||
<li><a href="{% url 'public:home' %}">Home</a></li>
|
||||
<li class="active">Terms</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section section-lg">
|
||||
{% include "public/_breadcrumbs.html" with title="Terms of Service" %}
|
||||
<section class="section section-lg bg-default">
|
||||
<div class="container legal-prose">
|
||||
<p class="legal-lead">These Terms of Service describe how {{ SITE_NAME }} (“we,” “us”) operates MKDRealtor.com and related pages. By using this site you agree to these terms.</p>
|
||||
<p class="legal-lead">These Terms of Service describe how {{ SITE_NAME }} (“we,” “us”) operates this website and related pages. By using this site you agree to these terms.</p>
|
||||
|
||||
<h2>Analytics and site performance</h2>
|
||||
<p>We use analytics to monitor site performance, understand how visitors use the site, and improve content and reliability. Analytics may collect technical information such as pages viewed, approximate location derived from IP address, device/browser type, and referral source. This information is used only to operate and improve the site.</p>
|
||||
|
||||
<h2>We do not sell or share your data</h2>
|
||||
<p>We never sell your personal information. We do not share or sell user data to third parties for their advertising or marketing. Contact-form submissions and related lead information are used only to respond to your inquiry and to run our real-estate practice.</p>
|
||||
<p>We never sell your personal information. We do not share or sell user data to third parties for their advertising or marketing. Contact-form submissions, shop orders, and related information are used only to fulfill your request and to run our toy shop.</p>
|
||||
|
||||
<h2>Information you provide</h2>
|
||||
<p>When you submit the contact form or other requests, you may share your name, email, phone, mailing address, and message. We use that information to follow up with you and, with your consent, for related outreach (email, SMS, or postcard where applicable). You can change preferences or unsubscribe using the links in our messages, or by contacting us.</p>
|
||||
<p>When you submit the contact form, place an order, or send other requests, you may share your name, email, phone, mailing address, and message. We use that information to follow up with you, ship orders, and, with your consent, for related outreach (email or SMS where applicable). You can change preferences or unsubscribe using the links in our messages, or by contacting us.</p>
|
||||
|
||||
<h2>Cookies and similar technologies</h2>
|
||||
<p>We may use cookies or similar technologies needed for the site to work (for example session and security) and for analytics as described above. The analytics notice on the site acknowledges this use. For questions about cookies or analytics, contact us using the details below.</p>
|
||||
<p>We may use cookies or similar technologies needed for the site to work (for example session, cart, and security) and for analytics as described above. The analytics notice on the site acknowledges this use. For questions about cookies or analytics, contact us using the details below.</p>
|
||||
|
||||
<h2>Contact</h2>
|
||||
<p>
|
||||
{% if CONTACT_EMAIL %}<a class="link-default" href="mailto:{{ CONTACT_EMAIL }}">{{ CONTACT_EMAIL }}</a>{% endif %}
|
||||
{% if CONTACT_PHONE %}{% if CONTACT_EMAIL %} · {% endif %}<a class="link-default" href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a>{% endif %}
|
||||
{% if CONTACT_EMAIL %}<a href="mailto:{{ CONTACT_EMAIL }}">{{ CONTACT_EMAIL }}</a>{% endif %}
|
||||
{% if CONTACT_PHONE %}{% if CONTACT_EMAIL %} · {% endif %}<a href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a>{% endif %}
|
||||
{% if CONTACT_ADDRESS %}<br>{{ CONTACT_ADDRESS }}{% endif %}
|
||||
</p>
|
||||
<p><a class="button button-primary button-winona" href="{% url 'public:contact' %}">Contact Monica</a></p>
|
||||
|
||||
<p><a class="button button-lg button-primary" href="{% url 'public:contact' %}">Contact {{ SITE_NAME }}</a></p>
|
||||
<p class="legal-updated">Last updated: {% now "F j, Y" %}</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -3,51 +3,43 @@
|
||||
{% block title %}Under construction · {{ SITE_NAME }}{% endblock %}
|
||||
{% block body %}
|
||||
<div class="page">
|
||||
<section class="section section-single bg-gray-800 primary-overlay" style="background-image: url({% static 'images/bg-image-4.jpg' %});">
|
||||
<section class="section section-single context-dark bg-image" style="background-image: url({% static 'images/bg-image-1.jpg' %});">
|
||||
<div class="section-single-inner">
|
||||
<div class="section-single-dummy"></div>
|
||||
<div class="section-single-main">
|
||||
<div class="section-single-header">
|
||||
<div class="container">
|
||||
<div class="row row-30 justify-content-center justify-content-sm-start">
|
||||
<div class="col-sm-10 col-md-9 col-lg-7 col-xl-6">
|
||||
<h6 class="title-decorated title-decorated-lg">We’re getting ready to launch</h6>
|
||||
<p>{{ SITE_NAME }} · MKDRealtor.com’s new site is almost here. Leave your email and I’ll let you know when it’s live — or reach out now if you need help buying or selling.</p>
|
||||
<div class="rd-mailform-wrap">
|
||||
<form class="rd-form form-inline" method="post" action="{% url 'public:under_construction' %}">
|
||||
{% csrf_token %}
|
||||
<div class="form-wrap">
|
||||
<input class="form-input" id="{{ form.email.id_for_label }}" type="email" name="{{ form.email.name }}" required value="{{ form.email.value|default:'' }}">
|
||||
<label class="form-label" for="{{ form.email.id_for_label }}">Your e-mail</label>
|
||||
{{ form.email.errors }}
|
||||
</div>
|
||||
<div class="form-button">
|
||||
<button class="button button-primary button-winona" type="submit" data-tianji-event="notify_me_submit">Notify me</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<p style="margin-top:20px">
|
||||
<a class="button button-default-outline button-winona" href="{% url 'public:contact' %}" data-tianji-event="holding_contact">Contact Monica now</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<a class="brand" href="{% url 'public:home' %}">
|
||||
<img class="brand-logo-dark" src="{% static 'brand/logo.png' %}" alt="{{ SITE_NAME }}" width="158" height="39"/>
|
||||
<img class="brand-logo-light" src="{% static 'brand/logo-light.png' %}" alt="{{ SITE_NAME }}" width="130" height="32"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-minimal section-single-footer">
|
||||
<div class="section-single-main">
|
||||
<div class="container">
|
||||
<div class="footer-minimal-inner">
|
||||
<a class="brand" href="{% url 'public:home' %}">
|
||||
<img src="{% static 'brand/exit_logo.png' %}" alt="EXIT Realty · {{ SITE_NAME }}" width="151" height="44"/>
|
||||
</a>
|
||||
<div class="footer-aside-copy" style="text-align:left">
|
||||
<p class="rights">
|
||||
<span>© </span><span>{% now "Y" %}</span><span> </span><span>{{ SITE_NAME }} · MKDRealtor.com</span>
|
||||
{% if CONTACT_PHONE %}<span> · </span><a href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a>{% endif %}
|
||||
</p>
|
||||
<p class="footer-made-by">
|
||||
Made by <a href="{{ CREDIT_URL }}" target="_blank" rel="noopener noreferrer">{{ CREDIT_NAME }}</a>
|
||||
</p>
|
||||
</div>
|
||||
<h2><span class="font-weight-sbold">We're getting ready</span> <span class="font-weight-thin">to launch</span></h2>
|
||||
<p>{{ SITE_NAME }} — {{ SITE_TAGLINE }}. Leave your email and we will tell you when the shop goes live.</p>
|
||||
<div class="rd-mailform-wrap">
|
||||
<form class="rd-form form-lg rd-form-inline group-md justify-content-center" method="post" action="{% url 'public:under_construction' %}">
|
||||
{% csrf_token %}
|
||||
<div class="form-wrap">
|
||||
<input class="form-input" id="{{ form.email.id_for_label }}" type="email" name="{{ form.email.name }}" required value="{{ form.email.value|default:'' }}">
|
||||
<label class="form-label" for="{{ form.email.id_for_label }}"><span class="icon mdi mdi-email-outline"></span><span>Enter your email</span></label>
|
||||
{{ form.email.errors }}
|
||||
</div>
|
||||
<div class="form-button">
|
||||
<button class="button button-custom button-primary" type="submit" data-tianji-event="notify_me_submit">Notify me</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<p style="margin-top:24px">
|
||||
{% if CONTACT_PHONE %}<a href="tel:{{ CONTACT_PHONE_TEL }}">{{ CONTACT_PHONE }}</a>{% endif %}
|
||||
{% if CONTACT_EMAIL %}{% if CONTACT_PHONE %} · {% endif %}<a href="mailto:{{ CONTACT_EMAIL }}">{{ CONTACT_EMAIL }}</a>{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-single-footer">
|
||||
<div class="container">
|
||||
<p class="rights"><span>{{ SITE_NAME }}</span><span> © </span><span>{% now "Y" %}</span><span>. </span><a href="{% url 'public:terms' %}">Terms of Service</a></p>
|
||||
<p class="footer-made-by">Made by <a href="{{ CREDIT_URL }}" target="_blank" rel="noopener noreferrer">{{ CREDIT_NAME }}</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
<h3 class="text-uppercase">Communication preferences</h3>
|
||||
{% if not valid %}
|
||||
<p>This preferences link is invalid or has expired.</p>
|
||||
<p style="font-size:13px;color:#6b7280;">If you still get messages, reply STOP on SMS or contact Monica directly.</p>
|
||||
<p style="font-size:13px;color:#6b7280;">If you still get messages, reply STOP on SMS or contact us directly.</p>
|
||||
<p style="margin-top:24px">
|
||||
<a class="button button-primary button-winona" href="{% url 'public:contact' %}">Contact Monica</a>
|
||||
<a class="button button-primary" href="{% url 'public:contact' %}">Contact {{ SITE_NAME }}</a>
|
||||
<a class="button button-gray-bordered button-winona" href="{% url 'public:home' %}">Back to home</a>
|
||||
</p>
|
||||
{% else %}
|
||||
|
||||
+16
-1
@@ -29,7 +29,18 @@ def _public_site_base(request) -> str:
|
||||
|
||||
|
||||
def home(request):
|
||||
return render(request, "public/home.html")
|
||||
featured = []
|
||||
from django.apps import apps as django_apps
|
||||
|
||||
if django_apps.is_installed("shop"):
|
||||
from shop.models import Product
|
||||
|
||||
featured = list(
|
||||
Product.objects.filter(is_published=True)
|
||||
.select_related("image")
|
||||
.prefetch_related("colors")[:6]
|
||||
)
|
||||
return render(request, "public/home.html", {"featured_products": featured})
|
||||
|
||||
|
||||
def about(request):
|
||||
@@ -70,6 +81,10 @@ def sitemap_xml(request):
|
||||
from django.apps import apps as django_apps
|
||||
if django_apps.is_installed("blog"):
|
||||
paths.append(("blog:list", "0.7", "weekly"))
|
||||
if django_apps.is_installed("shop"):
|
||||
paths.append(("shop:list", "0.8", "weekly"))
|
||||
if django_apps.is_installed("events"):
|
||||
paths.append(("events:list", "0.8", "weekly"))
|
||||
urls = []
|
||||
for name, priority, changefreq in paths:
|
||||
path = reverse(name)
|
||||
|
||||
Reference in New Issue
Block a user