Erhverv Privat
Funktioner Sikkerhed Priser Projekt Prøv gratis

HeidiMail — Projektoverblik

Intern teknisk dokumentation. Alle data hostes i Danmark under dansk jurisdiktion.

Tech Stack

Komponent Teknologi Status
Mail server Stalwart (Rust) — JMAP, IMAP, SMTP, DKIM/SPF/DMARC, Sieve klar
Protokol JMAP (JSON Meta Application Protocol) — delta-sync, push klar
Webclient .NET Core Razor Pages, TypeScript, Autofac DI, Dapper klar
Database PostgreSQL — LISTEN/NOTIFY, 15 migrationer, AES-256-GCM passwords klar
Chat transport SignalR (WebSocket med fallback til long polling) planlagt
Hosting Dansk datacenter (ikke AWS/Azure/GCP) — udbyder TBD planlagt
Signup Vipps MobilePay API — 1 kr. verifikation, kun transaktions-ID planlagt
Native apps (fase 3) TBD (Electron, .NET MAUI, eller lign.) planlagt

Kanban — Projektstatus

Planlagt
Bruger & Sikkerhed (Fase 1)
Signaturer (schema klar)
  • Database-schema allerede oprettet i migrationer
  • UI og API til CRUD af email-signaturer mangler
Brugerpræferencer (schema klar)
  • Database-schema klar, SmartConfig-provider understøtter det
  • UI til indstillinger (tema, standard-signatur, notifikationer) mangler
Chat (Fase 1)
SignalR hub + grupper
  • WebSocket transport via .NET Core SignalR
  • Gruppe-management: email-tråd-baserede og ad hoc grupper
  • Autentificering: kun HeidiMail-brugere, ingen gæsteadgang
Kontekstuel chat (email-knyttet)
  • Chat knyttet til specifik email-tråd — implicit kontekst
  • Deltagere: alle HeidiMail-modtagere på emailen
  • Persistens: chathistorik gemmes og genindlæses ved email-åbning
Ad hoc chat
  • Standalone chat uden email-parent
  • Bruger opretter chat og inviterer deltagere
Notifikationer
  • Push-notifikationer til brugere der ikke har chatten åben
  • Reconnection-håndtering via SignalR
Chathistorik persistens
  • PostgreSQL storage af beskeder
  • Genindlæsning ved email-åbning eller chat-genbesøg
Signup & Anti-abuse (Fase 1)
MobilePay-integration
  • Vipps MobilePay API — 1 kr. verifikation ved signup
  • Kun transaktions-ID gemmes (ikke navn/telefon/CPR)
  • Kræver CVR + MobilePay-erhvervsaftale først
Rate limiting for nye konti
  • Første 24t: maks 10 udgående mails
  • Første 7 dage: maks 30 mails, derefter gradvis optrapning
  • Bounce-rate og spam-rapport monitoring, auto-suspension
abuse@heidimail.dk
  • Abuse-postkasse med overvågning
  • System til detektion og lukning af misbrugskonti
  • Procedure for abuse-rapporter fra andre mailservere
Juridisk & Infra (Fase 1)
CVR, selskab, MobilePay-erhverv
  • ApS oprettelse + CVR-nummer
  • Erhvervskonto i bank + MobilePay-erhvervsaftale
  • Estimeret budget: ~20.000 kr.
Privatlivspolitik
  • GDPR-dokumentation: hvad gemmes, hvor længe, lovgrundlag
  • Fortegnelse over behandlingsaktiviteter
  • Procedure for indsigts- og sletningsanmodninger
Databehandleraftaler
  • DPA med datacenter, backup-udbyder, evt. SMS-gateway
  • HeidiMail sælger privacy — compliance-kravene er ekstra høje
Dansk datacenter hosting
  • Evaluering af Netgroup, GlobalConnect el. lign.
  • Ikke AWS/Azure/GCP/Hetzner — trouværdighed kræver dansk udbyder
IP/domæne reputation opvarmning
  • Gradvis opvarmning — mails lander i spam de første uger
  • Perfekt DKIM/SPF/DMARC er forudsætning
  • Soft launch med lukket beta anbefales
Kollaborativ redigering (Fase 2)
Cursor/badge broadcasting
  • Realtids cursor-positioner og navne-badges i email-body via SignalR
  • Pragmatisk tilgang: ingen CRDT/OT, cursor-broadcasting + menneskelig koordinering
Realtids tekst-broadcasting
  • Tekstændringer broadcastes til alle deltagere via SignalR
  • Ingen algoritmisk conflict resolution — koordinering sker i chat
Chat-sidebar ved redigering
  • Chat integreret som sidebar i email-editor
  • Bygger på fase 1 chat-infrastruktur
