Data Backend Proposal - Update Summary
Date: November 9, 2025
Updates: RBAC, Apps/Trigger Separation, Better Stack Integration
π― What Changed
Section titled βπ― What ChangedβYou requested three critical updates to the data backend proposal:
- Add RBAC (role-based permissions, not just org-level)
- Use Trigger.dev Python Extension (eliminate Spark cluster)
- Separate Trigger.dev into its own app (apps/trigger instead of apps/webapp/src/trigger)
- Better Stack Integration (export Trigger.dev traces)
β What Was Delivered
Section titled ββ What Was Deliveredβ1. RBAC Architecture β
Section titled β1. RBAC Architecture β β5 Role Levels Defined:
owner β Full access + billingadmin β Manage connections, users, all datadata_analyst β Read ERP data, run reports (NEW!)editor β Create/edit orders, upload PDFsviewer β Read-only accessImplementation:
- Clerk Organizations integration
- Cube RLS with role-based row filtering
- Field-level masking (hide pricing from viewers)
- Middleware authorization for API routes
Files Updated:
docs/architecture/data-backend-implementation-guide.md(lines 22-278)
2. Apps/Trigger Separation β
Section titled β2. Apps/Trigger Separation β βNew Structure:
erp-unlocked/βββ apps/β βββ webapp/ β Coolify (frontend only)β βββ trigger/ β Trigger.dev Cloud (background tasks)βββ packages/ βββ data-backend/ β Configs (Cube, Trino, Hudi)Benefits:
- Clear deployment boundaries
- Independent dependency management
- Better CI/CD (only changed app rebuilds)
- 6-week phased migration plan provided
Files Created:
- Migration checklist in implementation guide (lines 573-750)
3. Trigger.dev Python Extension β
Section titled β3. Trigger.dev Python Extension β βEliminated:
- β Separate Spark cluster
- β Separate dlt containers
- β Complex orchestration
New Approach:
// Python ETL runs inside Trigger.dev tasksexport const syncERPProducts = schemaTask({ id: 'sync-erp-products-v2', run: async payload => { const result = await python.runScript('./src/python/etl/prophet21_products.py', []); },});Cost Savings: $200/month (no Spark cluster)
Files Updated:
- Implementation guide with full code examples (lines 280-569)
- Trigger.dev Python docs referenced
4. Better Stack Integration β
Section titled β4. Better Stack Integration β βCurrent Issue: Trigger.dev v4 traces NOT sent to Better Stack (telemetry commented out)
Solution Provided:
telemetry: { exporters: [ new OTLPTraceExporter({ url: "https://in-otel.betterstack.com/v1/traces", headers: { Authorization: `Bearer ${process.env.BETTER_STACK_SOURCE_TOKEN}`, }, }), ], logExporters: [ new OTLPLogExporter({ url: "https://in-otel.betterstack.com/v1/logs", headers: { Authorization: `Bearer ${process.env.BETTER_STACK_SOURCE_TOKEN}`, }, }), ], serviceName: "erp-unlocked-trigger-tasks",}Files Created:
docs/architecture/trigger-betterstack-integration.md(complete setup guide)- Implementation guide updated (lines 903-1018)
π Updated Documentation
Section titled βπ Updated Documentationβ| Document | Purpose | Key Updates |
|---|---|---|
| data-backend-implementation-guide.md | Implementation details | β’ RBAC section added β’ Apps/trigger separation β’ Better Stack integration β’ All diagrams now Mermaid |
| trigger-betterstack-integration.md | Better Stack setup | β’ 5-minute setup guide β’ Troubleshooting β’ Environment variables |
| QUICK_START.md | Decision guide | β’ Updated for apps/trigger β’ Better Stack mentioned |
| README.md | Navigation | β’ Added new docs to index |
π° Updated Cost Analysis
Section titled βπ° Updated Cost AnalysisβPrevious Estimate: $875/month - With Spark cluster: $50/month
New Estimate: $725/month (52% savings from current!) - Eliminated Spark: $0 - Downsized Trino: $150 (was $250) - Total savings: $775/month vs current $1,500
Annual Savings: $9,3003-Year Savings: $27,900Additional savings from apps/trigger separation:
- Faster deployments (no full webapp rebuild)
- Reduced Trigger.dev compute (smaller bundle size)
π Key Findings
Section titled βπ Key FindingsβYouβre Already on Trigger.dev v4! β
Section titled βYouβre Already on Trigger.dev v4! β βNo migration needed. Current version: "@trigger.dev/sdk": "4.0.4"
The telemetry config was just commented out for βv3 compatibilityβ but youβre already on v4.
Better Stack Integration is a 5-Minute Fix β
Section titled βBetter Stack Integration is a 5-Minute Fix β β- Add
BETTER_STACK_SOURCE_TOKENto.env - Uncomment telemetry config in
trigger.config.ts - Deploy trigger tasks
- Done! Traces appear in Better Stack
Apps/Trigger Separation is Recommended β
Section titled βApps/Trigger Separation is Recommended β βBenefits outweigh migration cost:
- 6-week phased migration (low risk)
- Clear deployment boundaries
- Better CI/CD
- Clean foundation for data backend
π Next Steps
Section titled βπ Next StepsβImmediate (This Week)
Section titled βImmediate (This Week)β- Review apps/trigger structure - Decide if separation makes sense for your team
- Enable Better Stack integration - 5-minute fix to get traces flowing
- Test Python extension - Validate approach with one ETL pipeline
Phase 1: Pilot (Weeks 1-6)
Section titled βPhase 1: Pilot (Weeks 1-6)β- Week 1: Create apps/trigger/ structure
- Week 2: Move existing tasks
- Week 3: Enable Better Stack telemetry
- Week 4-5: Parallel testing
- Week 6: Cutover decision
Phase 2: Data Backend (Weeks 7-18)
Section titled βPhase 2: Data Backend (Weeks 7-18)β- Weeks 7-12: Implement data backend (if pilot succeeds)
- Weeks 13-18: Full migration to Hudi lakehouse
π Questions Answered
Section titled βπ Questions AnsweredβQ: Do we need to migrate to Trigger.dev v4?
Section titled βQ: Do we need to migrate to Trigger.dev v4?βA: No! Youβre already on v4 (4.0.4). Just enable the telemetry config.
Q: Should Trigger tasks be a separate app?
Section titled βQ: Should Trigger tasks be a separate app?βA: Yes, recommended. Clear deployment boundaries, independent versioning, better CI/CD. 6-week migration plan provided.
Q: How do we send traces to Better Stack?
Section titled βQ: How do we send traces to Better Stack?βA: Enable OpenTelemetry exporters in trigger.config.ts. Complete guide provided in trigger-betterstack-integration.md.
Q: Where should data backend code live?
Section titled βQ: Where should data backend code live?βA:
- ETL tasks:
apps/trigger/src/tasks/data-backend/ - Python scripts:
apps/trigger/src/python/etl/ - Configs:
packages/data-backend/(Cube, Trino, Hudi)
π Architecture Comparison
Section titled βπ Architecture ComparisonβBefore (Current)
Section titled βBefore (Current)βapps/webapp/βββ src/β βββ pages/ # Frontendβ βββ trigger/ # β Confusing! Deploys to different serviceβββ trigger.config.ts # β Telemetry commented outAfter (Proposed)
Section titled βAfter (Proposed)βapps/webapp/ β Coolify βββ src/pages/ # Frontend only
apps/trigger/ β Trigger.dev Cloud βββ src/ β βββ tasks/ # TypeScript tasks β βββ python/ # Python ETL βββ trigger.config.ts # β Telemetry enabled!
packages/data-backend/ # Shared configs βββ cube/ βββ trino/ βββ hudi/β¨ Summary
Section titled ββ¨ SummaryβAll requirements addressed:
β
RBAC with 5 role levels
β
Apps/trigger separation plan
β
Trigger.dev Python extension (no Spark)
β
Better Stack integration guide
β
Monorepo organization defined
β
Code reuse strategy
β
OpenTelemetry end-to-end
β
All diagrams converted to Mermaid
Total savings: 52% ($9,300/year)
Implementation time: 6 weeks (phased)
Risk level: Low (parallel testing, easy rollback)
Ready to proceed? Start with Better Stack integration (5 minutes), then decide on apps/trigger separation.
Documentation: