The workout, the protein, the calories, the water, and three lines of gratitude. One page per day, a card of seventy-five tiles that fill by how many of the five landed, and a missed day left as a gap rather than a reset. Single Go binary with no dependencies. The log is one JSON file on a mounted volume, written atomically and never silently replaced when it fails to parse, since it is the one thing here that cannot be recreated. Auth is Traefik basic auth at the ingress; the app has no login of its own, so every POST checks Sec-Fetch-Site to stop another origin posting with those credentials. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
24 lines
689 B
HTML
24 lines
689 B
HTML
{{template "head" .}}
|
|
<main class="page page-narrow">
|
|
|
|
<header class="masthead">
|
|
<div class="masthead-day">
|
|
<p class="eyebrow">Starting</p>
|
|
<p class="masthead-count">75</p>
|
|
<p class="masthead-of">days</p>
|
|
</div>
|
|
<p class="masthead-date">Five things a day. Set what counts.</p>
|
|
</header>
|
|
|
|
{{if .Error}}<p class="alert">{{.Error}}</p>{{end}}
|
|
|
|
<form class="sheet" method="post" action="/setup">
|
|
{{template "settings-fields" .}}
|
|
<button class="save" type="submit">Start the challenge</button>
|
|
<p class="sheet-note">All of this is editable later. Changing a target rescores every day against the new one.</p>
|
|
</form>
|
|
|
|
</main>
|
|
</body>
|
|
</html>
|