This guide walks through setting up AssistITk12 for the first time, from prerequisites to your first login. AssistITk12 is a self-hosted Flask application, so you’ll need a server (or local machine) to run it on.
Prerequisites
Before you begin, make sure you have:
- Python 3.13+
- Git
- UV — the Python package manager AssistITk12 uses for dependency management
- MySQL Server — for production use (a lighter local database also works for testing)
1. Clone the repository
git clone https://github.com/victorhugo81/assistitk12.git
cd assistitk12
2. Create a virtual environment and install dependencies
uv sync
This creates a virtual environment and installs Flask 3.1.2 and every other dependency pinned in the project.
3. Configure your environment
Copy the example environment file and fill in your own values — database connection string, a secret key, and SMTP credentials for outbound ticket notifications:
cp .env.example .env
At minimum you’ll want to set your MySQL connection details and a unique SECRET_KEY. SMTP credentials and user emails are encrypted at rest, so it’s safe to store them here.
4. Seed the database
Run the project’s database setup/seed step to create the schema and an initial administrator account. Check the repository README for the exact current command, as it may include separate migration and seed steps.
5. Run it
For local testing, start the Flask development server directly. For production, run behind Gunicorn with a reverse proxy (nginx or similar) in front of it, and configure a Redis instance to back login rate limiting.
gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app
6. Log in and configure your organization
- Log in with the administrator account created during seeding.
- Set up your organization details under Settings.
- Add your school sites if you support more than one location.
- Bulk-upload staff accounts with the CSV template rather than adding them one at a time.
Security notes
AssistITk12 ships with several protections enabled by default:
- Login rate limiting (Flask-Limiter) and account lockout after repeated failed attempts
- CSRF protection on all forms
- Password hashing via Werkzeug’s secure defaults
- Enforced password complexity — minimum 12 characters with mixed character types
Next steps
- Read the product overview for a full feature breakdown.
- Invite your IT team and assign roles.
- Share the ticket submission link with staff and students.
- Star and watch the GitHub repository for updates.