RIOS
Multi-tenant ESG and risk intelligence platform built for Nigerian companies to assess performance, monitor risk, and generate branded reports.
- Category
- SaaS Platform
- Timeline
- Q3 2026
- Stack
- Next.js 14TypeScriptExpressPrismaPostgreSQL+4 more
Overview — read the full write-up
RIOS is a multi-tenant ESG and risk intelligence platform designed around the needs of Nigerian companies. It brings ESG assessment, risk intelligence, and audience-specific reporting into one workspace, helping teams turn scattered sustainability data into clearer, more actionable reporting.
The product in action
Screenshot 1 of 2

The story in three parts
01 — The Challenge
ESG Reporting Was Fragmented
Read moreShow less
02 — The Strategy
One Platform, Multiple Workflows
Read moreShow less
03 — The Impact
A Unified ESG Workflow
Read moreShow less
System Architecture
Three-Tier SaaS Architecture
Ctrl + scroll to zoom
Multi-Tenant Data Isolation
RIOS uses a shared PostgreSQL database while isolating company workspaces through company-scoped routing and queries. This keeps the infrastructure relatively simple while allowing multiple organisations to operate within the same platform.
Cross-Domain Authentication
The public website and authenticated dashboard are deployed separately, so authentication required a secure handoff between domains. A short-lived token bridges the login flow before the dashboard establishes its own session.
Intelligence & Processing Layer
The API acts as the orchestration layer for data processing, risk classification, scheduled collection, and other intelligence workflows. This keeps the browser focused on presentation while business logic remains centralised on the server.
Branded Report Generation
Report generation uses the same underlying assessment data as the dashboard and applies each company's branding. This allows the platform to produce audience-specific reports without maintaining separate versions of the underlying information.
Lessons & trade-offs
Share Scoring Logic Across the Product
An earlier implementation allowed dashboard scores and date-range reports to diverge because they relied on different representations of the score. The scoring calculation was extracted into a shared function and reused wherever the value is needed. This made the result consistent across the dashboard, reports, and stored score.
shared scoring function
Move Notifications Beyond the Browser
The first notification implementation relied on browser storage, which made the state difficult to share across sessions and devices. Moving notifications into the database added some server-side work but made the feature persistent and auditable.
database-backed notifications
Choose Reporting Tools Around the Output
The original PDF approach handled document generation but made richer visual reporting difficult. The reporting layer was changed to support chart rendering and branded output, trading a simpler dependency setup for much stronger report presentation.
richer visual reporting
Want something like this built?
RIOS is one example of how I work — from architecture to shipped product. If you have a problem that needs this kind of thinking, let’s talk.

