Skip to content
All work
FeaturedPharmaceuticals & consumer health

Loremed — Bilingual Corporate & Product Site

Bilingual pharma site where checkout sends complete, formatted orders straight to WhatsApp.

Visit the live site
A short film for this project, built from its own palette, type and interaction detail.

Overview

A bilingual English/Arabic website for a pharmaceutical and supplements brand, pairing a corporate credibility story with a searchable product catalogue and a cart that delivers fully formatted orders to WhatsApp — no payment gateway, no backend.

What this proves

That commerce behaviour does not require commerce infrastructure — and that Arabic can be a first-class layout rather than a translation bolted on.

Key features

WhatsApp order checkout

A validated cart and checkout that generates an order reference and composes a structured message — customer block, itemised lines with per-line totals, subtotal, delivery fee, grand total, payment method and ETA — then opens it in WhatsApp addressed to the business. E-commerce ordering with zero payment setup, zero PCI scope and zero server cost.

Orders always composed in one fixed language

The outbound order is written in Arabic even when the customer browsed in English, with product names left in English because they are brand names. The message builder reads directly from the Arabic dictionary as module constants, deliberately bypassing the active-locale translation function — separating presentation locale from operations locale.

One-tap GPS location capture

An optional control reads the browser geolocation API and attaches a map coordinate link to the order, handling permission denial and timeout without blocking checkout. Delivery addresses in the region are often descriptive rather than structured, and a precise pin materially reduces failed deliveries.

Searchable, filterable catalogue

Live client-side search across product name, tagline, description and active ingredients, plus therapeutic-category and availability filters, a result counter, and deep-linkable filter URLs so campaigns can point straight at a filtered view. A quick-view modal previews a product without leaving the grid.

Full bilingual EN/AR with true RTL

97 translation keys per locale plus bilingual content objects across the data model. Switching language sets the document language and direction, persists the choice, and flips the entire layout using CSS logical properties rather than mirrored text. A dedicated Arabic typeface loads alongside the Latin faces, with Arabic-specific letter-spacing rules preventing the connected script from being broken apart.

Persistent, self-healing cart

Cart state lives in context and is mirrored to browser storage, so it survives reloads. It defensively re-resolves each stored item against the live catalogue on read, so products that are withdrawn or become unavailable drop out cleanly rather than breaking the cart.

The experience

A branded loading sequence opens the site — a white screen carrying the brand mark, a breathing glow and the company promise. It waits for the page load event, enforces a minimum so the fade registers, hard-caps at two seconds, and shows only once per browser session. The cap and the once-per-session rule are the details that separate a considered intro from an annoying one.

The homepage leads with the shop — hero, featured products, how ordering works, a stats band and category tiles. The corporate story sits on dedicated about, quality and research pages: company overview, manufacturing standards, quality assurance, certifications, regional partnerships, the R&D pipeline and healthcare-professional resources. From anywhere a visitor can go straight to the catalogue and search by product name or active ingredient.

Each product has its own prerendered page with key ingredients, benefits, dosing instructions, pack data, an embedded product video and structured Product data for search engines. Available products can be added to a cart that persists across visits, and at checkout the customer enters their details, optionally shares their exact location with one tap, and submits — which opens WhatsApp with a complete, itemised order ready to send.

Design

The visual language is derived from the brand’s own logo: a deep indigo-violet and a vivid pharma orange, developed into full 50–950 token ramps with violet-tinted neutrals and semantic UI tokens, so components describe intent rather than hue. Typography is a three-family system — a geometric display face, a neutral body face, and a dedicated Arabic face — with fluid clamp-based sizing and tightened tracking at display sizes.

There is no stock photography anywhere. All non-product imagery is hand-built SVG and CSS: gradient orbs, grid and dot fields, quarter-arc forms and molecular network graphics derived from the brand mark. Motion is treated as a system rather than decoration, with reusable scroll-reveal, stagger, parallax, magnetic-button and animated-counter primitives — every one of them reduced-motion aware.

Engineering

The interesting constraint was delivering commerce behaviour from a fully static site. Cart state lives in context mirrored to browser storage, re-resolving stored items against the catalogue on every read so unavailable products drop out cleanly; totals are always derived rather than stored; and orders are transmitted as a URI-encoded structured message through a deep link.

A subtler piece of architecture separates presentation locale from operations locale. The order-message builder deliberately bypasses the active-language translation function and reads from a fixed dictionary, so the fulfilment team always receives one consistent format regardless of how the customer browsed. Most implementations miss this distinction entirely.

The build also resolves a class of bug that rarely surfaces in normal QA. The reduced-motion media query is always false during server rendering but can be true on the client’s first render, and six components branched their rendered markup on it — including the will-change property derived from their animation config. For any visitor with reduce-motion enabled, the mismatch caused React to fail hydration and discard the entire server-rendered document, re-rendering the whole page on the client. A shared SSR-safe hook now reports false until after mount so the first client render matches the server’s, then applies the real preference on the next commit.

Output is fully static: 18 prerendered pages, 87.1 kB of shared first-load JavaScript, AVIF and WebP image formats, lazily-loaded video and map embeds, and a scroll listener throttled through requestAnimationFrame and registered as passive.

Responsive experience

Five breakpoints, with mobile treated as a distinct design problem rather than a compressed desktop. The catalogue toolbar is sticky only on large screens so it never consumes a phone viewport; category filters collapse into a single horizontal scroll row with a hidden scrollbar; the search dialog compacts and sheds its secondary column; cart line items restructure from a single row into a stacked layout to prevent right-to-left overflow.

Decorative background bleed is contained with overflow-x: clip — chosen specifically over hidden so position: sticky keeps working. The full site was verified in-browser across every route in both languages at both mobile and desktop widths, with no horizontal overflow and no console errors.

Not demonstrated by this project

Stated plainly, because a portfolio is more useful when it is precise about its limits.

  • No payment gateway and no transactions — this is not e-commerce in the payment sense
  • No backend of any kind: no API routes, no middleware, no server actions
  • No database and no CMS — content is a typed local layer
  • No authentication
  • No 3D, WebGL, canvas or shader work anywhere in this project
  • Accessibility markers are present but the project has had no formal WCAG audit

Portfolio assessment

Visual design
8.0 / 10
Technical complexity
6.5 / 10
Interactivity
7.5 / 10
Business value
9.0 / 10
Portfolio appeal
8.0 / 10
Overall7.8 / 10