Custom domains (B2B)
  • Multi-tenant domain-support i Stalwart
  • DNS-verifikation flow, uafhængig af collab-features
E2E-kryptering (Fase 3)
Native apps (desktop + mobil)
  • Desktop (Electron/.NET MAUI) + mobil (iOS/Android)
  • Forudsætning for E2E: browser-storage er upålidelig
  • Lokal storage og søgeindeksering i appen
Kryptering at rest
  • Mailbox krypteres på server med brugerens nøgle
  • Dekryptering sker udelukkende i native app
  • Valgfrit per bruger — webclient fortsætter uden E2E
Key management + recovery
  • Nøglegenerering, recovery phrase, multi-device synkronisering
  • Password reset problematik: nyt password = ny nøgle = gamle mails tabt
  • Proton-lignende recovery phrase som løsning
I gang
Landing Page (Fase 1)
Projekt-statusside
  • Teknisk dokumentationsside med kanban-overblik
  • Klikbare tasks med detaljer fra projektbeskrivelsen
Udført
Email (Fase 1)
Stalwart mail server + JMAP client
  • Stalwart Mail Server (Rust) med native JMAP, IMAP & SMTP
  • DKIM, SPF, DMARC konfigureret — Sieve-baseret filtrering
  • Custom JmapClient i .NET Core med session/auth håndtering
Webclient: 3-panel layout
  • ASP.NET Core Razor Pages + TypeScript frontend
  • Sidebar (mapper) | Mail-liste | Læsepanel
  • Autofac DI, Dapper til PostgreSQL
Mail listing med sync/caching
  • JMAP delta-sync med sinceState/newState
  • PostgreSQL cache: cached_mails, cached_mail_attachments, jmap_sync_states
  • API endpoints: /api/mailboxes, /api/mail, /api/mail/{id}/body
Læse, sende, svare, videresende
  • Standard email-operationer via JMAP Email/set + EmailSubmission
  • CC/BCC support, reply/forward med korrekt threading
Drafts med auto-save
  • Auto-save til Drafts-mailbox via JMAP Email/set
  • Debounced save ved ændringer i compose-editor
Labels & mapper
  • JMAP Mailbox-operationer: opret, omdøb, slet, flyt
  • JMAP keywords til label-tagging
Vedhæftninger
  • Upload/download via JMAP blob endpoints
  • Inline og attached vedhæftninger med MIME-type håndtering
Batch-operationer (select, arkiver, slet)
  • Multi-select i mail-listen med bulk JMAP Email/set
  • Arkivér (flyt til Archive-mailbox), slet (flyt til Trash)
Storage quota (JMAP Quota/get)
  • JMAP Quota/get med hardLimit og resourceType:octets parsing
  • Storage-bar i toolbar avatar-dropdown med brugt/total visning
  • Integrationstest mod rigtig Stalwart-instans
Toolbar account switcher
  • Kontonavn + email + avatar samlet i én toolbar-knap
  • Avatar-dropdown med kontoskift, profil-link og storage
  • Erstatter sidebar account switcher — renere layout
Bruger & Sikkerhed (Fase 1)
ASP.NET Core Identity (Dapper)
  • Custom Identity stores implementeret med Dapper
  • PostgreSQL-backed brugerhåndtering
Auto-provisioning ved login
  • Automatisk oprettelse af Stalwart mailkonto ved første login
  • Konfiguration af JMAP-credentials og mailbox-setup
Mail account CRUD + krypteret password (AES-256-GCM)
  • Opret, læs, opdater, slet mailkonti via Stalwart admin API
  • Passwords krypteret med AES-256-GCM før lagring i PostgreSQL
Connection test til mailserver
  • JMAP session endpoint health check
  • Verifikation af credentials og server-tilgængelighed
Totrinsbekræftelse (2FA/TOTP)
  • TOTP-baseret 2FA med QR-kode og manuel nøgle til authenticator-apps
  • 10 recovery codes til backup-login
  • Fuld settings-UI: aktivér, deaktivér, regenerér koder
  • Login-flow med 6-cifret OTP og recovery code fallback
  • Password-bekræftelse på alle 2FA-handlinger
Database: 15 migrationer
  • PostgreSQL schema med 15 migrationer (identity, mail cache, config)
  • Dapper data access, snake_case ↔ PascalCase mapping
Landing Page (Fase 1)
Marketing-site (Erhverv + Privat)
  • Razor Pages i HeidiMail.Landing-projekt
  • Segment-toggle: erhverv/privat med separate prissider
Responsive design
  • Desktop-first, breakpoints ved 900px (tablet) og 768px (mobil)
  • Poppins + JetBrains Mono, Phosphor Icons