A cinematic, single-file developer portfolio.
Monochrome editorial design Β· GSAP scroll storytelling Β· light/dark mode Β· zero build step.
π Live Demo Β· π¨ Customize Β· π Deploy
A premium, Awwwards-leaning personal portfolio for Arsalan Kaleem, a Flutter & AI developer. The whole site lives in one self-contained HTML file β no framework, no bundler, no install. Open it in a browser and it just runs; the animation libraries are vendored inline, so it works offline and never breaks from a CDN change.
The design language is deliberately restrained: a warm monochrome, oversized grotesque typography, mono slash-labels, and editorial spacing. The motion is layered on top to amplify that restraint rather than fight it.
- π¬ Cinematic preloader β logo mark β 0β100 counter β curtain wipe β name revealed character
by character with
SplitText. Click anywhere to skip. - π±οΈ Custom magnetic cursor β dot + ring with contextual labels (
VIEW/OPEN/VISIT/SEND), grows over media, snaps to buttons. Auto-disabled on touch devices. - π Scroll storytelling β hero scales into depth, statements reveal word-by-word, stats count up, the portrait reacts to the mouse, section lines draw themselves in.
- πͺ Sticky project showcase β projects stack and push each other away Apple-style, each with a 3D-tilting phone mockup and its own ambient tint.
- π Light / Dark mode β true token swap (not a filter), with system-preference detection,
localStoragepersistence, and a smooth crossfade on switch. - πΌοΈ Theme-aware portrait β a separate photo for light and dark, cross-fading with the theme.
- π± Fully responsive β fluid
clamp()type, a compact mobile layout, and a full-screen mobile menu with a clear close (β) control. - βΏ Accessible β honours
prefers-reduced-motion, semantic HTML, visible focus states, a skip link, and ARIA labelling. - β‘ Performant β GPU-friendly transforms only, libraries vendored (no render-blocking CDN), one file to cache.
- π₯ Easter eggs β a few hidden rewards for the curious (see below).
| Layer | Tools |
|---|---|
| Markup | SemanticHTML5 (single file) |
| Styling | CSS3 β custom-property design tokens, fluid clamp() type, Grid & Flexbox |
| Behaviour | Vanilla JavaScript (no framework) |
| Animation | GSAP 3.13 Β· ScrollTrigger Β· SplitText |
| Smooth scroll | Lenis |
| Typography | Bricolage Grotesque Β· Inter Β· JetBrains Mono (Google Fonts) |
All animation libraries are inlined into the HTML, so the published file has no external JS dependencies.
| Trigger | What happens |
|---|---|
Press**G** |
Toggles a 12-column design-grid overlay |
| Click thelogo 5Γ | Unlocks and cycles a hidden accent colour |
| Click the pulsing**βavailableβ dot** | A little hello |
β β β β β β β β B A |
The Konami surprise |
| Click during theloader | Skips the intro instantly |
This is a static site β there is genuinely nothing to install.
# 1. Clone
git clone https://github.com/<USERNAME>/<REPO>.git
cd <REPO>
# 2. Open it
# macOS:
open arsalan-portfolio.html
# Windows:
start arsalan-portfolio.html
# Linux:
xdg-open arsalan-portfolio.htmlPrefer a local server (recommended, so fonts and routing behave exactly like production)?
# Python 3
python3 -m http.server 8000
# then visit http://localhost:8000/arsalan-portfolio.html
# β¦or Node
npx serve.
βββ arsalan-portfolio.html # the entire site (HTML + CSS + JS + vendored libs)
βββ assets/
β βββ preview.png # social/README screenshot (add your own)
βββ README.md
βββ LICENSE
βββ CHANGELOG.md
βββ .gitignore
The portrait photos are hosted externally (Cloudinary) and referenced by URL, which keeps the repo light. Swap the
srcof the two.portrait-imgtags to use your own.
Everything you'd want to change lives either in the <style> block at the top or in the readable
<script> at the very bottom. Don't touch the four dense minified <script> blocks near the end
β those are the vendored GSAP / Lenis libraries.
| I want to change⦠| Where to look |
|---|---|
| Colours / theme | :root { } (dark palette) and html.light { } (light palette). Edit --ink (background) and --bone (text). |
| Fonts | The Google Fonts<link> in <head>, plus --font-display / --font-body / --font-mono. |
| Name, bio, copy | Directly in the HTML sections β just type over the text. |
| Rotating role text | Theroles array in the script. |
| Marquee words | The.marquee-item spans (duplicated once for a seamless loop β edit both copies). |
| Projects | The three<article class="panel"> blocks and the three .mini cards. |
| Portrait photos | The two.portrait-img src URLs (one for dark, one for light). |
| Footer watermark size | .foot-word { font-size: clamp(4rem, 26vw, 22rem) } β the middle vw is the live value. |
| Easter-egg accent colours | Theaccents array in the script. |
Before going live, update these (search the file for # and example.com):
- Social links β
mailto:email, GitHub, LinkedIn, and the rΓ©sumΓ© link - Each project's View project and GitHub buttons
- The
<title>,<meta name="description">, andog:tags in<head>
The form currently shows a visual success state only β it doesn't send anything yet. Point it at a no-backend service like Formspree or Web3Forms to start receiving messages.
Because it's a single static file, it deploys anywhere in seconds.
GitHub Pages
- Push to
main. - Settings β Pages β Build and deployment β Source: Deploy from a branch.
- Choose
main/rootand save. - (Optional) Rename
arsalan-portfolio.htmltoindex.htmlso the site loads at the root URL.
Netlify
Drag-and-drop the file onto app.netlify.com/drop, or connect the
repo β no build command, publish directory /.
Vercel
vercel from the project root, or import the repo in the dashboard. Framework preset: Other,
no build step.
- Respects
prefers-reduced-motionβ the loader skips instantly and all content stays visible. - Semantic landmarks, a skip-to-content link, visible
:focus-visiblerings, and ARIA labels. - Animations are limited to
transform/opacityfor smooth 60 fps. - No render-blocking third-party scripts; libraries are inlined and the page is one cache hit.
| Project | What it is | Stack |
|---|---|---|
| Aestimo | AI career assistant β resume scoring, ATS-optimised CV generation, interview coaching, PDF export, streaming responses. | Flutter Β· Gemini AI Β· Riverpod Β· Firebase |
| Simul | Social watch-party platform β YouTube sync, WebRTC voice/screen share, Connect-4 mini-game. | Flutter Β· LiveKit Β· WebRTC Β· Firebase |
| CivicPing | Citizen infrastructure-reporting platform mapping public issues across Pakistan. | Flutter Β· Firebase Β· Maps API |
| SAUSSync | Cross-platform academic schedule management for university use. | Flutter Β· Firebase Β· Windows |
| UniTime | Constraint-satisfaction timetable generator with conflict resolution. | Flutter Β· CSP solve |
- Wire the contact form to a real endpoint
- Add live project links & GitHub repos
- Add a downloadable rΓ©sumΓ©
- Lighthouse pass & Open Graph image
- Optional case-study pages
Arsalan Kaleem β Flutter & AI Developer Β· Shikarpur, Pakistan
- π Website β
https://arsalankaleem.github.io/portfolio/ - βοΈ Email β
arsalanabbasi.here@gmail.com - πΌ LinkedIn β
www.linkedin.com/in/arsalankaleem - π GitHub β
https://github.com/ArsalanKaleem
Distributed under the MIT License. See LICENSE for details.
The design, code, and structure are MIT-licensed. The personal content (name, bio, photos, and project write-ups) remains Β© Arsalan Kaleem β please swap it for your own if you reuse this as a template.
- GSAP β GreenSock Animation Platform (incl. ScrollTrigger & SplitText)
- Lenis β smooth scroll by Darkroom Engineering
- Bricolage Grotesque, Inter, JetBrains Mono
Designed & built by Arsalan Kaleem β deliberately.
