package.json-Version stand seit Projektstart unverändert auf 1.0.0. Neues Schema in CLAUDE.md dokumentiert: Minor = aktive Features aus features/INDEX.md / 10, abgerundet. 82 aktive Features -> 1.8.0. Veralteten "nächste freie PROJ-44"-Hinweis auf dynamischen Verweis auf INDEX.md korrigiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WapWkrQusDuBMhaN8WyuXB
3.5 KiB
3.5 KiB
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
# 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 infeatures/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)
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.