Starblack Media Logo
Back to Portfolio
Case Study

Pure Prestige Cleaning Co.

A comprehensive web application featuring a marketing website, an online booking system with integrated payments, and a multi-role dashboard.

Pure Prestige Cleaning Landing Page

Project Goals

  • Establish a professional digital presence for a new business.
  • Automate the booking and payment workflow to reduce manual administrative work.
  • Provide a scalable platform for managing clients and business operations.
  • Offer a seamless, modern user experience from first visit to repeat booking.

The Problem

The client operated entirely offline, managing bookings via phone and email. This led to scheduling conflicts, significant administrative overhead, and no centralized way to track client history or payments. The lack of a professional online presence made it difficult to attract their target high-end market.

Our Solution

We built a full-stack web application using Next.js and Firebase that serves as both a public-facing marketing site and a private, secure portal for clients and administrators.

  • A dynamic and responsive marketing site to showcase services and company values.
  • An intuitive multi-step booking form with dynamic pricing.
  • Role-based authentication (client, blogger, admin) using Firebase Auth.
  • Client dashboards to view booking history and manage profiles.
  • An admin dashboard to approve, cancel, and manage all bookings.
  • A secure "Request - Approve - Pay" workflow using Stripe and Firebase Functions.

Challenges & Solutions

Secure, Controllable Booking Workflow

Challenge: Implementing a booking system that didn't require immediate payment, giving the business owner approval control.
Solution: We designed a two-stage process. A lightweight Firebase Function saves the initial request. A second, admin-triggered function then creates the Stripe payment intent, decoupling the request from the payment.

Reliable Firebase Functions Deployment

Challenge: Overcoming deployment failures due to environment variable handling and cold starts in Firebase Functions.
Solution: We refactored functions to use `runWith({ secrets: [...] })` and moved Stripe initialization inside each function call (lazy initialization), a best practice for v2 functions that resolved the issues.

What’s Next

Future plans include implementing automated email/SMS reminders for upcoming appointments and adding a feature for admins to charge the remaining 40% balance to a client's saved payment method.

Interested in a similar project?

If you’d like us to build something like this for your startup or business, we'd love to chat.

Get in Touch