Skip to content

Deposits, reminders, and reports ​

ShootCal keeps three light "business" features with your appointments. The deposit marker, reminder system, and booking-count report do not store dollar amounts. Deposit state is read straight off the stored ShootCal appointment, so every surface agrees on which days are truly booked. The web app also has a separate invoice and manual-payment ledger; invoice amounts never get written into the appointment or inferred from its deposit marker.

Deposit tracking is a simple paid / not-paid switch on a session. When you mark a session's deposit as received, the day turns green; mark it not received and it turns red. That marker is saved on the stored ShootCal appointment, so the web app on your computer, your iPhone, and your public availability all agree on which days are truly booked. The marker stays in ShootCal and is not copied to a connected calendar. Clients never see the marker: your public booking page only ever shows open or booked days.

Client reminder emails are optional and turned on per session type. When you switch reminders on for, say, "Family Session," ShootCal sends the client a friendly reminder a set number of days before the shoot. The email sends through your account's email delivery (ShootCal's own mail, or Gmail sending for existing accounts), so to the client it just looks like you wrote it. A background job checks hourly and sends each booking at most one reminder, only during daytime hours.

Reports has two independent parts. The longstanding booking dashboard remains counts-only: bookings this month, this year, and all-time; a breakdown by session type; a last-12-months trend; and deposit markers received versus pending. Booking counts come from stored booking records and deposit counts come from your stored appointments. A separate Cash received section totals only confirmed ShootCal invoice payments and reversals by received date. It does not turn a session-type price or deposit marker into money.

The deposit flag: where it lives and how it is read ​

The deposit status is stored on the ShootCal appointment itself, set to either paid or unpaid. It is a business marker, not an amount, and it stays in ShootCal rather than being copied to a connected calendar.

Reading is deliberately identical across surfaces so web and native agree on which days are booked: every surface reads the marker from the same stored appointment. (Earlier ShootCal versions kept this flag on the Google event itself, with a green/red event color as a fallback; that storage was replaced by the appointment marker.)

Color coding: paid green, pending red ​

A session is colored by deposit state ONLY when the marker is explicitly set. Both surfaces track a "has a deposit status" signal, meaning the deposit marker is present (paid or unpaid). If it is present, the session shows green when paid and red when not; otherwise it falls back to the session's normal saved color.

Writing the deposit flag (the toggle) ​

All write paths update only the deposit marker on the stored appointment and leave everything else untouched. On the web, marking a deposit saves paid or unpaid on the appointment. Native uses the same kind of save for the Reports drill-down and the calendar/agenda toggle. The marker lives only on the ShootCal appointment; a connected calendar carries schedule fields, not deposit state. Titles are never modified. When a linked ShootCal invoice reaches its deposit amount through confirmed card or manual payments, it can mark that exact booking's deposit as received automatically. It writes the identical marker and nothing else; see Invoices, card payments, and manual payments.

Client reminder emails: the hourly job and exactly what triggers a send ​

A scheduled job runs once an hour and reads each approved web user's settings. Reminders are OPT-IN PER SESSION TYPE, not a global switch: a type emails only if its reminders are turned on, and a user with no type turned on is skipped entirely. The per-type setting is just on or off. The timing (1 day to 2 weeks before the session, default 1 day) and the optional reminder template are set once in your Studio defaults and apply to every type that has reminders on. The template supports merge fields like client name, session type, studio, date, time, and location; with no template a built-in friendly body is used.

The candidates are accepted bookings that have a real appointment, have not already been reminded, and start within the next 14 days (the widest possible window; each booking is then checked against your studio-default reminder window). A reminder goes out only when all of these are true:

  • The booking's session type has reminders turned on.
  • Now is inside your studio-default reminder window.
  • The session is at least 2 hours away, so a same-hour booking is never spammed.
  • It is daytime where you are, 8am to 8pm in your studio timezone.
  • The appointment still exists in your account (a fresh check confirms it; if that check fails, the whole run is skipped rather than risk a bad send).

The email is sent through the photographer's account email delivery (ShootCal's own mail, or Gmail sending for existing accounts) as a combined plain-text and HTML message.

Reminder guards: once-only, drift, and "booked inside the window" ​

A per-booking "reminder sent" marker makes the job email each booking at most once. The job also marks a booking "handled" WITHOUT emailing in three suppression cases: the booking was confirmed INSIDE its own reminder window, so the confirmation email already served as the reminder; the appointment no longer exists (drift from a deleted or cancelled appointment); or the client email is invalid. Importantly, if a type's reminders are simply OFF, the booking is left untouched (not marked sent) so turning the type on later while the session is still upcoming still lets the reminder go out. The job always exits cleanly so a single failure never spams the scheduler, and a send that throws or returns an error is left unmarked to retry next run.

Note: this client-facing email job is distinct from two other notification jobs, one that sends Web Push alerts to the photographer every few minutes, and one that sends the photographer a night-before email digest of their own day. Those notify YOU; only the client-reminder job emails the client.

Reports: booking counts, cash received, and the deposit scan ​

