PDR Platform
An entire association's operation, in a single system.



Screenshots from the live system's public pages.
01 — Problem
The professional body for psychological counselling and guidance ran member records in a legacy membership system, its website in a separate Laravel app, and training, dues, documents and its store as disconnected processes. No one could see a member's dues history, documents and training record in one place.
02 — System
We built a modular association platform that unifies the public site, member area and admin panel on a single Node/Next stack. From membership application to board decision, dues collection to certificates submitted to e-Devlet, store order to shipping label and e-Archive invoice, every process runs on the same data model. Legacy records were migrated without fabricating a single value and without losing a single file.
Membership application
Every step from application to member ID card is governed by a state machine.
- 01Application
- 02Document check
- 03Board review
- 04Member number
- 05Dues & ID card
Missing documents → returned to applicant
PDR Platform — yönetim
Application
Document check
Board review
Member number
Dues & ID card
03 — Architecture
Site and admin apps, separated by distinct JWT audiences, talk to one Express API. Data is split across five MySQL schemas; email, SMS and scheduled jobs are drained from an outbox by a dedicated worker process.
- L0Users
- Members
- Visitors
- Instructors
- 10 staff roles
- L1Interfaces
- pdr.org.tr
- Admin panel
- Member area
- 2 sub-sites
- L2Application
- Express API · 726 route
- Worker · outbox
- Scheduled reports
- L3Modules
- Membership
- Dues
- LMS
- Certificates
- Store
- Governance
- Careers
- Support
- L4Data
- MySQL 8.4 · 5 schemas
- MinIO · CDN
- L5External services
- PayTR
- Zoom
- e-Devlet SOAP
- Uyumsoft e-Archive
- MNG Kargo
- Resend
- Mutlucell SMS
04 — Capabilities
- 01
Membership lifecycle
Full, honorary, corporate and emeritus applications; required-document workflow, board review, member-number allocation, and state machines for suspension, resignation and honorary-to-full transitions.
- 02
Dues and collection
Period-based debt standing, pay-everything-open in a single link, PayTR card payments with instalments, manual collection by bank transfer receipt, bulk operations and dues reports.
- 03
Learning management
Program → cohort → session structure, member pricing tiers, exams and surveys, automatic attendance via the Zoom Report API, recordings, refunds and training reports.
- 04
Certificates and verification
Template editor, HTML→PDF rendering in Chromium, QR codes and barcodes, numbering, revocation, a public verification page, and certificates submitted to e-Devlet over SOAP.
- 05
Store, shipping and e-Archive
Catalogue with variants, campaign and coupon rules, stock movements, returns; barcodes and tracking via the MNG Kargo API, and UBL e-Archive invoices through Uyumsoft — enabled in production.
- 06
Governance
Units, terms, mandates, board and committee assignments, meetings, ethics-board operations, an org-chart PDF and an accreditation case workflow.
- 07
Career pool
A career space where members join with a private CV and employers post opportunities; CV sharing sits behind a legal-approval flag.
- 08
Support and notifications
Ticket queue with auto-assign and auto-close, reply templates, satisfaction scoring; email via Resend, SMS via Mutlucell, editable templates and bulk sends.
05 — Impact
- 01
Membership, dues, training, store and governance now share one data model.
- 02
Records, dues history and documents moved off the legacy membership system without inventing a single value.
- 03
Shipping and e-Archive integrations are live; order, label and invoice run in one flow.
- 04
The PDOK and EPDAB sub-sites share the same CMS pattern and run on their own databases.
- 50+
- modules on one platform
- 726
- API route definitions
- 93
- admin panel sections
- 10
- staff roles
- 5
- separate database schemas
- 3
- live sites on the same foundation
Technology stack
Frontend
- Next.js 15.5
- React 19
- Tailwind 4
- Recharts
Backend
- Node.js
- Express
- TypeScript
- Sequelize
- Zod
Data
- MySQL 8.4
- MinIO (S3)
Documents
- Puppeteer
- pdfkit
- ExcelJS
- sharp
Infrastructure
- Docker Swarm
- Portainer
- Nginx Proxy Manager
- Bitbucket Pipelines
- Uptime Kuma

