Repository navigation
Features
- 1,186 products across 8 departments, 118 categories and 212 brands, with prices, discounts, stock, prescription flags, generics, uses, dosage, precautions and warnings.
- Local WebP images in two sizes (640/320) with
srcset;catalog:cache-imagesrejects placeholder images by perceptual hash and colour check. - Server-side filters (category, brand, form, Rx/OTC, stock, price), sorting, pagination and ⌘K instant search.
-
Product pages: photo and 3D pack viewer, delivery estimate by city, price-insight histogram, "same salt, other brands", recently viewed,
ProductJSON-LD. - Sold out? In-stock alternatives matched by active ingredient, then category and price, with a one-tap swap.
- 3D body map: a sculpted SDF mannequin baked into a 456 KB Brotli mesh. Tap where it hurts, pick a symptom, get self-care tips, red flags and pharmacist picks. Emergency symptoms show urgent-care guidance instead of products.
-
Motion: fly-to-bag and fly-to-wishlist flights, a capsule cursor, GSAP/Lenis scrolling and SplitText reveals. Everything respects
prefers-reduced-motion.
![]() |
![]() |
| Shop: filters, sorting, 1,000+ products | Product: price insight, alternatives, delivery estimate |
![]() |
![]() |
| 3D body map: tap where it hurts | Assistant: preset questions, personal answers |
Every visitor builds a quiet profile (views, time on page, bag adds, purchases per product). An offer engine turns it into personal discounts, capped at 15%, time-limited and redeemed inside the order transaction:
| Behaviour | Offer |
|---|---|
| Kept coming back to a product without buying | Hesitation: 8% on that product, 3 days |
| Left an item in the bag | Bag rescue: 5% on that item, 2 days |
| Buys the same product repeatedly | Regular: 10% on it, 1 week |
| First visit with no orders | Welcome: 5% off the first order |
| Several orders | Loyalty: 5–10% off the next order |
| Inactive for a while | Comeback: 7% off |
Also: "picked for you", "buy again" and "pairs well with" rails, and A/B experiments with stable crc32 bucketing, de-duplicated events and variants that stick through sign-in.
A chat panel with no free-text box: shoppers pick preset questions, so there are no prompt injections, no hallucinated medical advice and no PII typed into a bot. Answers are built on the server and personal: my order, my bag, my offers, my prescription status.
- Session bag with prices re-read from the database, a free-delivery threshold and per-order caps.
-
Drug-interaction warnings from each product's active ingredients: 24 conservative rules in
resources/content/interactions.json(two paracetamol products, blood thinner + NSAID, sildenafil + nitrate, SSRI + tramadol…). Topical forms are ignored. A serious warning must be acknowledged, and warnings are stored on the order for the pharmacist. - Card payments or cash on delivery. See Payments.
- Stock is decremented under row locks; an idempotency token stops double submits.
- Prescription upload is required for Rx items; files are private.
- Order tracking by number plus e-mail, and order history.
- Refill reminders: the customer's real order rhythm (median gap, 7–120 days) triggers one e-mail per purchase cycle, 3 days before they run out, with a signed "put it back in my bag" link.
- Register, sign in, password reset, avatar, phone, and an address with an OpenStreetMap picker.
- A readable random username (e.g.
calm-heron-4821) that only an admin can change. - Recent sign-ins with device, browser and approximate place.
- Optional two-step sign-in (TOTP, RFC 6238) with eight recovery codes and replay protection.
- Passwordless "e-mail me a code" sign-in without account enumeration.
- Guest wishlist and activity merge into the account on sign-in.
English and اردو (Urdu) with a full right-to-left layout and Noto Nastaliq Urdu: a 1,460-entry dictionary covering storefront, policies, checkout, admin and error pages, switched instantly with no reload. hreflang alternates in the sitemap and <head>.

- Inertia SSR: storefront pages arrive as full HTML and hydrate without a mismatch; the head stays server-rendered by Blade.
- No full page reloads; hovering a link prefetches its data and JS chunk.
- Immutable caching for hashed assets, Brotli and gzip.
- Theme toggle with a circular View Transition and no flash; branded 404, 419, 429, 500 and 503 pages.
- Unique title and description, canonical, Open Graph, Twitter cards,
robotsandhreflangon every page. - JSON-LD:
Pharmacy/OnlineStore,WebSite+SearchAction,Product,BreadcrumbList,FAQPage,ItemList,ContactPage. -
/sitemap.xmlwithlastmodand language alternates;/robots.txtthat welcomes named AI crawlers and keeps them out of private areas. -
/llms.txtand/llms-full.txtguides for AI agents. Private pages arenoindex.
Zovita+ · MIT © Syed Ahmer Shah · Repository · Product information is not medical advice.
Use it
Product
Engineering
Project



