OZA ÉQUIPEMENTS MAROC has supplied industrial and textile equipment from Casablanca since 2009, with no web presence. They needed a credible public site that ranked for their product categories and worked on the patchy mobile connections their customers actually use.
My role
Sole developer. Architecture, build, SEO and deployment, working directly with the client on content and structure.
How it's built
Angular 20 with lazy-loaded routes across home, about, products, projects and contact.
Angular Universal server-side rendering, so category pages are indexable rather than an empty client-rendered shell.
A dedicated SEO service that sets per-route titles, meta descriptions and canonical tags from a single company-info source.
Angular Service Worker for offline capability and installability, with a web manifest.
Content driven from one structured JSON file, so the client’s details change in one place.
Reactive Forms contact flow with validation, plus Google Maps for the industrial-zone location.
What was actually hard
SSR plus a service worker interact badly if caching is naive — the worker will happily serve a stale shell over freshly rendered HTML. Cache strategies are scoped so hashed build assets are immutable while HTML always revalidates.
Security headers and long-lived caching are set at the edge (X-Frame-Options, nosniff, Referrer-Policy, immutable caching for JS/CSS/fonts) rather than left at framework defaults.
Getting a content-heavy marketing site fast on mobile meant lazy routes and aggressive asset caching, not just compressing images.
Where it stands
Live and serving as the company’s public presence. Currently being migrated from Netlify to Vercel.