ca0352fa33dc154ca2303e9b2df711e363d08287
- Move `from datetime import timedelta` to top of base.py (E402) - Add `# noqa: E402` to conditional sentry imports in prod.py (E402) - Remove unused `import time` and `IsAdminUser` from api/views.py (F401) - Remove unused `NoReverseMatch` import from tests/test_smoke.py (F401) Co-Authored-By: Paperclip <noreply@paperclip.ing>
Training Software
This repository contains a Django-based training platform backend plus a static customer portal frontend.
Features for customer environment setup
- Per-customer organization profile with configurable license user limits (
20,50,100,1000) - Per-customer branding via company name and logo URL
- Static frontend that can be hosted on Nginx and configured with the backend API domain at deploy time
- CI pipeline for tests, linting, and container build
Backend deployment
1. Prerequisites
- Python 3.12
- PostgreSQL 16+
- Redis 7+
- Docker (recommended for containerized deploy)
2. Environment variables
Create environment variables based on .env.example.
Required minimum values:
DJANGO_SECRET_KEYDJANGO_ALLOWED_HOSTSDATABASE_URLREDIS_URLDJANGO_SETTINGS_MODULE(useconfig.settings.prodin production)
3. Build and run with Docker Compose
docker compose up -d --build
4. Run migrations
docker compose exec web python manage.py migrate
5. Verify health
curl http://<api-domain>/healthz/
Organization profile API (license + branding)
Admin endpoint:
GET /api/v1/accounts/organizations/{org_id}/profile/PATCH /api/v1/accounts/organizations/{org_id}/profile/
Patch example:
{
"company_name": "Acme Corp",
"license_user_limit": 100,
"brand_logo_url": "https://cdn.example.com/acme-logo.svg"
}
Frontend deployment on Nginx
The static frontend is under frontend/public.
1. Set backend API domain
Edit frontend/public/config.js and set:
window.APP_CONFIG = {
API_BASE_URL: "https://api.example.com"
};
2. Serve via Nginx
Use frontend/nginx.conf as a reference server config and copy the frontend/public files to your Nginx web root.
CI for Gitea
Gitea Actions workflow file:
.gitea/workflows/ci.yml
It runs:
- Ruff lint
- Django test suite
- Docker image build
Description
Languages
Python
81.5%
JavaScript
10.4%
HTML
3.4%
CSS
3.3%
Shell
0.9%
Other
0.5%