Presentation Layer — Flutter
All OpenDart user-facing applications are built with Flutter, targeting mobile and desktop from a single codebase.
How Flutter Connects
Flutter does not need a custom backend. It talks directly to NocoDB's REST API for all data operations, and calls n8n webhooks to trigger automated workflows.
┌────────────────────────────┐
│ Flutter App │
│ │
│ ┌──────────────────────┐ │
│ │ NocoDB API Client │──┼──→ REST API → NocoDB
│ └──────────────────────┘ │
│ ┌──────────────────────┐ │
│ │ n8n Webhook Client │──┼──→ POST → Workflow Engine
│ └──────────────────────┘ │
└────────────────────────────┘
Data Flow by Example
User logs in
- Flutter → POST credentials to NocoDB auth endpoint
- NocoDB returns a token
- Flutter stores token for subsequent requests
User views their data
- Flutter → GET records from NocoDB table (with token)
- NocoDB returns JSON
- Flutter renders the UI
User performs an action
- Flutter → POST new record to NocoDB table
- n8n (watching the table) detects the change
- n8n fires any downstream workflows (email, notifications, etc.)
User triggers automation
- Flutter → POST to n8n webhook URL
- n8n runs the workflow (reads/writes NocoDB as needed)
- n8n returns result to Flutter
Benefits of This Approach
- No custom backend code — NocoDB & n8n replace the traditional server
- Flutter handles UI only — business logic lives in the data & automation layers
- Independent scaling — each layer can be scaled independently
- Rapid development — schema changes in NocoDB are immediately available as API endpoints