Slate ticket system
  • Elixir 78.9%
  • HTML 17.7%
  • JavaScript 2.4%
  • Dockerfile 0.8%
Find a file
Marco Marus f576f3effc
All checks were successful
Build OCI image / test-and-build (push) Successful in 4m3s
chore: bump slate to 0.1.1
2026-07-08 11:33:43 +02:00
.forgejo/workflows fix: show release tag in footer 2026-07-08 11:22:30 +02:00
assets feat: publish deployable slate image 2026-07-07 14:15:22 +02:00
config feat: publish deployable slate image 2026-07-07 14:15:22 +02:00
lib feat: add user admin and team ticket views 2026-07-08 11:11:29 +02:00
priv feat: add release-ready registration settings 2026-07-07 15:30:45 +02:00
rel/overlays/bin Initial Slate ticket system 2026-07-07 10:05:30 +02:00
test feat: add user admin and team ticket views 2026-07-08 11:11:29 +02:00
.formatter.exs Initial Slate ticket system 2026-07-07 10:05:30 +02:00
.gitignore Initial Slate ticket system 2026-07-07 10:05:30 +02:00
Containerfile fix: show release tag in footer 2026-07-08 11:22:30 +02:00
mise.toml Initial Slate ticket system 2026-07-07 10:05:30 +02:00
mix.exs chore: bump slate to 0.1.1 2026-07-08 11:33:43 +02:00
mix.lock Initial Slate ticket system 2026-07-07 10:05:30 +02:00
README.md Initial Slate ticket system 2026-07-07 10:05:30 +02:00

Slate

Slate ist ein schlankes Ticketsystem mit Phoenix LiveView: ein responsives Kanban-Board für Backlog, aktive Arbeit, Review und erledigte Tickets.

Features

  • Phoenix LiveView UI ohne SPA-Build-Overhead
  • SQLite als persistenter Single-Container-Store
  • Lokale Userverwaltung mit erstem User als globalem Admin
  • Teams mit Teamlead-Rolle; Teamleads verwalten Mitglieder ihrer eigenen Teams
  • Optionale OIDC-Anmeldung, zum Beispiel mit Authentik
  • Spracheinstellung pro User: Englisch als Default, Deutsch optional
  • Ticketfelder: Titel, Beschreibung, Status, Priorität, Verantwortliche, Labels, Fälligkeitsdatum
  • Responsives Board mit schnellen Statuswechseln
  • OCI Image via Containerfile, lauffähig mit Podman ohne docker-compose
  • Forgejo Workflow unter .forgejo/workflows/container.yml

Entwicklung

Das Projekt nutzt mise für Erlang/Elixir.

mise trust
mise install
mise exec -- mix setup
mise exec -- mix phx.server

Danach ist Slate unter http://localhost:4000 erreichbar.

Tests

mise exec -- mix test

OCI Image Bauen

podman build -f Containerfile -t slate:local .

Mit Podman Starten

Vorher einen Secret-Key erzeugen:

mise exec -- mix phx.gen.secret

Container starten:

podman volume create slate-data
podman run --rm \
  --name slate \
  -p 4000:4000 \
  -e PHX_HOST=localhost \
  -e SECRET_KEY_BASE="change-me" \
  -v slate-data:/data:Z \
  slate:local

Das Startscript führt Migrationen automatisch aus. Die SQLite-Datenbank liegt standardmäßig unter /data/slate.db; überschreibbar mit DATABASE_PATH.

User, Teams und Sprache

Der erste lokal registrierte oder per OIDC angelegte User wird automatisch admin. Weitere User starten als member.

  • admin: kann Teams erstellen und alle Teammitgliedschaften verwalten
  • team lead: ist eine Rolle innerhalb eines Teams und darf dort Mitglieder hinzufügen, entfernen und Rollen ändern
  • member: normale Nutzung ohne globale Verwaltungsrechte

Die Produktsprache wird in den Account-Settings pro User gesetzt. Englisch ist Default, Deutsch ist optional verfügbar.

OIDC mit Authentik

OIDC ist optional. Wenn diese Variablen gesetzt sind, erscheint auf der Login-Seite zusätzlich der OIDC-Login:

OIDC_ISSUER=https://auth.example.org/application/o/slate/
OIDC_CLIENT_ID=...
OIDC_CLIENT_SECRET=...
OIDC_REDIRECT_URI=https://slate.example.org/auth/oidc/callback

In Authentik muss die Redirect URI auf /auth/oidc/callback zeigen. Scopes: openid profile email.

Beim Containerstart können die Variablen einfach ergänzt werden:

podman run --rm \
  --name slate \
  -p 4000:4000 \
  -e PHX_HOST=slate.example.org \
  -e SECRET_KEY_BASE="change-me" \
  -e OIDC_ISSUER="https://auth.example.org/application/o/slate/" \
  -e OIDC_CLIENT_ID="..." \
  -e OIDC_CLIENT_SECRET="..." \
  -e OIDC_REDIRECT_URI="https://slate.example.org/auth/oidc/callback" \
  -v slate-data:/data:Z \
  slate:local

Forgejo CI/CD

Der Workflow .forgejo/workflows/container.yml führt Tests aus, baut das OCI Image mit Podman und pusht bei Pushes auf main, wenn diese Werte gesetzt sind:

  • Variable REGISTRY, zum Beispiel git.example.org
  • Variable IMAGE_NAME, optional, Standard slate
  • Secret REGISTRY_USERNAME
  • Secret REGISTRY_PASSWORD

Ohne Registry-Konfiguration bleibt der Workflow ein Test- und Build-Check.