Skip to content
Ahmed Ahmed

Gezira El-Ward Club

Membership, billing and subscriptions for one of Egypt's sporting clubs. One platform for the club's whole membership lifecycle (application, approval, renewal and billing) that replaced a decades-old Oracle system and paper forms.

Role
Full-stack developer: Django REST API, React admin dashboard, Next.js website and member portal.
Engagement
Cyparta Software HouseCyparta
Surfaces
Public website, Member portal, Admin dashboard
Gezira El-Ward Club: Public website
connected surfaces: website, member portal and back office
3
bilingual, right-to-left first
AR / EN
users on the platform
80,000+

The problem

The club ran memberships on a decades-old Oracle system and paper forms. Dues were worked out by hand, unpaid years piled up, and every payment meant a trip to the front desk. It needed one connected system: a public website, a portal where members pay online, and a back office that applies the billing rules for them.

What it does

  1. 01A prospective member applies online through a guided form (personal details, family, education, work and documents) that arrives in the dashboard as a membership request.
  2. 02Staff move each request through review, clarification, fees, interview and decision, with charts per status.
  3. 03The billing engine issues fiscal-year invoices: annual and seasonal subscriptions, catch-up billing for unpaid years, General Assembly absence fines, discounts and VAT, with automated PDF receipts.
  4. 04Members log in with their phone number (OTP), see their dependents and invoices, and pay online or at the front desk. Both channels settle the same invoice.
  5. 05The club's team edits news, facilities, activities and banners from the dashboard, without a developer.

What I did

  • Designed and built the Django REST Framework API: membership, the billing engine, payments, General Assemblies and the website CMS.
  • Moved invoice generation, PDF receipts and notifications to Celery workers on Redis.
  • Integrated Stripe and Fawry, and built cross-channel reconciliation between front-desk and online payments.
  • Built the React + TypeScript admin dashboard, and the Next.js bilingual website and member portal.
  • Migrated member and invoice history from the legacy Oracle system.

Engineering

01

A billing engine that follows the bylaws

What a member owes depends on membership category, season and fiscal year. Missed years are billed one by one, absence from the General Assembly adds a fine, and discounts and VAT apply on top. Prices, billing windows and discounts are configurable, so finance changes them without a release.

02

Two payment channels, one invoice

A member can pay at the front desk or online through Stripe or Fawry. Reconciliation matches every payment to the same invoice, so the books and the dashboard's collection rate agree.

03

Heavy work off the request path

Issuing a fiscal year of invoices, rendering PDF receipts and sending notifications run as Celery jobs on Redis. The API answers quickly while the work happens in the background.

Screens

Inside the product.

Click any screen to view it full size.

Home
Home
Website · AR: Membership application form
Website · AR: Facilities
Website · AR: News, edited by the club's team

Stack

Backend

  • Python
  • Django
  • Django REST Framework
  • Celery
  • Redis
  • MySQL
  • JWT

Frontend

  • Next.js
  • React
  • TypeScript
  • TanStack Query
  • Tailwind CSS
  • shadcn/ui
  • next-intl

Integrations

  • Stripe
  • Fawry
  • SMS OTP
  • Firebase push