Official bilingual website, 2025
Hasnat Abdullah
The official website of a leader of Bangladesh's 2024 July Uprising. Two languages on one URL with zero i18n libraries, static by design and ready for a CMS, with documentary restraint throughout.
- Client
- Public figure, Bangladesh
- Role
- Design and development, solo, from brief to production
- Stack
- Next.js, React 19, TypeScript, Tailwind CSS
- Live
- Private
What it changed
- 8 routes, all server-rendered static pages, with only 8 of roughly 22 components shipping client JavaScript.
- Four lines of CSS run the entire bilingual system. No i18n library, no state manager, no UI kit.
- Both languages live on one URL per page, so links, search, and sharing stay simple.
A public figure's site that could not look like one
Hasnat Abdullah was a coordinator of the Students Against Discrimination movement at the University of Dhaka and one of the most visible faces of the July Uprising. His audience spans citizens, students, journalists, researchers, and international visitors.
The brief was a Bangla-first, documentary-toned site that treats a national moment with editorial restraint. Closer to a premium digital magazine than a campaign brochure. Bangla is the default language and the primary typography, down to the numerals. English is the alternate.

Two languages, one URL, no library
A tiny inline script reads the saved preference and stamps the language on the document before first paint, so a returning English reader never sees a flicker of Bangla. Two utility classes let one block compose differently per language: in the hero, the active language is the headline while the other becomes a subtitle beneath it.
Hidden spans use display none, so screen readers only ever hear the active language, and each span carries the correct lang attribute for pronunciation. Even the stat counters localise their digits.

Fast on mobile networks
Every photograph is converted to WebP before shipping and rendered through next/image. The stat counter is a hand-rolled requestAnimationFrame ease-out with reduced-motion users getting the final value instantly. Video feeds are plain JSON with thumbnails drawn from a URL pattern that always exists.
SEO covers both languages on one URL: a build-time Open Graph image, structured data carrying the Bangla name as an alternate, and a sitemap that weights the memorial page highest.