Skip to content
All projects

Business website + admin system

Floral Roots & Decor

Completed · Handed over Sep 2026

Event decoration website with online booking and quotations, plus a full admin system for bookings, invoicing, payments, inventory and staff.

My role
Designed, built, tested and handed over the public website and the admin system.
Client
Floral Roots & Decor, an event decoration studio in Nepal
Status
Handed over Sep 2026
Stack
  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • Supabase
  • PostgreSQL
  • TanStack Query
  • React Hook Form
  • Zod
  • Radix UI
  • Vercel
Floral Roots & Decor homepage: a decorated wedding stage behind the headline “We design the moments you’ll never forget.”

Overview

Floral Roots & Decor designs decoration for weddings, engagements, birthdays and other celebrations across Nepal. I built their public website and the admin system the studio uses to run bookings, from first inquiry to final payment.

The project was completed, tested on desktop and mobile, and handed over to the client in September 2026.

Who it serves: People planning weddings and celebrations, who browse designs and packages and book online, and studio staff, who manage the work behind each booking.

The problem

The studio needed two things: a public site that presents its designs and packages and accepts booking requests, and an internal system for everything that follows a booking, including quotations, invoices, payments, scheduling, stock and staff.

My contribution

  • Designed the layout and interface of the public site and the admin panel.
  • Built the public pages, booking form, contact form and online quotation page.
  • Designed the PostgreSQL schema, access policies and storage in Supabase through versioned SQL migrations.
  • Built the admin modules: dashboard, bookings, inquiries, calendar, pipeline, customers, quotations, invoices, payments, staff, inventory, vendors and reports.
  • Tested the website and admin panel on desktop and mobile before handover.

Features

Public website

  • Home, Services, Designs gallery, Packages, About and Contact pages
  • Online event booking form with a confirmation page
  • Contact form whose messages arrive in the admin inbox
  • Wedding packages with pricing
  • Online quotation page where clients can view, download and accept a quote
  • WhatsApp and phone contact links
  • Sitemap, robots.txt and page metadata

Admin system

  • Staff sign-in with roles
  • Dashboard with “needs attention” alerts and upcoming events
  • Bookings, inquiries, calendar and a pipeline board
  • Calendar dates in both the Gregorian and Nepali (Bikram Sambat) calendars
  • Customer profiles with notes and history
  • Quotations, invoices, payments and printable receipts
  • Staff, tasks, inventory and vendor management
  • Reports with CSV export, notifications and company settings
  • Works on mobile phones as well as desktop

Technical decisions

One managed backend

Supabase provides the PostgreSQL database, authentication, file storage and realtime updates. The schema is managed through 14 versioned SQL migrations, so every database change can be reviewed and reproduced.

Shareable quotations without accounts

Each quotation gets its own share token. Clients open a private link to view, download and accept their quote without creating an account.

Local calendar support

Many events in Nepal are planned in the Bikram Sambat calendar, so the admin shows BS dates next to Gregorian ones.

Challenges & solutions

Challenge

The public booking form failed silently. Postgres row-level security filters the rows an INSERT … RETURNING gives back through SELECT policies, so the insert succeeded but the app never received the new booking’s ID.

Solution

Adding a public read policy would have exposed every customer’s details through the public API key. Instead I wrote a database function that inserts the booking and its services in a single transaction and returns only the booking ID and reference code.

Challenge

Creating a quotation failed with “permission denied for sequence”. Reference numbers such as QT-… come from database sequences, and permission to insert into a table doesn’t include permission to use the sequences its defaults read from.

Solution

A follow-up migration granted the specific sequence privileges the affected roles needed, fixing the latent version of the same problem for invoices and bookings too.

Outcome

  • Live on the client’s own domain and handed over in September 2026.
  • Tested on desktop and mobile, including the booking and contact forms, admin sign-in and every admin section listed above.

Screens

Floral Roots & Decor packages page introducing event packages with starting prices

Packages

Floral Roots admin dashboard with quick actions and summary cards; all figures are blurred

Admin dashboard (figures blurred)

Floral Roots & Decor homepage on a phone

Mobile homepage