Oraivron / Work / Meridian

Meridian Member Platform

One membership platform for a professional association, replacing a patchwork of legacy member systems and plugins.

Type
Web platform
Client
Professional association (anonymized)
Status
Production build

Next.jsTypeScriptPostgreSQLMembership

The problem

Members, student members and employer organizations were served by separate systems: a legacy member database, a learning site, spreadsheets for renewals and a plugin-heavy website. Staff retyped data between them and chased renewals by hand.

The solution

One account and one design across the public site, member area, organization administration and the staff console, with the association owning its data and cloud accounts.

What it does

  • Members: join, renew, dashboard, directory, events, courses
  • Organizations: seats, invitations, billing contact, directory listing
  • Staff: renewals workbench, segmented email, reports and CSV export
  • Role-based access and a documented read-only API

Architecture

  • TypeScript monorepo with a Next.js App Router web application
  • PostgreSQL with Drizzle ORM and transactional changes
  • Modules that can be switched on or off per customer
  • Scheduled jobs for renewals, reminders and reports
  • Single sign-on and hosted payments through external providers
  • Cloudflare at the edge for DNS, CDN and WAF
Screenshots

Inside the product

Anonymized. Names, organizations and figures in the screenshots are invented sample data.

Tech stack

  • TypeScript
  • Node.js
  • React
  • Next.js
  • PostgreSQL
  • Drizzle ORM
  • Docker
  • Vitest
  • Playwright
  • axe-core
  • GitHub Actions
  • Cloudflare

Our role

Scoping, information architecture and design system, the application and database, the test suite and the deployment.

  • Unit, end-to-end and accessibility tests (WCAG 2.1 A and AA scans)
  • Tested at phone width, in light and dark themes
  • Association-owned data with CSV export and a documented API

Have a similar project?

A few lines is enough to begin.

Start a conversation