EazyLaundry
Next.js application for a Cyberjaya laundry: members book, staff maintain the catalog, and drivers run pickup and delivery.
- Full-Stack Developer
- 2025
- Laundry pickup and delivery
- Private
- Eazy BizVentures, via MT Pixels

Overview
EazyLaundry is the signed-in Next.js application for Eazy BizVentures, a laundry operator with a workshop in Cyberjaya, Selangor. Members register with a Malaysian phone number and a membership plan, add items, choose a service speed, and set pickup and delivery dates. Staff approve users and maintain categories, items, and estates, the residential areas used for delivery. Drivers get a task list and a month calendar of bookings.
Context
Built at MT Pixels for Eazy BizVentures in 2025. The product is used in Malaysia. The workshop is in Cyberjaya, Selangor. Prices are in Malaysian ringgit (RM). The Next.js app is the interface. Bookings, auth, approvals, catalog, subscriptions, and invoices go out through one API client. Payment initiation goes to Stripe.
Problem
A booking is not finished when the member picks items. The workshop has to know the service speed and both dates, and it does not run every day. The basket closes dates the operation does not run, including Friday. Staff still approve the person and keep prices. Drivers still run pickup and delivery on that same booking.
- Three roles on one booking: member, staff, and driver.
- Used in Malaysia. Signup and profile forms check a Malaysian phone number, with Zod and React Hook Form. Prices are in RM.
- The Next.js app is the interface. Bookings, auth, approvals, estates, categories, subscriptions, and invoices go through one API client.
- Payment initiation goes to Stripe.
- Private.
My role
I built the Next.js interface: sign-in and registration, the member order flow, staff screens for approvals, users, categories, items, and estates, and the driver task list and booking calendar.
- Sign-in, registration, and password reset
- Member orders: new order, basket, and order history
- Admin approvals, users, categories, items, and estates (delivery areas)
- Driver task list and booking calendar
- Separate workspaces for members, staff, and drivers on the same booking
- Auth, settings, and user forms, including the Malaysian phone check
- One API client for bookings, approvals, catalog, and delivery dates
- Payment initiation through Stripe
Approach
A booking is items, a service speed, and both dates. The basket loads delivery types and the dates the workshop is closed, including Friday, before the member can send it. Zod and React Hook Form validate the forms, including the Malaysian phone number on signup and profile.
Key decisions
Pickup and delivery dates are chosen with the service speed, and closed days are not selectable.
- The workshop needs both dates before the booking exists, and it does not run every day. Friday is one of the closed days.
- The basket has to load delivery types and the closed-date list before the member can send the booking.
- The member sets items, speed, and both dates. Staff and drivers then work that same booking.
Solution
Members use new order, basket, order history, and membership. The basket posts pickup and delivery dates with the booking. Admins use approvals, users, categories, items, estates, and an orders calendar. Drivers use the day's runs and that same calendar. Subscriptions and invoices go through the API client. Payment initiation goes to Stripe.


Methods and technology
- 01Next.js App Router interface
- 02Zod and React Hook Form, including the Malaysian phone check
- 03Closed dates loaded with delivery types
- 04Separate workspaces for members, staff, and drivers
- 01Next.js
- 02React
- 03TypeScript
- 04Tailwind CSS
- 05Axios
- 06Zod
- 07React Hook Form
- 08Stripe
Scope
- Three roles in one Next.js app: members book, staff approve people and prices, and drivers run pickup and delivery.
- A booking carries items, a service speed, and pickup and delivery dates. Closed days, including Friday, are not offered.
Learnings
- Closed dates are loaded with the delivery types, so the member cannot pick a day the workshop does not run. Friday is one of those dates.