Pace Pharmacy Platform — Portfolio Case Study
portfolio — three-part platform
Pace Pharmacy Platform
Digitizing pharmacy onboarding end-to-end.
A connected three-application system replacing a fragmented manual intake process — a public application portal, an internal admin dashboard, and a Bun/Hono backend API handling persistence, automation, authentication, and document generation.
React 19
TypeScript
Bun + Hono
PostgreSQL
Drizzle ORM
Supabase Auth
Postmark + MJML
React PDF
TanStack Table
Docker
overview
Pace Pharmacy needed a digital replacement for a paper-based professional account onboarding process. The platform I built covers the full workflow: applicants submit through a structured multi-step portal, medical directors authorize via reference-code links, and pharmacy staff review, manage, and export submissions from a dedicated admin dashboard — all backed by a typed API that handles transactional writes, email automation, file management, and PDF generation.
platform workflow
Applicant submits intake form
Multi-step portal collects account, billing, payment, documents, delivery preferences, and acknowledgements — with session persistence and a review-before-submit screen.
↓
Medical director receives authorization request
API generates a unique reference code and sends an automated MJML email via Postmark with a personalized authorization link.
↓
Medical director completes authorization
Director accesses a reference-code-gated form, reviews application details, and submits their authorization decision online.
↓
Staff review, approve, and export from admin dashboard
Pharmacy staff filter by location and authorization status, edit patient profiles, approve accounts, generate PDF exports, and track Kroll processing status.
three applications
App 1
Intake Portal
App 2
Admin Dashboard
App 3
Hono API
key features
Multi-Step Form
Session-persisted onboarding flow across location, account, payment, acknowledgements, medical director, and review screens.
Supabase Auth
Admin login backed by Supabase sessions with HTTP-only cookies and protected API routes for all staff operations.
PDF Generation
React PDF and jsPDF/html2canvas for Kroll and patient intake document exports, with FileSaver for download handling.
Email Automation
MJML-templated transactional emails via Postmark — triggered on submission, authorization requests, and admin resends.
Admin Table UX
Paginated + infinite-scroll intake table with row-level actions, location/status filtering, and skeleton loading states.
Transactional Writes
API persists accounts, addresses, payment info, acknowledgements, medical director records, and Kroll status atomically.
implementation highlights
01Designed the multi-step intake form as a session-persisted state machine — applicants can navigate forward and back without losing data, with schema-validated fields at each step before advancing.
02Built a reference-code authorization flow that lets medical directors access a unique, pre-populated form via email link — without requiring account creation or login.
03Implemented transactional database writes across multiple related tables (accounts, addresses, delivery, payment, acknowledgements, medical director, Kroll) to ensure full application integrity on submission.
04Handled document generation in two ways: React PDF for structured Kroll reports and jsPDF/html2canvas for HTML-to-PDF intake exports — chosen based on layout fidelity requirements per document type.
05Secured the admin surface with Supabase session authentication, HTTP-only cookies, and protected Hono middleware — separating public intake endpoints from all staff-facing operations.
full tech stack
React 19TypeScriptViteTanStack RouterTanStack QueryTanStack TableReact Hook FormZodZustandAxiosTailwind CSSRadix UILucide ReactReact PDFjsPDFhtml2canvasFileSaverBunHonoPostgreSQLDrizzle ORMSupabasePostmarkMJMLHandlebarsPuppeteerOpenAPIDocker