feat: refresh Doris Schoolhouse casefile theme

This commit is contained in:
Fizzlepoof
2026-05-21 23:31:10 +00:00
parent 2c14d32208
commit 269354286d
5 changed files with 274 additions and 55 deletions

View File

@@ -1,16 +1,19 @@
{% extends 'base.html' %}
{% block content %}
{% if request.query_params.get('submitted') %}
<section class="card form-card notice-card success-card">
<section class="card form-card notice-card success-card evidence-board">
<div class="case-legend"><span class="section-label">Submission packet</span><span class="pill">Filed</span></div>
<h2>Submission Created</h2>
<p>Submission {{ request.query_params.get('submitted') }} was created successfully.</p>
<p class="muted">Artifact: {{ request.query_params.get('artifact_kind', 'document') }} · Files: {{ request.query_params.get('file_count', '1') }}</p>
<p class="muted">Paperless status: {{ request.query_params.get('paperless_status', 'uploaded-local') }}</p>
</section>
{% endif %}
<section class="card form-card">
<section class="card form-card evidence-board">
<div class="case-legend chain-of-custody"><span class="section-label">Submission packet</span><span class="pill">chain-of-custody</span></div>
<h2>Assignment Upload</h2>
<form class="stack" method="post" enctype="multipart/form-data" action="/api/assignments/intake" id="assignment-upload-form">
<p class="muted">Package coursework like a proper intake docket so the archive, Paperless, and later review all stay in sync.</p>
<form class="stack intake-docket" method="post" enctype="multipart/form-data" action="/api/assignments/intake" id="assignment-upload-form">
<label>Class
<select name="class_id" id="class-select" required>
<option value="">Loading classes…</option>

View File

@@ -4,19 +4,60 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ title or 'Doris Schoolhouse' }}</title>
<link rel="stylesheet" href="/static/app.css">
<link rel="stylesheet" href="/static/app.css?v=4">
</head>
<body>
<header class="site-header">
<div>
<h1>Doris Schoolhouse</h1>
<p>School intake, recordings, D2L sync, and Paperless linkage.</p>
<body class="doris-hot-fuzz app-schoolhouse">
<div class="incident-tape" aria-hidden="true"></div>
<header class="site-header casefile-header app-casefile app-casefile-schoolhouse">
<div class="film-grain" aria-hidden="true"></div>
<div class="cinematic-glow" aria-hidden="true"></div>
<div class="brand-row">
<div class="nav-brand">
<span class="nav-kicker">N.W.A. Case File</span>
<strong>Doris Constabulary</strong>
</div>
<nav class="nav-links" aria-label="Doris Schoolhouse navigation">
<a class="nav-link" href="http://10.5.1.16:8787/">Dashboard</a>
<a class="nav-link" href="/">Dashboard</a>
<a class="nav-link" href="/assignments/upload">Assignment Upload</a>
<a class="nav-link" href="/recordings/upload">Recording Upload</a>
</nav>
</div>
<div class="casefile-title-row">
<div>
<p class="eyebrow">Sandford records desk</p>
<div class="casefile-stamp coursework-evidence-tag">Records Intake</div>
<h1>Doris Schoolhouse</h1>
<p class="lede">Assignment packets, recording intake, and D2L paperwork now framed like a proper evidence room instead of some sad upload form farm.</p>
<div class="brand-badges" aria-label="Theme badges">
<span class="pill badge-hotfuzz">For the Greater Good</span>
<span class="pill">Evidence locker: coursework</span>
<span class="pill">Case type: Records Intake</span>
</div>
</div>
<div class="hot-fuzz-art" aria-hidden="true">
<svg viewBox="0 0 320 220" class="poster-illustration" role="presentation">
<defs>
<linearGradient id="schoolhouse-sunset" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#f2c14e"></stop>
<stop offset="50%" stop-color="#d53600"></stop>
<stop offset="100%" stop-color="#910f3f"></stop>
</linearGradient>
</defs>
<rect x="8" y="8" width="304" height="204" rx="24" class="poster-frame"></rect>
<circle cx="228" cy="72" r="58" class="poster-halo"></circle>
<path d="M18 170 L112 100 L134 124 L40 198 Z" class="poster-tape tape-left"></path>
<path d="M202 82 L302 32 L314 60 L214 112 Z" class="poster-tape tape-right"></path>
<path d="M112 180 C110 150 116 126 132 110 C140 100 148 94 154 90 C160 94 168 100 176 110 C192 126 198 150 196 180 Z" class="constable-silhouette lead"></path>
<path d="M174 184 C172 154 178 132 194 118 C202 110 210 104 218 100 C226 104 234 110 242 118 C258 132 264 154 262 184 Z" class="constable-silhouette partner"></path>
<circle cx="84" cy="60" r="28" class="swan-stamp"></circle>
<path d="M76 64 C80 54 91 48 101 53 C93 52 88 57 89 63 C90 69 101 68 103 76 C94 78 83 76 78 69 L71 76 L66 71 L74 64 Z" class="swan-mark"></path>
<rect x="124" y="84" width="78" height="54" rx="6" class="folder-body"></rect>
<rect x="134" y="74" width="36" height="14" rx="4" class="folder-tab"></rect>
<text x="160" y="204" class="poster-callout">RECORDS INTAKE</text>
</svg>
</div>
</div>
<nav>
<a href="/">Dashboard</a>
<a href="/assignments/upload">Assignment Upload</a>
<a href="/recordings/upload">Recording Upload</a>
</nav>
</header>
<main class="page-shell">
{% block content %}{% endblock %}

