Skip to content
All projects
ESData logo

ESData

SaaS platform for managing organizations, with configurable modules, custom branding, access control and recurring billing.

Year
2026
Type
SaaS
Status
In production
Source code
Proprietary

Stack

  • Next.js
  • TypeScript
  • Supabase
  • PostgreSQL
ESData project screenshot

About the project

ESData is a SaaS platform for managing organizations. Its multi-tenant architecture lets customers share infrastructure while keeping each organization’s data, branding, modules and permissions separate.

Problem

Small organizations often manage people, requests and processes in separate spreadsheets. They need to bring this information together and adapt the system to their workflows without funding a custom application.

Solution

Each organization enables the modules it needs and applies its own branding. Customers can sign up independently, try the platform and subscribe to the service.

My role

I designed and built the platform end to end. My work covered multi-tenant data modeling, access policies, modules, billing integration and transactional emails, as well as the interface and product operations.

Key features

  • Management dashboard, records with CSV import and institution records
  • Request tracking with attachments and comments
  • Calendar, activities and birthdays
  • Map, audit history and notifications
  • Global search and security settings
  • Administrative area for customer management

Architecture and technical decisions

The application uses Next.js, TypeScript and Supabase. Organizations share a PostgreSQL database, with Row Level Security (RLS) policies restricting access to each customer’s records.

The policies check both user membership and whether the organization is active. This enforces access control at the database level, including restrictions for suspended organizations.

Module settings control navigation, dashboard cards and route access. Disabling a module also blocks direct access to its route.

The payment gateway integration uses webhooks to update an organization’s status after payment confirmation or when a payment is overdue. A daily job sends reminders before the trial ends.

Technical challenges

  • Separating customer data. Per-table access policies reduce the risk of an application error exposing another organization’s records.
  • Modeling the subscription lifecycle. Trial, active, suspended and canceled states are stored in the database so access and billing rules can query them directly.

Outcome

In production.

Technologies

Next.js, React, TypeScript, Tailwind CSS, Supabase, PostgreSQL and Vercel.