Initial commit - Customer Portal for Coolify
This commit is contained in:
56
customer_portal/web/templates/auth/login.html
Executable file
56
customer_portal/web/templates/auth/login.html
Executable file
@@ -0,0 +1,56 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Anmelden{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-5 col-lg-4">
|
||||
<div class="card bg-dark border-secondary">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
{% if branding.logo_url %}
|
||||
<img src="{{ branding.logo_url }}" alt="{{ branding.company_name }}" style="max-height: 60px; margin-bottom: 1rem;">
|
||||
{% else %}
|
||||
<i class="bi bi-person-circle display-4 text-success"></i>
|
||||
{% endif %}
|
||||
<h2 class="mt-3">Anmelden</h2>
|
||||
<p class="text-muted">{{ branding.company_name }}</p>
|
||||
</div>
|
||||
|
||||
<form method="post" autocomplete="off">
|
||||
<div class="mb-4">
|
||||
<label for="email" class="form-label">E-Mail-Adresse</label>
|
||||
<input type="email"
|
||||
name="email"
|
||||
id="email"
|
||||
class="form-control form-control-lg bg-dark text-light border-secondary"
|
||||
placeholder="ihre@email.at"
|
||||
required
|
||||
autofocus>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success btn-lg w-100">
|
||||
<i class="bi bi-send me-2"></i>
|
||||
Code anfordern
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<hr class="border-secondary my-4">
|
||||
|
||||
<div class="text-center">
|
||||
<p class="text-muted mb-0">
|
||||
Noch kein Konto?
|
||||
<a href="{{ url_for('auth.register') }}" class="text-success">Registrieren</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-4 text-muted">
|
||||
<small>
|
||||
<i class="bi bi-shield-check me-1"></i>
|
||||
Sie erhalten einen 6-stelligen Code per E-Mail
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
66
customer_portal/web/templates/auth/register.html
Executable file
66
customer_portal/web/templates/auth/register.html
Executable file
@@ -0,0 +1,66 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Registrieren{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-5 col-lg-4">
|
||||
<div class="card bg-dark border-secondary">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
<i class="bi bi-person-plus display-4 text-success"></i>
|
||||
<h2 class="mt-3">Registrieren</h2>
|
||||
<p class="text-muted">Erstellen Sie Ihr Kundenkonto</p>
|
||||
</div>
|
||||
|
||||
<!-- Progress indicator -->
|
||||
<div class="d-flex justify-content-center mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<span class="badge bg-success rounded-circle">1</span>
|
||||
<span class="mx-2 text-success">E-Mail</span>
|
||||
<span class="text-muted mx-2">—</span>
|
||||
<span class="badge bg-secondary rounded-circle">2</span>
|
||||
<span class="mx-2 text-muted">Code</span>
|
||||
<span class="text-muted mx-2">—</span>
|
||||
<span class="badge bg-secondary rounded-circle">3</span>
|
||||
<span class="mx-2 text-muted">Profil</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form method="post" autocomplete="off">
|
||||
<div class="mb-4">
|
||||
<label for="email" class="form-label">E-Mail-Adresse</label>
|
||||
<input type="email"
|
||||
name="email"
|
||||
id="email"
|
||||
class="form-control form-control-lg bg-dark text-light border-secondary"
|
||||
placeholder="ihre@email.at"
|
||||
required
|
||||
autofocus>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success btn-lg w-100">
|
||||
<i class="bi bi-send me-2"></i>
|
||||
Weiter
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<hr class="border-secondary my-4">
|
||||
|
||||
<div class="text-center">
|
||||
<p class="text-muted mb-0">
|
||||
Bereits registriert?
|
||||
<a href="{{ url_for('auth.login') }}" class="text-success">Anmelden</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-4 text-muted">
|
||||
<small>
|
||||
<i class="bi bi-shield-check me-1"></i>
|
||||
Sie erhalten einen Bestaetigungscode per E-Mail
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
75
customer_portal/web/templates/auth/register_profile.html
Executable file
75
customer_portal/web/templates/auth/register_profile.html
Executable file
@@ -0,0 +1,75 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Profil anlegen{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-5 col-lg-4">
|
||||
<div class="card bg-dark border-secondary">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
<i class="bi bi-person-badge display-4 text-success"></i>
|
||||
<h2 class="mt-3">Profil anlegen</h2>
|
||||
<p class="text-muted">
|
||||
Fast geschafft! Bitte geben Sie Ihre Daten ein.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Progress indicator -->
|
||||
<div class="d-flex justify-content-center mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<span class="badge bg-success rounded-circle"><i class="bi bi-check"></i></span>
|
||||
<span class="mx-2 text-success">E-Mail</span>
|
||||
<span class="text-muted mx-2">—</span>
|
||||
<span class="badge bg-success rounded-circle"><i class="bi bi-check"></i></span>
|
||||
<span class="mx-2 text-success">Code</span>
|
||||
<span class="text-muted mx-2">—</span>
|
||||
<span class="badge bg-success rounded-circle">3</span>
|
||||
<span class="mx-2 text-success">Profil</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-secondary border-secondary mb-4">
|
||||
<small>
|
||||
<i class="bi bi-envelope me-1"></i>
|
||||
E-Mail: <strong>{{ email }}</strong>
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<form method="post" autocomplete="off">
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Name <span class="text-danger">*</span></label>
|
||||
<input type="text"
|
||||
name="name"
|
||||
id="name"
|
||||
class="form-control form-control-lg bg-dark text-light border-secondary"
|
||||
placeholder="Vor- und Nachname"
|
||||
required
|
||||
autofocus>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<label for="phone" class="form-label">Telefon <span class="text-muted">(optional)</span></label>
|
||||
<input type="tel"
|
||||
name="phone"
|
||||
id="phone"
|
||||
class="form-control form-control-lg bg-dark text-light border-secondary"
|
||||
placeholder="+43 ...">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success btn-lg w-100">
|
||||
<i class="bi bi-check-circle me-2"></i>
|
||||
Registrierung abschliessen
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<div class="text-center mt-4 text-muted">
|
||||
<small>
|
||||
<i class="bi bi-shield-check me-1"></i>
|
||||
Ihre Daten werden vertraulich behandelt
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
91
customer_portal/web/templates/auth/register_verify.html
Executable file
91
customer_portal/web/templates/auth/register_verify.html
Executable file
@@ -0,0 +1,91 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Code bestaetigen{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-5 col-lg-4">
|
||||
<div class="card bg-dark border-secondary">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
<i class="bi bi-shield-lock display-4 text-success"></i>
|
||||
<h2 class="mt-3">Code eingeben</h2>
|
||||
<p class="text-muted">
|
||||
Wir haben einen 6-stelligen Code an<br>
|
||||
<strong>{{ email }}</strong> gesendet
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Progress indicator -->
|
||||
<div class="d-flex justify-content-center mb-4">
|
||||
<div class="d-flex align-items-center">
|
||||
<span class="badge bg-success rounded-circle"><i class="bi bi-check"></i></span>
|
||||
<span class="mx-2 text-success">E-Mail</span>
|
||||
<span class="text-muted mx-2">—</span>
|
||||
<span class="badge bg-success rounded-circle">2</span>
|
||||
<span class="mx-2 text-success">Code</span>
|
||||
<span class="text-muted mx-2">—</span>
|
||||
<span class="badge bg-secondary rounded-circle">3</span>
|
||||
<span class="mx-2 text-muted">Profil</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form method="post" autocomplete="off">
|
||||
<div class="mb-4">
|
||||
<label for="code" class="form-label">Sicherheitscode</label>
|
||||
<input type="text"
|
||||
name="code"
|
||||
id="code"
|
||||
class="form-control form-control-lg bg-dark text-light border-secondary text-center"
|
||||
placeholder="000000"
|
||||
maxlength="6"
|
||||
pattern="[0-9]{6}"
|
||||
inputmode="numeric"
|
||||
required
|
||||
autofocus
|
||||
style="font-size: 1.5rem; letter-spacing: 0.5rem;">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success btn-lg w-100">
|
||||
<i class="bi bi-check-circle me-2"></i>
|
||||
Bestaetigen
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<hr class="border-secondary my-4">
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<a href="{{ url_for('auth.register') }}" class="btn btn-outline-secondary btn-sm">
|
||||
<i class="bi bi-arrow-left me-1"></i>
|
||||
Zurueck
|
||||
</a>
|
||||
<form action="{{ url_for('auth.register_resend') }}" method="post" class="d-inline">
|
||||
<button type="submit" class="btn btn-outline-secondary btn-sm">
|
||||
<i class="bi bi-arrow-clockwise me-1"></i>
|
||||
Neuen Code senden
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-4 text-muted">
|
||||
<small>
|
||||
<i class="bi bi-clock me-1"></i>
|
||||
Der Code ist 10 Minuten gueltig
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_js %}
|
||||
<script>
|
||||
// Auto-focus and only allow numbers
|
||||
document.getElementById('code').addEventListener('input', function(e) {
|
||||
this.value = this.value.replace(/[^0-9]/g, '');
|
||||
if (this.value.length === 6) {
|
||||
this.form.submit();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
77
customer_portal/web/templates/auth/verify.html
Executable file
77
customer_portal/web/templates/auth/verify.html
Executable file
@@ -0,0 +1,77 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Code eingeben{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-5 col-lg-4">
|
||||
<div class="card bg-dark border-secondary">
|
||||
<div class="card-body p-4">
|
||||
<div class="text-center mb-4">
|
||||
<i class="bi bi-shield-lock display-4 text-success"></i>
|
||||
<h2 class="mt-3">Code eingeben</h2>
|
||||
<p class="text-muted">
|
||||
Wir haben einen 6-stelligen Code an<br>
|
||||
<strong>{{ email }}</strong> gesendet
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<form method="post" autocomplete="off">
|
||||
<div class="mb-4">
|
||||
<label for="code" class="form-label">Sicherheitscode</label>
|
||||
<input type="text"
|
||||
name="code"
|
||||
id="code"
|
||||
class="form-control form-control-lg bg-dark text-light border-secondary text-center"
|
||||
placeholder="000000"
|
||||
maxlength="6"
|
||||
pattern="[0-9]{6}"
|
||||
inputmode="numeric"
|
||||
required
|
||||
autofocus
|
||||
style="font-size: 1.5rem; letter-spacing: 0.5rem;">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success btn-lg w-100">
|
||||
<i class="bi bi-check-circle me-2"></i>
|
||||
Bestaetigen
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<hr class="border-secondary my-4">
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<a href="{{ url_for('auth.login') }}" class="btn btn-outline-secondary btn-sm">
|
||||
<i class="bi bi-arrow-left me-1"></i>
|
||||
Zurueck
|
||||
</a>
|
||||
<form action="{{ url_for('auth.resend') }}" method="post" class="d-inline">
|
||||
<button type="submit" class="btn btn-outline-secondary btn-sm">
|
||||
<i class="bi bi-arrow-clockwise me-1"></i>
|
||||
Neuen Code senden
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="text-center mt-4 text-muted">
|
||||
<small>
|
||||
<i class="bi bi-clock me-1"></i>
|
||||
Der Code ist 10 Minuten gueltig
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_js %}
|
||||
<script>
|
||||
// Auto-focus and only allow numbers
|
||||
document.getElementById('code').addEventListener('input', function(e) {
|
||||
this.value = this.value.replace(/[^0-9]/g, '');
|
||||
if (this.value.length === 6) {
|
||||
this.form.submit();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user