A fully custom booking page that handles collections, payment plan math, promo codes, sales tax, and GHL routing -- completely automated. Clients pick their month, choose their collection, run their numbers, and pay. You never touch it.
This is the exact booking system that runs inside Moonlight and Lace Boudoir. When a client is ready to book, she lands on this page, picks her session month from your available dates, selects her collection, and chooses how she wants to pay.
If she chooses a payment plan, the system instantly calculates her weekly, bi-weekly, and monthly options based on her actual session date -- showing exact payment amounts, number of payments, and her final payoff date.
If she pays in full, she is routed automatically to the correct GHL payment link for her collection -- with or without sales tax applied based on her ZIP code, completely automatically.
Every piece of data she enters flows directly into her GHL contact record through a webhook. Her collection, plan type, installment schedule, promo code, tax flag -- all of it lands in GHL without you doing anything.
This build uses tools you almost certainly already pay for. There are no new subscriptions required.
Before you open the generator, get these pieces built inside GHL. The generator will ask for your webhook URL and payment links -- have them ready before you start the wizard.
Anyone with this URL can send data into your GHL account. Do not share it publicly. It lives inside your HTML file on your site -- that is fine -- just do not post it anywhere.
After your first successful test submission, GHL will show all incoming data fields. Add a Create or Update Contact action and map every field to its matching custom field. Then add follow-up automations -- welcome email, lead tag, task, nurture sequence.
Build your workflow, run one test booking all the way through, verify every custom field populated correctly in GHL, then publish. Do not publish before testing.
Go to Settings → Custom Fields → Contacts → + Add Field for each of these. The key is auto-generated from the name you type -- double check it matches exactly.
| Field Name (type this) | Key (verify this) | Type | Stores |
|---|---|---|---|
| Preferred Session Month | preferred_session_month | Text | "August 2026" |
| Prepayment Collection | prepayment_collection | Text | Collection name she chose |
| Pay In Full Or Payment Plan | pay_in_full_or_payment_plan | Text | "pif" or "prepay" |
| Payments Process Weekly Biweekly Or Monthly | payments_process_weekly_biweekly_or_monthly | Text | Her installment frequency |
| First Payment Date | first_payment_date | Date | Date of first installment |
| Final Payment Date | final_payment_date | Date | Date balance is paid off |
| First Payment Amount | first_payment_amount | Number | Dollar amount, first installment |
| Final Payment Amount | final_payment_amount | Number | Dollar amount, last installment |
| Promo Code Used | promo_code_used | Text | Code entered, blank if none |
| Discount | discount | Number | Dollar amount discounted |
| Contact Preference | contact_preference | Text | text / call / email |
| Tax Applied | tax_applied | Text | "Yes" or "No" |
Your collection price in the generator is the image investment amount only -- not the session fee, not the total. If your full package is $3,000 and your session fee is $600, the collection price you enter is $2,400. The system handles adding the session fee for display. Your payment links charge the image investment only. The session fee has its own separate link.
Open each payment link in a private browser tab. Confirm it loads the correct product at the correct price. One wrong link means a client pays the wrong amount. Five minutes of testing now prevents a real headache.
Sales tax rules for photography vary significantly by state. Confirm your obligations with your accountant before configuring this.
The information below is general guidance only. Your state's rules are specific to your situation. Always confirm with a licensed CPA who understands your state's photography and digital product tax laws.
Some states tax the image investment but not the session fee, because the session fee is treated as a service retainer. This is how Pennsylvania works. Select "Image investment only" in the generator.
Some states do not require tax on photography or digital delivery at all. Set your tax rate to 0 in the generator and no tax is ever applied.
Some states tax the entire transaction including the session fee. If your state treats the full photography package as a taxable sale, select "Full session total" in the generator.
If you deliver digital images (not physical prints), some states treat this differently. Tell your accountant specifically that you deliver digital files.
The client enters her ZIP code. The system checks if she is in your state. If yes, tax is calculated and shown as a line item. She is automatically routed to the correct payment link -- with or without tax -- based on her ZIP. You never have to figure out which link to send.
The generator is a 7-step wizard. It collects your studio details and outputs your fully customized booking page code. Here is exactly what each step asks for.
Studio name, your name, location, state code, session fee amount and link, and your sales tax configuration.
One card per collection. Name, image investment price, PIF payment link, PIF+tax link, and whether it is plan-eligible.
Booking window, minimum installment amount, plan threshold, which plan types you offer, and your PIF deadline before session day.
A rolling 18-month calendar. Click the months you are currently booking. Clients can only choose from what you select.
Optional. Add active discount codes -- fixed dollar or percentage. You can always add more directly in the code later.
Full GHL walkthrough built into the wizard. Custom field table, payment link instructions, and where to paste your webhook URL.
Return to the generator within 21 days, update your answers, and regenerate. Your 21-day save resets every time you generate. Download the new file and re-upload it to wherever it is hosted.
Open your HTML file in any text editor. Near the very top, find the section labeled // ── STUDIO CONFIG. Change the values inside that section, save, and re-upload. You are not writing code -- just changing numbers and text inside a clearly labeled block.
collections. Change the price: value. Save and re-upload.availableMonths. Add or remove month strings. Each must be quoted, separated by commas.promoCodes. Add a new code or set active: false to disable without deleting.pifLink inside each collection and paste the new URL over the old one.Check every single one of these before your booking page goes live.