← all work

Trendy Corner

A bilingual fashion storefront with a real admin panel — products, orders, customers, coupons, analytics. Twenty-seven commits across seven months, including the ones you only write when real people are using the thing. The domain has since lapsed.

Role
Sole developer — storefront, admin panel, API client
Span
Feb ’25 – Sep ’25
Kind
Self-initiated · product
Status
archived
Stack
React · Vite · Tailwind · Arabic RTL · Admin dashboard · Recharts · Coupons · Phone auth

The one that kept going

Same stack as the seasonal store three weeks earlier, same person, opposite outcome: 27 commits across seven months, 2025-02-02 to 2025-09-09.

A bilingual Arabic/English storefront — تريندي كورنر — for footwear and fashion, plus an admin panel that is a real application in its own right.

The admin is the actual work

Six sections, by their own Arabic labels:

SectionLabel
Analyticsالتحليلات
Productsالمنتجات
Ordersالطلبات
Customersالعملاء
Promo slidesالعروض
Couponsكوبون

src/admin/pages/Coupons.jsx alone is 46,557 bytes; the hooks file behind it is 46,538 and exposes createCoupon, updateCoupon, deleteCoupon, loadCouponStats. Products is 43KB, Orders 42.9KB, Customers 39KB.

A coupon engine is not a feature you add to look complete. Someone was running promotions.

The commits that prove it was used

Two are worth quoting, because they are the kind you only write once the thing is in front of people:

Fix admin authentication token persistence and resolve build errorsAdmin now stays authenticated across page refreshes without requiring retry button

Performance Optimization: Remove heavy animations and improve responsivenessRemoved framer-motion animations… Improved mobile performance and reduced bundle size

(That commit message opens with a rocket emoji, dropped here — this site’s own build refuses emoji in content, including inside quotations.)

Nobody removes their own animations for fun. That is a phone that was too slow, in somebody’s hand, being fixed.

Where the difference actually lives

Not in the UI. In src/utils/apiClient.js:

  • a response cache with a 5-minute TTL
  • request deduplication through a pendingRequests map, so two components asking for the same thing make one request
  • retry with exponential backoff, 3 attempts
  • a 401 handler that clears auth and says session expired instead of failing silently

The seasonal store had none of that, because it never lived long enough to need it. Everything in that list is a response to something going wrong in production more than once.

The correction

The repository ships a CNAME reading www.trendy-corner.org and names the same domain as its homepage. It no longer resolvesdig @1.1.1.1 returns no A record at all.

The code shipped. The address lapsed. I would rather write that sentence than link you to a dead page and let you find out yourself.

The repository also carries committed SQLite files under instance/, which I checked before publishing this: empty user, product, favorite and address tables, zero phone numbers, zero emails, zero password hashes. Demo data, verified rather than assumed — which is why the repo link is omitted here anyway.

This kind of problem?

I build production systems that answer “where is it now?” — reconciliation engines, geolocation platforms, ride-sharing coordination layers, AI tool servers. If you’re facing a system that needs to survive real traffic, real constraints, and real time — let’s talk.