timetracker/.tasks/done/TT-014-go-serve-binary.md
2026-08-03 21:51:48 +02:00

2.1 KiB

TT-014 — Go APK-Serve-Binary

Type: Story
Priority: High
Labels: go, tooling, server
Depends on:
Blocks: TT-016 (serve_apk Make-Target)


Summary

Implementiere einen portablen HTTP-Server in Go der eine APK per WLAN bereitstellt. Kein Python, kein Flask, keine externen Abhängigkeiten — nur Go Standard-Library. Das kompilierte Binary scripts/serve/serve wird von make serve_apk gestartet.

Funktionsumfang

Feature Detail
Landingpage / HTML-Template mit App-Name, Version, Größe, Build-Datum, SHA256
Download /download APK als Streaming-Response mit Content-Disposition
SHA256-Endpoint /sha256 JSON: {"sha256":"…","filename":"…"}
No-Cache-Header Cache-Control: no-store auf allen Responses
QR-Code im Terminal qrencode -t UTF8 <url> via os/exec
Lokale IP UDP-Trick: Verbindung zu 8.8.8.8:80, eigene IP ablesen
CLI-Flags --dir build/apk (default), --port 8888, --debug
Versioninfo APK-Dateiname parsen: timetrack-0.1.0+3.apk → Version + Build-Nummer
SHA256 Sidecar .sha256-Datei neben APK lesen (Format: <hash> <pfad>)

HTML-Template

  • Design: modernes Card-Layout, dunkles Theme (Timetrack-Blau #2563EB)
  • Felder: Version, Größe MB, Build-Datum, Plattform
  • Verifizierungs-Sektion: SHA256 anzeigen + JS-Datei-Hash-Prüfung (Web Crypto API)
  • Installationshinweis für Android (Sicherheitseinstellungen)

Go-Modul

scripts/serve/
  go.mod     (module timetrack/serve, go 1.21, keine externen deps)
  main.go    (alles in einem File — überschaubar)

Acceptance Criteria

  • go build -o serve ./scripts/serve/ kompiliert ohne Fehler
  • ./serve --dir build/apk --port 8888 startet Server
  • Landingpage zeigt korrekte Metadaten wenn APK vorhanden
  • /download liefert APK mit korrektem MIME-Type
  • QR-Code erscheint im Terminal (falls qrencode verfügbar)
  • Server startet auch wenn kein qrencode vorhanden (graceful fallback)
  • Klarer Fehler wenn kein .apk im --dir gefunden

Files to create

  • scripts/serve/go.mod
  • scripts/serve/main.go