Apply new frontend theme

Full style rewrite (holographic/chrome dark theme) plus matching favicon,
authored externally and dropped in at /home/andrew/alembic-theme. Verified
every template's variable names, form field names, and action URLs match
the actual data each router passes before importing -- all matched exactly
with zero router/service changes needed. Validated all templates parse
(Jinja2 env.get_template over the full tree) and confirmed the live
container serves the new theme after rebuild+redeploy.
This commit is contained in:
andrew
2026-07-08 15:01:39 -06:00
parent a1f5bbb121
commit ee21251f3e
13 changed files with 927 additions and 346 deletions
+40 -25
View File
@@ -1,38 +1,53 @@
{% extends "base.html" %}
{% block title %}{{ item.artist }} — {{ item.title }} — alembic{% endblock %}
{% block content %}
<p><a href="/library">&larr; back to library</a></p>
<h1>{{ item.artist }} — {{ item.title }}</h1>
<p class="muted">{{ item.path }}</p>
<a class="back-link" href="/library">&larr; back to library</a>
<div class="page-header">
<div>
<h1>{{ item.artist }} — {{ item.title }}</h1>
<p class="subtitle muted mono truncate" style="max-width:none;">{{ item.path }}</p>
</div>
</div>
{% if request.query_params.get('changed') %}
<p>Updated {{ request.query_params.get('changed') }} field(s).</p>
<div class="notice success">Updated {{ request.query_params.get('changed') }} field(s).</div>
{% endif %}
<h2>Edit tags</h2>
<form method="post" action="/library/track/{{ item.id }}">
{% for field in editable_fields %}
<div>
<label for="{{ field }}">{{ field }}</label>
<input type="text" id="{{ field }}" name="{{ field }}" value="{{ item.get(field, '') or '' }}">
</div>
{% endfor %}
<button type="submit">Save</button>
</form>
<div class="panel" style="max-width:560px;">
<form method="post" action="/library/track/{{ item.id }}">
{% for field in editable_fields %}
<div class="field">
<label for="{{ field }}">{{ field }}</label>
<input type="text" id="{{ field }}" name="{{ field }}" value="{{ item.get(field, '') or '' }}">
</div>
{% endfor %}
<button type="submit" class="btn btn-primary">Save</button>
</form>
</div>
<h2>Set genre for this artist (all their tracks)</h2>
<form method="post" action="/library/track/{{ item.id }}/genre">
<input type="hidden" name="artist" value="{{ item.artist }}">
<label for="genre">Genre (e.g. "IDM; Electronic")</label>
<input type="text" id="genre" name="genre" required>
<button type="submit">Set genre</button>
</form>
<div class="panel" style="max-width:560px;">
<form method="post" action="/library/track/{{ item.id }}/genre">
<input type="hidden" name="artist" value="{{ item.artist }}">
<div class="field">
<label for="genre">Genre</label>
<input type="text" id="genre" name="genre" required placeholder="IDM; Electronic">
</div>
<button type="submit" class="btn">Set genre</button>
</form>
</div>
<h2>Re-fetch metadata from Spotify/iTunes URL</h2>
<form method="post" action="/library/track/{{ item.id }}/retag">
<label for="url">URL</label>
<input type="text" id="url" name="url" required>
<label><input type="checkbox" name="keep_genre" value="true"> keep existing genre</label>
<button type="submit">Retag</button>
</form>
<div class="panel" style="max-width:560px;">
<form method="post" action="/library/track/{{ item.id }}/retag">
<div class="field">
<label for="url">URL</label>
<input type="text" id="url" name="url" required>
</div>
<label class="checkbox-field"><input type="checkbox" name="keep_genre" value="true"> Keep existing genre</label>
<button type="submit" class="btn">Retag</button>
</form>
</div>
{% endblock %}