Emad Ashraf

Madraset El Shamamsa, Part 1: Overview and Impact

3 min read

Madraset El Shamamsa began in 2016 with a focused goal: make Coptic educational material easier to reach and learn from. Over time, that goal expanded into a multilingual publishing platform spanning hymns, Coptic language, liturgy, church history, Bible study, sermons, and interactive learning.

The repository now contains more than 1,100 content pages. A 2024 analytics snapshot recorded roughly 292,000 users. I treat both figures as dated evidence of scale rather than timeless marketing claims: the useful engineering story is what that scale demanded from a long-lived, independently operated platform.

More than an article collection

Each content library has its own shape. A hymn can include audio, Coptic text, transliteration, and teaching notes. A language lesson needs structured examples. A Bible summary, sermon, or historical article has different metadata and navigation. Yet readers should not have to relearn the site every time they cross between libraries.

That created four durable requirements:

  • Consistency: shared navigation, metadata, interaction patterns, and visual structure.
  • Fast reading paths: server-rendered content, compact frontend behavior, and cacheable media.
  • Discoverability: crawlable HTML, structured metadata, and library-aware search.
  • Incremental evolution: improve a legacy PHP system without freezing publishing work or forcing a risky rewrite.
Arabic mobile view of the hymn-learning curriculum with difficulty and season navigation
The mobile hymn-learning experience organizes a large library by difficulty and liturgical season while preserving an Arabic-first reading path.

My role

I have owned the platform across product and engineering concerns: information architecture, database-backed content, PHP page composition, frontend delivery, search integrations, infrastructure, security hardening, and developer experience. That breadth matters because the most important decisions cross boundaries. A cache rule can affect sessions; a shared component can affect hundreds of pages; moving media to object storage changes both authoring and delivery.

The system in one view

flowchart LR
    Reader["Reader or search crawler"] --> Edge["Cloudflare edge and TLS"]
    Edge -->|"Page request"| PHP["PHP page-composition pipeline"]
    PHP --> DB[("MySQL content and application data")]
    PHP --> HTML["Fully rendered HTML"]
    Edge -->|"Hashed JS/CSS"| Assets["Static asset host (Vite build output)"]
    Edge -->|"Media"| Media["Dedicated R2 asset domain"]
    HTML --> Reader
    Assets --> Reader
    Media --> Reader

The distinguishing feature is the PHP page-composition/rendering pipeline. Thin page files delegate to library-specific generate-* assemblers, which load data and combine shared and local fragments into complete HTML. It provides reuse and server rendering without pretending to be a general-purpose framework.

Vite is a separate concern: it provides the modern JavaScript/CSS development loop and generates a production manifest containing hashed asset filenames. Docker Compose joins these pieces locally with PHP/Apache, MySQL, phpMyAdmin, and the assistant Worker.

The rest of the series

  1. Overview and impact — this article
  2. Architecture, Docker, and Vite
  3. The PHP component-rendering pipeline
  4. Performance, caching, and R2 delivery
  5. Security architecture and legacy hardening