Professional Course and Student Management System
Features • Quick Start • Installation • Configuration • License
Languages: 🇧🇷 Português • 🇪🇸 Español
- Overview
- About the Developer
- Features
- Technology Stack
- Quick Start
- Installation
- Configuration
- Usage
- Project Structure
- Security
- License
Cursos-HMT is a professional web-based course and student management system built with Flask. It provides a robust platform for educational institutions to manage courses, student enrollments, and user accounts with a modern, secure, and intuitive interface.
Key Capabilities:
- 🔐 Secure user authentication and authorization
- 📚 Course creation and management
- 👥 Student enrollment tracking (matricula system)
- 🎨 Modern responsive UI with dark/light mode support
- 🔒 Encrypted data handling with Fernet cryptography
- 💾 SQLite database with SQLAlchemy ORM
- ⚡ Fast caching with Flask-Caching
Developed by Rafael Vieira (TechBeme)
Full-Stack Developer & AI Automation Specialist
Specialized in web scraping, automation systems, modern web applications, and AI integrations.
- 🔍 Web Scraping & Data Extraction
- ⚡ Process Automation & Workflows
- 💻 Full-Stack Development (Next.js, React, Python, TypeScript)
- 🤖 AI Integrations (OpenAI, Anthropic, RAG systems)
- 📊 Database Design & Optimization
- 🎨 Modern UI/UX Development
🇺🇸 English • 🇧🇷 Português • 🇪🇸 Español
Email: contact@techbe.me
- Secure Authentication: Login/logout with password hashing (scrypt)
- User Registration: Self-service signup with validation
- Profile Management: Update username, email, password, and student ID
- Session Management: Secure session handling with Flask-Login
- Create Courses: Add new courses to the system
- View All Courses: Browse available courses
- Student Enrollment: Associate students with courses
- Many-to-Many Relationships: Students can enroll in multiple courses
- Unique Student IDs: Track students by their matricula (enrollment number)
- Multi-Course Enrollment: Students can be enrolled in multiple courses
- Duplicate Prevention: Automatic validation to prevent duplicate enrollments
- Real-time Validation: Instant feedback on enrollment operations
- Password Hashing: Scrypt algorithm for secure password storage
- Session Security: Flask-Login for session management
- Environment Variables: Sensitive data stored in environment variables
- Cryptography Support: Fernet encryption ready for sensitive data
- CSRF Protection: Built-in protection against cross-site request forgery
- Modern Design: Clean, professional interface
- Responsive Layout: Works on desktop, tablet, and mobile
- Dark/Light Mode: Automatic theme switching based on user preference
- Flash Messages: Real-time feedback for user actions
- Intuitive Navigation: Easy-to-use interface for all operations
- Framework: Flask 2.3.2
- ORM: SQLAlchemy 2.0.20
- Database: SQLite 3
- Authentication: Flask-Login 0.6.2
- Password Hashing: Werkzeug Security (scrypt)
- Cryptography: Fernet encryption (cryptography 41.0.3)
- Caching: Flask-Caching 2.0.2
- Template Engine: Jinja2 3.1.2
- CSS: Custom CSS with CSS Variables
- JavaScript: Vanilla JS for theme switching and interactions
- Icons: Bootstrap Icons (via CDN)
- WSGI Server: Gunicorn 21.2.0 (production)
- Development Server: Flask built-in (development)
- Python 3.9 or higher
- pip (Python package manager)
- Git (optional)
# Clone the repository
git clone https://github.com/yourusername/Cursos-HMT.git
cd Cursos-HMT
# Install dependencies
pip install -r requirements.txt
# Set up environment variables (see Configuration section)
export SECRET_KEY="your-secret-key-here"
export CRYPTO_KEY="your-fernet-key-here"
# Run the application
python run.pyThe application will be available at http://localhost:8000
git clone https://github.com/yourusername/Cursos-HMT.git
cd Cursos-HMT# Windows
python -m venv venv
venv\Scripts\activate
# Linux/MacOS
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txt# Generate SECRET_KEY
python -c "import secrets; print(secrets.token_hex(32))"
# Generate CRYPTO_KEY (Fernet)
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"Windows (Command Prompt):
set SECRET_KEY=your-generated-secret-key
set CRYPTO_KEY=your-generated-crypto-keyWindows (PowerShell):
$env:SECRET_KEY="your-generated-secret-key"
$env:CRYPTO_KEY="your-generated-crypto-key"Linux/MacOS:
export SECRET_KEY="your-generated-secret-key"
export CRYPTO_KEY="your-generated-crypto-key"The database will be automatically created on first run.
Development Mode:
python run.pyProduction Mode (with Gunicorn):
gunicorn -w 4 -b 0.0.0.0:8000 run:appWindows Production Mode:
run.batThe application requires the following environment variables:
| Variable | Description | Required | Example |
|---|---|---|---|
SECRET_KEY |
Flask secret key for session security | ✅ Yes | abc123... (64 chars hex) |
CRYPTO_KEY |
Fernet encryption key for sensitive data | ✅ Yes | base64-encoded-key |
Linux/MacOS (add to ~/.bashrc or ~/.zshrc):
export SECRET_KEY="your-generated-secret-key"
export CRYPTO_KEY="your-generated-crypto-key"Windows (System Environment Variables):
- Search "Environment Variables" in Windows Search
- Click "Environment Variables"
- Add new User or System variables
The application uses SQLite by default. The database file database.db is created automatically in the website directory.
To use a different database:
- Modify
SQLALCHEMY_DATABASE_URIin website/init.py - Install the appropriate database driver (e.g.,
psycopg2for PostgreSQL)
- Navigate to
http://localhost:8000 - Click "Sign Up"
- Enter your username, email, and password
- Submit the form
- Click "Login"
- Enter your email and password
- Access the dashboard
- Log in to your account
- Enter course name in the "Add Course" section
- Click "Add Course"
- Select a course from the dropdown
- Enter the student's matricula (enrollment number)
- Click "Add Student"
- The system automatically handles:
- New student creation
- Existing student enrollment
- Duplicate prevention
- Click on your username in the navigation bar
- Update your information:
- Username
- Password
- Matricula (student ID)
- Save changes
Cursos-HMT/
├── website/ # Main application package
│ ├── __init__.py # App factory and configuration
│ ├── models.py # Database models (User, Curso, Matricula)
│ ├── auth.py # Authentication routes (login, signup, logout)
│ ├── views.py # Main views (home, courses)
│ ├── user.py # User management routes
│ ├── static/ # Static files
│ │ ├── css/
│ │ │ └── main.css # Main stylesheet
│ │ └── js/
│ │ ├── main.js # Main JavaScript
│ │ └── color-modes.js # Theme switcher
│ └── templates/ # Jinja2 templates
│ ├── base.html # Base template
│ ├── home.html # Dashboard
│ ├── login.html # Login page
│ ├── signup.html # Registration page
│ ├── profile.html # User profile
│ ├── adduser.html # Student enrollment
│ └── form.html # Form components
├── run.py # Application entry point
├── run.bat # Windows batch script
├── requirements.txt # Python dependencies
├── LICENSE # Proprietary license
└── README.md # This file
- run.py: Application entry point, starts the Flask development server
- website/init.py: App factory, configuration, and extensions initialization
- website/models.py: SQLAlchemy models (User, Curso, Matricula)
- website/auth.py: Authentication logic (login, signup, logout, profile)
- website/views.py: Main application routes (home, add course, enroll student)
- requirements.txt: All Python package dependencies
- ✅ Password Hashing: Uses scrypt algorithm via Werkzeug
- ✅ Environment Variables: Sensitive keys stored outside codebase
- ✅ Session Security: Secure session management with Flask-Login
- ✅ CSRF Protection: Built-in Flask protection
- ✅ Input Validation: Form validation on both client and server side
- ✅ Unique Constraints: Prevents duplicate users and enrollments
- ✅ Cryptography Ready: Fernet encryption available for sensitive data
- Never commit sensitive keys: Always use environment variables
- Use HTTPS in production: Deploy behind a reverse proxy (Nginx, Apache)
- Regular updates: Keep dependencies updated with
pip install -U -r requirements.txt - Strong passwords: Enforce password policies (minimum 8 characters)
- Database backups: Regularly backup
database.db - Rate limiting: Consider adding Flask-Limiter for production
Proprietary and Confidential
Copyright © 2026. All rights reserved.
This software and its source code are proprietary and confidential. Unauthorized copying, modification, distribution, or use of this software, via any medium, is strictly prohibited.
Restrictions:
- ❌ No commercial use
- ❌ No modifications
- ❌ No distribution
- ❌ No reverse engineering
- ❌ No sublicensing
For licensing inquiries, please contact the repository owner.
See LICENSE file for complete terms.
This software is provided "as is" without warranty of any kind, express or implied. Use at your own risk.
For issues, questions, or support requests, please open an issue in the GitHub repository.
Developed by Rafael Vieira