Built against a deadline that does not move
Ramadan gift bundles: prayer mats in several colours, prayer beads, planners,
gift cards. Phone-number login, a cart, checkout against a real REST API at
geolink.pythonanywhere.com/api, and order history you can come back to.
It works. It is live at kariemSeiam.github.io/ramadan-store, Arabic title
intact — متجر رمضان | هدايا رمضان.
It has one commit: Initial commit, 2025-01-22.



The live product, captured today — not a recreation. Still running at kariemSeiam.github.io/ramadan-store.
Eighty-seven kilobytes in one file
src/Ramadan.jsx 87,319 bytesThat is the product. Cart, product grid, auth, checkout, image viewer, the store-locator map — one component. The second-largest file in the repository is ImageViewer.jsx at 10KB, and after that nothing exceeds 3KB.
The hooks and contexts are split out properly — useCart, useOrders,
AuthContext, services/api.js — so the separation I knew to make, I made. What
never happened is the second pass, where the giant component gets broken along
the seams the hooks already imply.
There was no second pass because there was no second week. Ramadan has a date. The store had to exist before it, and after it there was no reason to open the file again.
Why this one is on the site
Because the failure is specific and worth naming, and it is not the one the file size suggests.
The shortcoming here is not architectural taste. Nothing about an 87KB component is mysterious to me — it is what you get when every decision is “add it to the file that already works” and the deadline is real. The shortcoming is that shipping and sustaining are different skills, and in January 2025 I had exactly one of them.
Three weeks later I started a storefront on the same stack that ran for seven months and 27 commits, with a caching API client, retry logic and a real admin panel. Same tools, same person, different outcome. This page is here so that comparison has something to stand against.