A footer marquee timed to its own width, not a library’s default loop.
- Design and development
- 2026
- Portfolio Recreation

Overview
A single-page personal-brand site for Muhammad Wasif — fitness consultant, corporate wellness advisor, media personality and model — carrying consulting services, corporate wellness offerings, a modeling and editorial portfolio, a transcribed certification history, career associations and a filterable photo archive as one coherent page rather than a template-driven grid, backed by a small admin panel and a MySQL-stored settings table.
The challenge
A twenty-year career spanning private clients, corporate buyers, media outlets and modeling work reads as a scattered résumé if it is not arranged deliberately, and a personal-brand site for one person has to stay maintainable by that person.
- Consulting, corporate wellness, modeling and media each address a different buyer, on the same single scroll.
- Career facts — associations, facilities, brands — needed to read as documented history rather than overstated as current partnerships.
- Certifications needed the same honesty: transcribed, verifiable credentials kept visibly separate from claims that are not.
- The one piece of content that changes day to day — WhatsApp availability — had to be editable without a redeploy.
What was built
A sixteen-section single page, its copy centralised in one typed content file, with a small admin panel scoped to the one setting that actually changes.
- Every section reads from one content file rather than from JSX, so a copy edit is a data change, not a markup change.
- A "Selected Frames" gallery filters the photo archive by category — Fitness, Modeling, Editorial, Lifestyle — rather than presenting one long undifferentiated grid.
- The certifications timeline treats each credential as evidence: a dated entry with a lightbox to the original certificate, and the associations panel is captioned as career history rather than active endorsement.
- A hand-built footer marquee runs on requestAnimationFrame with its duration normalised to the track’s own rendered width, rather than a carousel dependency, and pauses on hover, on a hidden tab and under reduced motion.
- The admin panel is scoped to one job — WhatsApp number, message and enabled state, persisted to MySQL and revalidated on save — protected by scrypt-hashed credentials, signed sessions, CSRF and rate-limited login rather than a quick password gate.
Process
One content file before any section
Hero lines, service lists, certifications, associations and contact details all come from a single typed file, so a copy edit is a data change rather than a markup change.
Motion split by what it actually needs
Framer Motion, loaded through LazyMotion in its domAnimation-only configuration, handles scroll-triggered reveals; GSAP with ScrollTrigger is reserved for the two effects that need true scroll-scrubbing — the hero parallax and the certifications timeline.
The admin panel scoped to one job, hardened properly
Scrypt password hashing, HMAC-signed session cookies, CSRF tokens and per-IP rate limiting protect a panel that controls exactly one thing on the public site — not a general CMS, and not a quick password gate either.
Integrations degrade instead of breaking
The Instagram feed route selects between a Graph API provider and a placeholder provider at runtime, and always returns HTTP 200 — a missing token shows a placeholder state, not a broken section.
Stack
- Next.js
- App Router, self-hosted Node.js runtime — not a static export, since the admin Server Actions and the Instagram route need a persistent process
- React
- The sixteen section components the single page is composed from
- TypeScript
- Application code and the single typed content file the whole page reads from
- Tailwind CSS
- Layout and the reflow rules — grids collapse per breakpoint rather than just shrinking
- Framer Motion
- Scroll-triggered reveals, loaded via LazyMotion in its domAnimation-only build to keep the bundle small
- GSAP
- ScrollTrigger, reserved for the hero parallax and the certifications timeline's scroll-scrubbed progress line
- MySQL
- One key/value site_settings table behind the admin panel, with an idempotent init script that never drops or overwrites existing data
Screens

The About section: career narrative, editorial image collage and a six-item highlights grid. 
The Fitness Consulting section, presented as a numbered list of services. 
The Corporate Wellness section: an eight-item offerings grid aimed at HR and executive buyers. 
The Modeling & Editorial section, introduced with tagged positioning labels. 
The "Selected Frames" gallery, filterable by Fitness, Modeling, Editorial and Lifestyle. 
The certifications timeline: dated entries with certificate thumbnails and a lightbox to the original document. 
The Experience & Associations section: a four-column grid of appointments, facilities, organisations and brands, captioned as career history rather than active endorsement. 
The Contact section: an inquiry form alongside quick-contact details. 
The footer: navigation columns, the hand-built wordmark marquee, and the site credit.
Results
No outcome for this project has been verified. There is no measurement, export or client statement behind it, so nothing is claimed here — an empty result is the accurate one, not a placeholder for a number to be filled in later.
Sources
- The project’s own case-study and technical-summary briefs, prepared from its source tree and cross-checked against the deployed site
- Its structured project metadata: title, category, services, technologies and key features
- Live verification at https://iamwasif.com — the running site, its sections and its footer credit
- The accompanying asset manifest, recording each screenshot’s dimensions and capture context