./{MA}
DoosDoos Image 1
DoosDoos Image 2

About this project

DoosDoos is a car rental marketplace frontend that connects travelers and locals with trusted vehicle hosts. The product promise is convenience and transparency: browse cars, understand terms, and complete rentals with a modern web interface that feels as approachable as a consumer app.

I built the UI in React with Tailwind CSS and Shadcn-based components to move quickly without sacrificing consistency. Zustand manages client state for flows that span browsing, filtering, and checkout-related screens. Axios handles API communication, and Zod validates form and payload shapes so bad data fails early instead of surfacing mid-booking.

Marketplace UIs live or die on trust. I focused on clear vehicle cards, host context, and step-by-step rental states so users always know where they are in the journey. Responsive layouts keep the experience usable on mobile, where many last-minute rental decisions happen. Component patterns were designed to scale as new vehicle categories or host tools appear.

Working on DoosDoos meant thinking beyond static pages. Filters, forms, and async states need loading, empty, and error treatments that feel intentional. The stack choices — React, Tailwind, Zustand, Zod — support that kind of interactive product work while keeping the codebase approachable for iteration.

This project demonstrates my approach to product frontends: reusable UI primitives, predictable state, and validation that protects both users and the API contract.

Marketplace complexity shows up in edge cases: incomplete host profiles, filter combinations that return nothing, and forms that need strict validation before a request hits the API. I designed empty and error states as first-class UI, not afterthoughts, so the product still feels guided when data is missing.

DoosDoos reinforced a pattern I use on product teams: establish a component language early, keep server communication predictable, and validate aggressively. That is how rental and sharing platforms stay usable as features expand.