Harveys Laundry: Commercial Laundry Website with Customer Portal and Admin Panel
Year
2025
Tech stack
Next.js 16, React 19, TypeScript, Tailwind CSS v4, PostgreSQL, Prisma ORM, NextAuth.js v5, Resend, React Leaflet, Framer Motion, MDX, Radix UI, React Hook Form, Zod, React PDF
About
A full website for Harveys Laundry, a Glasgow commercial laundry and linen hire company. It replaced their old Wix site with a fast Next.js build that includes service pages, a live pricing calculator, a quote wizard, a customer portal, a careers system, and a full admin dashboard.
The Problem
Harveys Laundry had been running their business on a Wix site that no longer did the job. It was slow, hard to update, and it could not handle the things the company actually needed, like showing real prices, taking quote requests in a structured way, letting existing clients check their orders and invoices, or managing job applications. Every new enquiry came in as a plain email with missing details, and staff had to chase people for the rest. There was also no proper place for the team to see and manage everything in one spot. They needed a modern website that worked as a real business tool, not just a brochure.
What I Built
I built a complete production website from scratch on Next.js 16. It has three parts that work together. The public side sells the service with detailed pages for each type of client, a pricing calculator, and a step by step quote form. The customer portal lets approved clients log in to see their orders, invoices, linen counts, and collection schedule. The admin panel gives the Harveys team one dashboard to run the whole thing, from quotes and enquiries to pricing, blog posts, job vacancies, and site settings. Everything is backed by a PostgreSQL database, sends email notifications automatically, and is built to deploy on Vercel.
Key Features
Homepage with hero, live stats bar, service grid, testimonials carousel, and coverage teaser that pulls a visitor straight toward a quote
Six dedicated service pages for hotels, restaurants, spa and leisure, serviced apartments, events and catering, and public sector clients
Live pricing calculator that works out an estimate from venue type, items, volume, and location surcharges
Multi step quote wizard that collects venue details, service needs, and contact preferences, then saves them to the database and emails the team
Contact form with spam protection that stores every enquiry and notifies staff
Interactive coverage map built with Leaflet showing the areas across Central Scotland that Harveys serves
Customer portal with secure login where clients view orders, invoices, linen counts, and their collection schedule
Account approval flow so new portal sign ups stay pending until an admin approves them
Full careers section with live job listings and a long application form that includes a digital signature and CV upload
Admin dashboard to manage quotes, contact messages, customers, orders, invoices, schedules, and linen counts
Admin pricing manager to edit price items, formulas, and location surcharges without touching code
Blog system that supports both MDX files and database posts, with categories, read time, and view counts
Vacancy manager so staff can post, edit, and hide job openings themselves
Site settings panel for company details, email notification toggles, and a maintenance mode switch
Notices system to show announcements to all users or a single customer
Email verification with one time passcodes and password reset by email
Invoice PDF generation for billing documents
Project Details
How it works
The public website and getting a quote. A visitor lands on the homepage and sees what Harveys does, who they work with, and proof they can be trusted, like the on time delivery figure and client logos. From there they can open a service page that speaks directly to their type of business, for example a hotel or a restaurant. When they are ready, they have two paths. The pricing calculator gives a fast self serve estimate by asking for venue type, the linen items they need, rough volume, and their location, then applying the rates and any location surcharge that admin has set. If they want a real proposal, the quote wizard walks them through several short steps and collects everything the sales team needs in one go. That quote is saved to the database and an email goes out to staff straight away, so nothing gets lost and no one has to ask for missing information.
The customer portal. Existing clients get a login. Because laundry accounts are commercial and need vetting, a new sign up does not get instant access. The account sits in a pending state until an admin approves it. Once approved, the client can log in and see their orders and their status, their invoices with amounts and due dates, their linen count records, and their upcoming collection and delivery schedule. It gives regular customers a clear view of their account without phoning the office.
The careers system. Harveys hires often, so the site has a proper recruitment flow. Admin staff post vacancies through the admin panel, and those appear on the public careers page. An applicant fills in a detailed form that covers personal details, right to work, work history, availability, health declarations, and a digital signature drawn on screen, and they can attach a CV. Each application is stored against the vacancy and the team reviews it in the admin panel.
The admin panel. This is the control room. Everything the public and portal generate flows here. Staff can read and update quotes and contact messages, manage customer accounts and approve new ones, handle orders, invoices, schedules, and linen counts, edit pricing and location surcharges, write and publish blog posts, manage job vacancies, post notices, and change core site settings including turning on a maintenance mode. It means the Harveys team runs the whole website themselves without needing a developer for day to day changes.
What it needed
- A fast, modern site that Google and customers both take seriously
- Real pricing on the site instead of a call for quote wall
- Structured quote and contact capture so enquiries arrive complete
- A self service area for existing commercial clients
- A recruitment pipeline that matches how the company actually hires
- One admin place to manage content, pricing, customers, and enquiries
- A clean path to deploy and maintain on Vercel with a hosted database
Summary
The project turns a tired brochure site into a working business platform. The front end brings in leads with clear service pages, honest pricing, and a guided quote flow. The portal serves existing clients. The admin panel puts the whole operation in the hands of the Harveys team. It is one codebase, built on a current stack, ready for production.
Screenshots
The Result
Harveys Laundry now has a website that does real work instead of just sitting there. Enquiries come in complete and land in a dashboard instead of scattered inboxes. Customers can get a price in seconds and start a quote without picking up the phone. Existing clients can check their own orders and invoices. The team posts jobs, publishes blog posts, and updates pricing on their own. The build passes cleanly with more than fifty routes, runs fast on Next.js 16, and is set up to deploy on Vercel with a hosted PostgreSQL database. It gives a small independent laundry the kind of online setup usually seen at much larger companies.