View File

@@ -1,7 +1,11 @@
{% extends 'base.html' %}
{% block content %}
<section class="hero">
<div class="card">
<section class="hero evidence-board dossier-grid">
<div class="card evidence-card">
<div class="case-legend">
<span class="section-label">Course board</span>
<span class="pill">Records Intake</span>
</div>
<h2>Overview</h2>
<div class="stat-grid" id="summary-stats">
<div><strong>Courses</strong><span id="stat-courses"></span></div>
@@ -9,13 +13,17 @@
<div><strong>Submissions</strong><span id="stat-submissions"></span></div>
<div><strong>Recordings</strong><span id="stat-recordings"></span></div>
</div>
<p class="muted" id="backend-note">Loading backend…</p>
<p class="muted dossier-note" id="backend-note">Loading backend…</p>
<button id="sync-button" type="button">Refresh from D2L</button>
<p class="muted" id="sync-status">No sync run loaded yet.</p>
</div>
<div class="card">
<div class="card evidence-card">
<div class="case-legend">
<span class="section-label">Operator notes</span>
<span class="pill">Course board</span>
</div>
<h2>What this app currently does</h2>
<ul>
<ul class="case-list">
<li>Reads current D2L scrape data</li>
<li>Caches course and assignment rows</li>
<li>Stores assignment upload intake records</li>
@@ -25,16 +33,19 @@
</div>
</section>
<section class="three-up">
<div class="card">
<section class="three-up dossier-grid">
<div class="card evidence-board">
<div class="case-legend"><span class="section-label">Assignments</span><span class="pill">Open files</span></div>
<h2>Recent assignments</h2>
<div id="recent-assignments" class="list-block muted">Loading…</div>
</div>
<div class="card">
<div class="card evidence-board">
<div class="case-legend"><span class="section-label">Submissions</span><span class="pill">Chain status</span></div>
<h2>Recent submissions</h2>
<div id="recent-submissions" class="list-block muted">Loading…</div>
</div>
<div class="card">
<div class="card evidence-board">
<div class="case-legend"><span class="section-label">Recordings</span><span class="pill">Audio evidence</span></div>
<h2>Recent recordings</h2>
<div id="recent-recordings" class="list-block muted">Loading…</div>
</div>

View File

@@ -1,8 +1,10 @@
{% extends 'base.html' %}
{% block content %}
<section class="card form-card">
<section class="card form-card evidence-board">
<div class="case-legend chain-of-custody"><span class="section-label">Audio evidence</span><span class="pill">intake-docket</span></div>
<h2>Recording Upload</h2>
<form class="stack" method="post" enctype="multipart/form-data" action="/api/recordings/intake">
<p class="muted">Treat lectures and review audio like evidence bags: clearly dated, tied to the right class, and ready for later transcription and filing.</p>
<form class="stack intake-docket" method="post" enctype="multipart/form-data" action="/api/recordings/intake">
<label>Class
<select name="class_id" id="recording-class-select" required>
<option value="">Loading classes…</option>