Verbinden…
DEMO modus — fictieve data uit /mock-snapshot.json. Geen echte cijfers, geen Excel-koppeling. Veilig om te delen met externe developers. Klik nogmaals op "Demo actief" in de sidebar om terug naar live data.

Documentation

Per pagina wat het doet, welke Excel cellen, welke webhooks, hoe data flows.

Architecture

Dashboard = Next 14 App Router + shadcn/ui + NextAuth Discord OAuth, gehost op Vercel (dashboard.aventerprise.nl). Data flow loopt 2 kanten:

READ:   Excel → openpyxl → dashboard_push.py (5 min) → Vercel Blob → DashboardProvider (60s) → React pages
WRITE:  Dashboard click → /api/excel-actions → Upstash Redis queue → excel_action_poller.py (60s) → Excel
        Mac scripts → /api/notifications → Vercel Blob → /notifications page
Workspaces
2 administraties strikt gescheiden zodat cijfers nooit mengen
Abel — eigen kapitaal
URL: /abel/*
Excel: AV Enterprise — Abel.xlsx
Tabs: Abel EU + Abel Lysted
Investeerders — extern
URL: /investeerders/*
Excel: Investeerders EU.xlsx
Tabs: Investeerders EU + US
Combined — informatief
URL: /
Side-by-side overzicht
Niet voor BTW-aangifte

Per pagina

Per workspace zijn er 5 pagina's: Dashboard, Inventory, Money flow, Agenda, Financials. Alle oude losse URLs (sales/inkopen/charges/deliveries/ pnl/bookkeeper/reconciliation) redirecten naar de juiste sub-tab.

/ — Combined Overview
Doel

Side-by-side overzicht Abel + Investeerders. Voor lifetime trend monitoring.

Data source

Beide master tabs (Abel EU + Abel Lysted + Investeerders EU + US)

Formule

Per workspace: Capital = SUM(O), Revenue = SUMIF(Sold & Paid, S), Profit = Revenue − Inkoop

NoteUSD→EUR rough @0.92 voor Lysted columns. Niet voor BTW.
/abel + /investeerders — Workspace Dashboard
Doel

Hoofdpagina per workspace. KPIs, EU vs Lysted/US breakdown, charts, quick links.

Data source

Per workspace: master tabs (Abel EU + Lysted, of Investeerders EU + US)

Formule

Total Capital = SUM(O). Revenue = SUMIF(Sold&Paid, S). Cumulative profit chart = profit_eur per dag (60d/90d).

NotePeriod filter past KPIs aan op gekozen scope (default = All)
/abel/inventory + /investeerders/inventory
Doel

Alle tickets met period+status filter. Klikbare status pills. Drill-down naar Excel row.

Data source

Master tab — kolom A (artist) tot AD (notes)

Formule

Status filter = COUNTIF op col E ("Sold And Paid", "Listed", "Instock", etc)

NoteOpen inventory = NIET sold AND NIET unsold
/abel/money-flow + /investeerders/money-flow
Doel

Sub-tabs Sales | Inkopen | Bank | Deliveries — alles wat geld in en uit beweegt. Tab state in URL via ?tab=…

Data source

Master tab — sales (S col), inkopen (O col), bank CSV upload, deliveries (status='Sold Not Delivered')

Formule

Revenue = SUMIF Sold&Paid (S); Inkoop = SUMIF face (O); Bank match = datum±3d + bedrag±€0.01 + merchant keyword

NoteOude URLs /abel/sales, /inkopen, /charges, /deliveries blijven werken als redirect naar de juiste tab.
/abel/calendar + /investeerders/calendar — Agenda
Doel

Events kalender per workspace. Maand view met deeplinks naar tickets.

Data source

Master tab event_date kolom

Formule

Group by event_date, show count per dag

NoteHernoemd naar 'Agenda' in sidebar — zelfde route /calendar.
/abel/financials + /investeerders/financials
Doel

Sub-tabs P&L | Boekhouder | Reconciliation — alle cijfers die naar Argo gaan.

Data source

P&L: master Sold&Paid + Lysted profit_eur. Boekhouder: BH-tabs auto-gegenereerd. Reconciliation: bh_purchases revolut_charge.

Formule

P&L: Revenue − Costs (closed only). Reconciliation: match status uit BH Inkopen kolom G.

NoteOude URLs /abel/pnl, /bookkeeper en /reconciliation redirecten hierheen.
/notifications (shared)
Doel

Agent feed — Mac scripts POSTen events. Klik resolve/heropen per item.

Data source

POST /api/notifications (bearer AGENT_TOKEN)

Formule

Categories: match_needed, manual_review, update, error, info

NoteReal-time alternatief: Discord #sales / #actie / #errors webhooks
/todos (shared)
Doel

Roadmap synced uit TODO.md. Edit lokaal, dashboard refresh elke 5 min.

Data source

Mac dashboard_push.py parses TODO.md

Formule

Bucket: Now / Soon / Later / Ideas

NoteMarkdown checkbox conventie: [ ] open, [~] in progress, [✓] done
/docs (shared)
Doel

Deze pagina — per-pagina uitleg + data flows + webhooks reference.

Data source

Statisch — bedoeld als handleiding

Formule

NoteUpdate bij elke structurele wijziging zodat het naslagwerk actueel blijft
/settings (shared)
Doel

Period default, FX rates display, Excel file links, system info.

Data source

LocalStorage + dashboard.json

Formule

NoteGeen schrijf-actie hier; alleen leesbare config
Webhooks — wanneer wat
Welke event triggert welke notification
TriggerChannel / EndpointWanneer
Lysted invoice emailDiscord #sales (Benjamin embed)Real-time bij gmail_lysted_watcher hit
Lysted delivery reminderDiscord #actieT-1d / T-3d / T-7d voor event_date
Pipeline errorDiscord #errorsParser fail / Excel lock / OneDrive sync issue
Daily digestDiscord #sales09:00 UTC dagelijks
Event remindersDiscord #actieT-14d / T-7d / T-3d / T-1d voor event_date
Cartly/Silently checkoutMac discord_purchase_listener.pyRealtime via Discord bot polling
Match neededDashboard /notifications + DiscordMac script kan inkoop niet matchen aan Revolut charge
Manual reviewDashboard /notificationsParser onzeker over inkoop/sale
Update (info)Dashboard /notificationsNieuwe sale/inkoop verwerkt — informatief
Repo files & external links
CLAUDE.md
Project instructies + skill triggers
TODO.md
Centrale roadmap (synced naar /todos)
AUTOMATION_PIPELINE.md
Email→Excel→Discord pipeline reference
dashboard/ARCHITECTURE.md
Architecture detail
dashboard/DEPLOY.md
Productie deploy guide
scripts/dashboard_push.py
Mac → Vercel Blob snapshot generator
scripts/notify_dashboard.py
Mac → /api/notifications helper
scripts/mail_watcher.py
Email→Excel parser
Lysted TransfersRevolut BusinessDiscord Developer PortalVercel

Command palette

Zoek pagina's en acties