Z User
32a8b01845
fix: instance detail crash + add play/stop/redeploy/remove actions
...
Fixes:
1. useFetch: add credentials:'same-origin' — cookie wasn't being sent
with API calls, causing 401 → React error boundary → 'Etwas ist schiefgelaufen'
2. Instance detail Sheet now loads correctly (cookie sent with request)
New instance actions (UI + API):
- Redeploy: triggers Dokploy application.redeploy (rebuilds from latest commit)
- Stop: triggers Dokploy application.stop (pauses container)
- Start: triggers Dokploy application.start (resumes container)
- Remove: existing delete (SlideCommit confirmation)
Dokploy deploy fix:
- deployApplication now calls markRunning before deploy
- This ensures Dokploy creates a deployment job
ActionsRow redesigned:
- demo_active/active: [Redeploy] [Stop] [Demo +7d] [Remove]
- grace: [Start] [Remove]
- failed: [Retry] [Remove]
- provisioning/deleting/deleted: no actions
2026-10-29 16:29:28 +00:00
Z User
aa075762b2
feat: full CRUD support — companies, deals, projects, expenses, tickets, licenses
...
API routes (new + modified):
- POST /api/aos/crm/companies (create company)
- PATCH/DELETE /api/aos/crm/companies/[id] (edit/delete with dependency check)
- PATCH/DELETE /api/aos/crm/deals/[id] (edit/delete deal)
- POST /api/aos/projects (create project)
- PATCH/DELETE /api/aos/projects/[id] (edit/delete with dependency check)
- POST /api/aos/expenses (create expense)
- PATCH/DELETE /api/aos/expenses/[id] (edit/delete with GoBD lock)
- PATCH/DELETE /api/aos/tickets/[id] (edit/delete with message check)
- DELETE /api/aos/licenses/[id] (delete only if cancelled + no deps)
- NO invoice delete endpoint (GoBD retention — storno only)
UI components (new):
- DeleteDialog: reusable AlertDialog with dependency list
- CompanyFormDialog: create + edit (12 fields)
- DealFormDialog: create + edit (replaces CreateDealDialog)
- ProjectFormDialog: create + edit
- ExpenseFormDialog: create + edit
- TicketEditDialog: edit status/priority/category/assignee
UI views (modified):
- CRM: 'Neue Firma' + 'Neuer Deal' buttons, edit/delete per row
- Projects: 'Projekt' button, edit/delete on cards
- Expenses: 'Ausgabe' button, edit/delete per row (hidden if DATEV-locked)
- Support: edit/delete in inbox header
- Licenses: delete button (only if cancelled/revoked/expired)
Cascade policy:
- Every DELETE counts FK relations, returns 409 with dependency list
- Hard delete only when no dependencies exist
- GoBD: expenses locked if DATEV-exported or invoiced
- Audit log on every create/update/delete
2026-10-29 13:32:17 +00:00
Z User
db8e365932
feat: global API rate limiting + webhook dispatcher wired to key events
...
Rate limiting (middleware-level):
- 120 requests/minute per IP for all /api/* routes
- Returns 429 with retry-after header when exceeded
- In-memory store (per-container, sufficient for single-instance)
Webhook dispatcher wired to events:
- license.created → fires when a new license is issued
- ticket.created → fires when a support ticket is created
- instance.provisioned → fires when a tenant instance goes live
- Each event includes relevant payload (key, product, URL, etc.)
- Fire-and-forget (doesn't block the response)
- HMAC-SHA256 signed (existing webhook.ts implementation)
Also:
- Ticket creation now sends email notification (sendTicketCreatedEmail)
2026-10-29 10:46:49 +00:00
Z User
970986fef7
feat: email integration (nodemailer) + wire into agency/license flows
...
- src/lib/email.ts: SMTP client with pre-built templates:
- sendAgencyApprovedEmail (reseller approval + discount)
- sendAgencyRejectedEmail (reseller rejection + reason)
- sendLicenseKeyEmail (license key delivery)
- sendTicketCreatedEmail (ticket confirmation)
- Agency approve route: sends approval email after DB update
- Agency reject route: sends rejection email with reason
- License creation route: sends license key email (fire-and-forget)
- Graceful degradation: if SMTP not configured, logs warning + continues
- nodemailer + @types/nodemailer installed
2026-10-28 22:50:42 +00:00
Z User
c6adc67479
4413045f-d05e-4d7a-a70d-81d6be253c85
2026-10-28 16:37:26 +00:00
Z User
762f3d7373
a6c0f3de-eeb0-4d76-a57f-f600dd133c06
2026-10-28 15:39:30 +00:00
Z User
2aa3496a90
feat: Leads Finder discovery + WordPress license validate + file storage
...
3 new PRD features:
1. Leads Finder discovery (PRD §6.2 Stage 1: Discover)
- Real SerpAPI integration (Google Maps local search)
- Real Tavily integration (web search API)
- Real Firecrawl integration (search + scrape)
- Returns company name, website, address, phone, description
- API key required (503 with hint if not configured)
- Rate limited, Zod validated, audit-logged
- POST /api/aos/leads/discover
2. WordPress-compatible license validation (PRD §6.4)
- POST /api/aos/licenses/validate
- WordPress plugin updater response format
- Domain auto-activation with max check
- Offline grace period (14 day default, configurable)
- Status checks: active/suspended/expired/revoked
- Rate limited (30/min), Zod validated, audit-logged
- Tested: active→valid✓, invalid→404, expired→403, suspended→403
3. Content-addressed file storage (PRD §5.5)
- src/lib/storage.ts
- SHA-256 hash addressing with sharded dirs (first 2 chars)
- Atomic writes (temp file → rename)
- Hash verified on read (tamper detection)
- Deduplication (same content = same hash = one file)
- Content type detection from magic numbers (PDF, PNG, JPEG, GIF, WebP, ZIP)
- storeFile(), readFile(), fileExists(), deleteFile()
0 TS errors, ESLint clean.
2026-10-27 23:49:25 +00:00
Z User
fa8dd46571
refactor: professional code quality audit
...
- Fix all TypeScript compilation errors (0 errors in src/)
- Add try/catch error handling to ALL API routes (38 handlers)
- Fix empty catch blocks (api-auth.ts now logs warnings)
- Add aria-labels to all icon-only buttons (WCAG 2.1 AA)
- Fix Prisma type mismatches (OR filter, Person.companyId, Estimate.projectId, Ticket.createdAt)
- Fix webhook PATCH route (moved to [id]/route.ts)
- Fix mobile-bottom-nav type safety
- Fix KB route where-clause type
- Fix test-mail banner null vs undefined
- Fix task comment fetch: add cancellation + error toast
- ESLint: 0 errors, 0 warnings
- 175 files, 24.741 lines of code
2026-10-27 12:23:32 +00:00