PROJECT FILE 10 / Subscriptions & operations / Source available
Swing Pool
One membership. Many rules working together.
A golf membership application connecting score tracking, subscriptions, monthly reward draws, and charity contributions. Member journeys and operational tools share explicit business rules.
- 01Record scores
- 02Check eligibility
- 03Publish results
The problem
Membership status, qualifying scores, payment outcomes, and contribution records change independently. People need clear next steps while administrators need a reliable record of those changes.
What I built
- Built React member and administration interfaces for onboarding, scores, subscriptions, charities, draws, and account notifications.
- Structured the Express backend into domain modules with separate routes, validation, services, and persistence.
- Implemented payment-event reconciliation and duplicate-event handling around the Stripe integration.
- Added qualifying-score rules, draw publication checks, winner-proof review, and charity allocation records.
Inside the engineering
Eligibility is a domain rule
The backend builds eligibility from qualifying scores and subscription state. Backdated or inactive scores are excluded, and duplicate contest numbers are checked in the current qualifying set.
Keep allocations explainable
Contribution calculations split amounts into gateway fees, prize-pool, charity, and platform allocations using minor-unit amounts and explicit accounting records.
Separate preparation from publication
Draw simulations, published results, and winner-proof review are distinct operations. Publication checks and audit context make the transition from preparation to a recorded result explicit.
What this demonstrates
Shows full-stack delivery across a connected member experience, operational workflows, payment state, and domain-heavy backend design.
- React
- TypeScript
- Node.js
- Express
- MongoDB
- Stripe
- Zod
Presented from the public implementation. Live payment processing, payouts, charitable impact, and production operation have not been independently verified.
LATEST GITHUB PUSH /