Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Muhammadbugaje/NAMETS_Website/llms.txt

Use this file to discover all available pages before exploring further.

The Academics module is the educational backbone of the NAMETS platform. It manages tutorial and Islamiyya courses, session timetables, study materials, exam results, peer resource submissions, Islamiyya enrolment with payment verification, and inter-association competition results.

Data Models

Represents an individual who teaches one or more courses.
FieldTypeNotes
nameCharFieldFull name, max 200 chars
bioTextFieldOptional background information
is_activeBooleanFieldControls appearance in listings
Ordered alphabetically by name. Related to Course via a many-to-many relationship.
The central academic unit. Can be a regular tutorial or an Islamiyya course.
FieldTypeNotes
nameCharFieldCourse name, max 200 chars
slugSlugFieldUnique URL identifier
descriptionTextFieldDetailed course overview
course_typeCharFieldtutorial or islamiyya
is_activeBooleanFieldHides course from public views when False
tutorsM2M → TutorOne or more assigned tutors
created_atDateTimeFieldAuto-set on creation
Anonymous or named student feedback for a tutor within a specific course.
FieldTypeNotes
courseForeignKeyThe course being evaluated
tutorForeignKeyThe tutor being rated
student_nameCharFieldOptional — leave blank for anonymous
ratingIntegerFieldScale 1–5
commentsTextFieldFree-text feedback
submitted_atDateTimeFieldAuto-set on submission
Evaluations are only accessible when SiteSettings.tutor_evaluations_open is True.
A scheduled class meeting within a course.
FieldTypeNotes
courseForeignKeyParent course
titleCharFieldOptional session title
dateDateFieldSession date
start_timeTimeFieldSession start
end_timeTimeFieldSession end
locationCharFieldVenue (optional)
is_activeBooleanFieldControls visibility
Ordered by date then start_time.
A study resource attached to a course. Supports direct file upload or a Google Drive link.
FieldTypeNotes
courseForeignKeyParent course
titleCharFieldMaterial title
descriptionTextFieldOptional summary
fileCloudinaryFieldUploaded to Cloudinary materials/ folder
drive_linkURLFieldGoogle Drive share link (alternative)
is_activeBooleanFieldControls public availability
is_featuredBooleanFieldShown on the course list page when True
uploaded_atDateTimeFieldAuto-set on upload
The download_material view redirects to the Cloudinary URL with a forced download flag, or falls back to the Drive link.
Evaluation — an exam or test event for a course.
FieldTypeNotes
courseForeignKeyParent course
titleCharFieldExam name
dateDateFieldDate of exam
total_marksPositiveIntegerFieldMaximum possible score
is_featuredBooleanFieldShow on course list page
Result — an individual student’s score for an evaluation.
FieldTypeNotes
evaluationForeignKeyParent evaluation
student_nameCharFieldFull name
registration_numberCharFieldMatric or student ID
student_emailEmailFieldOptional
marks_obtainedDecimalFieldScore (max 5 digits, 2 dp)
gradeCharFieldLetter grade (e.g., A, B)
remarksTextFieldOptional comments
A recurring schedule slot in the weekly timetable.
FieldTypeNotes
dayIntegerField1 = Monday … 7 = Sunday
time_startTimeFieldSlot start
time_endTimeFieldSlot end
course_nameCharFieldDisplay name for this slot
venueCharFieldOptional location
entry_typeCharFieldtutorial or islamiyya
levelCharFieldlevel1 or level2 (see below)
is_activeBooleanFieldHides slot from timetable
orderPositiveIntegerFieldManual sort within a day
Entries are ordered by entry_type → level → day → time_start → order.Level meanings:
  • level1 — First-year / beginner group (displayed on the Level 1 timetable tab)
  • level2 — Second-year / advanced group (displayed on the Level 2 timetable tab)
