CC Network runs a production studio: room rentals, podcast and interview shoots, event coverage and storytelling campaigns. Their operations lived across Monday, Keap and Acuity. We built one CRM on our template: a public booking engine that cannot double-book, sign-before-deposit, a client portal, a shared inbox, and an eight-stage production workflow lifted straight from their own operations manual.

Requests came in over email and DMs, availability lived in someone’s head and a calendar, quotes went out as PDFs, deposits were chased by hand, and the production checklist lived in a doc nobody opened. Monday tracked it, Keap emailed it, Acuity booked it, and none of them knew about each other.
One record per request. Availability, agreement, deposit, messages and the production job attached to it, from the public booking door to the wrap.
Four decisions shaped the build, and each one closes a specific way the old stack leaked money or time.
Four lines of business (venue rental, interview package, storytelling campaign, and a no-deposit guest pipeline) share five pipeline sections but define their own rungs, all declared as data in one file that every screen reads. Nothing is hand-typed per page.
A Postgres function paints a month of true availability server-side (buffers, minimum notice, business hours). Taking a slot uses a row lock so two people confirming the same second cannot both win, then opens a 15-minute hold with a live countdown.
The agreement has to be signed before the deposit checkout is even offered, and the server enforces it, not just the screen. PayPal Orders v2 with a real webhook: only a completed capture counts as paid.
Five real campaign products and eight stages came straight from CC Network’s own operational manual into a template file the team can edit without a deploy. Each stage is owned by a department and gated by a quality standard.
Same three-layer shape as everything we build, with one twist: the public booking door and the client portal are served by locked-down database functions, so anonymous visitors can book without ever touching a table directly.
React single-page app with hand-written CSS. Staff app, public storefront, and phone-first client portal.
Vercel serverless functions plus Postgres RPCs for the public flows (booking holds, portal reads, form submits).
Supabase Postgres with row-level security on nearly every table, keyed to a per-user permission function.
Real screens rebuilt from the app with an invented studio and invented clients. Two of them are public: the booking door and the client portal need no login.
The home page is built around the day: KPIs up top, a band showing what automation handled since you left (holds released, receipts sent, reminders texted), then today’s run of show next to the short list that needs a person, and the money that has to land before the door opens.

Venue rentals, interview packages, storytelling campaigns and no-deposit guest bookings each climb their own rungs inside shared sections. Advancing a row stamps booked and deposit-paid dates automatically, which is the exact moment a lead becomes a client everywhere else in the app.

A five-question wizard on a public page: shoot type, length, calendar and time, who you are, review. Availability is computed server-side against every existing booking plus buffers and hours, the chosen slot is held under a row lock with a live 15-minute countdown, then the agreement is signed and the deposit paid, in that order.

A token link opens a phone-first portal with a six-step journey (request, proposal, sign and deposit, booked, shoot day, wrapped), the quote, messages, updates and add-ons. Staff who open the same link get a banner: this is what the client sees.

Staff and clients share one thread per booking, with internal notes, canned quick replies with name tokens, team routing, and a client-context rail that shows the balance and next shoot while you type.

Every production job moves through eight stages, each owned by a department with its own grouped checklist and a quality gate before the next stage unlocks. Items completed by the automation actor lock so a human cannot accidentally undo them.

Messages, notes, payments, add-ons and an append-only event timeline that records whether the actor was the system, the client, the storefront, or a staff member, plus the hand-off into a production campaign.

CC Network retired $4,104 a year in software list price and reclaimed about 102 operator hours a year at 100 bookings, worth another $4,067 at $40 an hour. That is $8,171 of recurring annual value against a one-time $5,400 build, which pays for itself inside year one and returns roughly $19,112 over three years.
| Action | By hand | In the system | Saved / yr |
|---|---|---|---|
| Take a booking request and check availability across 3 studiosRead the inbound email or DM, open the calendar, check all 3 studio calendars against the requested window, write a reply offering two or three options, re-check when the client comes back with a different date, then hand-enter the booking on the right studio calendar. Double-booking risk is real because the calendar is only true at the moment it is read. | 12 min | 2 min | 17 hrs |
| Send quote + agreement + collect depositBuild the quote PDF from a template and fill in the package, rate, and dates (about 5 min). Upload the agreement to DocuSign, drag signature, initial, and date fields onto it, set the recipient, and send (about 6 min). Create and send a PayPal invoice for the deposit (about 4 min). Come back later to check whether the signature landed, whether the deposit cleared, and record both (about 3 min). Three separate tools, three separate logins, three places the thread can stall. | 18 min | 3 min | 25 hrs |
| Update the client on job statusRoughly four touchpoints per job (booked, shoot complete, in edit, ready for review). Each one means opening the thread, remembering where the job actually stands, writing the update, and sending it, at about 3 min each. Clients who do not get the update send a chaser, which costs more time than the update would have. | 12 min | 2 min | 17 hrs |
| Run a production job through its stagesCreate the Monday board card and fill its fields, keep a separate checklist doc for what each department owes, move the card between columns by hand, ping the right person in Slack at each handoff, and chase whoever did not see the ping. Nothing stops a job moving to the next stage with a step skipped, so mistakes are caught late by a person rather than early by the process. | 22 min | 7 min | 25 hrs |
| Reconcile paymentsTwo payments per booking (deposit and balance). For each, open PayPal, find the transaction, match it to the right client and job, type it into the spreadsheet, and mark the job paid. Then work out which balances are still outstanding, which means reading the spreadsheet against the calendar. | 6 min | 1 min | 8 hrs |
| Answer client messagesMessages arrive across email, Instagram DM, and text. Before replying to any of them the operator has to find the thread, work out which job it belongs to, and check the current status somewhere else. The reply itself is fast. The hunting and context-switching is what costs the time, and messages get missed when they land in the channel nobody checked that day. | 14 min | 8 min | 10 hrs |
| Total hours given back per year | 102 hrs | ||
A 15-minute row-locked hold reserves the slot the moment a client selects it, then releases it automatically if the booking is not completed. Nobody has to remember to free up an abandoned cart, and no two clients can be sold the same studio hour.
A booking cannot reach confirmed without a signed agreement on file. The rule lives on the server, not in the interface, so it holds even if someone works around the screen. This is the difference between a policy and a control.
Signature confirmations, deposit receipts, and balance receipts send themselves with the correct job details attached. No template to find, no amount to retype, no receipt forgotten on a busy shoot day.
Surfaces what is actually waiting on a human across the shared inbox and the production stages, so nothing is missed because it landed in the channel nobody opened.
Production stages, owners, and quality gates are edited in the app by CC Network's own team. Changing how a job type runs does not require a developer or a deploy, which is what keeps the process matching the business a year from now instead of drifting away from it.
This build came off the same template that runs our own agency, tailored to how CC Network actually operates. If your business books rooms, people or time, this is what we would build for you.
Build one for your business →