removed emoji from filenames, Obsidian changed all relevant links

This commit is contained in:
Richard Kranendonk 2026-05-07 15:01:04 +02:00
parent d316285a74
commit 68f1c38681
638 changed files with 710 additions and 3176 deletions

View file

@ -0,0 +1,125 @@
---
tags:
- iso27DIY
- stack
- WeWeb
- SupaBase
- dev
- design
---
# Deciding which functionality goes where
Heres a decision framework to help you choose the right approach for each piece of functionality:
## WeWeb (Frontend Logic)
**Use when:**
- UI/UX logic and interactions
- Client-side data formatting and presentation
- Form validation (basic, user-facing)
- Navigation and routing logic
- Real-time UI updates from Supabase subscriptions
- Simple calculations that dont need to be secured
**Examples:** Date formatting, sorting/filtering displays, form field validation, conditional UI rendering
## SQL Functions + RPC
**Use when:**
- Complex data operations involving multiple tables
- Business logic that must be consistent and secure
- Performance-critical operations (closer to data)
- Data validation that cant be bypassed
- Calculations that need to be atomic
- Logic that might be reused across different clients
**Examples:** User permission checks, complex reporting calculations, multi-step data updates, financial calculations
## Edge Functions
**Use when:**
- External API integrations (payments, email, webhooks)
- Heavy computational tasks
- File processing and transformations
- Custom authentication flows
- Business logic that needs full programming language capabilities
- Third-party service communications
**Examples:** Stripe payment processing, PDF generation, image resizing, sending emails, complex AI/ML operations
## Database Triggers
**Use when:**
- Automatic responses to data changes
- Audit logging and history tracking
- Data consistency enforcement
- Background maintenance tasks
- Cross-table updates that must happen atomically
**Examples:** Updating timestamps, creating audit logs, maintaining calculated fields, sending notifications on data changes
## Decision Matrix
**Performance Priority:**
- SQL Functions > Database Triggers > Edge Functions > WeWeb
**Security Requirements:**
- Database Triggers ≥ SQL Functions > Edge Functions > WeWeb
**External Integration Needs:**
- Edge Functions > WeWeb > SQL Functions > Database Triggers
**Complexity of Logic:**
- Edge Functions > SQL Functions > WeWeb > Database Triggers
**Real-time Requirements:**
- Database Triggers > SQL Functions > WeWeb > Edge Functions
## Practical Examples
**User Registration Flow:**
- WeWeb: Form UI and basic validation
- Edge Function: Email verification, external service calls
- SQL Function: Create user profile with complex business rules
- Database Trigger: Create related records, audit log
**E-commerce Order Processing:**
- WeWeb: Shopping cart UI, order summary
- SQL Function: Inventory checks, price calculations
- Database Trigger: Update inventory, create audit trail
- Edge Function: Payment processing, order confirmation emails
**Reporting Dashboard:**
- WeWeb: Charts, filters, display logic
- SQL Function: Complex data aggregations
- Database Trigger: Update materialized views
- Edge Function: Export to PDF, email reports
## General Guidelines
**Start with the data layer and work outward:**
1. Database Triggers for automatic data consistency
2. SQL Functions for secure business logic
3. Edge Functions for external integrations
4. WeWeb for user interface and experience
**Security rule:** Never trust the client - critical business logic should be in SQL Functions or Edge Functions, not WeWeb.
**Performance rule:** Keep data-heavy operations close to the database (SQL Functions/Triggers).
**Maintainability rule:** Keep similar logic in the same layer when possible.
The key is often using multiple approaches together rather than choosing just one - they complement each other in a well-architected application.