Timetable data can be bulk-imported from Excel via the admin upload view.
IslamiyyaCourse — a simple list of available Islamiyya subject names (e.g., Tajweed, Fiqh).IslamiyyaRegistration — a student’s enrolment record.
FieldTypeNotes
nameCharFieldFull name
registration_numberCharFieldUniversity matric / student ID
genderCharFieldM or F
photoCloudinaryFieldStored in islamiyya_photos/
departmentCharFieldFaculty department
emailEmailFieldUnique per registration
phoneCharFieldContact phone
levelCharFieldbeginner, intermediate, or advanced
coursesM2MSelected IslamiyyaCourse records
application_idCharFieldAuto-generated; format ISL-YYYY-XXXX
is_verifiedBooleanFieldSet by admin after payment confirmed
verified_atDateTimeFieldAuto-set when is_verified first becomes True
whatsapp_linkURLFieldPer-student group link (shown post-verification)
is_activeBooleanFieldDeactivate expired enrolments
The application_id is generated automatically using the pattern ISL-<year>-<sequence> (e.g., ISL-2025-0001).
Peer-contributed study materials awaiting admin review.
FieldTypeNotes
titleCharFieldResource title
descriptionTextFieldWhat the resource covers
fileCloudinaryFieldStored in user_resources/
submitted_byCharFieldOptional submitter name
emailEmailFieldOptional — for review notification
statusCharFieldpending, approved, or rejected
submitted_atDateTimeFieldAuto-set on submission
reviewed_atDateTimeFieldSet when admin acts on the submission
download_countPositiveIntegerFieldIncremented on each download
email_sentBooleanFieldTracks whether submitter was notified
Allowed file types: pdf, doc, docx, jpg, jpeg, png, zip, pptx.
Records outcomes from NAMETS-organised competitions (e.g., Musabaqah, Quiz).
FieldTypeNotes
event_nameCharFielde.g., NAMETS Week 2024
categoryCharFielde.g., Musabaqah 60 Hizb, Quiz
positionCharFielde.g., 1st, 2nd, participant
participant_nameCharFieldFull name of the participant
departmentCharFieldOptional faculty/department
pointsDecimalFieldScore (optional)
yearCharFieldAcademic session, e.g., 2025/2026
is_activeBooleanFieldControls public display
orderPositiveIntegerFieldLower numbers appear first within category
Results are grouped by event_name – category on the public page and can be filtered by event, category, and year.

URL Routes

All routes are under /academics/ (app namespace: academics).
NameURL PatternDescription
course_list/academics/Overview of tutorial & Islamiyya counts
tutorial_list/academics/tutorials/Tutorial courses + timetable
islamia_list/academics/islamiyya/Islamiyya courses + timetable
course_detail/academics/courses/<slug>/Single course details
course_results/academics/courses/<slug>/results/Student results for a course
evaluate_tutor/academics/courses/<slug>/evaluate/Submit a tutor evaluation
student_search/academics/students/search/Search results by name or reg number
materials_list/academics/courses/<slug>/materials/Course materials listing
exams_list/academics/courses/<slug>/exams/Exams for a specific course
exam_list/academics/exams/All active exams (filterable by course)
exam_detail/academics/exams/<int:exam_id>/Results for a specific exam
all_results/academics/results/All results (filterable)
download_material/academics/material/<int:material_id>/download/Redirect to Cloudinary or Drive link
islamiyya_register/academics/islamiyya/register/Islamiyya enrolment form
islamiyya_check_status/academics/islamiyya/status/Look up registration by email or reg no
islamiyya_dashboard/academics/islamiyya/dashboard/Registration summary + WhatsApp link
resources/academics/resources/Browse approved peer resources
submit_resource/academics/submit-resource/Submit a resource for admin review
download_resource/academics/download/<int:pk>/Increment counter and redirect to file
competition_results/academics/competition-results/Filtered competition results

Islamiyya Registration Flow

1

Admin opens registration

In the Django admin, SiteSettings.islamiyya_registration_open must be set to True. If closed, visitors see a closed-registration page.
2

Student submits the registration form

The student fills in personal details, selects their level (beginner / intermediate / advanced), and chooses one or more IslamiyyaCourse options at /academics/islamiyya/register/.
3

Application ID is generated

On save, the model auto-generates an application_id following the format ISL-YYYY-XXXX (e.g., ISL-2025-0003). The student is redirected to their dashboard.
4

Student makes payment

The student pays the enrolment fee through the designated channel and keeps their application_id handy.
5

Admin verifies payment

In the admin, the admin locates the registration by application_id or email and ticks is_verified = True. The system auto-sets verified_at to the current timestamp.
6

Student accesses WhatsApp group

The student returns to their dashboard at /academics/islamiyya/dashboard/. If is_verified is True, the dashboard displays the WhatsApp group link (either the per-registration whatsapp_link or the global fallback from SiteSettings.islamiyya_whatsapp_link).
WhatsApp links expire after 365 days from verified_at. Once expired, the link is hidden from the dashboard and expired = True is passed to the template.

UserResourceSubmission Approval Workflow

1

Student submits a resource

Using the form at /academics/submit-resource/, the student uploads a file (PDF, DOCX, PPTX, ZIP, or image). The record is saved with status = 'pending'.
2

Admin reviews the submission

In the Django admin, the admin opens the UserResourceSubmission record, previews the file, and changes status to either approved or rejected. The reviewed_at timestamp is set at this point.
3

Resource becomes public (if approved)

Approved resources appear in the paginated listing at /academics/resources/ and are searchable by title and description.
4

Download counter tracks usage

Each download via /academics/download/<pk>/ increments download_count before redirecting to the Cloudinary file URL.
Rejected resources are never shown publicly. The submitter may optionally be notified via email; track this with the email_sent flag on the record.

Build docs developers (and LLMs) love