Skip to content
All work

Healthcare Compliance Portal

Concise Health Solutions

Healthcare compliance platform for clinical students, supporting four user roles with middleware-enforced access control.

Overview

What the product does

A compliance portal for clinical students, where Student, Nurse, Coordinator and Admin roles each work with the documents and approvals their role owns, enforced by middleware rather than UI conditionals.

Problem

The problem it solves

Clinical placement compliance runs on documents that expire and approvals that must follow a defined order, across four roles that should never see each other's queues.

My role

What I contributed

Full-stack work in a Turborepo monorepo: typed API layer, authentication, background jobs and document review workflows.

Solution

How the system was designed

A Turborepo monorepo with shared packages for types, validators, the Prisma client and UI components, exposing a typed Hono RPC client consumed by the Next.js app. Redis backs token invalidation and BullMQ queues, and documents move through S3 presigned URLs into a nurse approval flow.

Architecture

System architecture

ClientApplicationServicesDataExternalHTTPSTyped callsVerifyEnqueueQueriesBlacklistUploadsClientFour user rolesNext.jsPortal UIHono RPCTyped API layerAuth MiddlewareJWT · Role checksBullMQReminders · EmailPostgreSQLPrisma ORMRedisBlacklist · QueuesAWS S3Presigned uploads

Key features

What it does in practice

Four-role access control

Student, Nurse, Coordinator and Admin roles with middleware-enforced access control on every route.

Challenges

The interesting engineering problems

  • Making logout mean logout
    Problem
    Stateless JWTs stay valid until they expire, so a signed-out session can keep working against the API.
    Approach
    Paired access and refresh tokens in HTTP-only cookies with a Redis blacklist checked on each request, so logout revokes the token immediately.
  • Keeping client and API in step
    Problem
    A separate frontend and API drift apart as validators and types are duplicated on each side.
    Approach
    Shared types, validators and the Prisma client as monorepo packages, and consumed the API through a typed Hono RPC client so a contract change surfaces at compile time.

Technology

The stack behind it

  • Next.jsReact Framework
  • Hono.jsLightweight HTTP Framework
  • PostgreSQLRelational Database
  • Prisma ORMType-Safe ORM
  • RedisCache & Queues
  • BunRuntime & Package Manager
  • TurborepoMonorepo Builds
  • BullMQBackground Jobs
  • StripePayments
  • AWS S3Object Storage
  • JWTToken Authentication