2025 · Order management

EazyLaundry

Next.js application for a Cyberjaya laundry: members book, staff maintain the catalog, and drivers run pickup and delivery.

Role
Full-Stack Developer
Timeline
2025
Domain
Laundry pickup and delivery
Status
Private
Client
Eazy BizVentures, via MT Pixels
EazyLaundry dashboard with orders, revenue, and members
Dashboard for orders, revenue, and membership plans.

02 / Overview

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.

03 / Context

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.

04 / Problem

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.

Constraints

  • 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.

05 / My role

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.

What I built

  • 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

How it is structured

  • Auth, settings, and user forms, including the Malaysian phone check
  • One API client for bookings, approvals, catalog, and delivery dates
  • Payment initiation through Stripe

06 / Approach

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.

07 / Key decisions

Key decisions

01 / Decision

Pickup and delivery dates are chosen with the service speed, and closed days are not selectable.

Reason
The workshop needs both dates before the booking exists, and it does not run every day. Friday is one of the closed days.
Trade-off
The basket has to load delivery types and the closed-date list before the member can send the booking.
Result
The member sets items, speed, and both dates. Staff and drivers then work that same booking.

08 / Solution

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.

EazyLaundry list of pending member orders
Pending member orders with pickup and delivery dates.
EazyLaundry service items and prices
Service items and prices by category.

09 / Stack

Methods and technology

Methods

  • 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

Technology

  • 01Next.js
  • 02React
  • 03TypeScript
  • 04Tailwind CSS
  • 05Axios
  • 06Zod
  • 07React Hook Form
  • 08Stripe

10 / Scope

Scope

Roles
Three roles in one Next.js app: members book, staff approve people and prices, and drivers run pickup and delivery.
Booking
A booking carries items, a service speed, and pickup and delivery dates. Closed days, including Friday, are not offered.

11 / Learnings

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.