Good Wishes
SESSION HELPER
No matches.

OVERVIEW

{{ ovTodayLabel }}
Needs confirmation {{ needsConfirmSummary }}
Players to confirm {{ playersConfirmSummary }}
ALL CLEAR
No sessions waiting on confirmation and no players left to book.
This week {{ ovWeekCount }} on the calendar
Mixing {{ ovMixCount }} on the bench
Outstanding invoices {{ ovInvTotalStr }} unpaid
Unreimbursed expenses {{ ovExpTotalStr }} fronted

CALENDAR

Viewing
+ New session

{{ cal.title }}

{{ ol.label }}
{{ wd.label }}
{{ b.name }}
{{ n.dayNum }}

ALL PROJECTS

{{ ol.label }}
Project
{{ dc.wd }}
{{ dc.md }}
{{ row.caret }}
{{ row.name }}
{{ row.rangeLabel }}
{{ row.bStatus }}
{{ row.name }}
{{ row.instrument }}
{{ cell.label }}
Each bar is a project across its dates. Click a row to unroll its players; double-click to open its booking grid.
No projects have dates set yet.

{{ selName }}

{{ selTypeLabel }} {{ selStatusLabel }} Pay direct
{{ selMetaLine }}
Days
Edit + Add players
{{ lg.tag }} {{ lg.label }}
Musician
{{ dc.wd }}
{{ dc.md }}
{{ row.label }} {{ row.count }}
{{ row.name }}
{{ row.bookedLabel }}
{{ row.name }} {{ row.bookedLabel }}
{{ cell.label }}
Click a cell to cycle: empty → available → booked → unavailable. Booked days count toward pay.
No one booked yet
Add the players for this project, then mark their days on the grid.
+ Add person
Start a project
A session, a live date, whatever you're tracking. Add it, book your players, keep the pay straight.
+ New session

{{ projViewTitle }}

+ New session + New project + New gig
{{ upcomingSectionLabel }} {{ upcomingSectionCount }}
All gigs · date order
{{ lg.tag }} {{ lg.label }}
No gigs to show.

{{ ga.name }}

{{ ga.statusLabel }}
{{ ga.metaLine }}
{{ ga.availSummary }}
Open →
Musician
{{ gc.wd }}
{{ gc.md }}
{{ row.label }} {{ row.count }}
{{ row.name }}
{{ row.bookedLabel }}
{{ row.name }} {{ row.bookedLabel }}
{{ cell.label }}
No players on this gig yet.
Click a cell to cycle: reach out → waiting → available → booked → unavailable.
{{ selDetailEyebrow }}

{{ selName }}

{{ selPhaseLabel }} Pay direct
{{ selMetaLine }}
{{ selDateEyebrow }}
{{ selDateBig }}
{{ selDateSub }}
{{ dchip.wd }} {{ dchip.dd }}
{{ selMoreDaysLabel }}
Invoice Edit session Repeat… {{ selEditLabel }} {{ selArchiveLabel }} Delete
{{ selStripEyebrow }} {{ selGroupName }} {{ selGroupSummary }}
Input sheet ↗
No sessions scheduled.
Project roster
{{ selNotes }}
Linked budget
{{ selLinkLabel }}
{{ selLinkApproved }}
Budget day rate
{{ selLinkRateStr }}
Apply to all players
Assigned budgets
+ Add player Days
{{ lg.tag }} {{ lg.label }}
Musician
{{ dc.wd }}
{{ dc.md }}
{{ row.label }} {{ row.count }}
{{ row.bookedLabel }}
{{ row.name }} {{ row.bookedLabel }}
{{ cell.label }}
Click a cell to cycle: reach out → waiting → available → booked → unavailable. Same grid as the Calendar tab.
Reimbursable expenses {{ selExpSyncLabel }} {{ selExpSummary }}
Costs you fronted that get paid back — lunch orders, parking, supplies. Check off when reimbursed.
Players & pay
+ Add person
Everyone works of {{ selMaxDays }} days
Day rate $ for all
Instrument
Player
Rate
Days / songs
Pick
Amount
Paid
$
/ song
{{ pt.amountStr }}
Booked on: {{ pt.daysLabel }}
Paid out
{{ selPaidStr }}
Still owed
{{ selOwedStr }}
No players on this project yet.
Not available — all dates
{{ np.category }}
{{ np.name }}
{{ projEmptyTitle }}
+ New project + New session + New gig

