← all work
/ 01 — Jun 2026 · Individual Project - University Dissertation

UniComm.

A low-code platform for personalised customer communications, built as my Honours Individual Project.

Next.jsReactTypeScriptTailwind CSSHeroUIMongoDBPrismaNextAuth.jspdfmeQStashVercel BlobPlaywright
Live site
Role
Individual Project - University Dissertation
Date
Jun 2026
Stack
Next.js · React · TypeScript · Tailwind CSS · HeroUI · MongoDB · Prisma · NextAuth.js · pdfme · QStash · Vercel Blob · Playwright

The problem

Companies send a lot of important messages to customers, such as bills, renewal notices and policy documents. Many older Customer Communications Management (CCM) platforms are powerful, but hard to use. Even a small template change can take weeks, because it needs a specialist technical team. This creates an IT bottleneck.

The idea

UniComm is a low-code CCM platform that gives business users control over their own communications, while keeping the security, governance and scale that larger organisations need. I built it solo, end to end, from a real industry Product Requirements Document.

UniComm analytics dashboard

Key features

  • Drag-and-drop Template Builder - design PDF templates in the browser, with live preview.
  • Customer variables - insert fields such as name or policy number straight into text.
  • Reusable content blocks - build a header or footer once and reuse it everywhere.
  • Versioning and approvals - every published template is kept, with an approval step.
  • Customer data management - multiple customer lists, CSV import and bulk editing.
  • Campaigns - a five-step wizard to send now or on a schedule.
  • Analytics dashboard - documents generated, campaign funnels and items that need attention.

UniComm Template Builder

UniComm templates library

UniComm campaigns

Technical highlights

  • Database-per-tenant architecture - each business gets its own database. Every request is routed to the right one at runtime, with cached connections and a custom tool that updates all databases safely.
  • Custom rich-text engine - styles are stored as character ranges, and an index map tracks where each placeholder lands after customer data is filled in.
  • Custom pdfme plugins - for variable text, rich-text styling and nested blocks that scale proportionally to any size.
  • SHA-256 template versioning - published templates are immutable, and each version is identified by a hash of its content.
  • Chunked serverless batch engine - large campaigns are split into chunks of 250 customers and chained through QStash, then merged into one ZIP file.
  • Scheduled runs - a one-minute heartbeat processes up to 10 businesses in parallel.
  • Stack - Next.js, React, TypeScript, MongoDB, Prisma, NextAuth.js, pdfme, QStash and Vercel Blob.

Impact

  • No IT bottleneck - business users can create and update documents themselves.
  • Consistent, personal documents - formatting stays correct for every customer, and one block change updates every template.
  • Reliable audit trail - old campaigns always point to the exact document they sent, and duplicate versions are never stored.
  • Strong data isolation - one company can never see another company's data, even if a query has a bug.
  • Scales to thousands of documents - per-document speed stayed steady from 50 to 5,000 customers.
ResultValue
Single PDF, median time1.60 s
Batch, 50 to 5,000 customers~450-500 ms per document
Real Experience Score (desktop and mobile)100 / 100
Tenant isolation (black-box security tests)Passed

Tested with white-box unit tests, black-box API security tests and Playwright end-to-end tests.

Possible Future works

  • Email, SMS and push notifications, with fallback rules.
  • A persistent job queue with retries.
  • Deeper campaign analytics.
  • AI assistance for writing templates and setting up campaigns.

Links