Initial commit

This commit is contained in:
kddd21a
2026-07-29 10:47:40 +00:00
commit 402c3ec6ed
171 changed files with 10536 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
<section class="py-5 bg-white" id="available-tests">
<div class="container">
<h2 class="text-center fw-bold mb-5">Available Tests</h2>
<div class="row g-4">
<div class="col-md-6 col-lg-3"><div class="test-card h-100"><div class="test-icon test-icon-reading"><i class="bi bi-book"></i></div><h4>Reading</h4><p>Original passages with focused comprehension questions.</p><a href="{% url 'exam_list' %}?skill=reading" class="test-link test-link-reading">Start Practice <i class="bi bi-arrow-right"></i></a></div></div>
<div class="col-md-6 col-lg-3"><div class="test-card h-100"><div class="test-icon test-icon-listening"><i class="bi bi-headphones"></i></div><h4>Listening</h4><p>Audio recordings with timed objective questions.</p><a href="{% url 'exam_list' %}?skill=listening" class="test-link test-link-listening">Start Practice <i class="bi bi-arrow-right"></i></a></div></div>
<div class="col-md-6 col-lg-3"><div class="test-card h-100"><div class="test-icon test-icon-writing"><i class="bi bi-pencil"></i></div><h4>Writing</h4><p>Timed essay practice ready for instructor review.</p><a href="{% url 'exam_list' %}?skill=writing" class="test-link test-link-writing">Start Practice <i class="bi bi-arrow-right"></i></a></div></div>
<div class="col-md-6 col-lg-3"><div class="test-card h-100"><div class="test-icon test-icon-speaking"><i class="bi bi-mic"></i></div><h4>Speaking</h4><p>Speaking prompts with audio-response upload.</p><a href="{% url 'exam_list' %}?skill=speaking" class="test-link test-link-speaking">Start Practice <i class="bi bi-arrow-right"></i></a></div></div>
</div>
</div>
</section>
+11
View File
@@ -0,0 +1,11 @@
<section class="site-cta site-cta--premium" aria-labelledby="premium-cta-title">
<div class="container site-cta__inner">
<div class="site-cta__premium-mark" aria-hidden="true"><i class="bi bi-infinity"></i></div>
<div class="site-cta__copy">
<span>{% if has_lifetime_premium %}<i class="bi bi-patch-check-fill"></i> Premium active{% else %}Lifetime Premium{% endif %}</span>
<h2 id="premium-cta-title">{% if has_lifetime_premium %}Every test is unlocked for you.{% else %}Unlock every test. Keep access forever.{% endif %}</h2>
<p>{% if has_lifetime_premium %}Your one-time access includes current and future Premium tests.{% else %}One payment gives you unlimited access to the complete practice library—no subscription and no expiry.{% endif %}</p>
</div>
<a href="{% if has_lifetime_premium %}{% url 'exam_list' %}{% else %}{% url 'premium' %}{% endif %}" class="site-cta__button">{% if has_lifetime_premium %}Browse all tests{% else %}Explore Premium{% endif %} <i class="bi bi-arrow-right"></i></a>
</div>
</section>
+11
View File
@@ -0,0 +1,11 @@
<section class="py-5 bg-light" id="about">
<div class="container">
<h2 class="text-center fw-bold mb-5">Why Choose Us?</h2>
<div class="row g-4">
<div class="col-md-6 col-lg-3"><div class="feature-card h-100"><div class="feature-icon"><i class="bi bi-stopwatch"></i></div><h4>Real Exam Timer</h4><p>Practice with the same time limits as the real IELTS exam.</p></div></div>
<div class="col-md-6 col-lg-3"><div class="feature-card h-100"><div class="feature-icon"><i class="bi bi-bar-chart"></i></div><h4>Instant Results</h4><p>Get your band score immediately after the test.</p></div></div>
<div class="col-md-6 col-lg-3"><div class="feature-card h-100"><div class="feature-icon"><i class="bi bi-book"></i></div><h4>Updated Questions</h4><p>All tests are based on the latest IELTS format.</p></div></div>
<div class="col-md-6 col-lg-3"><div class="feature-card h-100"><div class="feature-icon"><i class="bi bi-phone"></i></div><h4>Practice Anywhere</h4><p>Access our platform on any device, anytime.</p></div></div>
</div>
</div>
</section>
+14
View File
@@ -0,0 +1,14 @@
<footer class="site-footer">
<div class="container">
<div class="site-footer__grid">
<div class="site-footer__intro">
<a class="site-footer__brand" href="{% url 'home' %}" aria-label="Testpoint home"><span class="brand-icon"><i class="bi bi-book" aria-hidden="true"></i></span>Testpoint</a>
<p>Focused practice for your<br>IELTS preparation.</p>
</div>
<nav aria-label="Footer quick links"><h3>Quick Links</h3><a href="{% url 'home' %}">Home</a><a href="{% url 'exam_list' %}">Exams</a><a href="{% url 'home' %}#about">About</a></nav>
<nav aria-label="Footer support links"><h3>Support</h3><a href="{% url 'contact' %}">Contact Us</a><a href="{% url 'faq' %}">FAQ</a><a href="{% url 'privacy' %}">Privacy Policy</a><a href="{% url 'terms' %}">Terms of Use</a></nav>
<div><h3>Stay Connected</h3>{% if social_facebook_url or social_instagram_url or social_youtube_url or social_telegram_url %}<div class="site-footer__socials">{% if social_facebook_url %}<a href="{{ social_facebook_url }}" target="_blank" rel="noopener noreferrer" aria-label="Facebook"><i class="bi bi-facebook"></i></a>{% endif %}{% if social_instagram_url %}<a href="{{ social_instagram_url }}" target="_blank" rel="noopener noreferrer" aria-label="Instagram"><i class="bi bi-instagram"></i></a>{% endif %}{% if social_youtube_url %}<a href="{{ social_youtube_url }}" target="_blank" rel="noopener noreferrer" aria-label="YouTube"><i class="bi bi-youtube"></i></a>{% endif %}{% if social_telegram_url %}<a href="{{ social_telegram_url }}" target="_blank" rel="noopener noreferrer" aria-label="Telegram"><i class="bi bi-telegram"></i></a>{% endif %}</div>{% else %}<a class="site-footer__email" href="mailto:{{ site_support_email }}">{{ site_support_email }}</a>{% endif %}</div>
</div>
<p class="site-footer__copyright">&copy; {% now "Y" %} Testpoint. All rights reserved.</p>
</div>
</footer>
+15
View File
@@ -0,0 +1,15 @@
{% load static %}
<section class="landing-hero" aria-labelledby="landing-title">
<div class="landing-shell landing-hero__grid">
<div class="landing-hero__copy">
<p class="landing-eyebrow">IELTS practice, built for exam day</p>
<h1 id="landing-title">Practice IELTS.<br><span>Fix weak areas.</span></h1>
<p class="landing-hero__lead">Timed practice, clear scoring, and passage evidence for objective answers.</p>
<div class="landing-actions">
<a href="{% url 'account_signup' %}" class="landing-button landing-button--primary">Start free</a>
<a href="{% url 'exam_list' %}" class="landing-button landing-button--secondary">Browse tests <i class="bi bi-arrow-right" aria-hidden="true"></i></a>
</div>
</div>
{% include "components/leaderboard_preview.html" %}
</div>
</section>
+11
View File
@@ -0,0 +1,11 @@
<section class="how-it-works py-5">
<div class="container">
<h2 class="text-center mb-5 fw-bold">How It Works</h2>
<div class="row g-4 text-center">
<div class="col-md-3"><div class="how-step"><div class="step-icon"><span class="step-number">1</span><i class="bi bi-person"></i></div><h3>Register</h3><p>Create your free account in seconds.</p></div></div>
<div class="col-md-3"><div class="how-step"><div class="step-icon"><span class="step-number">2</span><i class="bi bi-file-earmark-text"></i></div><h3>Choose a Test</h3><p>Select the skill and start your test.</p></div></div>
<div class="col-md-3"><div class="how-step"><div class="step-icon"><span class="step-number">3</span><i class="bi bi-clock"></i></div><h3>Finish the Exam</h3><p>Complete the test within the time limit.</p></div></div>
<div class="col-md-3"><div class="how-step"><div class="step-icon"><span class="step-number">4</span><i class="bi bi-trophy"></i></div><h3>Get Your Score</h3><p>View your band score and detailed report.</p></div></div>
</div>
</div>
</section>
@@ -0,0 +1,21 @@
<aside class="leaderboard-preview" aria-labelledby="preview-title">
<header class="leaderboard-preview__header">
<div><h2 id="preview-title">Weekly leaderboard</h2><p>See who is improving this week</p></div>
{% if leaderboard_preview.0.demo %}<span>Preview</span>{% endif %}
</header>
<nav class="leaderboard-preview__tabs" aria-label="Leaderboard period preview">
<span class="is-active">This Week</span><span>This Month</span><span>All Time</span>
</nav>
<div class="leaderboard-preview__podium">
{% with student=leaderboard_preview.1 %}<div class="preview-winner preview-winner--silver"><b>2</b><span>{{ student.initial }}</span><strong>{{ student.name }}</strong><small>Band {{ student.band|floatformat:1 }}</small></div>{% endwith %}
{% with student=leaderboard_preview.0 %}<div class="preview-winner preview-winner--gold"><b>1</b><span>{{ student.initial }}</span><strong>{{ student.name }}</strong><small>Band {{ student.band|floatformat:1 }}</small></div>{% endwith %}
{% with student=leaderboard_preview.2 %}<div class="preview-winner preview-winner--bronze"><b>3</b><span>{{ student.initial }}</span><strong>{{ student.name }}</strong><small>Band {{ student.band|floatformat:1 }}</small></div>{% endwith %}
</div>
<div class="leaderboard-preview__rows">
{% for student in leaderboard_preview|slice:"3:5" %}
<div><b>{{ student.rank }}</b><span class="preview-avatar">{{ student.initial }}</span><strong>{{ student.name }}</strong><span>{{ student.band|floatformat:1 }}</span></div>
{% endfor %}
<div class="is-current"><b>{{ leaderboard_preview_user.rank }}</b><span class="preview-avatar">{{ leaderboard_preview_user.initial }}</span><strong>{{ leaderboard_preview_user.name }} {% if request.user.is_authenticated %}(You){% else %}(Example){% endif %}</strong><span>Band {{ leaderboard_preview_user.band|floatformat:1 }} <i class="bi bi-arrow-up"></i></span></div>
</div>
<a class="leaderboard-preview__link" href="{% if request.user.is_authenticated %}{% url 'leaderboard' %}{% else %}{% url 'account_signup' %}{% endif %}">{% if request.user.is_authenticated %}View full leaderboard{% else %}Join the leaderboard{% endif %} <i class="bi bi-arrow-right"></i></a>
</aside>
+30
View File
@@ -0,0 +1,30 @@
<nav class="navbar navbar-expand-lg py-3" aria-label="Main navigation">
<div class="container">
<a class="navbar-brand fw-bold" href="{% url 'home' %}">
<span class="brand-icon"><i class="bi bi-book"></i></span> Testpoint
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mainNavigation" aria-controls="mainNavigation" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="mainNavigation">
<ul class="navbar-nav mx-auto">
<li class="nav-item"><a class="nav-link{% if request.resolver_match.url_name == 'home' %} active{% endif %}" href="{% url 'home' %}"{% if request.resolver_match.url_name == 'home' %} aria-current="page"{% endif %}>Home</a></li>
<li class="nav-item"><a class="nav-link{% if request.resolver_match.url_name == 'exam_list' %} active{% endif %}" href="{% url 'exam_list' %}"{% if request.resolver_match.url_name == 'exam_list' %} aria-current="page"{% endif %}>Exams</a></li>
<li class="nav-item"><a class="nav-link nav-skill-link{% if request.GET.skill == 'reading' %} active{% endif %}" href="{% url 'exam_list' %}?skill=reading">Reading</a></li>
<li class="nav-item"><a class="nav-link nav-skill-link{% if request.GET.skill == 'listening' %} active{% endif %}" href="{% url 'exam_list' %}?skill=listening">Listening</a></li>
<li class="nav-item"><a class="nav-link nav-skill-link{% if request.GET.skill == 'writing' %} active{% endif %}" href="{% url 'exam_list' %}?skill=writing">Writing</a></li>
<li class="nav-item"><a class="nav-link nav-skill-link{% if request.GET.skill == 'speaking' %} active{% endif %}" href="{% url 'exam_list' %}?skill=speaking">Speaking</a></li>
<li class="nav-item"><a class="nav-link" href="{% url 'home' %}#about">About</a></li>
</ul>
<div class="navbar-actions">
{% if request.user.is_authenticated %}
<a href="{% url 'student_dashboard' %}" class="btn btn-light me-2">Dashboard</a>
<a href="{% url 'account_logout' %}" class="btn btn-primary">Logout</a>
{% else %}
<a href="{% url 'account_login' %}" class="btn btn-light me-2">Login</a>
<a href="{% url 'account_signup' %}" class="btn btn-primary">Register</a>
{% endif %}
</div>
</div>
</div>
</nav>
+135
View File
@@ -0,0 +1,135 @@
<div class="card shadow-sm border-0 rounded-4 mt-4">
<div class="card-body p-4">
<div class="d-flex justify-content-between align-items-center mb-4">
<h4 class="fw-bold mb-0">
IELTS Skill Progress
</h4>
<span class="text-muted">
Current level
</span>
</div>
<!-- Reading -->
<div class="mb-4">
<div class="d-flex justify-content-between mb-2">
<span>
<i class="bi bi-book text-primary"></i>
Reading
</span>
<span class="fw-semibold">
80%
</span>
</div>
<div class="progress" style="height:10px;">
<div class="progress-bar"
style="width:80%">
</div>
</div>
</div>
<!-- Listening -->
<div class="mb-4">
<div class="d-flex justify-content-between mb-2">
<span>
<i class="bi bi-headphones text-primary"></i>
Listening
</span>
<span class="fw-semibold">
90%
</span>
</div>
<div class="progress" style="height:10px;">
<div class="progress-bar"
style="width:90%">
</div>
</div>
</div>
<!-- Writing -->
<div class="mb-4">
<div class="d-flex justify-content-between mb-2">
<span>
<i class="bi bi-pencil-square text-primary"></i>
Writing
</span>
<span class="fw-semibold">
65%
</span>
</div>
<div class="progress" style="height:10px;">
<div class="progress-bar"
style="width:65%">
</div>
</div>
</div>
<!-- Speaking -->
<div>
<div class="d-flex justify-content-between mb-2">
<span>
<i class="bi bi-mic text-primary"></i>
Speaking
</span>
<span class="fw-semibold">
70%
</span>
</div>
<div class="progress" style="height:10px;">
<div class="progress-bar"
style="width:70%">
</div>
</div>
</div>
</div>
</div>
+74
View File
@@ -0,0 +1,74 @@
<div class="col-md-2 sidebar">
<div class="logo">
<h3 class="fw-bold">
<i class="bi bi-mortarboard-fill"></i>
Testpoint
</h3>
</div>
<hr>
<ul class="nav flex-column mt-4">
<li class="nav-item">
<a href="{% url 'student_dashboard' %}" class="nav-link active">
<i class="bi bi-house-door"></i>
Dashboard
</a>
</li>
<li class="nav-item">
<a href="{% url 'exam_list' %}" class="nav-link">
<i class="bi bi-clipboard-check"></i>
Mock Tests
</a>
</li>
<li class="nav-item">
<a href="{% url 'exam_list' %}" class="nav-link">
<i class="bi bi-book"></i>
Reading
</a>
</li>
<li class="nav-item">
<a href="{% url 'exam_list' %}" class="nav-link">
<i class="bi bi-headphones"></i>
Listening
</a>
</li>
<li class="nav-item">
<a href="{% url 'exam_list' %}" class="nav-link">
<i class="bi bi-pencil-square"></i>
Writing
</a>
</li>
<li class="nav-item">
<a href="{% url 'exam_list' %}" class="nav-link">
<i class="bi bi-mic"></i>
Speaking
</a>
</li>
<li class="nav-item">
<a href="{% url 'student_dashboard' %}" class="nav-link">
<i class="bi bi-graph-up"></i>
Progress
</a>
</li>
<li class="nav-item">
<a href="{% url 'student_dashboard' %}" class="nav-link">
<i class="bi bi-gear"></i>
Settings
</a>
</li>
</ul>
</div>