PLAYERS

+ Add player
{{ st.label }}
{{ st.value }}
{{ w.name }} {{ w.totalLabel }}
Hidden {{ inst }}
Conflict {{ person.conflictLabel }}
{{ person.contactLine }}
{{ person.notes }}
Owed · pay direct
{{ person.owedStr }}
{{ eng.projName }}
Pay direct Rental
{{ eng.sub }}
{{ eng.daysLabel }}
{{ eng.amount }}
{{ eng.paidLabel }}
{{ stc.md }} {{ stc.label }}
Not booked on any project yet.
No players match. Adjust your search or add someone new.

CLIENTS & ARTISTS

{{ cs.label }}
{{ cs.value }}
+ Add client
{{ cl.name }}
{{ cl.kindLabel }} Hidden {{ cl.summaryLine }}
Booked
{{ cl.bookedDaysStr }}
Value
{{ cl.valueStr }}
Budgets
{{ cl.contactLine }}
{{ cl.notes }}
Ongoing
Past & done
No projects linked yet. Set this name as the client on a project.
No clients yet
Add an artist or label, or set a client on a project — they'll show up here.
+ Add client

BUDGETS

{{ bPdfLabel }} Duplicate + New budget
{{ bt.totalFmt }}
Versions
{{ vt.totalFmt }}
★ = approved (syncs to projects)
Overall budget
$
Estimated total
{{ bTotalFmt }}
{{ bLeftLabel }}
{{ bLeftFmt }}
Syncs to project {{ sec.totalLabel }}: {{ sec.totalFmt }}
Day rate $
×days, each line
{{ ln.amountFmt }}
$ × {{ ln.amountFmt }}
Sec. budget $ {{ sec.budgetLeftFmt }} left
+ Add section + Non-recording expenses
Payment schedule
Scheduled {{ bPaySumFmt }} · Paid {{ bPaidFmt }} · Out {{ bOutstandingFmt }}
$

RENTALS

{{ rs.label }}
{{ rs.value }}
+ Add rental
Outside bookings that use the room but aren't your projects. They show on the calendar in teal and on the schedules of any engineer or assistant you assign — but stay out of Projects.
Rental
{{ rt.renter }}
{{ rt.dateLabel }} · {{ rt.daysStr }}
{{ rt.room }}
{{ rt.notes }}
Billing
Room {{ rt.roomChargeLabel }} {{ rt.roomChargeStr }}
Crew billed to client {{ rt.crewBilledStr }}
{{ f.label }} {{ f.amountStr }}
{{ m.label }} reimb {{ m.amountStr }}
{{ rt.outstandingStr }} unpaid Total billed {{ rt.billedStr }}
{{ c.name }}
{{ c.arrangeLabel }}
{{ c.roleLabel }}
{{ c.amountStr }}
{{ c.paidLabel }}
invoices client
Crew we pay {{ rt.totalStr }}
Crew
{{ d.wd }}
{{ d.md }}
{{ cr.name }}
{{ cr.roleLabel }}
{{ cell.label }}
Click a cell to cycle: reach out → waiting → available → booked → unavailable. Only booked days count toward pay.
No rentals yet
Add an outside booking — it'll show on the calendar and on your crew's schedules.
+ Add rental

INVOICES

