Home /work/
Lost & Found: React Redesign
DESIGNED · BUILTAug 2026Live

Lost & Found: React Redesign

A responsive, installable community board for reporting lost and found items, rebuilt from the original graduation project as an accessible React product demo with search, filters, privacy controls, and complete account and report-management flows.

Role
Solo: product redesign, design system & frontend rebuild
Timeline
Original: Nov 2023 to May 2024 · Rebuild: Aug 2026
Platforms
Responsive web · Installable PWA
Deployed on
Vercel
Made with
  • React 19
  • React Router 7
  • Vite 8
  • Tailwind CSS 4
  • Zustand 5
  • Vite PWA
  • Local mock APIs
  • Vercel
  • Figma
  • VS Code
  • Browser DevTools
Routed views & states
17
Item categories
6
Demo reports
12
Installable experience
PWA
Lost & Found: React Redesign

Overview

The project

Lost & Found began as my final-year BSc Computer Science project at the University of Baghdad. The original 2024 version was a full-stack Node and MySQL application and received an A+. In August 2026, I returned to the same problem and rebuilt the experience around the standards I use now: clearer information architecture, an explicit design system, accessible interaction states, responsive layouts, and reusable React components.

The current live release is intentionally a frontend-only product demo. It ships with twelve realistic reports, six categories, a visible demo account, protected account routes, search and filtering, privacy controls, report creation and editing, reunited and delete actions, and installable PWA behavior. Mock API modules preserve asynchronous loading and mutation flows, while Zustand keeps authentication, navigation, and modal state in memory; demo changes reset when the page refreshes.

This rebuild is not presented as the old backend wearing a new skin. It is a complete product and frontend redesign that preserves the graduation project's core idea while being honest about its current scope. One deployment limitation remains: nested routes work through in-app navigation, but direct deep links currently need a Vercel SPA rewrite before they can load independently.

How it was made

Design process

01

Re-audit

Reviewed the original graduation project screen by screen, keeping the useful domain model while removing the visual and technical debt.

02

Reframe

Defined the current product as an honest, frontend-only demo with complete lost, found, reunited, search, account, and report-management states.

03

System

Created semantic color, type, spacing, radius, shadow, motion, and z-index tokens before rebuilding individual components.

04

Prototype

Reworked the information architecture around search, category browsing, clearer report cards, privacy controls, and responsive navigation.

05

Rebuild

Implemented the redesign in React with reusable UI primitives, feature modules, guarded routes, local mock APIs, and PWA support.

06

Verify

Checked every public and signed-in route at desktop and mobile widths, then refreshed the portfolio gallery from the deployed product.

What I learned

Research insights

Search is the fastest path

People rarely know where an item was filed, so the home page now puts keyword search and optional category/status filters ahead of the catalogue.

Status must read without color

Lost, Found, and Reunited use distinct semantic colors, but every state also carries an explicit text label so meaning never depends on color alone.

Privacy belongs in the account flow

Email and phone visibility are first-class profile controls, and reunited reports hide contact details once a recovery is complete.

A demo should be transparent

The current release uses a visible demo account, local mock data, and in-memory actions that reset on refresh instead of pretending to be a production service.

Recovery needs more than happy paths

Loading, empty, error, verification, not-found, confirmation, and image-fallback states make the experience understandable when data or actions are incomplete.

Why it looks like this

Key design decisions

Search-led information architecture

Keyword search, optional filters, and six scannable categories create multiple paths to the same report

Explicit lifecycle states

Lost, Found, and Reunited labels clarify intent, ownership actions, and when contact details disappear

Semantic token system

Components consume role-based color, type, spacing, radius, shadow, motion, and layer tokens

Accessible by default

Visible focus, reduced-motion support, minimum touch targets, clear labels, and resilient feedback states

Progressive report detail

Compact cards support scanning; the detail view adds the full description, owner information, and management actions

Calm community voice

DM Sans, Inter, and a restrained blue system keep the product helpful, legible, and trustworthy

The screens

Gallery

What I used

Tools

Figma

Original product design and redesign direction

Design tokens

Semantic visual system and responsive rules

Playwright

Route, state, viewport, and screenshot verification

then I built it

What's inside

Features & pages

Search & filter

Search report titles and descriptions, then narrow results by category and Lost, Found, or Reunited status

Report lifecycle

Create, view, edit, mark reunited, and delete reports with clear confirmation and feedback states

Demo accounts & privacy

Sign up, log in, edit a profile, change a password, and independently control email and phone visibility

Image-first reporting

Local item photos, upload previews, resilient fallbacks, and consistent card/detail crops make reports recognizable

Responsive installable app

Mobile navigation, 44px touch targets, reduced-motion support, and a Vite PWA manifest extend the experience beyond desktop

Complete route states

Protected routes, loading and empty states, email verification, error boundaries, confirmations, and a custom 404

What was hard

Challenges & solutions

Problem

The portfolio still described the original Node, Express, EJS, Bootstrap, MySQL, Railway, and upload/email backend even though the current repository had been redesigned as a different product architecture.

Solution

Reframed the current release accurately as a React frontend demo, removed the obsolete backend claims, and kept API modules around the mock layer so a real service can replace it later without rewriting the page components.

Problem

A growing collection of one-off colors and component styles would have made the redesign inconsistent and difficult to audit.

Solution

Built one semantic token layer for color roles, typography, spacing, radii, shadows, motion, glass surfaces, and z-index; components use those roles instead of arbitrary Tailwind defaults.

Problem

The original desktop layouts did not cover keyboard focus, comfortable touch targets, reduced motion, or compact mobile navigation.

Solution

Added visible focus treatment, 44px interactive targets, reduced-motion behavior, responsive grids and menus, text-backed status badges, and mobile-first form layouts.

Problem

A frontend-only demo still needed realistic flows without implying that data or authentication persisted like a production backend.

Solution

Used deterministic local reports, a clearly labelled demo account, protected client routes, asynchronous mock APIs, and in-memory mutations that intentionally reset on refresh.

Built with

Tech stack

React 19

Component architecture and interface state

React Router 7

Public, protected, detail, and fallback routes

Vite 8

Development and production build tooling

Tailwind CSS 4

Token-driven responsive styling

Zustand 5

Authentication, navigation, and modal state

Vite PWA

Manifest, service worker, and install prompt

Local mock APIs

Deterministic reports and in-memory demo actions

Vercel

Live frontend deployment

What came out of it

Results

17

Routed views and UX states

21

Fresh desktop and mobile captures

12

Realistic local demo reports

6

Searchable item categories

PWA

Installable responsive build

A+

Original graduation-project grade

Other work