Go to the dashboard URL — it opens straight to the login screen. Enter the shared dashboard password and tap Unlock Dashboard.
Your login stays active for the browser tab's session. If you're bounced back to the login screen unexpectedly, just log in again — nothing is lost, all data lives on the server, not in the browser.
The Pipeline tab is the home screen — every active event across every client, as a card you can scan at a glance.
The row of tiles above the cards (Inquiry → Menu → Quote → Deposit → Contract → Confirmed → Complete) shows a live count per stage. Tap a tile to filter the board down to just that stage; tap it again to clear the filter.
The search box matches client name or event name/occasion. The two dropdowns filter by concept (Magnolia Room / Catering / Cotillion Cafe / Sweetery) and by stage.
Without opening the full event, you can ✉ Email (opens a template ready to send to Gmail Drafts), 📅 Calendar (creates a Google Calendar event), or 📋 Copy Note (copies a formatted summary block — handy for pasting into Apple Notes or a text).
A client is just contact info — name, phone, email, referral source, general notes. Every booking they make is a separate event nested under that client, each with its own occasion, dining style, date, worksheet fields, stage, and activity log. This keeps repeat customers from blurring together: someone who books three parties a year shows up as one client card with three event cards underneath, not three unrelated entries.
This is the same client database the Reservations tab uses — a client doesn't need any events to exist, and a client with reservations but no catering event yet still shows up here with an empty event list. There's one contact database for the whole business, not a separate one per tab.
Opening any card shows the full picture: the ball-in-court banner (tap Flip to Client / Flip to Me any time the plan changes), the info grid, notes, AI triage summary (if the event came in through the intake form or inbox scan), the stage picker, the activity log, email templates, calendar shortcuts, and deposit toggle.
Activity log is the running history for that event — type a note and hit Enter or tap + Log. Every email, calendar event, and AI approval also drops its own automatic log line, so the log ends up being a fairly complete record of everything that happened on that booking.
📋 Apple Notes copies a clean, formatted text block of the whole event to your clipboard — paste it straight into a new Apple Note if you want an offline copy.
On the event detail screen, Create Square Invoice opens a box where you type or paste the items to bill for, one per line, ending in a dollar amount — e.g. Plated dinner x40 — $3200. Dashes, colons, or just a trailing $amount all work as the separator. Tap Preview Line Items to see exactly what will be itemized before anything is created.
Any line that doesn't end in a recognizable amount is left alone rather than guessed at — it shows up as a warning in the preview instead of silently vanishing. The Custom / Catch-all Amount field is where that gets resolved: fill it in and any lines that didn't parse get folded into one extra line item using that amount, so nothing typed is ever lost. If nothing on the page parses as an item at all, that field becomes the entire invoice — a single line for the full amount, described by whatever you typed.
Pick which Square location the invoice bills from, an optional due date (defaults to 14 days out if left blank), then Create Invoice (Draft). It requires a client email on file — Square needs one to know who the invoice belongs to. The invoice is created in Square as a draft — nothing is emailed to the client automatically; open it in Square yourself when you're ready to review and send.
Every event has its own Files section on the event detail screen — attach a menu, quote, contract, or anything else specific to that booking and it lives right there alongside the rest of the event, not buried in email or a shared drive. Choose a file, pick a category (Menu, Quote, Contract, Invoice, Photo, Other), and tap Upload. Each file shows its category, size, and upload date; tap ⬇ to download or ✕ to remove it. Files are capped at 6MB each — plenty for PDFs and photos, but scanned images or long contracts sometimes need compressing first.
A general to-do list, independent of any specific client — grouped by priority. + Add Task lets you optionally link a task to a client name (free text, not a hard link) and tag it with a category (Menu, Finance, Operations, POS, HR, Follow-Up, Other). Check the box to mark done; the ✕ removes it entirely.
A queue of people to call back — separate from the pipeline because not every callback turns into a booking. + Log Callback captures name, phone, reason, a scheduled time (free text, e.g. "June 5, 2pm"), and priority. If it came in through the intake form's AI triage, you'll see a short 🤖 summary line on the card too. ✓ Done marks it handled (and can be reopened); Remove deletes it.
A read-only, auto-generated view — every quote deadline, menu deadline, and event date across all events, plus any task with a due date, sorted soonest-first and bucketed into Overdue / Next 3 Days / This Week / Next 2 Weeks / Upcoming. Nothing is entered here directly; it's assembled from what's already on the events and tasks. Use the 📅 and ✉ shortcuts on each row to jump straight to a calendar entry or follow-up email.
A day-of-service table reservation system — separate from the catering/event pipeline above. Built directly against Square's Orders API rather than Square's own native reservations feature, which turned out to require a paid Square for Restaurants Plus plan connected to a third-party partner (OpenTable or ResDiaryLite) with no public API of its own to build against.
For parties too big for any one table, create a named combo from Manage Tables (e.g. "Table 3+4"): pick two or more existing tables, and it shows up as its own bookable option with the member tables' capacities summed. Booking a combo blocks every table it's made of for that time window, and booking any one of those tables individually blocks the combo right back — there's no way to accidentally double-book the same physical table through two different bookable "tables." Removing a table that's part of a combo warns you first; if it would drop the combo below two tables, the combo itself is removed too (any reservations still pointing at it are flagged in the warning).
Delete buttons for tables and combos are hidden by default — tap 🔓 Enable Table Editing at the top of Manage Tables to reveal them, then 🔒 Lock Editing when you're done. This is a same-password speed bump against one-tap accidents, not a separate login; a real per-staff admin/manager/staff permission system is planned as a later step once the dashboard supports individual staff logins.
Toggle 🗺 Floor Plan (top of the Reservations tab) for a visual, always-live-for-today view instead of the day list. Each table is a tile colored by its current real-time status — open, reserved later today, or occupied (someone checked in and seated). Tap a tile to see that table's reservations for today with a quick Check-In action, or jump straight to a new reservation pre-set to that table. To actually reposition tables into your real floor layout, tap 🔓 Edit Layout (the same lock as table deletion) and drag tiles where you want them — position saves automatically when you let go.
The date field at the top of the tab filters the list to one day at a time, sorted by time. Each row shows the guest, party size, assigned table, and status. Typing in the search box next to it looks up a guest by name or phone across every date — handy for "do you have my reservation?" calls when you don't know which day it was made for; it disables the date filter while a search is active.
Checking a reservation in is deliberately a separate step from booking it — Check In only appears once a reservation is Confirmed, and tapping it opens a real, empty ticket in Square at that table's location (tagged with the reservation so it's traceable back from Square's own dashboard). Staff then ring up the order at the POS as normal. This means a no-show never leaves a stray open ticket sitting in Square — nothing is created in Square until the guest is actually seated.
No-show sits next to Check In on a Confirmed reservation — use it when the guest never arrives, rather than Cancel, so the two stay distinguishable in the record. Edit is available on any Confirmed or Seated reservation to fix a detail (phone number, party size, table, time) without deleting and recreating it — changing the table or time re-runs the same conflict check as a new booking. Cancel is available any time before check-in and immediately frees that table/time slot for a new booking.
If a table still has upcoming reservations attached to it, removing it from Manage Tables now warns you first (naming one of the affected reservations) rather than silently leaving those bookings pointing at a table that no longer exists.
Reservations and the catering Pipeline share one client database — there's no separate "guest" record anymore. Someone can have five dinner reservations over the years all tied to one client profile, and that same profile is what shows up if you ever start a catering event for them. Reservations tab → 👤 Manage Clients to search, add, or remove profiles, and to see how many reservations and Pipeline events are linked to each one; a View Profile button on any client opens their full Pipeline contact profile.
Nothing about a reservation contact ever lives only on that one booking. When booking or editing a reservation, the optional Link to Existing Client search box at the top of the form fills in name/phone/email from that profile and ties the reservation to it. Leave it unlinked and type a phone or email instead, and a client profile is matched or created for you automatically the moment the reservation saves — matching is by email first, then phone.
Two separate CSV imports, both under 👤 Manage Clients and the Reservations tab respectively — bring in the customers file first if you want bookings linked to a profile on import:
Both are one-time only — there's no ongoing sync with the other system afterward.
🔀 Find & Merge Duplicates (Manage Clients) scans for profiles that share the exact same email or phone number and groups them for review — nothing merges automatically. Pick which profile in each group to keep; the others are removed, every reservation and Pipeline event that was linked to them gets re-pointed to (or combined into) the profile you kept, so booking and event history doesn't get lost in the merge.
The Settings tab is split into categories with its own sub-menu on the left — House Rules & Style Guide, Public Booking Page, and Reservation Hours & Time Slots — rather than one long scrolling page. Switching categories keeps any unsaved edits in the other categories; only a full navigation away from the Settings tab (or a page reload) discards them, same as everywhere else in the app.
A no-login, embeddable page (book.html) guests can use to request or book a table themselves — turn it on and configure it from Settings → Public Booking Page:
<iframe> snippet for your own website. It always reflects your current settings, so changing the color or welcome message later doesn't require re-pasting anything.Its own category under Settings — set opening and closing times per day of the week (or mark a day fully closed), and add breaks to block out a window in the middle of a day (e.g. between breakfast and lunch service). A single slot interval (5 to 60 minutes) applies across all days. Generates the time choices offered in the dashboard's own New/Edit Reservation forms and on the public booking page, so both stay in sync automatically, and both re-generate the options whenever the reservation's date changes.
A separate page (calendar.html, linked from the 📅 Calendar header button) showing every Pipeline event on a month grid, one event per day it's scheduled. Use ‹ › to change months and Today to jump back to the current month.
Events are color-coded by stage, using the same palette as the rest of the dashboard rather than plain red/green: gold for Confirmed/Complete, brass for Deposit/Contract, and crimson for the earlier Inquiry/Menu/Quote stages — so you can tell a locked-in date from one still up in the air at a glance. Click any event to see its details (or "+N more" on a busy day to see the full list); nothing on this page is editable, it's a read-only view for scanning the schedule.
This is separate from Reservations and from Google Calendar sync — it only reflects the Pipeline's own event dates, not dinner reservations or anything created directly in Google Calendar.
The Capacity tab is the one place that overlays both halves of the business on top of each other — Pipeline event guest counts and Reservations covers, day by day — so a big Magnolia Room wedding and a packed dining room the same night show up together before it's a surprise, instead of living in two tabs no one cross-references.
Each row is one upcoming day: covers and reservation count on the left, Pipeline guest count and event count in the middle, a combined total, and a status pill once that total crosses your Daily Threshold (editable right on the tab — Approaching past 75%, Over Capacity past 100%). Tap any day to see exactly what's booked — reservations and events both, with times where they apply.
Pipeline events count toward a day's total at every stage, not just Confirmed — an early Inquiry still represents real potential kitchen load worth seeing coming. Cancelled and No-show reservations are excluded. The threshold is a per-device display preference (not shared data), so each person viewing the dashboard can set their own sense of "busy."
Paste your filled-in Menu House Rules / style guide worksheet here — dining-style-by-dining-style guidance on what a plated dinner, buffet, tea, etc. should include. This is the single source of truth the AI reads every time it drafts a menu (see AI Drafting below), so keeping it current is the highest-leverage thing you can do to improve the quality of AI-drafted menus. Tap Save House Rules after editing.
Header button, available from anywhere. Pulls overdue and upcoming quote/menu/event deadlines plus pending high-priority callbacks and writes a short prioritized summary — read-only, nothing is sent or changed automatically.
On an event detail screen: reads that event's full worksheet, its notes, and your House Rules, and drafts both a proposed menu and a client-facing email introducing it, in one step. The draft is always shown for review first — edit anything you like, then either:
Nothing is ever sent automatically — every AI draft, everywhere in this dashboard, stops at your Gmail Drafts folder for a final human look before it goes out.
A lighter-weight version for when you just want a standalone quote or menu draft to copy elsewhere, without going through the full menu+email flow or touching Gmail. Prices are always left as a [PRICE] placeholder — the AI never invents a dollar figure.
Inside any email template modal — rewrites the selected template using that specific client's real notes and recent activity log, instead of the generic boilerplate.
Runs automatically (not something you trigger) on both the public intake form and the inbox scan — pulls out dietary needs, an estimated guest count, a budget note, and urgency from free-text notes, shown as a clearly-labeled, review-before-relying-on-it block. It never overwrites your own fields.
Tap 🔄 Reconnect Google in the header and complete Google's consent screen. You only need to do this once — and again any time a new permission (like Calendar) gets added and needs to be picked up.
Header button. Scans the last 2-5 days of inbox (pick the range from the dropdown) and flags likely new inquiries (filtering out newsletters, receipts, and ongoing threads about already-booked events) with a review-and-checkbox screen — nothing gets added as a client without you explicitly picking it.
Every manual email flow in this dashboard — templates, personalized emails, and the AI menu+email draft — ends the same way: a real draft sitting in your Gmail Drafts folder, ready to review and send yourself. The one exception is automatic guest confirmations and reminders, described below — those really do send on their own.
From an event's 📅 Add to Google Calendar section, pick Event Date / Quote Due / Menu Due — it pre-fills a title, date/time, and description from that event's info, and creates a real calendar event with a 1-hour popup and 24-hour email reminder.
This is the one place in Parlor that emails a guest or client automatically, with no draft step and no human click — it only fires for things that are genuinely confirmed, on two triggers:
Each only sends once — a reservation edited after it's already Confirmed doesn't trigger a second confirmation, and a reminder that already went out doesn't repeat the next time the daily check runs.
Every one of these arrives as a branded HTML email — the business name banner, gold accent rule, and a clean details table for the date/time/party size — with a plain-text version underneath for any mail client that can't render HTML.
A separate, no-login page (intake-handler.html) meant to be bookmarked on a phone at the host stand or wherever calls come in. Two options: