Architecture Reference · v2.0

Multi-Product
Architecture Guide

One codebase. One core. Infinitely configurable. This guide describes how the Tino Healthcare Platform is engineered to serve multiple products and facility types from a single, shared foundation.

Build OnceConfigure Many TimesZero Code Duplication
Core Principle

Shared Core. Product-Configured Experience.

Tino is not a collection of separate applications. It is one powerful healthcare platform that uses product configuration, package selection, and module activation to present the right experience to each user.

// Tino Platform Architecture

Shared Core
  ├── Patient Engine        (registration, records, visits)
  ├── Billing Engine        (invoicing, payments, insurance)
  ├── User & Auth Engine    (roles, permissions, sessions)
  ├── Reporting Engine      (reports, analytics, exports)
  ├── Notification Engine   (SMS, email, alerts)
  └── Inventory Engine      (stock, procurement, suppliers)
        │
        ▼
  Product Engine            (TCM · TPM · TDM · TLM)
        │
        ▼
  Package Engine            (Small HC · Hospital · Pharmacy Chain…)
        │
        ▼
  Module Activation         (feature flags per org)
        │
        ▼
  Role-Based Dashboard      (tailored per user role)
Products

The Tino Product Ecosystem

Each product shares the same core but delivers a completely different user experience.

Tino Clinic Manager

TCM

Full-featured outpatient and inpatient management for facilities of every size.

Available Packages

Small Health Center
Medium Health Center
Hospital
Integrated Health Center

Database Config

sql
-- Product record
INSERT INTO products (name, code)
VALUES ('Tino Clinic Manager', 'TCM');

-- Package records
INSERT INTO packages (product_id, name)
VALUES (product_id, 'Small Health Center');
INSERT INTO packages (product_id, name)
VALUES (product_id, 'Medium Health Center');
INSERT INTO packages (product_id, name)
VALUES (product_id, 'Hospital');
INSERT INTO packages (product_id, name)
VALUES (product_id, 'Integrated Health Center');
Package Modules

Tino Clinic Manager — Package Breakdown

Each tier builds on the previous. Upgrades activate new modules without touching existing data.

Dashboard
Patient Registration
Appointments
Triage / Vitals
Consultation
Diagnosis
Prescription
Pharmacy / Dispensing
Basic Laboratory
Billing
Payments
Basic Reports
User Management

Upgrade Path

Small Health Center
no data loss
Medium Health Center
no data loss
Hospital

When upgrading: existing data is preserved · new modules are activated · navigation auto-updates · new dashboard widgets appear · permissions expand. When downgrading: restricted modules become inaccessible but data is safely retained for reactivation.

Database

Configuration Schema

All product, package, and module configuration lives in the database — enabling Developer Portal changes to take effect instantly without code deploys.

products
id
name
code (TCM, TPM, TDM, TLM)
description
status
packages
id
product_id
name
code
description
status
modules
id
name
code
category
description
package_modules
package_id
module_id
enabled
default_access
organizations
id
name
product_id
package_id
subscription_status
license_status
json
// Example organization configuration
{
  "organization": "Example Medical Centre",
  "product": "tino_clinic_manager",
  "package": "medium_health_center",
  "enabled_modules": [
    "patients",
    "consultation",
    "laboratory",
    "pharmacy",
    "admission",
    "billing",
    "inventory"
  ],
  "feature_flags": {
    "FEATURE_ADMISSION": true,
    "FEATURE_BED_MANAGEMENT": true,
    "FEATURE_DENTAL": false,
    "FEATURE_RADIOLOGY": true,
    "FEATURE_THEATRE": false
  },
  "branding": {
    "primary_color": "#1B4F8A",
    "facility_name": "Example Medical Centre",
    "receipt_header": "Example Medical Centre · Kampala"
  }
}
Navigation

Dynamic Navigation

The left sidebar adapts automatically to the organization's product and enabled modules. No hardcoded menus.

Small Health Center

Dashboard
Patients
Appointments
Consultation
Pharmacy
Laboratory
Billing
Reports
Settings

Hospital

Dashboard
Patients
Emergency
OPD
Admissions
Wards
Nursing Station
Laboratory
Radiology
Pharmacy
Theatre
Blood Bank
Billing
Insurance
Finance
Admin

Pharmacy Manager

Dashboard
Sales
Customers
Prescriptions
Dispensing
Inventory
Suppliers
Purchases
Returns
Reports
Users
Settings

Navigation Resolution Logic

typescript
// Pseudocode — how navigation is built per session
function buildNavigation(user: User, org: Organization): NavItem[] {
  const product   = getProduct(org.product_id);        // TCM, TPM, TDM, TLM
  const pkg       = getPackage(org.package_id);         // small_hc, hospital, …
  const modules   = getEnabledModules(org.id);          // per-org feature flags
  const role      = user.role;                          // doctor, nurse, admin, …

  return NAV_TEMPLATES[product.code][pkg.code]
    .filter(item => modules.includes(item.module_key))
    .filter(item => ROLE_PERMISSIONS[role].includes(item.permission))
    .map(item => ({ ...item, active: item.href === currentPath }));
}
Dashboards

