Interactive cybersecurity learning platform for guided lessons, graded activities, and CTF-style practice labs.
Built with Flask, markdown course content, and integrated challenge services for hands-on security education.
ByteSec is a web platform for learning cybersecurity through guided modules, short activity checks, article publishing, community challenge sharing, and hands-on challenge practice. It brings structured lesson flow and CTF-style exercises into one interface for both learners and admins.
| Item | Details |
|---|---|
| Name | ByteSec |
| Type | Web-based cybersecurity learning platform |
| Stack | Flask, Flask-SQLAlchemy, Jinja, Tailwind CSS, SQLite, optional Turso |
| Focus | Web exploitation, reverse engineering, cryptography, pwn, and Windows forensics |
| Activity Types | Multiple choice, predict the output, fill in the blank, spot the vulnerable line, flag submission |
| Included Areas | Courses, articles, community challenges, leaderboards, profile management, and admin review pages |
- Guided course tracks loaded from
modules/ - Interactive lesson checks with immediate feedback
- Multiple activity formats for concept validation and hands-on practice
- Downloadable challenge materials and challenge service integration
- Course progress tracking and leaderboard support
- Article submission and review workflow
- Community challenge submission, review, approval, and solve flow
- Theme toggle, authentication, and profile editing
- Admin surfaces for article, challenge, and service management
Security learning often gets split across slide decks, notes, challenge portals, and separate practice environments. ByteSec closes that gap by combining structured explanation, interactive checking, and challenge practice in one application so learners can move from concept to execution without changing tools.
| Username | Password | Access |
|---|---|---|
demo |
demo123 |
Demo account with admin access |
The gallery below was captured with Playwright using demo/capture_readme_screenshots.py.
- Flask 3.1
- Flask-SQLAlchemy 3.1
- Jinja templates
- Vanilla JavaScript
- Tailwind CSS CDN
- Google Material Symbols
- SQLite
- Optional Turso via the bundled pure-Python HTTP driver
- Runtime data under
instance/ - Vercel-compatible entrypoint in
api/index.py
- Markdown course modules
- Docker Compose
- GCC and Make
- Playwright for README screenshot capture
Make sure these are installed on your machine:
- Python with SQLite support
pip- Docker and Docker Compose
- GCC and Make
If startup fails with ModuleNotFoundError: No module named '_sqlite3', use a Python build that includes SQLite.
pip install -r requirements.txtflask --app app run --debugYou can also run:
python app.pyDefault URL:
http://127.0.0.1:5000
BYTESEC_HOST
BYTESEC_PORT
SECRET_KEY
BYTESEC_ADMIN_USERS
TURSO_DATABASE_URL
TURSO_AUTH_TOKEN
Create missing data without wiping users:
flask --app app ensure-dbReload markdown course content while preserving registered users:
flask --app app refresh-courseFully wipe and recreate the database:
flask --app app init-dbThe helper script manages the Flask app plus the Docker-backed services:
./scripts/dev-services.sh start
./scripts/dev-services.sh status
./scripts/dev-services.sh logs
./scripts/dev-services.sh restart
./scripts/dev-services.sh stopDefault service locations:
| Service | Endpoint |
|---|---|
| ByteSec web app | http://127.0.0.1:5000 |
| EzSQLi challenge | http://127.0.0.1:8004 |
| Ret2win challenge | nc 127.0.0.1 9001 |
| Docker admin dashboard | http://127.0.0.1:5000/admin/docker |
| Name | Student ID |
|---|---|
| Jonathan Irvin Susanto | 2802440430 |
| Owen Ourelio Bong | 2802461196 |
| Huang Earl Gunawan | 2802444523 |
| Haikal Satrio Dewandaru | 2802459600 |
| Fathia Ramadhanti Hardianto | 2802477414 |






















