- internal/services/mail_service.go: SMTP/TLS sender (implicit TLS on 465), html/template rendering, branded base layout + content templates, silent no-op when SMTP_* unset. - internal/services/reminder_service.go: hourly scanner for Fristen that are overdue / due tomorrow / due within the week (Monday digest). Dedup via paliad.reminder_log (24h window). - internal/services/invite_service.go: POST /api/invite flow with domain whitelist, in-memory 10/day/user rate limit, audit row in paliad.invitations. - internal/handlers/invite.go: POST + GET /api/invite handlers. - Sidebar "Kolleg:in einladen" button + modal on every page. - migration 016: paliad.reminder_log, paliad.invitations, users.lang column. - docker-compose: SMTP_* + PALIAD_BASE_URL env vars. - docs/feature-roadmap.md: documented Supabase auth-SMTP routing as open question; current pilot keeps identity mails on Supabase default sender. Rationale: get Paliad off Supabase's best-effort outbound for the inbox-facing stuff (reminders, invitations) and move deadline nudges from passive dashboard to active email. Custom Supabase auth SMTP is blocked on the shared ydb.youpc.org instance — deferred until Paliad has its own project or GoTrue webhook relay.
16 lines
624 B
Go
16 lines
624 B
Go
// Package templates exposes the embedded email HTML templates. The package
|
|
// exists so that //go:embed can reach the files from a stable location —
|
|
// embed directives can't use "..", so every consumer (MailService, tests)
|
|
// reads through EmailFS instead of crossing package boundaries with relative
|
|
// paths.
|
|
package templates
|
|
|
|
import "embed"
|
|
|
|
// EmailFS contains every HTML template under internal/templates/email/.
|
|
// The MailService uses these as {{define "content"}} overrides layered onto
|
|
// base.html; adding a new email means dropping the file in and parsing it.
|
|
//
|
|
//go:embed email/*.html
|
|
var EmailFS embed.FS
|