Technical Overview of Supamode
A detailed look at the technical details of Supamode. Learn how the application is built and how it works.
Supamode is a comprehensive admin dashboard for Supabase projects, making it easy for non-developers to manage the database's data. This document explains the high-level architecture to help you understand how Supamode works and deploy it with confidence.
Overview
Supamode consists of three main components:
- React Frontend (Vite + TypeScript) - The admin dashboard interface
- Hono.js Backend API - Type-safe API server with RPC capabilities
- Supabase Schema - PostgreSQL with custom schema
supamode
for metadata and permissions
Architecture Diagram
Below is a high-level architecture diagram of Supamode:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│ React App │ │ Hono.js API │ │ Supabase DB ││ (Frontend) │◄──►│ (Backend) │◄──►│ PostgreSQL ││ │ │ │ │ ││ • Vite Build │ │ • Type-safe RPC │ │ • Your Data ││ • React Router │ │ • Drizzle ORM │ │ • Supamode ││ • TanStack Query│ │ • Auth Handling │ │ Schema │└─────────────────┘ └─────────────────┘ └─────────────────┘
How Supamode Indexes Your Tables
The Supamode Schema
Supamode creates a dedicated supamode
schema in your PostgreSQL database that contains metadata about your existing tables and columns. This schema includes:
- Table Metadata: Information about which tables are visible in the admin panel
- Column Metadata: Field types, display names, and visibility settings
- Permissions: Role-based access control for tables and operations
- Audit Logs: Track all changes made through the admin interface
- User Accounts: Link Supabase Auth users to admin roles
Dynamic Table Discovery
When you deploy Supamode:
- Schema Introspection: The system automatically discovers all tables and columns in your database using PostgreSQL's information schema
- Metadata Storage: Table and column information is stored in
supamode.table_metadata
andsupamode.column_metadata
tables - Permission Mapping: Each table gets default permissions that can be customized per role
- Syncing: Schema changes can be synced to the admin interface with a simple button click.
Your Data Remains Untouched
- Supamode never modifies your existing schemas or data
- All metadata is stored separately in the
supamode
schema - Your application continues to work exactly as before
- Supamode only adds read/write capabilities through the admin interface
Frontend Architecture
React Application (Vite)
The frontend is a modern React application built with:
- Vite: Fast build tool and development server
- React Router 7: File-based routing with data loaders
- TypeScript: Full type safety across the application
- Tailwind CSS v4: Utility-first styling
- Shadcn/ui: Consistent component library for the admin interface
Data Flow
User Interaction → React Component → TanStack Query → Hono RPC → Database ↑ Type-safe API calls
- User Actions: Users interact with forms, tables, and buttons
- React Components: Handle UI state and user interactions
- TanStack Query: Manages server state, caching, and data fetching
- Type-safe RPC: Calls backend APIs with full TypeScript inference
Backend Architecture
Hono.js API Server
The backend uses Hono.js, a fast web framework that provides:
- Type-safe RPC: Client and server share the same TypeScript types
- Minimal Overhead: Lightweight and performant
- Edge-ready: Can deploy to various platforms (Node.js, Cloudflare Workers, etc.)
Service Layer Pattern
API Route → Service Class → Drizzle ORM → PostgreSQL
- API Routes: Handle HTTP requests and validation
- Service Classes: Contain business logic and data operations
- Drizzle ORM: Type-safe database queries and migrations
- PostgreSQL: Your Supabase database with Row Level Security
Authentication & Security
- Supabase Auth: Uses your existing Supabase authentication
- JWT Validation: All API calls validate Supabase JWT tokens
- Row Level Security: Database-level permissions protect your data
- Role-based Access: Granular permissions for different user types
Database Security Architecture
Supamode uses RLS to protect your data. It's a powerful feature that allows you to control access to your data based on the user's role.
Permission System
- Hierarchical Roles: Admin, Manager, Editor, Viewer with different capabilities
- Table-level Permissions: Control access to specific tables
- Column-level Permissions: Hide sensitive fields from certain roles
- Operation Permissions: Separate read, write, delete permissions
Audit logs
Every action is logged:
- Who performed the action
- What data was changed
- When the change occurred
- IP address and user agent
- Before/after values for updates
Deployment Architecture
Recommended Setup
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│ Vercel/Railway │ │ Vercel/Railway │ │ Supabase ││ Frontend │ │ Backend API │ │ Database ││ │ │ │ │ ││ • Static Assets │ │ • Hono Server │ │ • Supabase ││ • React App │ │ • Environment │ │ • Auth ││ • Edge Caching │ │ Variables │ │ • Storage │└─────────────────┘ └─────────────────┘ └─────────────────┘
Vercel/Railway are fully supported, but you can deploy to any platform that supports Javascript/Docker applications, such as AWS, Fly.io, Digital Ocean, Cloudflare, etc.
Security & Compliance
Data Protection
- No Data Export: Supamode doesn't store or export your data, it's all in your database.
- Audit Logging: Complete trail of all administrative actions
- Role Separation: Principle of least privilege enforced
Benefits of This Architecture
- Non-intrusive: Doesn't modify your existing database schema
- Secure: Multiple layers of security and access control
- Scalable: Each component can scale independently
- Type-safe: Full TypeScript coverage prevents runtime errors
- Auditable: Complete trail of all administrative actions
- Flexible: Customizable permissions and user interface
- Maintainable: Clean separation of concerns and modern tooling
- Tests: Large test suite to ensure reliability, both with Playwright and PgTap.