Initial TopDeck: self-hosted ranked favorites
A single Go binary with SQLite that serves a public page of the owner's ranked lists (movies, TV, albums, songs, video games, theater) and a login-gated editor. - Lists of 1–65,535 entries (100 recommended), several per category - Search-to-add via TMDB, TheTVDB, IGDB, Deezer/MusicBrainz, Wikipedia; manual entry as a fallback - Theater entries carry a production (Broadway, tour, …), venue and cast - Artwork cached locally; URL override and uploads - Drag, arrow and type-a-rank reordering; paginated for long lists - 12 theme presets plus custom CSS - First-run setup code or env-provided admin; bcrypt, rate-limited login, CSRF-guarded JSON API - Dockerfile and docker-compose.yml Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
e9a75a968a
53 files changed
+7078
No files matched your search
@@ -0,0 +1,29 @@
|
||||
{{define "bodyclass"}}page-auth{{end}}
|
||||
{{define "content"}}
|
||||
<section class="auth-card">
|
||||
<div class="auth-mark">{{icon "deck"}}</div>
|
||||
<h1>Welcome to TopDeck</h1>
|
||||
<p class="muted">Create the owner account. Only you can sign in; everyone else just sees your lists.</p>
|
||||
{{with .Data.Error}}<p class="alert alert--error" role="alert">{{icon "alert"}}{{.}}</p>{{end}}
|
||||
<form method="post" action="/setup" class="stack">
|
||||
<label class="field">
|
||||
<span class="field-label">Setup code</span>
|
||||
<input name="code" required autocomplete="one-time-code" placeholder="XXXX-XXXX" spellcheck="false" autocapitalize="characters">
|
||||
<span class="field-hint">Printed in the server log when TopDeck starts. Run <code>docker compose logs topdeck</code> to see it.</span>
|
||||
</label>
|
||||
<label class="field">
|
||||
<span class="field-label">Username</span>
|
||||
<input name="username" autocomplete="username" required value="{{.Data.Username}}" maxlength="64">
|
||||
</label>
|
||||
<label class="field">
|
||||
<span class="field-label">Password</span>
|
||||
<input name="password" type="password" autocomplete="new-password" required minlength="8">
|
||||
</label>
|
||||
<label class="field">
|
||||
<span class="field-label">Confirm password</span>
|
||||
<input name="confirm" type="password" autocomplete="new-password" required minlength="8">
|
||||
</label>
|
||||
<button class="btn btn--primary btn--block" type="submit">Create account</button>
|
||||
</form>
|
||||
</section>
|
||||
{{end}}
|
||||
Reference in new issue
Block a user