What’s new
We ship constantly. Here’s what’s changed recently.
Mini sessions book properly, and one link can show a set of sessions
Mini session dates are now honoured when clients book online
If you set up a package as a Mini Session with specific dates, your booking page wasn't using them — clients saw an ordinary open calendar and could pick any day, any time, and type in their own location. Your mini session dates now drive the booking page: clients choose from the dates you set, at the times inside your window, and the venue comes from the date they pick rather than being something they enter. Sold-out and past dates are shown but can't be chosen.
Mini session dates show as a list, not a calendar
Because mini session dates are often weeks or months apart, a calendar hid half of them behind a “next month” arrow. Clients now see every date you're offering at once, each with its venue, its times, and how many slots are left.
Name each mini session date, and keep the venue name
Each date can now carry its own name — “Piedmont Park Minis”, “High Museum Minis” — which is what clients see when choosing between them. Picking a venue also keeps the place's name alongside its address, instead of showing clients a bare postcode.
Groups: one link that shows a chosen set of sessions
Service Packages now have a Groups tab. Put your consultation calls in one group and this year's mini session dates in another, and each group gets its own shareable link showing only those sessions — so you can send someone straight to your mini session dates without them wading through everything else. A session can belong to more than one group, and your main booking page shows them as sections. When a season is over, hide the group and it disappears from your booking page while the sessions themselves stay untouched.
Rescheduling a mini session stays inside your dates
A client rescheduling a mini session could previously move it to any date at all. They now choose from the same mini session dates you're offering, with their current slot marked — or you can turn rescheduling off entirely and handle those by hand.
Duplicate session names and booking links are now caught
Two sessions sharing a name are impossible to tell apart in a list, and two sharing a booking link made that link ambiguous. Both are now refused when you save, with a message naming the session already using it. Duplicating a session suggests a free name and link rather than leaving you to fix a clash.
Discount codes, gift certificates, and invoice accuracy
Discount codes work when booking online again
The booking page had only one code box, and it only ever checked gift certificates — so a perfectly good discount code came back as “Invalid or expired gift certificate code”. Discount codes now have their own box, are checked against your own rules for dates and usage limits, and reduce what the client actually pays.
Tax is now charged on the discounted amount
When automatic tax calculation is switched on, a discount wasn't reducing the tax — a 50%-off code on a $100 session still charged tax on the full $100. Tax now follows the amount actually being paid, both when a client books and when you create an invoice by hand. Worth re-checking any recent discounted invoice.
Gift certificates could not be created or redeemed
Creating a gift certificate reported an error even though it had been saved, the Discounts & Gift Certificates page could go blank, and certificates couldn't be applied by a client at checkout. All three came from one missing field and are fixed. Redeeming one now also reduces its balance where you can see it, marks it partly or fully used, and records which booking it went toward. Viewing a certificate finally shows its code, ready to copy.
Contracts were showing clients raw placeholders
A contract presented during online booking arrived with its merge fields unfilled — clients were asked to sign a document reading “{{client.name}}”. Contracts are now filled in before the client sees them, using the same information as your proposals: name, address, session type and location, duration, price, retainer, tax and payment schedule. What the client signs is also saved as it appeared, so editing a template later never rewrites a contract someone already signed.
Bookings with nothing left to pay can be completed
If a discount or gift certificate covered the whole amount, the booking couldn't be finished — it either asked for card details for $0.00 or reported that online payments weren't available. A booking with nothing due now completes without a payment step. A gift certificate also can't be spent against a zero balance any more, so its value isn't burned for nothing.
Invoices now show the discount, the payment, and what is really left
On a discounted invoice the discount line was missing in several places, leaving a subtotal and total that didn't add up. After a part-payment the invoice kept showing the full amount as outstanding and still called itself paid. Invoices now show the discount and the code that produced it, what's been paid, the true balance due, and which scheduled payments are settled — the same way on your side, on the client's invoice, and in the client portal.
Opt-in checkboxes: naming, channels, and a clear current status
Give each opt-in a short name of your own
The wording a client reads is a full sentence — fine on a booking page, unwieldy as a list name or a column heading. Each opt-in can now carry a short name for your own use, like “Marketing email” or “SMS updates”, shown wherever you manage them. Renaming or rewording an opt-in never splits its history: the answers people have already given stay attached to it.
Say what each opt-in actually permits
Opt-ins aren't all about messaging — photo usage, a referral programme, bringing a pet. Each one now records whether it permits contact by email, by text message, or neither. Only the first two will ever feed a mailing list; the rest are recorded on the contact and left out. Opt-ins created before this stay unclassified until you choose, rather than being guessed at, and are excluded from mailing lists in the meantime.
A reminder about what belongs in a contract
Consent checkboxes are optional by design and never block a booking, so anyone who leaves one unticked books anyway. That makes them the wrong place for anything a client must agree to, like a liability or safety acknowledgement — that belongs in your contract, which is signed and can be required. The editor now says so where it's relevant.
A contact’s Consent section now leads with where they stand today
It used to list every answer a client had ever given, newest first, without saying which one counted — so someone who declined twice and later opted in showed three entries and no answer to the only question that matters: are they on the list? Each opt-in now shows its current status, the most recent answer winning, with the earlier answers kept in a history underneath so you can still see exactly when someone changed their mind.
Consent on a session read as opted in either way
The consent summary on a session showed a tick or a dash beneath a green header, so a declined checkbox looked much like an accepted one — the answers were recorded correctly, they just weren't presented clearly. It now says “Opted in” or “Declined” outright, matching the contact page.
Ask clients for marketing consent while they book
Write your own opt-in checkboxes on any service package
Service Packages now have a Consent Checkboxes section where you write the wording yourself — "Email me about future sessions", "Text me when mini-session dates open", whatever matches how you actually market. Clients see them while booking that package. They're always optional, unchecked by default, and never block a booking.
Every answer is recorded, including the declines
An answer is saved whether the client ticks the box or leaves it alone, so "they said no" and "they were never asked" never look the same in your records — which is the distinction that matters if you're ever asked to show why someone was on a marketing list. Each answer is stored with its date and with the exact wording the client saw, so editing or deleting a checkbox later never rewrites what past clients actually agreed to.
See what each client agreed to, and when
Contacts now have a Consent section listing every response newest first — the checkbox wording, which package it came from, the date, and a clear Opted in or Declined badge. The answers given during a particular booking also show on that session.
Split-payment invoices now show the correct amount after a partial payment or gift certificate
The next installment could show more than was actually owed
On an invoice with multiple scheduled payments, once a gift certificate or other partial payment had been applied toward an installment, the client's invoice page kept showing — and charging — that installment's full original amount instead of what was actually left to pay, even though the invoice's own balance-due total was correct. The next installment now reflects the true remaining amount, on the page and at checkout.
Gallery downloads restored, and big uploads no longer interrupt the app
Download buttons in client galleries did nothing
Clicking download on a photo in a client gallery produced no file and no error message — it simply appeared to do nothing. An update on August 24th changed the address your galleries used to request photos, and every download request quietly went nowhere. Downloads work again across all your galleries, and the address is now worked out automatically so this particular failure can't come back.
Clients couldn't sign in to the client portal
Signing in, resetting a password, or opening a client portal invitation link all failed with a "Not Found" message. This had the same cause as the gallery download problem — an update on August 24th changed the address those pages used to reach the server. Sign-in, password resets, and invitation links all work again.
Publishing a large batch could interrupt the app partway through
Uploading a lot of photos at once — especially from the Lightroom plugin, which sends them one at a time — could use more memory than the server had and force a restart mid-upload, leaving the rest of the batch unprocessed. Photos are now prepared using a small fraction of the memory they needed before, and the number being processed at once is limited across the whole app instead of per batch. A 200-photo publish now runs comfortably start to finish. Your original files are untouched, and the web and thumbnail versions look exactly as they did.
A clearer to-do list, and downloads that tell you when something goes wrong
Active Tasks now show which client and session they belong to
Tasks created by your workflows carry generic titles like "Send pre-session check-in email" — useful, until you have several sessions running and can't tell which one a task is about. Each task on your dashboard now shows the client and the session it belongs to, including the session date and time, so you can tell at a glance what needs doing and for whom. Tasks that aren't tied to a session are unchanged.
Failed gallery downloads now explain themselves
If a photo download failed, the download icon simply stopped spinning and nothing happened — leaving your client with no idea whether to wait, retry, or contact you. Failed downloads now show a short, plain-language message, and where you've set a studio contact email, it points your client to it.
Invoice fix: split payments showing to clients when they were turned off
Client invoices showed a payment schedule you never set
An invoice saved with Split Payments turned off and a custom due date could still show your client two installments — the default from the session's booking package — and hide the due date you'd set. The Pay button charged the full total regardless, so a client could select a $100 installment and then be asked for the whole balance. Your client's view now matches exactly what you set on the invoice.
Turning off Split Payments now clears the schedule for good
Unchecking Split Payments left the old schedule stored on the invoice behind the scenes, where it could resurface on your client's view. It's now cleared when you save. If an installment has already been paid, the schedule is left alone so your payment history is never lost.
Publish straight from Lightroom, and faster gallery uploads
Lightroom Classic plugin
Publish photos directly from Lightroom Classic into a Studio Lifesaver gallery — no browser upload needed. Create a new gallery or attach to one that already exists (like one created when you booked the session), right from Lightroom's Publish panel. Set it up from Settings → Integrations → Lightroom Plugin, which walks you through downloading the plugin, installing it, and generating a Connection Key — a revocable credential the plugin uses instead of your account password.
Link any gallery to a client and session, anytime
Creating a new gallery now starts by searching for a client, then choosing one of their sessions shown with dates — much easier to navigate than one long list of sessions that often share the same name. Already have a gallery that isn't linked yet (say, one created from Lightroom, or one you meant to attach at booking)? You can now link it to a client and session — or change an existing link — right from the gallery's Settings tab, or attach an existing gallery to a session from the session's own page.
Faster processing for large galleries
After you upload photos, Studio Lifesaver generates the web and thumbnail sizes your clients actually see. That now happens for multiple photos at once instead of strictly one at a time, meaningfully speeding up big uploads like a full wedding.
QuickBooks settings showing up for accounts that never connected QuickBooks
The category and account mapping sections — including a nag about unmapped categories — were appearing even if you'd never connected QuickBooks. That section is also now collapsed by default, so it doesn't push your other Integrations settings out of view.
Choosing your H1, routing, and mobile speed fixes
Choose which line of your Hero is the H1
If your Hero section has both an eyebrow and a main heading, you can now pick which one search engines treat as your page's H1 — independent of which one looks biggest. Model your title tag around your location and specialty while keeping your preferred line visually dominant, or leave it as-is.
Content pages could still fall back to the booking screen during a brief backend hiccup
A previous fix caught routing checks that timed out, but missed ones that came back with an outright error response — which can happen for a few seconds during routine backend restarts. Those were wrongly treated as a confirmed "this isn't a real page" answer, so pages like /about or /contact could briefly show the generic booking screen with a plain "Client Portal" title instead of your real content. Now treated the same safe way as a timeout: when we're not sure, your real page wins.
Hero background photo wasn't sized for mobile
Your homepage's main photo was always sending the full, largest version of the image — even to a phone on a slow connection. It now sends an appropriately-sized version based on screen size, the same way every other image on your site already does. This was the single biggest factor in a poor mobile speed score.
Faster connection to your photo storage
Fixed a mismatch that had your site preparing a fast connection to the wrong step of your photo delivery. It now connects early to the step that actually matters, shaving meaningful time off how quickly your images can start loading.
Smaller, more modern site code
Published sites were shipping a small amount of extra compatibility code for browser versions that are no longer in real use. Trimmed, for a slightly faster page load on every visit.
Business info, structured data, and site speed
Business Info: phone, address, and areas served
Add a phone number and address to your Site Settings — pulled from your existing Business Settings, so you never have to enter it twice — plus a new list of the cities and regions you serve. This now powers a clickable phone/email in your footer and richer info in your site's search-engine listing.
Richer search-engine listing info
Every published site now includes your business phone, address, and service areas in its structured data, alongside your name and description — helping search engines show more complete local-business results.
Faster mobile page loads
Your homepage's main photo now loads with priority instead of competing with everything else on the page, portfolio thumbnails request an appropriately-sized image instead of a full-resolution one, and fonts no longer block the page from rendering. Aimed squarely at mobile load times, where this matters most.
Footer phone number wasn't showing on most layouts
The footer's phone/email display only worked if you'd switched to the "Columns" footer layout — every other layout, including the default, had no way to show it at all. It now shows automatically on every layout as soon as a phone number is set.
Booking page link showed the wrong URL
If your booking page lives on its own domain or subdomain, Site Settings was showing an incorrect link reconstructed from your website's own domain instead of your real booking URL. Fixed.
Business address could run together without a space
If your saved address spans two lines (street, then city/state/zip), it could display — and appear in your site's search-engine listing — with no space between them, e.g. "...Cir NAtlanta" instead of "...Cir N, Atlanta". Fixed.
Some website pages could intermittently show the wrong content
A behind-the-scenes routing check could occasionally time out on a real content page (like /about), causing it to briefly show a generic booking screen instead of the page you built — with a plain "Client Portal" title instead of your real one. Made this fail safe: a page is only ever redirected when we're certain it isn't real content, never on an inconclusive check.
Website list could get stuck in an unrecoverable error loop
If your session needed refreshing while the Websites list was loading, dismissing the error could immediately trigger the same error again with no way out. Fixed at the source so this can't loop regardless of what caused the original error.
Clearer guidance for your homepage's main heading
The Hero section's "Heading" field now explains that it becomes your page's H1 — the single most SEO-important line of text — with a nudge to include what you do and where (e.g. "Atlanta Family Photographer") rather than just a stylistic line.
Website Builder sites are now built for search engines
Every page now ships with real, readable content
Website Builder pages used to send browsers an empty shell and fill it in with JavaScript afterward — fine for a visitor, invisible to a search engine. Every page (home, your content pages, portfolio categories, and blog posts) now renders its full content on the server, so Google and every other crawler see the same page a person does.
Automatic sitemap.xml for every published site
Every published website now has a live sitemap at yoursite.com/sitemap.xml, listing every published page and blog post. It updates itself automatically as you publish new pages — nothing to generate or maintain.
Some content pages were falling back to the booking screen
A routing bug could cause a real page on your site (like /contact) to show the legacy booking-request screen instead of the page you actually built. Fixed for custom domains and studiobook.us subdomains alike.