Business website + admin system
Floral Roots & Decor
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

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

Packages

Admin dashboard (figures blurred)

Mobile homepage