Version: 1.1
Date: January 27, 2026
Organization: ZipCodeWilmington
Document Type: Product Specification & Functional Requirements
Athena is a SaaS web application designed to help software development students at ZipCodeWilmington achieve technical mastery through adaptive, intelligent quiz-based learning. The platform leverages spaced repetition algorithms (FSRS - Free Spaced Repetition Scheduler) to optimize knowledge retention and track student progress across multiple programming languages and technical domains including Java, Python, SQL, and Agile methodologies.
To create an intelligent, adaptive learning platform that accelerates software development students' mastery of technical concepts through scientifically-proven spaced repetition techniques, detailed performance analytics, and personalized learning pathways.
- Accelerate Learning: Reduce time-to-mastery for core programming concepts by 30% through adaptive spaced repetition
- Improve Retention: Increase long-term knowledge retention rates by 50% compared to traditional study methods
- Identify Gaps: Provide real-time insights into student knowledge gaps to enable targeted intervention
- Scale Education: Support unlimited concurrent students with minimal instructor overhead
- Data-Driven Instruction: Enable instructors to make evidence-based curriculum adjustments based on aggregate student performance
- Mastery Rate: Percentage of questions answered correctly (Target: 80%+)
- Retention Rate: Percentage of previously mastered concepts retained after 30 days (Target: 75%+)
- Quiz Completion Rate: Percentage of assigned quizzes completed (Target: 90%+)
- Average Time to Mastery: Days required to achieve 80% accuracy on a topic (Target: <14 days)
- Daily Active Users (DAU): Student logins per day (Target: 70% of enrolled students)
- Average Quiz Attempts per Week: Quiz sessions per student (Target: 5+)
- Session Duration: Average time spent per quiz session (Target: 15-20 minutes)
- System Uptime: Platform availability (Target: 99.5%+)
- Response Time: API response time for quiz generation (Target: <500ms)
- Data Accuracy: Correctness of spaced repetition scheduling (Target: 95%+)
- Time to Identify Struggling Students: Hours to detect at-risk students (Target: <24 hours)
- Curriculum Adjustment Speed: Days to implement topic-based interventions (Target: <7 days)
- Description: Software development students enrolled in ZipCodeWilmington courses
- Primary Goals: Master programming concepts, track personal progress, identify weak areas
- Access Level: Personal dashboard, quiz attempts, test attempts, progress reports
- Success Criteria: Achieve 80%+ mastery rate across all assigned topics
- Description: Teaching staff responsible for course delivery and student success
- Primary Goals: Monitor student progress, identify struggling students, adjust curriculum
- Access Level: All student data, analytics dashboards, question bank management, test creation
- Success Criteria: 85%+ of students achieve course completion standards
- Description: Subject matter experts who manage the question database
- Primary Goals: Create, update, and maintain high-quality quiz questions and answers
- Access Level: Question bank CRUD operations, topic management, difficulty calibration
- Success Criteria: Maintain 500+ quality questions per major topic area
- Description: Technical staff responsible for platform operations
- Primary Goals: Ensure system uptime, manage user accounts, maintain data integrity
- Access Level: System configuration, user management, database maintenance, logs
- Success Criteria: Maintain 99.5%+ uptime and <500ms response times
- Description: Leadership responsible for overall curriculum effectiveness
- Primary Goals: Evaluate program effectiveness, make strategic curriculum decisions
- Access Level: Aggregate analytics, cohort comparisons, longitudinal trend data
- Success Criteria: Demonstrate measurable improvement in student outcomes year-over-year
Athena is a three-tier web application consisting of:
- Frontend: JavaScript/JSON-based single-page application (SPA)
- Backend: RESTful API server (Go-based) handling business logic
- Database: Relational database (PostgreSQL/MySQL) storing questions, user data, and attempt history
The platform implements an adaptive learning system using the FSRS (Free Spaced Repetition Scheduler) algorithm to intelligently schedule question reviews based on individual student performance patterns.
Unlike generic quiz platforms (Kahoot!, Quizlet), Athena is purpose-built for technical software development education with:
- Deep tag-based categorization for identifying conceptual gaps
- Difficulty-progressive question sequencing
- Integration with ZipCodeWilmington's curriculum structure
- Comprehensive instructor analytics for intervention
Demographics
- Age: 24
- Background: Career changer, previously in retail management
- Technical Level: Beginner to intermediate
Goals
- Master Java fundamentals within 12 weeks
- Build confidence in technical interviews
- Identify and fix knowledge gaps quickly
Pain Points
- Struggles to know what to study when
- Forgets concepts learned weeks ago
- Doesn't know if ready for assessments
How Athena Helps
- Automatic scheduling of reviews prevents forgetting
- Clear progress metrics show readiness
- Tag-based insights reveal conceptual gaps (e.g., "control structures")
Usage Pattern
- Completes 1-2 quiz sessions daily (15 minutes each)
- Reviews progress dashboard before tests
- Uses difficulty ratings to gauge mastery
Demographics
- Age: 19
- Background: Recent high school graduate, first exposure to coding
- Technical Level: Novice
Goals
- Pass course requirements to complete bootcamp
- Build foundational understanding before advanced topics
- Get personalized help when stuck
Pain Points
- Overwhelmed by volume of material
- Falls behind quickly when concepts aren't clear
- Doesn't know how to ask for help effectively
How Athena Helps
- Spaced repetition focuses on weak areas automatically
- Difficulty progression prevents overwhelming complexity
- Instructor dashboard flags Jordan for intervention
Usage Pattern
- Completes required weekly quizzes
- Struggles with difficulty 4+ questions
- Benefits from instructor outreach based on analytics
Demographics
- Age: 28
- Background: BS in Computer Science, seeking specialized training
- Technical Level: Intermediate to advanced
Goals
- Reinforce fundamentals while learning advanced concepts
- Maintain knowledge across multiple languages (Java, Python, SQL)
- Prepare efficiently for technical interviews
Pain Points
- Wastes time on concepts already mastered
- Needs efficient review to prevent degradation
- Wants challenging material
How Athena Helps
- Algorithm quickly identifies mastered concepts, reduces review frequency
- Difficulty levels allow focus on complex questions
- Multi-topic support maintains breadth of knowledge
Usage Pattern
- Completes quizzes quickly with high accuracy
- Focuses on difficulty 5-7 questions
- Uses platform for pre-interview refreshers
Demographics
- Age: 35
- Background: 10 years industry experience + 3 years teaching
- Role: Lead Instructor
Goals
- Ensure 85%+ of cohort achieves mastery
- Identify struggling students within first 2 weeks
- Adjust curriculum based on common gaps
Pain Points
- Can't monitor 30+ students individually
- Discovers struggles too late to intervene
- Unclear which topics need more classroom time
How Athena Helps
- Real-time dashboard shows struggling students
- Tag analytics reveal common misconceptions
- Historical data informs curriculum improvements
Usage Pattern
- Reviews cohort dashboard 2-3x weekly
- Drills into individual student records when alerted
- Analyzes test results to adjust upcoming lessons
Demographics
- Age: 42
- Background: Senior software engineer, curriculum SME
- Role: Question Bank Manager
Goals
- Maintain 1000+ high-quality questions across topics
- Ensure questions align with curriculum objectives
- Calibrate difficulty ratings accurately
Pain Points
- Hard to know if questions are too easy/hard
- Difficult to maintain consistency across topics
- Time-consuming to create quality distractors (wrong answers)
How Athena Helps
- Question statistics show average accuracy rates
- Tag system enables consistency checking
- Template system speeds question creation
Usage Pattern
- Reviews question performance metrics monthly
- Creates 10-20 new questions per topic quarterly
- Adjusts difficulty ratings based on student performance data
- Description: Intelligent quiz generation using FSRS algorithm
- Details:
- Generates personalized quizzes based on past performance
- Balances new questions with review of previously seen material
- Prioritizes incorrectly answered questions for earlier review
- Schedules correctly answered questions with increasing intervals
- User Value: Optimizes study time by focusing on weak areas
- Description: Visual representation of learning progress
- Details:
- Overall mastery percentage across all topics
- Per-topic progress bars
- Recent quiz attempt history
- Strength/weakness indicators by tag
- Streak tracking for motivation
- User Value: Clear understanding of current standing and readiness
- Description: Questions ranked 1-7 by difficulty
- Details:
- Start with easier questions (difficulty 1-3)
- Unlock harder questions as mastery increases
- Filter quiz generation by difficulty range
- Visual difficulty indicators
- User Value: Builds confidence while preventing overwhelming complexity
- Description: Conceptual gap identification through question tags
- Details:
- Questions tagged with concepts (e.g., "control structures", "loops", "recursion")
- Dashboard shows accuracy by tag
- Suggested focus areas based on low-performing tags
- Cross-topic tag aggregation
- User Value: Identifies specific concepts needing additional study
- Description: Detailed review of completed quizzes
- Details:
- Review all questions from past attempts
- See correct/incorrect answers marked clearly
- Explanations for correct answers (future enhancement)
- Time spent per question tracking
- User Value: Learn from mistakes and reinforce correct knowledge
- Description: Formal assessments with fixed question sets
- Details:
- Countdown timer during test
- Fixed question set (same questions for all students in cohort)
- Single attempt per test (no retakes without instructor approval)
- Higher weight in overall scoring
- Simulates real assessment conditions
- User Value: Prepares students for formal evaluations and interviews
- Description: Comprehensive view of individual student performance
- Details:
- Mastery percentage by topic
- Quiz completion rates
- Time-to-mastery trends
- Comparison to cohort averages
- Historical performance graphs
- User Value: Data-driven student intervention
- Description: Aggregate view of class performance
- Details:
- Class-wide mastery rates by topic
- Struggling student identification (red flags)
- Common mistake patterns (tag-based)
- Quiz completion rates
- Test score distributions
- User Value: Inform curriculum adjustments and classroom focus
- Description: CRUD operations for quiz questions
- Details:
- Create questions with multiple-choice answers
- Assign difficulty ratings (1-7)
- Tag questions with multiple concepts
- Associate questions with topics
- Activate/deactivate questions without deletion
- Create Import/Export via a JSON format question-answer data
- User Value: Maintain high-quality, relevant question content
- Description: Create and administer formal tests
- Details:
- Select specific questions for test
- Set time limits (e.g., 60 minutes)
- Schedule test availability windows
- Assign tests to specific cohorts
- Manual grading override capabilities
- User Value: Standardized assessment across cohorts
- Description: Statistical analysis of question effectiveness
- Details:
- Average accuracy rate per question
- Identify questions that are too easy/hard
- Flag potentially ambiguous questions
- Distribution of student answers (distractor analysis)
- User Value: Continuous improvement of question quality
- Description: Implementation of Free Spaced Repetition Scheduler algorithm
- Details:
- Tracks individual question attempt history per student
- Calculates optimal review intervals based on:
- Number of correct/incorrect attempts
- Time since last attempt
- Question difficulty
- Student's historical performance on similar questions
- Dynamically adjusts scheduling based on performance
- Prevents "cramming" by enforcing minimum intervals
- User Value: Scientifically-optimized learning schedule
- Description: Support for multiple programming languages and concepts
- Details:
- Core topics: Java, Python, SQL, Agile, Data Structures, Algorithms
- Separate question banks per topic
- Cross-topic quiz generation option
- Topic-specific progress tracking
- User Value: Comprehensive coverage of bootcamp curriculum
- Description: Secure user management and role-based access
- Details:
- Student accounts with email/password
- Instructor accounts with elevated privileges
- Session management with JWT tokens
- Role-based API endpoint protection
- User Value: Secure, personalized experience
The Free Spaced Repetition Scheduler (FSRS) is a modern, optimized algorithm based on the following principles:
- Stability: How well information is retained in memory
- Difficulty: Inherent difficulty of the material (different from question difficulty rating)
- Retrievability: Current probability of successful recall
Priority: P0 (Critical)
Description: System must track every question attempt with timestamp and result
Acceptance Criteria:
- Record question ID, user ID, timestamp, correct/incorrect for every attempt
- Store time taken to answer each question
- Support batch recording for quiz completion
- Maintain complete historical record (no deletions)
Data Model:
QuestionAttempt {
ID: string
UserID: string
QuestionID: string (format: topicID.questionID, e.g., "3.17")
IsCorrect: boolean
AttemptDateTime: timestamp
TimeSpentSeconds: int
QuizAttemptID: string (optional, links to quiz session)
}
Priority: P0 (Critical)
Description: Calculate and maintain FSRS parameters for each user-question pair
Acceptance Criteria:
- Calculate stability (S) after each attempt
- Calculate difficulty (D) based on attempt history
- Update retrievability (R) based on time elapsed
- Store parameters for efficient quiz generation
Algorithm Parameters:
- Initial Stability: S = 1 day (configurable)
- Stability Increase on Success: S_new = S_old * success_multiplier
- Stability Decrease on Failure: S_new = S_old * failure_multiplier
- Retrievability Decay: R = e^(-t/S) where t = time since last attempt
Data Model:
UserQuestionState {
UserID: string
QuestionID: string
Stability: float (days)
Difficulty: float (0-10 scale)
LastRetrievability: float (0-1 scale)
LastAttemptDateTime: timestamp
TotalAttempts: int
CorrectAttempts: int
NextScheduledReview: timestamp
}
Priority: P0 (Critical)
Description: Generate optimal quiz question sets using FSRS data
Acceptance Criteria:
- Select questions where R < threshold (default 0.7)
- Balance between new questions and reviews
- Respect difficulty progression
- Limit quiz size (default: 10-20 questions)
- Avoid repeating same question in single session
Quiz Generation Logic:
- Query all UserQuestionState records for student
- Filter questions due for review (R < 0.7 or NextScheduledReview < now)
- Sort by priority: (1 - R) * difficulty_weight
- Select top N questions within student's difficulty range
- Add new questions (never attempted) to reach target quiz size
- Randomize order within difficulty tiers
Priority: P0 (Critical)
Description: Calculate optimal next review date after each attempt
Acceptance Criteria:
- Update NextScheduledReview immediately after attempt
- Successful attempts → increase interval (e.g., 1d → 3d → 7d → 14d → 30d)
- Failed attempts → short interval (e.g., reset to 1 day)
- Never schedule same question multiple times in one day
Scheduling Formula:
if correct:
new_interval = current_stability * 2.5 * ease_factor
else:
new_interval = max(1 day, current_stability * 0.3)
NextScheduledReview = now + new_interval
| Parameter | Default Value | Description |
|---|---|---|
| Initial Stability | 1 day | Interval for first review |
| Success Multiplier | 2.5 | Stability growth on correct answer |
| Failure Multiplier | 0.3 | Stability reduction on incorrect answer |
| Retrievability Threshold | 0.7 | Trigger point for including in quiz |
| Min Interval | 1 day | Minimum time between reviews |
| Max Interval | 180 days | Maximum time between reviews |
| New Question Ratio | 0.3 | Proportion of new vs. review questions |
Priority: P0
Description: Students can create accounts and authenticate
Acceptance Criteria:
- Register with email, password, full name
- Password requirements: 8+ characters, mix of letters and numbers
- Email verification required (future enhancement)
- Session persists for 7 days
- Password reset functionality
Priority: P0
Description: Students can view available topics and select for practice
Acceptance Criteria:
- Display all active topics (Java, Python, SQL, etc.)
- Show number of questions per topic
- Show student's mastery percentage per topic
- Allow selection of single or multiple topics for quiz
Priority: P0
Description: Students take quizzes generated by FSRS algorithm
Acceptance Criteria:
- Request quiz generation with topic selection
- Display questions one at a time
- Show multiple choice answers (4 options typical)
- Immediate feedback on correct/incorrect
- Display running score during quiz
- Save progress if quiz interrupted
- Calculate total points earned at completion
Quiz Flow:
- Student clicks "Start Quiz" with topic(s) selected
- System generates quiz using FSRS algorithm
- Display first question with 4 multiple-choice answers
- Student selects answer
- System immediately shows correct/incorrect
- Student clicks "Next" to proceed
- Repeat until all questions answered
- Display final score and statistics
Priority: P1
Description: Students can review past quiz attempts
Acceptance Criteria:
- List all past quiz attempts with date, topic, score
- Sort by date (newest first)
- Filter by topic
- Drill into specific attempt to see individual questions
- Show correct answers for incorrect questions
Priority: P0
Description: Students view comprehensive progress metrics
Acceptance Criteria:
- Total questions attempted across all topics
- Total correct/incorrect counts
- Overall accuracy percentage
- Per-topic accuracy percentages
- Recent activity chart (last 30 days)
- Tag-based strength/weakness analysis
- Progress toward course completion
Dashboard Sections:
- Overview: Total stats, current streak
- Topics: Progress bar per topic
- Recent Activity: Last 10 quiz attempts
- Insights: Weakest tags, suggested focus areas
- Achievements: Milestones and badges (future)
Priority: P1
Description: Students complete formal timed assessments
Acceptance Criteria:
- View available tests with descriptions
- See test duration and question count
- Accept test rules before starting (no pause, single attempt)
- Display countdown timer during test
- Auto-submit when timer expires
- Cannot review questions mid-test
- Receive final score immediately after submission
Test Flow:
- Student clicks "Start Test" (must read rules)
- System starts timer (e.g., 60 minutes)
- Display questions sequentially (can navigate back/forward)
- Timer visible on all pages
- Warning at 5 minutes remaining
- Auto-submit at 0:00 or manual submit
- Display final score and percentile
Priority: P2
Description: Students can practice specific concepts via tags
Acceptance Criteria:
- View list of all tags with question counts
- Filter quizzes to specific tag(s)
- See accuracy rate per tag
- Generate tag-specific quiz (overrides normal FSRS)
Priority: P0
Description: Instructors can view and search all students
Acceptance Criteria:
- Display list of all students with key metrics
- Search by name or email
- Sort by various metrics (accuracy, completion rate, etc.)
- Filter by cohort/enrollment period
- Flag struggling students (accuracy < 60%)
Student List Columns:
- Name
- Total Quiz Attempts
- Overall Accuracy %
- Last Activity Date
- Status Indicator (green/yellow/red)
Priority: P0
Description: Instructors can drill into individual student performance
Acceptance Criteria:
- View student's progress dashboard
- See all quiz attempt history
- Identify weak topic areas
- Identify weak conceptual areas (tags)
- View test results
- Compare to cohort averages
- Export student report as PDF
Analytics Views:
- Summary: Overall stats vs. cohort
- Topics: Mastery by topic with trends
- Tags: Conceptual strengths/weaknesses
- History: Timeline of all attempts
- Tests: Formal assessment results
Priority: P0
Description: Instructors view aggregate class performance
Acceptance Criteria:
- Select cohort/class period
- View aggregate statistics (avg accuracy, completion rate)
- Topic-by-topic class performance
- Identify common struggling concepts (tags)
- See distribution charts (histograms of scores)
- Export cohort report
Dashboard Sections:
- Overview: Class averages, completion rates
- Topics: Avg accuracy per topic, struggling topics
- Students: Leaderboard and struggling student list
- Trends: Week-over-week progress
- Questions: Hardest questions for class
Priority: P0
Description: Instructors can create, edit, and manage questions
Acceptance Criteria:
- Create new question with text, answers, correct answer
- Assign topic, difficulty (1-7), tags
- Edit existing questions
- Deactivate questions (don't delete)
- Bulk import questions (CSV)
- Preview questions as students see them
Question Form Fields:
- Question Text (rich text editor for code formatting)
- Topic Dropdown
- Difficulty (1-7 slider)
- Tags (multi-select)
- Answer Option 1 (text + correct checkbox)
- Answer Option 2 (text + correct checkbox)
- Answer Option 3 (text + correct checkbox)
- Answer Option 4 (text + correct checkbox)
- Status (active/inactive)
Priority: P1
Description: Instructors can create and manage formal tests
Acceptance Criteria:
- Create new test with title, description
- Add questions to test (search and select)
- Set time limit (minutes)
- Set availability window (start/end dates)
- Assign to specific cohort(s)
- View test results by student
- Export test results
Test Creation Flow:
- Set test metadata (title, description, time limit)
- Search/filter question bank
- Add questions to test (drag-and-drop or click)
- Preview test as student would see
- Set availability window
- Assign to cohort(s)
- Publish
Priority: P1
Description: Instructors can analyze question effectiveness
Acceptance Criteria:
- View list of all questions with avg accuracy
- Identify questions that are too easy (>90% correct)
- Identify questions that are too hard (<30% correct)
- See answer distribution (which distractors chosen)
- Flag potentially ambiguous questions
- Adjust difficulty ratings based on data
Question Analytics View:
- Question ID and text
- Topic and Tags
- Current Difficulty Rating
- Number of Attempts
- Average Accuracy %
- Recommended Difficulty (calculated)
- Answer Distribution (histogram)
- Flag for Review (if outlier)
Priority: P2
Description: Instructors can manage topic categories
Acceptance Criteria:
- Create new topics
- Edit topic names and descriptions
- Deactivate topics
- Reorder topic display
- Set topic prerequisites (future)
Priority: P1
Description: Content admins can import questions in bulk
Acceptance Criteria:
- Upload CSV file with questions
- Map CSV columns to question fields
- Validate data before import
- Preview questions before finalizing
- Report errors for invalid rows
- Support 500+ questions per import
CSV Format:
Topic,Question,Answer1,Answer2,Answer3,Answer4,CorrectAnswer,Difficulty,Tags
Java,"What is the output of: int x = 5; System.out.println(++x);","5","6","7","Error","6",2,"variables,operators"
Priority: P0
Description: Content admins manage tag taxonomy
Acceptance Criteria:
- Create new tags with descriptions
- Edit tag names
- Merge duplicate tags
- View questions per tag
- Suggest tags for questions (future: ML-based)
Common Tag Examples:
- Variables, Data Types, Operators
- Control Structures, Loops, Conditionals
- Functions, Methods, Parameters
- OOP, Classes, Inheritance
- Error Handling, Exceptions
- SQL Queries, Joins, Aggregation
Priority: P2
Description: Content admins review flagged questions
Acceptance Criteria:
- View queue of flagged questions
- See student feedback/comments (future)
- See performance statistics
- Approve or edit questions
- Remove from queue when resolved
The student journey through Athena follows a progression from Onboarding → Daily Practice → Mastery → Assessment → Continued Growth.
┌─────────────────────────────────────────────────────────────────────────┐
│ STUDENT LEARNING JOURNEY │
└─────────────────────────────────────────────────────────────────────────┘
PHASE 1: ONBOARDING (Day 1)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Epic: Account Setup & First Exposure
User Story 1.1: Account Creation
As a new student
I want to create an account with my email
So that I can access the quiz platform
Tasks:
- Navigate to registration page
- Enter email, password, full name
- Verify email (future)
- Complete profile setup
Acceptance: Student has active account and can log in
User Story 1.2: Platform Orientation
As a new student
I want to see a tutorial of how the platform works
So that I understand how to use it effectively
Tasks:
- View welcome modal with key features
- Take guided tour of dashboard
- Understand quiz vs. test distinction
- Learn about spaced repetition benefits
Acceptance: Student completes orientation, can navigate platform
User Story 1.3: Diagnostic Assessment
As a new student
I want to take an initial diagnostic quiz
So that the system knows my starting knowledge level
Tasks:
- Select primary topic (e.g., Java)
- Take 20-question diagnostic quiz
- Answer questions across difficulty levels
- Receive initial baseline score
Acceptance: System establishes baseline for FSRS algorithm
PHASE 2: DAILY PRACTICE (Weeks 1-4)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Epic: Regular Quiz Practice & Knowledge Building
User Story 2.1: Daily Quiz Access
As a student
I want to take a daily adaptive quiz
So that I can practice and improve my knowledge
Tasks:
- Log in to platform
- View recommended topics for today
- Click "Start Daily Quiz"
- Answer 10-15 questions
- Receive immediate feedback on each question
- View session summary
Acceptance: Student completes quiz, score recorded
User Story 2.2: Review Mistakes
As a student
I want to review questions I answered incorrectly
So that I can learn from my mistakes
Tasks:
- Click on completed quiz attempt
- See list of all questions
- Identify incorrect answers (marked in red)
- View correct answer for each mistake
- Understand why answer was correct
Acceptance: Student can review all past attempts
User Story 2.3: Track Progress
As a student
I want to see my progress over time
So that I know I'm improving
Tasks:
- Navigate to Progress Dashboard
- View overall accuracy percentage
- See progress bars per topic
- Check recent activity chart
- Note areas of strength/weakness
Acceptance: Dashboard displays accurate, up-to-date metrics
User Story 2.4: Identify Weak Areas
As a student
I want to see which concepts I'm struggling with
So that I can focus my study time
Tasks:
- View "Insights" section on dashboard
- See tag-based weakness analysis
- Note concepts with <60% accuracy
- Generate focused quiz on weak tags
- Practice weak areas
Acceptance: Student identifies specific concepts to study
User Story 2.5: Build Streak Motivation
As a student
I want to maintain a daily quiz streak
So that I stay motivated and consistent
Tasks:
- View current streak count
- Receive reminder notification (future)
- Complete quiz before day ends
- See streak milestone achievements
Acceptance: Streak count increments daily, resets if day missed
PHASE 3: MASTERY BUILDING (Weeks 5-8)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Epic: Deepening Knowledge & Handling Complexity
User Story 3.1: Progress to Harder Questions
As an improving student
I want to tackle more difficult questions
So that I can deepen my understanding
Tasks:
- Achieve 80%+ accuracy on difficulty 1-3 questions
- System unlocks difficulty 4-5 questions
- Attempt harder questions in daily quizzes
- Apply knowledge to complex scenarios
- Maintain high accuracy
Acceptance: Student successfully answers difficulty 4+ questions
User Story 3.2: Multi-Topic Practice
As a student
I want to practice multiple topics in one session
So that I maintain breadth of knowledge
Tasks:
- Select multiple topics for quiz (Java + SQL)
- Take mixed-topic quiz
- Context-switch between topics
- Maintain accuracy across topics
Acceptance: Student completes multi-topic quiz successfully
User Story 3.3: Long-Term Retention
As a student who learned a concept weeks ago
I want to be reminded of that concept periodically
So that I don't forget it
Tasks:
- (Automatic) FSRS schedules old question for review
- Student sees question from Week 2 in Week 7 quiz
- Successfully recalls correct answer
- System extends review interval further
Acceptance: Student maintains >75% accuracy on old concepts
User Story 3.4: Concept Mastery Certification
As a student
I want to see that I've mastered a concept
So that I feel confident and accomplished
Tasks:
- Achieve 90%+ accuracy on all questions with a specific tag
- Receive "Mastery Badge" for that concept
- View collection of mastery badges
- Share achievement (future: social features)
Acceptance: Student earns badges, visible on profile
PHASE 4: FORMAL ASSESSMENT (Weeks 4, 8, 12)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Epic: High-Stakes Testing & Evaluation
User Story 4.1: Test Preparation
As a student approaching a test
I want to know if I'm ready
So that I can decide if I need more study
Tasks:
- View upcoming test schedule
- Check progress dashboard for test topics
- Note mastery level for each topic
- Take additional practice quizzes if needed
- Review weak areas
Acceptance: Student feels prepared, confidence level measured
User Story 4.2: Taking Timed Test
As a student
I want to take a formal timed test
So that I can demonstrate my knowledge
Tasks:
- Navigate to "Tests" section
- Click "Start Test" for Week 4 Assessment
- Accept test rules (60 min, no pause, single attempt)
- Answer 50 questions within time limit
- Monitor countdown timer
- Submit before timer expires
- View final score
Acceptance: Student completes test, score recorded
User Story 4.3: Test Results Review
As a student who completed a test
I want to see my results and understand mistakes
So that I can learn from the test
Tasks:
- View test score and percentile rank
- See breakdown by topic
- Review incorrect answers (after availability window)
- Compare score to previous tests
- Identify areas for future study
Acceptance: Student understands performance, learns from test
User Story 4.4: Instructor Feedback
As a student who struggled on a test
I want my instructor to reach out
So that I can get help to improve
Tasks:
- (Automatic) Instructor sees low test score in dashboard
- Instructor schedules 1:1 meeting
- Student receives notification
- Student meets with instructor
- Receives personalized study plan
Acceptance: Struggling student receives timely intervention
PHASE 5: CONTINUED GROWTH (Weeks 9-12+)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Epic: Maintaining Knowledge & Expanding to New Topics
User Story 5.1: New Topic Introduction
As a student who mastered Java
I want to start learning Python
So that I can expand my skill set
Tasks:
- Add Python to active topics
- Take Python diagnostic quiz
- Begin daily practice with Python questions
- Maintain Java knowledge through spaced reviews
Acceptance: Student practices multiple topics concurrently
User Story 5.2: Efficient Maintenance Reviews
As a student who mastered a topic
I want to review it efficiently
So that I don't waste time on things I know
Tasks:
- (Automatic) FSRS schedules mastered questions infrequently
- Student sees only 2-3 review questions per session
- Quickly confirms knowledge
- Spends majority of time on new/weak areas
Acceptance: Review burden decreases as mastery increases
User Story 5.3: Graduation Readiness
As a student nearing course completion
I want to verify I'm ready for job interviews
So that I can confidently apply for positions
Tasks:
- View comprehensive progress report
- Verify 80%+ mastery across all topics
- Take final comprehensive test
- Receive course completion certificate
- Export portfolio report
Acceptance: Student meets graduation criteria, receives certificate
User Story 5.4: Post-Graduation Continued Access
As a graduated student
I want to continue using Athena
So that I can prepare for interviews and maintain skills
Tasks:
- Retain account access after graduation
- Take periodic refresher quizzes
- Use before technical interviews
- Maintain long-term retention
Acceptance: Alumni can access platform indefinitely
INSTRUCTOR MONITORING JOURNEY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Week 1: Cohort Onboarding
User Story: As an instructor, I want to see all new students in my cohort
Tasks:
- View cohort enrollment list
- Verify all students have accounts
- Monitor completion of diagnostic assessments
- Identify students who haven't started
Week 2-3: Early Intervention
User Story: As an instructor, I want to identify struggling students early
Tasks:
- Review cohort dashboard
- Filter students with <60% accuracy
- Drill into individual student analytics
- Schedule intervention meetings
- Assign targeted practice
Week 4: First Assessment
User Story: As an instructor, I want to evaluate cohort progress
Tasks:
- Create Week 4 Test with selected questions
- Set time limit and availability window
- Monitor test completion rates
- Review test results
- Identify common wrong answers
- Adjust upcoming curriculum
Week 5-7: Curriculum Adjustment
User Story: As an instructor, I want to address common gaps
Tasks:
- Analyze tag-based cohort weaknesses
- Note that 60% of class struggles with "recursion"
- Plan additional classroom time on recursion
- Create focused practice quiz on recursion
- Assign to all students
- Monitor improvement
Week 8: Mid-Course Assessment
User Story: As an instructor, I want to measure progress
Tasks:
- Create Week 8 comprehensive test
- Compare results to Week 4 test
- Measure improvement rates
- Celebrate student growth
- Identify persistent strugglers
Week 9-12: Final Push
User Story: As an instructor, I want all students to succeed
Tasks:
- Intensive support for struggling students
- Monitor daily quiz completion rates
- Provide encouragement and motivation
- Prepare final comprehensive test
- Evaluate graduation readiness
User {
ID: string (UUID)
Email: string (unique)
PasswordHash: string
FullName: string
Role: enum (student, instructor, content_admin, system_admin)
TotalPoints: int (sum of all correct answers)
CreatedAt: timestamp
LastLoginAt: timestamp
CohortID: string (optional, for students)
IsActive: boolean
}
Topic {
ID: string (UUID)
Name: string (e.g., "Java", "Python", "SQL")
Description: string
DisplayOrder: int
IsActive: boolean
CreatedAt: timestamp
QuestionCount: int (computed)
}
Question {
ID: string (UUID)
QuestionID: string (format: "topicID.questionNumber", e.g., "3.17")
TopicID: string (foreign key to Topic)
QuestionText: string (supports markdown/code)
DifficultyRating: int (1-7)
Tags: array of strings (e.g., ["loops", "control-structures"])
IsActive: boolean
CreatedAt: timestamp
CreatedBy: string (UserID)
LastModifiedAt: timestamp
}
Answer {
ID: string (UUID)
QuestionID: string (foreign key)
AnswerText: string
IsCorrect: boolean
DisplayOrder: int (1-4)
}
QuizAttempt {
ID: string (UUID)
UserID: string (foreign key)
StartDateTime: timestamp
CompletedDateTime: timestamp (null if in progress)
TotalQuestions: int
CorrectAnswers: int
IncorrectAnswers: int
TopicIDs: array of strings (topics included in quiz)
PointsEarned: int
QuestionResults: array of {QuestionID, IsCorrect, TimeSpentSeconds}
}
QuestionAttempt {
ID: string (UUID)
UserID: string (foreign key)
QuestionID: string (foreign key)
IsCorrect: boolean
AttemptDateTime: timestamp
TimeSpentSeconds: int
QuizAttemptID: string (optional, foreign key)
SelectedAnswerID: string (foreign key to Answer)
}
UserQuestionState {
UserID: string (composite key)
QuestionID: string (composite key)
Stability: float (days)
Difficulty: float (0-10, FSRS difficulty, not question difficulty)
LastRetrievability: float (0-1)
LastAttemptDateTime: timestamp
NextScheduledReview: timestamp
TotalAttempts: int
CorrectAttempts: int
IncorrectAttempts: int
AverageTimeSpentSeconds: int
LastUpdated: timestamp
}
Test {
ID: string (UUID)
Title: string
Description: string
TimeLimitMinutes: int
QuestionIDs: array of strings (ordered)
AvailableFrom: timestamp
AvailableUntil: timestamp
CohortIDs: array of strings
CreatedBy: string (UserID)
CreatedAt: timestamp
IsActive: boolean
}
TestAttempt {
ID: string (UUID)
TestID: string (foreign key)
UserID: string (foreign key)
StartDateTime: timestamp
CompletedDateTime: timestamp
TotalQuestions: int
CorrectAnswers: int
Score: float (percentage)
TimeSpentMinutes: int
QuestionResults: array of {QuestionID, IsCorrect, SelectedAnswerID}
PercentileRank: float (compared to cohort)
}
User (1) ──── (many) QuizAttempt
User (1) ──── (many) QuestionAttempt
User (1) ──── (many) UserQuestionState
User (1) ──── (many) TestAttempt
Topic (1) ──── (many) Question
Question (1) ──── (many) Answer
Question (1) ──── (many) QuestionAttempt
Question (1) ──── (many) UserQuestionState
QuizAttempt (1) ──── (many) QuestionAttempt
Test (1) ──── (many) TestAttempt
Test (many) ──── (many) Question (via QuestionIDs array)
POST /api/auth/register
POST /api/auth/login
POST /api/auth/logout
POST /api/auth/refresh-token
POST /api/auth/forgot-password
POST /api/auth/reset-password
GET /api/users/me
PUT /api/users/me
GET /api/users/:id (instructor only)
GET /api/users (instructor only)
PUT /api/users/:id/points
GET /api/topics
GET /api/topics/:id
POST /api/topics (instructor only)
PUT /api/topics/:id (instructor only)
DELETE /api/topics/:id (instructor only)
GET /api/questions
GET /api/questions/:id
POST /api/questions (instructor only)
PUT /api/questions/:id (instructor only)
DELETE /api/questions/:id (instructor only)
GET /api/questions/by-topic/:topicId
POST /api/questions/bulk-import (content admin only)
POST /api/quiz/generate
POST /api/quiz/submit
GET /api/quiz/attempts
GET /api/quiz/attempts/:id
GET /api/quiz/attempts/user/:userId (instructor only)
GET /api/tests
GET /api/tests/:id
POST /api/tests (instructor only)
PUT /api/tests/:id (instructor only)
POST /api/tests/:id/start
POST /api/tests/:id/submit
GET /api/test-attempts
GET /api/test-attempts/:id
GET /api/test-attempts/user/:userId (instructor only)
GET /api/analytics/student/:userId
GET /api/analytics/cohort/:cohortId
GET /api/analytics/questions
GET /api/analytics/questions/:questionId
GET /api/analytics/tags
Frontend
- Framework: React.js with TypeScript
- State Management: Redux or Context API
- UI Library: Material-UI or Tailwind CSS
- Charts: Chart.js or Recharts
- HTTP Client: Axios
Backend
- Language: Go (current) or Node.js/Python (alternative)
- Framework: Gin (Go) or Express.js or FastAPI
- Authentication: JWT tokens
- API Style: RESTful JSON
Database
- Primary: PostgreSQL (production)
- Development: In-memory (current) or SQLite
- ORM: GORM (Go) or Sequelize or SQLAlchemy
- Caching: Redis (future optimization)
Infrastructure
- Hosting: AWS, GCP, or Azure
- Container: Docker
- Orchestration: Kubernetes (for scale) or Docker Compose (for MVP)
- CI/CD: GitHub Actions
- Monitoring: Prometheus + Grafana
- SEC-001: All passwords hashed with bcrypt (cost factor 12+)
- SEC-002: HTTPS only in production
- SEC-003: JWT tokens expire after 7 days
- SEC-004: Rate limiting on API endpoints (100 req/min per user)
- SEC-005: SQL injection prevention via parameterized queries
- SEC-006: XSS prevention via input sanitization
- SEC-007: CORS configured for frontend domain only
- SEC-008: Role-based access control on all endpoints
- SEC-009: Audit logging for admin actions
- SEC-010: Regular security dependency updates
- PERF-001: API response time <500ms for 95th percentile
- PERF-002: Quiz generation <300ms
- PERF-003: Support 500 concurrent users
- PERF-004: Database queries <100ms
- PERF-005: Frontend initial load <3 seconds
- PERF-006: Handle 1M+ question attempts in database
Phase 0 (Current): Backend Foundation ✓
- Data models
- In-memory database
- Basic API endpoints
- 20 comprehensive tests
Phase 1 (MVP): Core Student Experience
- User authentication
- Basic quiz generation (without FSRS)
- Multiple choice question answering
- Progress tracking
- Simple student dashboard
- PostgreSQL database integration
Phase 2: Spaced Repetition
- FSRS algorithm implementation
- UserQuestionState tracking
- Adaptive quiz generation
- Review scheduling
Phase 3: Instructor Features
- Instructor dashboard
- Student progress analytics
- Cohort analytics
- Question management UI
Phase 4: Testing & Quality
- Timed test functionality
- Test creation UI
- Question performance analytics
- Tag-based insights
Phase 5: Polish & Scale
- Mobile responsive design
- Performance optimization
- Advanced analytics
- Gamification (badges, leaderboards)
Before Beta Launch:
- All Phase 1 & 2 features complete
- 500+ questions across 3 core topics (Java, Python, SQL)
- User testing with 10 students
- Security audit completed
- 95%+ API test coverage
Before Production Launch:
- All Phase 1-4 features complete
- 1000+ questions across 5+ topics
- Pilot cohort of 30 students (4 weeks)
- Instructor feedback incorporated
- Performance testing (500 concurrent users)
- Documentation complete
Q2 2026:
- Mobile app (iOS/Android)
- Social features (study groups, peer challenges)
- Explanations for correct answers
- Code execution environment for programming questions
Q3 2026:
- Integration with LMS (Canvas, Moodle)
- Advanced analytics (predictive modeling)
- AI-generated questions (experimental)
- API for third-party integrations
Q4 2026:
- Multi-tenancy (support multiple bootcamps)
- White-label option
- Advanced gamification
- Machine learning for difficulty calibration
| Feature | Athena | Anki | Quizlet | Kahoot! | Knowt |
|---|---|---|---|---|---|
| Spaced Repetition | ✓ (FSRS) | ✓ (SM-2) | ✗ | ✗ | ✓ |
| Multiple Choice | ✓ | ✗ | ✓ | ✓ | ✓ |
| Code Formatting | ✓ | Limited | Limited | ✗ | Limited |
| Instructor Analytics | ✓ | ✗ | Limited | ✓ | Limited |
| Tag-Based Insights | ✓ | Limited | ✗ | ✗ | ✗ |
| Timed Tests | ✓ | ✗ | Limited | ✓ | Limited |
| Difficulty Progression | ✓ | ✗ | ✗ | ✗ | ✗ |
| Custom Question Bank | ✓ | ✓ | ✓ | ✓ | ✓ |
| Focus | Tech Ed | General | General | Engagement | Students |
-
Purpose-Built for Coding Education: Unlike general-purpose quiz tools, Athena is designed specifically for software development education with code-friendly question formatting and technical domain tags.
-
Modern Spaced Repetition: FSRS algorithm is more accurate than traditional SM-2 used in Anki, leading to better retention with fewer reviews.
-
Comprehensive Instructor Tools: Goes beyond student-facing features to provide deep analytics for teaching staff, enabling data-driven intervention.
-
Tag-Based Gap Analysis: Unique approach to identifying conceptual weaknesses through cross-question tag analysis.
-
Dual Mode (Quiz + Test): Combines low-stakes practice with high-stakes assessment in one platform.
| Role | Name | Signature | Date |
|---|---|---|---|
| Product Manager | ___________ | ___________ | _______ |
| Lead Instructor | ___________ | ___________ | _______ |
| Technical Lead | ___________ | ___________ | _______ |
| ZipCode Leadership | ___________ | ___________ | _______ |
Document Version History
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0 | 2026-01-27 | Product Team | Initial specification |
End of Specification Document