# archivmail Selbst gehostetes Mail-Archiv-System. Go-Backend + Next.js-Frontend + PostgreSQL + Manticore Search. ## Tech Stack - **Backend:** Go 1.24, CGO_ENABLED=0, Manticore Search (Volltext-Index) - **Frontend:** Next.js 16 (App Router), TypeScript, Tailwind CSS, shadcn/ui - **Datenbank:** PostgreSQL (pgx/v5) - **Volltext-Index:** Manticore Search (MySQL-Protokoll, Port 9306) - **Deployment:** On-Premise, Systemd — Produktiv: 192.168.1.131 | Test: 192.168.1.132 - **Auth:** JWT (httpOnly Cookie), bcrypt Cost 12 ## Projektstruktur ``` cmd/archivmail/ CLI-Einstiegspunkt + Subkommandos config/ YAML-Konfiguration internal/ api/ HTTP-API + Handler audit/ Audit-Log (PostgreSQL + Flat-File) auth/ JWT-Authentifizierung imap/ IMAP-Import, Scheduler, Store index/ Manticore Search (CGO-frei), Async Worker smtpd/ Eingebetteter SMTP-Daemon storage/ AES-256-GCM Dateispeicher + PostgreSQL-Metadaten userstore/ Benutzerverwaltung pkg/mailparser/ RFC-2822 Parser, MBOX-Splitter src/ app/ Next.js Seiten (/, /search, /mail/[id], /admin, /imap) components/ UI-Komponenten (shadcn/ui) hooks/ useAuth lib/ api.ts, auth-cache.ts ``` ## Build & Deploy ```bash # Backend (kein CGO erforderlich) CGO_ENABLED=0 go build -buildvcs=false -o archivmail ./cmd/archivmail/ # Frontend npm run build # .next/standalone/ für Produktion # Auf Server deployen bash update.sh # oder: curl ... | bash ``` ## Konventionen - **Commits:** `feat(PROJ-X): ...`, `fix(PROJ-X): ...`, `chore: ...` - **Feature-IDs:** PROJ-1, PROJ-2, … (nächste freie: siehe `features/INDEX.md`) - **shadcn/ui:** Keine Custom-Versionen installierter Komponenten - **Kein Supabase, kein Vercel** – reines On-Premise-Deployment - **Versionierung (`package.json`):** SemVer, Minor-Version = Anzahl aktiver Features in `features/INDEX.md` (Deployed + In Review + In Progress + Planned, ohne Removed) geteilt durch 10, abgerundet. Bei jedem neuen Feature-Ticket Minor prüfen/anheben; Patch für Bugfix-Reihen ohne neues Feature, Major bleibt 1 bis zu einer grundlegenden Neuarchitektur (z.B. archivmail 2.0). ## Wichtige Konfiguration (Server) ``` /etc/archivmail/config.yml Hauptkonfiguration /etc/archivmail/keyfile AES-256 Schlüssel (32 Bytes, nie committen) /var/archivmail/store/ Verschlüsselter E-Mail-Speicher /var/lib/manticore/ Manticore RT-Indizes (emails_global, emails_tenant_N) ``` ## Dienste (Systemd) ```bash systemctl status archivmail # Go-Backend (Port 8080 + 2525) systemctl status archivmail-web # Next.js-Frontend (Port 3000) systemctl status manticore # Manticore Search (Port 9306, localhost) journalctl -u archivmail -f ``` # This is NOT the Next.js you know This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices. This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.