diff --git a/docs/lighthouse_desktop.png b/docs/lighthouse_desktop.png
new file mode 100644
index 0000000..0f9991c
Binary files /dev/null and b/docs/lighthouse_desktop.png differ
diff --git a/docs/lighthouse_mobile.png b/docs/lighthouse_mobile.png
new file mode 100644
index 0000000..7267f44
Binary files /dev/null and b/docs/lighthouse_mobile.png differ
diff --git a/docs/technical.html b/docs/technical.html
index e40f6cc..6e7d616 100644
--- a/docs/technical.html
+++ b/docs/technical.html
@@ -1,246 +1,255 @@
+
Appendix C – Architecture Overview
- High-level diagrams of the system tiers, two-phase auth flow, data model, role hierarchy, deployment, and key design decisions.
+ High-level diagrams of the system tiers, two-phase auth flow, data model, role hierarchy, deployment, and key
+ design decisions.
-
+
+
+
+
+
Open full-page Architecture Overview
@@ -836,7 +1444,9 @@ JWT_EXPIRATION=3600
-
+
+
+
HTTPS / REST + JWT Bearer — win.opelly.me → winapi.opelly.me
@@ -857,7 +1467,9 @@ JWT_EXPIRATION=3600
-
+
+
+
HTTP (internal Docker network)
@@ -907,7 +1519,9 @@ JWT_EXPIRATION=3600
-
+
+
+
Stored procedures via Dapper — TCP :3309 (Docker internal)
@@ -949,7 +1563,9 @@ JWT_EXPIRATION=3600
-
+
+
+
Outbound HTTP from API tier only
@@ -995,7 +1611,9 @@ JWT_EXPIRATION=3600
@@ -1008,7 +1626,9 @@ JWT_EXPIRATION=3600
@@ -1021,7 +1641,9 @@ JWT_EXPIRATION=3600
@@ -1034,7 +1656,9 @@ JWT_EXPIRATION=3600
@@ -1047,7 +1671,9 @@ JWT_EXPIRATION=3600
@@ -1063,11 +1689,14 @@ JWT_EXPIRATION=3600
- Token storage: auth_jwt, auth_refresh_token, auth_session_token — all in localStorage.
+ Token storage: auth_jwt, auth_refresh_token,
+ auth_session_token — all in localStorage.
|
- 401 interceptor: attempts one silent refresh; if that fails, redirects to /login.
+ 401 interceptor: attempts one silent refresh; if that fails, redirects to
+ /login.
|
- Refresh token rotation: each use replaces the old token (tracked via replaced_by_token_id).
+ Refresh token rotation: each use replaces the old token (tracked via
+ replaced_by_token_id).
@@ -1106,7 +1735,8 @@ JWT_EXPIRATION=3600
-
+
PK id_user_program
FK id_user
@@ -1128,7 +1758,8 @@ JWT_EXPIRATION=3600
-
+
PK id_user_student
FK id_user
@@ -1171,7 +1802,8 @@ JWT_EXPIRATION=3600
-
+
FK id_progress_event
FK id_benchmark
@@ -1222,11 +1854,26 @@ JWT_EXPIRATION=3600
Role Tiers (highest → lowest)
-
super_admin · full platform access
-
district_admin · manages programs
-
program_admin · manages users
-
teacher · full student CRUD
-
paraeducator · log events
+
+
super_admin · full platform access
+
+
+
district_admin · manages programs
+
+
+
program_admin · manages users
+
+
+
teacher · full student CRUD
+
+
+
paraeducator · log events
+
@@ -1244,14 +1891,70 @@ JWT_EXPIRATION=3600
- Student — Create Allow Allow Allow Allow Deny
- Student — Update Allow Allow Allow Mine Deny
- Goal — Create Allow Allow Allow Mine Deny
- Goal — Update Allow Allow Allow Mine Deny
- ProgressEvent — Create Allow Allow Allow Allow Mine
- ProgressEvent — Delete Allow Allow Allow Mine Deny
- Program — Create Allow Mine Deny Deny Deny
- User — Create Allow Mine Mine Deny Deny
+
+ Student — Create
+ Allow
+ Allow
+ Allow
+ Allow
+ Deny
+
+
+ Student — Update
+ Allow
+ Allow
+ Allow
+ Mine
+ Deny
+
+
+ Goal — Create
+ Allow
+ Allow
+ Allow
+ Mine
+ Deny
+
+
+ Goal — Update
+ Allow
+ Allow
+ Allow
+ Mine
+ Deny
+
+
+ ProgressEvent — Create
+ Allow
+ Allow
+ Allow
+ Allow
+ Mine
+
+
+ ProgressEvent — Delete
+ Allow
+ Allow
+ Allow
+ Mine
+ Deny
+
+
+ Program — Create
+ Allow
+ Mine
+ Deny
+ Deny
+ Deny
+
+
+ User — Create
+ Allow
+ Mine
+ Mine
+ Deny
+ Deny
+
@@ -1387,581 +2090,582 @@ JWT_EXPIRATION=3600
-
+ renderTables();
+ drawRelationships();
+ applyTransform();
+ setTimeout(updateMinimap, 100);
+ window.addEventListener('resize', updateMinimap);
+
-
+
+