A systematic approach to mathematical learning that balances thorough understanding with steady progress.
- Quick Start
- Overview
- Screenshots and Interface
- Features
- Installation
- User Guide
- Learning Methodology
- Technical Documentation
- FAQ
- Contributing
- Future Roadmap
- License
- Acknowledgments
git clone https://github.com/andre-meneses/question-scheduler.git
cd question-scheduler
npm install
npm start
Access the application at http://localhost:3000
The Question Scheduler is a web-based application designed to help users learn mathematics through a structured, methodical approach. It maintains a set of mathematical problems and implements a specific learning methodology that balances thorough understanding with steady progress.
Key principles:
- Random selection from available problems
- Time-boxed learning sessions
- Structured practice intervals
- Progress tracking and analytics
- Support for both regular and advanced problem-solving approaches
For a detailed explanation of the learning philosophy and methodology behind this system, see SPECIFICATION.md.
The main interface shows your current statistics, active question, and timer. The interface is organized into three main sections:
- Add, edit, and delete mathematical questions
- LaTeX support for mathematical notation
- Real-time preview of formatted questions
- Source and subject categorization
- "Never look up" option for advanced problems
- Structured time management
- Random question selection from available set
- Progressive difficulty scaling
- Session history tracking
- Comprehensive statistics
- Attempt history
- Time management analytics
- Success rate monitoring
- Full LaTeX rendering (KaTeX and MathJax)
- Backend persistence with Express
- Real-time preview for LaTeX input
- Session-based timer management
- Responsive design
- Local storage backup
- REST API for data management
- Node.js ≥ 14.0.0
- npm or yarn
- Modern web browser (Chrome, Firefox, Safari, or Edge)
- Clone the repository:
git clone https://github.com/andre-meneses/question-scheduler.git
cd question-scheduler
- Install dependencies:
npm install
- Start the server:
npm start
- Access the application at
http://localhost:3000
Environment variables (create a .env
file):
PORT=3000
NODE_ENV=development
STORAGE_PATH=./questions.json
-
Initial Setup
- Launch the application
- Navigate to the "Add Question" tab
- Add your first set of problems
-
System Organization
- Problems are organized by subject and source
- Each problem has allocated time and attempt limits
- Problems can be marked as "never look up" for independent mastery
- Click the "Add Question" tab
- Fill in:
- Source (e.g., "Rudin Chapter 3")
- Problem description (supports LaTeX)
- Time allocation (3, 6, 9, or 12 hours)
- Subject matter
- Never look up option (for challenging problems)
Use standard LaTeX notation:
- Inline math:
$...$
- Display math:
$$...$$
Example:
Let $f: [a,b] \to \mathbb{R}$ be continuous. Prove that if
$$\int_a^b f(x) dx = 0$$
and $f(x) \geq 0$ for all $x \in [a,b]$, then $f(x) = 0$ for all $x \in [a,b]$.
- Click "Get Next Question" to start a session
- The system will:
- Randomly select an available question
- Start a timed session
- Track progress
- After attempting:
- Click "Solved" if completed independently
- Click "Not Solved" if solution was viewed
- Click "Skip" to attempt later
- New: Not yet attempted
- In Progress: Currently being worked on
- Attempted: Worked on but not completed
- Completed: Successfully solved or time exhausted
- Initial 30-minute attempt limit
- Solution consultation allowed after time limit
- Focus on understanding and learning from solutions
- Longer allocated thinking time (3-12 hours total)
- Progressive attempt intervals:
- First attempt: 15 minutes
- Second attempt: 30 minutes
- Third attempt: 1 hour
- Optional "never look up" designation
question-scheduler/
├── public/
│ ├── index.html
│ ├── styles.css
│ ├── app.js
│ └── scheduler.js
├── server.js
├── fileOperations.js
├── questions.json
├── SPECIFICATION.md
├── README.md
├── .gitignore
└── package.json
GET /api/questions
POST /api/questions
PUT /api/questions/:id
DELETE /api/questions/:id
interface Question {
id: number;
source: string;
problem: string;
totalTime: number;
remainingTime: number;
subject: string;
status: 'new' | 'in-progress' | 'attempted' | 'completed';
attempts: Attempt[];
timeSpent: number;
solvedIndependently: boolean | null;
neverLookUp: boolean;
created: string;
lastAttempt: string | null;
}
interface Attempt {
date: string;
timeSpent: number;
result: 'solved' | 'not-solved' | 'skipped';
}
-
Q: How are questions selected? A: Questions are randomly selected from the set of available problems, considering time constraints and attempt history.
-
Q: What happens to incomplete questions? A: They remain in the available set with their remaining time allocation, unless marked as completed or time has expired.
-
Q: Can I modify time allocations? A: Yes, through the question edit interface.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
-
Question Management
- Categories and tags
- Search and filter functionality
- Bulk import/export
-
Learning Features
- Progress visualization
- Difficulty ratings
- Study session summaries
- Spaced repetition options
-
Technical Improvements
- Offline mode support
- Mobile app version
- Cloud synchronization
- Performance optimizations
This project is licensed under the MIT License - see the LICENSE file for details.
This project was inspired by the need for a structured approach to mathematical learning that balances thorough understanding with practical progress. The methodology is detailed in SPECIFICATION.md.
For bug reports and feature requests, please use the issue tracker.