Dashboard
Marketing idea of the day
Another idea →Upcoming sessions
Recently added
First things first — get set up 🤍
Optional layers — reach for these when you want them
Set your prices once — sessions, prints, albums, digital files, add-ons — then add them to any invoice from a dropdown instead of retyping.
Looking for your packages — the bundles a client picks when she books? Those live in Brand & settings → Session types & packages. Mark each one taxable or not, and set a default sales-tax rate that fills in automatically on new invoices.
The reason: cards you issue by hand and cards bought on your public page were being kept in two different places, and the balance checker only ever looked in one of them. So every hand-issued card failed, from the first one. Fixed — and your existing cards bring themselves across the next time you open Money → Gift cards, so there’s nothing for you to redo.
Also, for the embedded version: there’s now a tick-box that hides the logo and studio name. Your website already says who you are, so on your own page it read as the same thing three times over. The link you send people still introduces itself properly. (Thank you, Kristina, for both of these.) 🤍
It’s on your dashboard now: “Your clients picked their images”, with who chose, from which gallery, and how many. It sits there until you’ve dealt with it, alongside your signatures and deposits. Click through and it opens the gallery. Your bell rings at the same moment, and it now rings for a gallery being opened too — once a day per gallery, so a client flicking back and forth doesn’t fill it with herself. (Thank you, Heather, for asking — and Kristina, whose bell it rings.) 🤍
So that button was quietly sending everyone to the wrong place. It now says Products & pricing, which is what it opens, and there’s a proper Packages button beside it that takes you straight to your packages and highlights them when you land. There’s also a line on the Products page pointing the way, for anyone who arrives there looking. (Thank you, Heather — you clicked Packages and reasonably expected packages.) 🤍
One thing we left out on purpose. The bell will never ring for an email being opened. An “open” is a hidden image loading, and Apple Mail loads it by itself before your client has read a word — a bell ringing for those would be ringing at nobody, and within a week you’d stop trusting the ones that matter. You’ll still see Opened and Clicked on the email itself, where you can weigh it for yourself.
(Thank you, Kristina, who asked for this and showed us how the tools she came from handle it.) 🤍
Now a gallery comes down as a single zip folder named after the gallery — malin-family-2026.zip — with all the photos inside it, still numbered in order. Your client double-clicks it and has a folder with your gallery’s name on it, not a hundred loose files. One save instead of a hundred, so no permission prompts either.
You’ll see it collecting the photos, then preparing the folder. A large gallery takes a moment, and the wait happens before anything saves rather than during. (Thank you, Caryn — you tested it, told us it worked, and then asked the better question.) 🤍
The tracking was never missing. When Resend accepts an email it hands back a reference number, and we were throwing it away — so when it later reported an open, there was nothing to match it to. Now we keep it.
Please read this part before you rely on it. Clicked is certain: someone chose to click a link. Opened is not. An open is a hidden image loading, and Apple Mail fetches that image by itself before anyone reads a word — so for a client on an iPhone or a Mac, “Opened” can appear when they haven’t looked. Treat it as a good sign, not proof. Hover any of these and it’ll tell you the same thing. We’d rather you knew than have you make a decision on a number that quietly lies. (Thank you, Kristina, for asking — and Caryn, for saying why it matters: a quiet client who is reading everything is a reassuring thing to know about.) 🤍
Each photo is now collected properly before it’s saved, so they all arrive — named after the gallery and numbered in order: malin-family-2026-001.jpg, …-002.jpg, and so on, padded so they sort correctly in a folder. Single-photo downloads get the same treatment. It’s a little slower now, and worth it. Your browser may ask permission to save several files at once — that’s normal, say yes.
On the smaller dimensions: that’s a separate thing, fixed yesterday. Galleries used to store photos at 2000 pixels on the long edge and now keep 3200 — but only for photos uploaded since. The bigger originals of anything already in a gallery were never kept, so an older gallery needs re-uploading to come through at the new size. (Thank you, Caryn, who tested her own gallery before sending it to a client.) 🤍
When we taught inquiries to remember which brand they came to, the change stored that brand in the wrong format for the database column holding it. The database refused it, and the refusal came at the very first step — so every inquiry failed, not only the ones from studios running two brands. Anyone who filled in your form saw “we couldn’t send that just now” and their message was never written down. It’s fixed, and this time the fix was run against a real database before it came anywhere near you.
If you use an inquiry form, it’s worth a test. And if someone told you your form was broken, they were right, and it wasn’t your website.
So this can’t cost you a client again: an inquiry that can’t be saved now still gets emailed to you with everything the person wrote and a note to add them by hand. A problem at our end should cost you a tidy record, not somebody who was trying to book you. (Found by Mandie, testing her own form.) 🤍
Open any client and you’ll find “+ Add a second email or phone” under the first pair. It stays tucked away until you want it, so nothing gets busier for anyone who doesn’t. Both show on their profile. When you write an email yourself, the To line becomes a little chooser so you can send this one wherever it belongs — and the Mail and Gmail buttons follow your choice.
Anything automatic — invoices, reminders, workflow emails — always goes to the first address, so nothing quietly changes course on you. If the other one should really be the main one, there’s a Swap them link. (Thank you, Crystal.) 🤍
Until now there was a single slot length for your whole booking page. Our own setup instructions told you to “pick the days you’ll take calls and set a short slot length on them,” which simply wasn’t possible — the only place a shorter length existed was on one individual date at a time. Look for Length underneath each block of hours; leave it on default and nothing changes. A length on the block wins over one on a special date, which wins over your page default.
Fixed alongside it: changing a session type on a special date used to quietly reset that date’s own slot length, and a date that inherited your weekly hours forgot which session types they were for. (Thank you, Mandie — you told us this twice and you were right both times.) 🤍
This applies to photos you upload from now on. The bigger originals of anything already in a gallery were never kept, so older galleries stay as they are — if one really matters, re-upload it and it’ll come through at the new size. (Thank you, Abby, who compared the same files side by side and trusted her eyes.) 🤍
All three now email you as soon as someone comes in, with their name, email, phone, session type and their message. Reply straight to it — it goes to them, not to us. They’re already sitting in your Leads either way. (Thank you, Cynthia — you embedded your form, got your first inquiry, and had no idea it was there.) 🤍
The cruel part is where it sends you: the price looks wrong, so you go and check the price — and the price was right all along. Numbers can no longer be saved as a currency symbol, the field says plainly what belongs in it, and if yours already has one it will quietly right itself the moment you load MSB. Letters stay put, so A$, kr and CHF are all safe. (Thank you, Mandie — twice. Your second message is the one that found it, and I’d had it wrong until then.) 🤍
Two more found alongside it: your package prices on that page were printed with a hard-coded dollar sign no matter what currency your studio uses — so a studio in Australia or the UK saw the wrong money entirely. And if you’d chosen to call it a Retainer, the line under your title still said “deposit to book.” Both fixed. (Thank you, Mandie.) 🤍
Editing a mini now shows you that exact line, live, as you type: “What clients read under your title.” No more publishing to find out. (Thank you, Mandie — you went looking for a field that didn’t exist, and you were right that it should have.) 🤍
New dates now borrow the right hours. When you clicked a date to give it hours, it always came up 9 to 12 — so if you’d set three hours for a newborn day, every new date looked like it was copying that. It wasn’t really copying anything; 9 to 12 was just baked in, and it happens to be three hours. Now a date starts from your weekly hours for that weekday: click a Monday, get your Monday; click a Friday, get your Friday. Change one and your weekly pattern stays put.
The list stops piling up. The calendar is the manager now, so the panel underneath shows just the date you clicked instead of every date you’ve ever opened. There’s a Show all link when you want the full list back.
Save without closing. There’s now a Save that keeps you in the editor and a Save & close for when you’re done — so you’re not thrown out and left hunting for which contract you were on. And no, it wasn’t secretly auto-saving; it only ever saved when you clicked, which is exactly why this needed fixing.
Put them in your own order. Little up and down arrows on each contract in the list — arrange them the way you think of them, and that’s the order they stay in.
Bullets that actually bullet. They weren’t working because a line starting with * wasn’t being recognised — only dashes were. Now *, - and • all make a bullet, and indenting a line gives you a sub-bullet underneath.
Until today, a contract on a mini session was for show. Your client read it, typed her name, ticked agree, and booked — and none of it was saved. No signed name, no date, no record of what she’d agreed to. It looked signed on her screen and left nothing behind. That’s fixed: her name, the moment she signed, and a snapshot of the exact agreement are all kept on the booking now.
And second, the part that prompted this: you can now put {initials} anywhere in a mini contract — after a cancellation clause, beside a model release — and your client gets a box to initial in that spot. She can’t book until every one is filled, and your record shows what she initialled and where. It’s the same clause-by-clause signing your portal contracts already had; minis simply never got it.
An honest note: contracts “signed” on a mini before today captured nothing, and there’s no record for us to recover — this puts it right from here forward. 🤍
Your clients and your sessions already came out this way; your invoices were the one thing that didn’t, and that never sat right. This is your financial record, and it should be yours to carry wherever you need it — your accountant, your taxes, or simply your own peace of mind. (Prompted by Rachel, asking a fair question about moving her data around. 🤍)
They’d been there all along, just locked inside the details screen, so grabbing a link to paste into a post took three clicks and a hunt. Copy link tells you if the mini’s still a draft rather than handing you a link that opens for nobody. Preview opens your page in a new tab. Publish flips it live, and warns you first if there are no days left to book.
(Thank you, Kristina — who is currently finding bugs, answering everyone else’s questions, and still filing better feature requests than we write ourselves.) 🤍
It tells you the number first, and it won’t let you past without saying so. If your client has already been in and marked favourites, or left you a selection list, it says that too — those are her choices, not ours to quietly bin. (Thank you, Caryn. 🤍)
If you attached a questionnaire to a mini session, your booking page didn’t just look wrong — it died. No times, no packages, no pay button, just “We couldn’t load this page.” Your client couldn’t book. She had no way to tell you, and you had no way to know, because the preview you’d check is the very same page.
What happened: questions used to be plain lines of text. When we built the smarter questionnaires — the ones that know a date from a phone number — your booking page never learned the new shape and fell over the first time it met one. It had a guard meant to catch exactly this, and the guard let it through.
Fixed, and better than before: your questions now arrive as you built them. Ask for a date and she gets a date picker. Give her choices and she gets a list. Mark a question required and it says so.
(Thank you, Kristina — you wrote “Am I doing something wrong?” and the answer was no, never, not once. You’d found the biggest thing on the board.) 🤍
Here’s the honest shape of it. Your clients pay you — your own Stripe account, your money, never ours passing it along. That’s deliberate and it’s right. But it means Stripe announces the payment on your account, and we had only ever asked Stripe to tell us about payments on ours. So every card deposit any of you has ever taken was announced to an empty room. Not failing. Not erroring. Just never arriving. The only deposits ever marked paid in this app were the ones somebody ticked by hand.
None of you could have reported this, because from your side there was nothing to see — an invoice that says unpaid looks exactly like an invoice. (Thank you, Caryn — you found $100 sitting in Stripe that we’d never heard about, and you pushed until we looked properly.)
Two things worth knowing. It’s fixed going forward, and it fixes something else too: a studio whose Stripe had gone live could have her clients turned away at the pay step, because the message saying “she’s ready now” was going to the same empty room. And it doesn’t heal the past. A payment that was never announced can’t be announced again. If a client of yours has paid a deposit by card, open her mini and use Mark deposit paid, and her invoice will read right. If you’re not sure which, tell us and we’ll go through it with you rather than leave you guessing. 🤍
Open a gallery and drag a photograph where you want it. It saves as you go, and it’s the order your client sees. There’s an Order photos… drop-down beside Grid and Masonry too — filename A–Z or Z–A, newest or oldest first — for when you just want it sorted and not fussed over. On an iPad or a phone, where dragging doesn’t work, each photo has a ‹ and a › to nudge it along.
An honest word: our own “How do I…?” has been telling you to drag and drop your images since before it was possible. So this wasn’t a new idea — it was us describing a studio we hadn’t finished building, and then leaving you to wonder what you were doing wrong. You weren’t doing anything wrong. (Thank you, Caryn — asked on 13 July, and you bumped it because we’d gone quiet. 🤍)
Here’s why, and it’s an ugly one. The invoice step was the last line of the routine that syncs new bookings, and that routine gave up early whenever there was nothing new to sync. So an invoice could only ever be raised on the single pass that also created the session. Miss that moment — and everyone did — and it became unreachable. Forever. The booking was fine, the session was fine, the money was in Stripe, and the invoice simply could never exist.
Fixed. Open your Minis page and any missing invoices are raised now, with what’s paid and what’s due two weeks before the session. (Thank you, Caryn — you had two live clients and real money riding on this, and you were right to keep pushing.) 🤍
They now appear in filename order, the way you name them, and properly — so Scanlan_2 comes before Scanlan_10 instead of after it. Nothing for you to do; open a gallery and it’s right.
Sorting and drag-to-reorder are next; this was the part that was simply broken. (Thank you, Caryn — you told us on 13 July and you were right the whole time.) 🤍
It now says so, and links you straight there. (Thank you, Caryn, for saying you were lost — and Kristina, for answering her before we did. 🤍)
Now it does — carefully. If it’s plainly the same person, we use her file and tell you. But one email very often covers a whole family: a mum’s address on her newborn’s session and again on her toddler’s, or a maiden name beside a married one. Those are two real clients, and we don’t get to decide that for you — so if the name doesn’t match, we ask. (Thank you, Kristina — and sorry it sat for six days.) 🤍
It’s the same availability, just somewhere you can actually see it — and every one of your session-type chips works exactly as before. (Thank you, Kristina, for describing it so precisely — and Angela, who asked for the same thing.) 🤍
There’s a new May I share her images? on every client, and your questionnaire can fill it in for you — set Save answer to: Photo sharing permission on the question. It’s a free-text field on purpose, because “yes, but don’t mention names” is neither a yes nor a no, and that’s exactly the bit worth remembering.
Then the part that matters: when you go to share her gallery, she tells you herself — her answer, in her words, right there on the sharing switch. No hunting back through a form. (Thank you, Erin, for asking — and Kristina, the gallery half was your idea.) 🤍
It also stops fibbing about who’s receiving it. “All clients” never meant all your clients — only the ones filed under the brand you’re in. Your Clients and Leads pages have always said when someone’s hidden; this one didn’t, so it looked as though people had gone missing. It now names the brand and tells you how many are filed elsewhere. 🤍
If we ever failed to read a client’s saved favourites — and a gallery with an access code is exactly where that happens — we quietly took that to mean she had none, and then wrote that emptiness back over the real ones. She could lose every pick she’d made and be told “✓ 0 favorites saved” for her trouble. A tick, and a claim of success, for a deletion.
Three things fixed. If we can’t read her favourites, we no longer touch them — she’s told to try again. A page that hasn’t loaded her favourites yet can’t save an empty list over them. And when a save to the cloud fails, we say so instead of throwing the error away, which is why nobody ever found out.
Separately: when she sent her selections we filed them under exactly the capitals she typed, which could split one person into two on your list. Fixed too. (Thank you, Kristina — you weren’t doing it wrong, and this was worth finding.) 🤍
**like this**). It all renders cleanly in the email your readers open, so your words look as considered as your images. (Thank you, Caryn!) 🤍Note: this needs the updated invoice-checkout function deployed to work.
Log your business expenses and mileage as they happen, so end-of-year write-offs are already done. Everything stays private to your studio.
—
Flag a contact
Private — clients never see thisWent cold
leads & clients who went quietDo not book
private — clients never see thisWhen you open a session for a flagged contact, a heads-up appears automatically so you (or anyone on your team) catch it before booking — nothing relies on remembering.
Your scouting library. Save the spots you shoot — address, notes, and reference photos for different seasons — so when you’re planning, it’s all in one place instead of in your head.
Plan your light. Enter a place and a date to see sunrise, sunset, golden hour, and blue hour \u2014 so you can book the session at the prettiest time of day.
Issue and track gift cards you sell — the balance updates as each one is redeemed. Perfect for cards sold in person, by phone, or through your own payment link. Letting clients buy one online and pay through the app is coming with payments.
Sell gift cards on your website
Give clients a page where they can buy a gift card themselves and pay by card. It goes straight to your Stripe, and the card activates the moment they’ve paid. They can check a balance there too.
Top referrers
Thank-you tracker
Where clients come from
Write once and send to the people already in your books — import a list, pick an audience, and the recipient list builds itself from your contacts.
Your lists
import & organize your audienceLists come from tags on your contacts. Import a list from Flodesk or any other tool and name it (like “Seniors” or “Children”), or open any contact and add a tag — then send straight to that list below.
Paste a whole list of emails…
Keep your list healthy
Remove every email that has bounced, failed, or reported spam — in one click. This protects your sender reputation so your good emails keep landing in inboxes.
Compose
# Heading, - bullet, or paste a link — it all formats beautifully in the email your readers get.Recent newsletters
drafts & scheduledA prep guide for every session type, in your brand voice. Write your own, or let AI draft a starting point — then turn on the ones you want. Auto-sending and PDF uploads arrive with the workflow + file-storage backend; the guide content you build here is ready for them.
Your session guides
tap a type to write or draft itBuild and AI-draft them now; sending them to clients arrives with the email backend. For now, “Email to a client” drops the questions into a ready email.
Apply a workflow to a session and every step lands in To-dos with the right dates. Email steps become a to-do with your draft ready — they'll send themselves once the email backend is live.
Inquiry / contact form
A simple “get in touch” form for new inquiries — just name, email, and a message, no dates or session picking. Everyone who fills it out lands right here in your Leads as an Inquiry (and starts your matching lead workflow). Paste it anywhere on your website.
Model Call signup form
embedPaste this on your website (Squarespace, Wix, Showit…). Everyone who applies lands right here in your Leads, tagged Model Call — with their session type, dates & details. If they tick the box, they also join your newsletter list. It’s a clean, script-free embed, so it won’t choke your site builder.
Launch waitlist form
A “notify me at launch” form with a newsletter opt-in — perfect for a coming-soon page. Sign-ups land in your Leads (tagged Launch waitlist) and join your newsletter.
Model Call submissions
Every model call application that comes in — with their answers, photo & details — lands right here, newest first. Nothing hides. 🤍
Set up a mini-session day, add bookable time slots, publish, and share the link. Clients grab an open time and it locks instantly — no double-booking. Every booking drops a client and session into your studio automatically.
Requests
Studio details
Logo
Brand voice
Session types
The types you can choose when creating a session — one per line. Delete any you don't offer and add your own.
One per line. These are the choices in How did they find you? on a client’s profile, and what your Leads page counts. Add your referral partners by name — a midwife, a hospital, an agency, another studio — so you can see exactly who’s sending you work, not just “Referral”. 🤍
Give each session type its own colour, then flip on “Colour by type” on the Calendar.
Brand colors
Brand keywords
Client-facing
Calendar sync
Photos are optimized to a crisp web size on upload, so galleries load fast and stay light on storage. Shareable client links (a clean, no-login view your clients open) and downloads + favorites are the next two phases.