Role-Based Dashboard Personalization

Every user sees a dashboard tailored to their role — not a generic overview. The dashboard engine renders only relevant widgets.

Doctor
My Appointments
Waiting Patients
Patients Under My Care
Pending Results
Follow-Up Patients
Nurse
Assigned Patients
Vitals Pending
Medication Administration
Ward Activity
Tasks
Pharmacist
Pending Prescriptions
Low Stock
Expiring Medicines
Today's Sales
Lab Tech
Samples Received
Tests Pending
Results Pending Verification
Critical Results
Admin
Facility Overview
Revenue
Patient Statistics
Department Performance
Inventory Alerts
Super Admin
Total Organizations
Active Subscriptions
System Revenue
Product Distribution
System Health

Dashboard Engine — Widget Resolution

typescript
// Dashboard configuration object
const dashboardConfig = {
  organization_type: 'medium_health_center',
  product: 'tino_clinic_manager',
  enabled_modules: ['patients', 'lab', 'pharmacy', 'billing'],

  // Resolved automatically by the engine:
  widgets: [
    ...WIDGET_LIBRARY.financial.filter(w => isModuleEnabled(w.requires)),
    ...WIDGET_LIBRARY.clinical.filter(w => isModuleEnabled(w.requires)),
    ...WIDGET_LIBRARY.inventory.filter(w => isModuleEnabled(w.requires)),
  ].filter(w => ROLE_CAN_SEE[currentUserRole].includes(w.id)),
};
Developer Portal

Super Admin / Developer Portal

The central control center for managing all Tino installations, products, packages, and subscriptions.

Create Organization

Register a new clinic or healthcare facility

Select Product

Choose TCM, TPM, TDM, TLM or future products

Select Package

Assign a facility-type package to the org

Activate Modules

Toggle feature flags per organization

Manage Licenses

Issue, renew, or revoke subscriptions

User Management

Manage cross-org users and roles

System Analytics

Monitor usage, growth, and revenue

Upgrade / Downgrade

Change package without data loss

Branding Control

Logo, colors, receipt headers per facility

White-label Config

Enterprise-level rebrand support

New Organization Setup Flow

1

Select Product

TCM · TPM · TDM · TLM

2

Select Package

Facility type

3

Enable Modules

Feature flags

4

Subscription Plan

Pricing tier

5

User Roles

Staff setup

6

Dashboard Template

Auto-configured

7

Custom Branding

Logo & colors

Once this flow is complete, the system automatically provisions: navigation menu · dashboard widgets · available modules · report templates · quick actions · permission matrix · notification rules · analytics KPIs.

Feature Flags

Module Activation System

Every module has a feature flag. Flags are stored in the database and evaluated at runtime — no code changes or redeployments needed when activating or deactivating a feature for a specific organization.

Does this org have access to this module?
Does this user's role have the required permission?
Is this feature included in the subscription plan?

All three checks must pass → module is visible and accessible.

typescript
// Feature flag resolution
async function canAccess(
  orgId: string,
  userId: string,
  moduleCode: string,
): Promise<boolean> {
  const [orgModule, rolePermission, subscription] = await Promise.all([
    db.package_modules.findOne({ org_id: orgId, module: moduleCode }),
    db.role_permissions.findOne({ user_id: userId, module: moduleCode }),
    db.subscriptions.check({ org_id: orgId, feature: moduleCode }),
  ]);

  return (
    orgModule?.enabled === true &&
    rolePermission?.granted === true &&
    subscription?.active === true
  );
}
Branding

White-Label & Branding Support

Configurable per Organization

Facility name
Logo URL
Primary color
Address & contact
Receipt header
Report branding
Email from-name
White-label domain (enterprise)
json
// Branding config stored per organization
{
  "branding": {
    "facility_name": "City General Clinic",
    "logo_url": "https://cdn.example.com/logo.png",
    "primary_color": "#1B6F4A",
    "address": "Plot 14, Kampala Road, Kampala",
    "phone": "+256 776 000 000",
    "email": "info@cityclinic.ug",
    "receipt_header": "City General Clinic",
    "report_footer": "Powered by Tino",
    "white_label": false
  }
}
Roadmap

Future Tino Healthcare Products

New products plug into the same core. Zero architectural changes required.

🤱

Tino Maternity Manager

TMM
👁️

Tino Eye Care Manager

TEM
🔬

Tino Specialist Clinic

TSM

Tino Rehabilitation

TRM

// Adding a new product = new product record + new package records + new module configs + new dashboard template

Interested in Tino? Let's Talk.

Whether you're a developer looking to contribute, an integrator, or a healthcare facility exploring Tino — reach out to start the conversation.

Access Developer Portal