{{ ist.label }}
{{ ist.value }}
Start one from a rental or a project — the lines fill in from what's already booked. Rentals bill as KnobWell LLC, everything else as Knoblertone LLC.
No invoices yet
Open a rental or a project and hit Invoice — it builds the lines for you, then downloads as a PDF.
…or pull in an existing session
Type
Status
Session type
Most sessions live inside a project. Leave it standing on its own if it isn't part of one (yet). Client and budget come from {{ pdGroupName }}.
{{ pdRateHint }}
Dates
{{ pdCal.title }}
{{ dw.l }}
Tap days to add or remove them — the date stretches below fill in automatically.
to
Leave the second date blank for a single day. Add a block for each separate stretch — e.g. 2 days in June, 3 in July.
{{ pdTimesLabel }}
to
Blank = all-day. With times set, the Google Calendar event runs at these hours.
Pay direct
I pay the players (not the artist or label)
Budget (from project): {{ pdGroupBudgetName }}
Cancel {{ pdSaveLabel }}
A project holds sessions — tracking, overdubs, mixing. It has no dates of its own; the calendar shows its sessions. Its sessions inherit the client and budget.
Cancel {{ gdSaveLabel }}
Copy the players
Same lineup on each copy, reset to “reach out”
{{ rdPreview }} Each copy is its own gig — edit or delete any of them without touching the others.
Cancel Create copies
Start every day as
{{ psStatusHint }}
{{ psInstLabel }}
+ Add to list
{{ psStagedLabel }}
{{ st.name }} {{ st.category }} {{ st.rate }}
Cancel {{ psSaveLabel }}
{{ pcName }}
{{ inst }}
{{ pcPhone }}
{{ pcEmail }}
No contact info yet — add it with Edit, or run Match contacts in Settings.
Text Call Email
{{ pcNotes }}
Instruments
{{ plHideLabel }}
Cancel Save player
{{ clHideLabel }} Delete
Cancel Save client
Billing as
{{ invEntityName }}
{{ invEntitySub }}
Balance due
{{ invBalStr }}
Line items
Description
Qty
Rate
Amount
{{ il.amountStr }}
No lines yet — add one below.
Subtotal {{ invSubStr }}
Status
Subtotal{{ invSubStr }}
Deposits / payments received−{{ invDepStr }}
Amount due {{ invBalStr }}
Delete
Cancel Download PDF Save invoice
Dates
to
Billing
Room charge
{{ rtRoomStr }}
{{ rtRoomLabel }}
Crew billed to client pay-direct only {{ rtCrewBilledStr }}
Additional fees
None — add tape, extra gear, overtime, anything billed on top of the room.
Reimbursements
None — costs you fronted that the renter pays back.
Total billed {{ rtBilledStr }}
Crew (day rate × rental days is tracked as their pay)
Leave pay direct on when you bill the client for them and pay them yourself. Switch it off if they invoice the client directly — then their rate stays out of your billing entirely.
{{ cp.name }} {{ cp.roleLabel }}
{{ cp.hint }}
Delete
Cancel Save rental

A download may have started automatically. If not (Safari, or embedded preview), copy the text below and paste it into a file named good-wishes-schedule.json, or use the download link.

{{ copyLabel }} Download file Done
Appearance
Google — calendar & contacts

Two-way Google Calendar sync, read-only overlays from your personal calendars, and contact matching. Needs a one-time Google Cloud setup — see GOOGLE_SETUP.md. Keys stay on this device.

Connect Google
Connected {{ gLastSyncLabel }}
Sync now Disconnect
Pick a projects calendar to start syncing — or Create a “Session Helper” calendar
Show in the background (read-only) Faint bands on the calendar grid — reference your personal calendars to dodge double-bookings.
Auto-sync
Push changes as you make them; pull from Google every few minutes.
Match contacts Fills player phone & email from Google Contacts (Google wins on conflicts).
Close matches — tick the right ones
Apply ticked matches

{{ gStatus }}

Cloud sync — all devices
{{ cloudStatusText }}

This build ships with the studio's sync keys — you shouldn't need this. Tap Use studio keys to restore them, or paste different ones to point at another project.

Use studio keys
Save keys

Already set up elsewhere? Paste the sync code from that browser instead of the keys.

Use code

Sign in with your email and password — the same pair on every device. First time here? Pick a password and tap Create login.

Sign in Create login Email me a link Change keys
Sync code {{ syncCodeText }}

{{ cloudMsg }}

Signed in as {{ cloudUser }}
{{ cloudLastSynced }}
Sign out
File backup — Chrome / Edge
{{ syncStatusText }}

Pick a JSON file inside your Google Drive Desktop folder. The app saves to it automatically on every change and loads it when you open — so any Mac running Drive stays in sync. Don't edit on two machines at once.

Open existing file… Create new file…

Reconnect to resume auto-sync — browsers ask for file permission again each session.

Reconnect Forget file
Disconnect

This browser can't auto-sync to a file. Use Chrome or Edge for that — or use manual Export / Import below.

Manual backup
Export JSON… Import JSON…
Wipe everything and start over. This syncs — it clears every signed-in device, not just this browser.
ASSISTANT Ask, or tell me to make a change
Try: “What does Jason have coming up?”, “Who still owes reach-outs?”, or “Book Dana as engineer on a rental for Cutter Films Aug 3–4 at $350/day.” I’ll always ask before changing anything.
{{ m.text }}
{{ m.error }}
Thinking…
Confirm this change
{{ asstPendingSummary }}