feat: admin panel enrichment

This commit is contained in:
mohamad
2026-07-19 14:31:28 +03:30
parent d8d7819eca
commit 1042fba121
77 changed files with 4616 additions and 2 deletions
+20
View File
@@ -0,0 +1,20 @@
{% load socialaccount %}
{% if social_auth_enabled %}
<div class="social-auth">
<p class="social-auth-label">Continue with</p>
<div class="social-auth-buttons">
{% for provider in social_providers %}
<a href="{% provider_login_url provider.id %}" class="social-auth-btn social-auth-btn--{{ provider.id }}">
{% if provider.id == "google" %}
<span class="social-auth-icon" aria-hidden="true">G</span>
<span>Google</span>
{% else %}
<span class="social-auth-icon" aria-hidden="true">GH</span>
<span>GitHub</span>
{% endif %}
</a>
{% endfor %}
</div>
</div>
<div class="portal-divider" role="separator"><span>or use email</span></div>
{% endif %}
@@ -0,0 +1,5 @@
Password reset for {{ user.get_username }}
{{ protocol }}://{{ domain }}{% url 'accounts:password_reset_confirm' uidb64=uid token=token %}
If you did not request this, ignore this email.
@@ -0,0 +1 @@
Tecvico password reset
+55
View File
@@ -0,0 +1,55 @@
{% extends "base.html" %}
{% block title %}Login{% endblock %}
{% block meta_description %}Log in to your Tecvico client portal.{% endblock %}
{% block content %}
<section class="page-hero" aria-labelledby="login-heading">
<div class="page-hero-blobs" aria-hidden="true">
<div class="blob blob--1"></div>
<div class="blob blob--2"></div>
</div>
<div class="container">
<div class="page-hero-content">
<div class="section-badge">Client Portal</div>
<h1 class="page-hero-title" id="login-heading">Log In</h1>
<p class="page-hero-subtitle">Access your project briefs and track progress with the Tecvico team.</p>
</div>
</div>
</section>
<section class="section">
<div class="container container--narrow">
<div class="glass-card portal-card fade-in">
{% include "accounts/_social_auth.html" %}
<form method="post" novalidate>
{% csrf_token %}
{% if form.non_field_errors %}
<div class="form-errors">{{ form.non_field_errors }}</div>
{% endif %}
<div class="form-group">
<label for="id_username">Username <span class="required-star">*</span></label>
{{ form.username }}
{{ form.username.errors }}
</div>
<div class="form-group">
<label for="id_password">Password <span class="required-star">*</span></label>
{{ form.password }}
{{ form.password.errors }}
</div>
<button type="submit" class="btn-primary btn-submit">Log in</button>
</form>
<p class="portal-footer-text">
<a href="{% url 'accounts:password_reset' %}">Forgot password?</a>
·
<a href="{% url 'accounts:signup' %}">Create account</a>
</p>
</div>
</div>
</section>
{% endblock %}
+24
View File
@@ -0,0 +1,24 @@
{% extends "base.html" %}
{% block title %}Reset Password{% endblock %}
{% block content %}
<section class="section">
<div class="container container--narrow">
<div class="glass-card portal-card fade-in">
<h1 class="contact-form-title">Reset password</h1>
<p class="portal-intro">Enter your email and we'll send reset instructions.</p>
<form method="post">
{% csrf_token %}
<div class="form-group">
<label for="id_email">Email</label>
{{ form.email }}
{{ form.email.errors }}
</div>
<button type="submit" class="btn-primary btn-submit">Send reset link</button>
</form>
<p class="portal-footer-text"><a href="{% url 'accounts:login' %}">Back to login</a></p>
</div>
</div>
</section>
{% endblock %}
@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block title %}Password Updated{% endblock %}
{% block content %}
<section class="section">
<div class="container container--narrow">
<div class="glass-card portal-card fade-in">
<h1 class="contact-form-title">Password updated</h1>
<p class="portal-intro">You can now log in with your new password.</p>
<p class="portal-footer-text"><a href="{% url 'accounts:login' %}">Log in</a></p>
</div>
</div>
</section>
{% endblock %}
@@ -0,0 +1,28 @@
{% extends "base.html" %}
{% block title %}Set New Password{% endblock %}
{% block content %}
<section class="section">
<div class="container container--narrow">
<div class="glass-card portal-card fade-in">
<h1 class="contact-form-title">Set a new password</h1>
<form method="post">
{% csrf_token %}
{{ form.non_field_errors }}
<div class="form-group">
<label for="id_new_password1">New password</label>
{{ form.new_password1 }}
{{ form.new_password1.errors }}
</div>
<div class="form-group">
<label for="id_new_password2">Confirm password</label>
{{ form.new_password2 }}
{{ form.new_password2.errors }}
</div>
<button type="submit" class="btn-primary btn-submit">Update password</button>
</form>
</div>
</div>
</section>
{% endblock %}
@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block title %}Reset Email Sent{% endblock %}
{% block content %}
<section class="section">
<div class="container container--narrow">
<div class="glass-card portal-card fade-in">
<h1 class="contact-form-title">Check your email</h1>
<p class="portal-intro">If an account exists for that address, you'll receive password reset instructions shortly.</p>
<p class="portal-footer-text"><a href="{% url 'accounts:login' %}">Back to login</a></p>
</div>
</div>
</section>
{% endblock %}
+64
View File
@@ -0,0 +1,64 @@
{% extends "base.html" %}
{% block title %}Profile{% endblock %}
{% block content %}
<section class="page-hero" aria-labelledby="profile-heading">
<div class="container">
<div class="page-hero-content">
<h1 class="page-hero-title" id="profile-heading">Your Profile</h1>
<p class="page-hero-subtitle">Keep your contact details up to date for project communication.</p>
</div>
</div>
</section>
<section class="section">
<div class="container container--narrow">
<div class="glass-card portal-card fade-in">
<form method="post" novalidate>
{% csrf_token %}
<div class="form-grid form-grid--2">
<div class="form-group">
<label for="id_first_name">First name <span class="required-star">*</span></label>
{{ form.first_name }}
{{ form.first_name.errors }}
</div>
<div class="form-group">
<label for="id_last_name">Last name <span class="required-star">*</span></label>
{{ form.last_name }}
{{ form.last_name.errors }}
</div>
</div>
<div class="form-group">
<label for="id_email">Email <span class="required-star">*</span></label>
{{ form.email }}
{{ form.email.errors }}
</div>
<div class="form-grid form-grid--2">
<div class="form-group">
<label for="id_company">Company</label>
{{ form.company }}
{{ form.company.errors }}
</div>
<div class="form-group">
<label for="id_phone">Phone</label>
{{ form.phone }}
{{ form.phone.errors }}
</div>
</div>
<div class="form-group">
<label for="id_timezone">Timezone <span class="required-star">*</span></label>
{{ form.timezone }}
{{ form.timezone.errors }}
</div>
<button type="submit" class="btn-primary btn-submit">Save profile</button>
</form>
</div>
</div>
</section>
{% endblock %}
+96
View File
@@ -0,0 +1,96 @@
{% extends "base.html" %}
{% block title %}Sign Up{% endblock %}
{% block meta_description %}Create a Tecvico client account and submit your project brief.{% endblock %}
{% block content %}
<section class="page-hero" aria-labelledby="signup-heading">
<div class="page-hero-blobs" aria-hidden="true">
<div class="blob blob--1"></div>
<div class="blob blob--2"></div>
</div>
<div class="container">
<div class="page-hero-content">
<div class="section-badge">Client Portal</div>
<h1 class="page-hero-title" id="signup-heading">Create Account</h1>
<p class="page-hero-subtitle">Tell us about your project and our team will take it from there.</p>
</div>
</div>
</section>
<section class="section">
<div class="container container--narrow">
<div class="glass-card portal-card fade-in">
{% include "accounts/_social_auth.html" %}
<form method="post" novalidate>
{% csrf_token %}
{% if form.non_field_errors %}
<div class="form-errors">{{ form.non_field_errors }}</div>
{% endif %}
<div class="form-grid form-grid--2">
<div class="form-group">
<label for="id_first_name">First name <span class="required-star">*</span></label>
{{ form.first_name }}
{{ form.first_name.errors }}
</div>
<div class="form-group">
<label for="id_last_name">Last name <span class="required-star">*</span></label>
{{ form.last_name }}
{{ form.last_name.errors }}
</div>
</div>
<div class="form-group">
<label for="id_email">Email <span class="required-star">*</span></label>
{{ form.email }}
{{ form.email.errors }}
</div>
<div class="form-group">
<label for="id_username">Username <span class="required-star">*</span></label>
{{ form.username }}
{{ form.username.errors }}
</div>
<div class="form-grid form-grid--2">
<div class="form-group">
<label for="id_company">Company</label>
{{ form.company }}
{{ form.company.errors }}
</div>
<div class="form-group">
<label for="id_phone">Phone</label>
{{ form.phone }}
{{ form.phone.errors }}
</div>
</div>
<div class="form-group">
<label for="id_timezone">Timezone <span class="required-star">*</span></label>
{{ form.timezone }}
{{ form.timezone.errors }}
</div>
<div class="form-grid form-grid--2">
<div class="form-group">
<label for="id_password1">Password <span class="required-star">*</span></label>
{{ form.password1 }}
{{ form.password1.errors }}
</div>
<div class="form-group">
<label for="id_password2">Confirm password <span class="required-star">*</span></label>
{{ form.password2 }}
{{ form.password2.errors }}
</div>
</div>
<button type="submit" class="btn-primary btn-submit">Create account</button>
</form>
<p class="portal-footer-text">Already have an account? <a href="{% url 'accounts:login' %}">Log in</a></p>
</div>
</div>
</section>
{% endblock %}