The booking summary is served to both the web app and native apps from one shared summary builder. Session-type prices remain free text and deposits remain a marker, so this summary is deliberately count-based. Booking counts combine two stored sources with the same shape (a session-type name plus a start time): accepted booking-page bookings, plus sessions discovered by the AI calendar scan. It produces this-month, this-year, and all-time totals, a by-type breakdown (each carrying the type's free-text price for display only, never summed), and a last-12-months trend. Month boundaries follow your studio timezone.

The web report separately reads the ShootCal invoice ledger. Its Cash received section totals confirmed Stripe card and manual payments plus partial or full refunds and reversals by their effective dates, separates the sales-tax portion, lists outstanding ShootCal invoice balances, and offers cash-received and invoice-list CSV exports. A calendar deposit flag never creates a cash entry. See Invoices, card payments, and manual payments for the exact boundaries.

Deposits in Reports are a separate count: a scan reads your stored appointments over a window from 60 days back to 180 days ahead and keeps only appointments whose deposit marker is explicitly set, then counts received vs pending (about a 240-day lookback in total). If the read fails the summary reports the deposit count as unavailable and the UI hides the deposit stats rather than showing a misleading 0/0. The drill-downs list the exact rows behind each number and reuse the same deposit scan and filters; because the summary and a drill-down are fetched separately, they can differ if your data changes between requests. Both the web and native deposit drills let you act in place: 'Mark received' flips the deposit to paid, and an X ('No deposit') quietly clears deposit tracking from a session that never took one, removing it from the pending list without emailing the client. Clearing changes only the ShootCal display status: the green/red deposit coloring is removed in ShootCal, a custom color you picked is left alone, and nothing is written to a connected calendar's colors. The native Reports screen renders the identical stats and drill-downs.

FAQ ​

Does my client ever see whether I have marked their deposit as paid? ​

No. The deposit marker lives on the stored ShootCal appointment and is never shown on your public booking page, which only ever displays open or booked days. It is only ever a paid/unpaid flag, never an amount, and ShootCal never writes it into the appointment title; titles are left untouched on every toggle path.

If I toggle a deposit, does it change the event color on my regular Google Calendar apps too? ​

In ShootCal, sessions with deposit tracking show green when paid and red when pending. Other events use the colors supplied by your connected calendar, or a neutral gray when no color is available. Calendar colors are read-only in ShootCal. Changing deposit status does not recolor the event in Google or Microsoft Calendar; your existing provider colors stay untouched.

Why are booking reports counts while Cash received shows money? ​

They use different sources on purpose. Session prices are still free text and a deposit is still just a received / not-received marker, never an amount. The booking report therefore counts sessions and deposit markers, and its per-type price is display-only. Cash received uses only the separate integer-cent invoice ledger: confirmed ShootCal invoice payments and reversals by received date. It is not revenue inferred from bookings and it is not profit, because expenses and other accounting adjustments are outside this feature.

What exactly has to be true for a client to get an automatic reminder email? ​

See the checklist in the reminder-emails section above. In short: the session type has reminders on, the booking is an accepted booking-page booking with a real appointment that hasn't been reminded yet, now is inside your reminder window, the session is at least 2 hours out, it's daytime (8am to 8pm) in your studio timezone, and the appointment still exists. The email is sent through your account's email delivery (ShootCal's own mail, or Gmail sending for existing accounts).

Will a client get reminded twice, or get a reminder for a session I already cancelled? ​

No to both. A per-booking "reminder sent" marker makes the hourly job send each booking at most once. For a cancelled or deleted appointment, the job re-checks your stored appointments each run; if the appointment is gone it marks the booking handled and never emails. It also suppresses (marks handled, no email) bookings that were confirmed inside their own reminder window, since your confirmation email already acted as the reminder.

What time window do the deposit counts in Reports actually cover? ​

The deposit scan reads your stored appointments from 60 days ago through 180 days ahead, an overall lookback of about 240 days. It counts only appointments whose deposit marker is explicitly set (received or pending) and ignores cancelled appointments. If the read fails, the summary reports the deposit count as unavailable and the UI hides the deposit stats entirely rather than showing a wrong 0 received / 0 pending.

Do hand-created calendar sessions show up in my booking counts, or only booking-page bookings? ​

Both, but from two different stored sources. Accepted bookings made through your booking page are tracked as booking requests. Sessions you created by hand on the calendar are picked up by the AI calendar scan and stored separately; the summary merges both into the booking counts so Reports reflects real session volume, not just booking-page activity. The scan-imported sessions have no client email and carry no deposit status in the booking detail list.

Is the deposit-paid confirmation email the same thing as the client reminder email? ​

No, they are separate features. The client REMINDER is the server job driven off accepted booking-page bookings. The deposit-received CONFIRMATION belongs to a linked ShootCal invoice: when confirmed payments on that invoice reach its deposit amount, ShootCal marks that exact booking's deposit received and, if the deposit confirmation option is on in web Settings (it is off by default), emails the client the confirmation through your account's email delivery, at most once. Marking a deposit by hand, on the web or in the native apps, only records the paid/unpaid status; it does not send an email or a form.