Case study — Photography Blog · Arabic
Adasa
Adasa (عدسة, “lens”) is an Arabic photography blog for beginners and enthusiasts. It brings 28 articles on lighting, composition, gear and technique into one fast, right-to-left reading experience, built with React, Vite, React Router and Tailwind CSS.
- Role
- Front-End Developer
- Year
- 2026
- Context
- Personal project
- Services
- React Application · Arabic (RTL) UI · Search & Filtering
- Stack
- React · Vite · React Router · Tailwind CSS · Font Awesome
- Live site
- adasa-aseel8.vercel.app
- Source code
- github.com/aseelmahmoud115/Adasa

Live build — hover to pan
01
The Challenge
Arabic-speaking photography fans rarely find one place that combines practical lessons with an inviting, modern reading experience. Most content is in English, or sits on cluttered pages that are hard to browse on a phone.
The site needed to feel native in Arabic — right-to-left from the first line — and make 28 articles easy to explore by topic or by searching.
02
The Approach
Keep the content in one structured JSON source — title, excerpt, category, author, image, date, reading time, tags and a featured flag — so every page is generated from the same data and new articles need no new code.
Design the browsing around three questions a reader asks: what's worth reading first (featured), what's new (recent) and what's about my interest (categories).
03
The Design
A dark, photographic theme with a warm orange accent lets the images lead. The home page moves from a bold hero to featured articles, recent posts, categories with their article counts and a newsletter sign-up.
The whole interface is laid out right-to-left with an Arabic-first type scale, and stays comfortable from small phones to wide screens.
04
The Development
React with React Router: home, blog, a page for every article at /blog/:slug, about, privacy, terms and a custom 404. A scroll manager returns each new page to the top and smoothly follows in-page anchor links.
Each article page parses its content into titled sections and suggests related articles from the same category.
05
The Hardest Part
The trickiest part was making the category filter, the text search and the pagination work together without fighting each other. Filtering had to reset to the first page, an empty search had to restore the full list, and a reader arriving from a category link elsewhere on the site had to land on an already-filtered list.
The solution was to derive the visible list in one place: a memoised filter over category and search, then a slice for the current page. The category travels in the URL as a ?category= parameter, so links from the home page, the footer or an article open the blog pre-filtered — and those links can be shared.
06
The Performance
Vite produces a lean production build, and because the content ships as static JSON there's no API to wait for — articles appear immediately as you browse.
07
The Result
A fast, fully Arabic blog where readers can find what they need in a couple of taps — by category, by search or by following a shared link. It is live on Vercel and its code is public on GitHub.
Services behind this project
Next Step
Have an idea worth building?
Let's turn it into an interface people remember — fast, responsive and built to last.
Usually replies within a day · Gaza, Palestine · working remotely worldwide
View my work

