Next Session A look around — nothing is real and nothing saves Start Therapist Patient

This week

18 August 2026 · America/New_York
MON17·
TUE183
WED195
THU203
FRI214
SAT22·
SUN23·
15
hours this week
2
waiting on you
17
people
$18,270
outstanding

Tuesday 18 August

+ Add patient
11:00 L. Upcoming
Held
Not held
Move
13:00 B. Upcoming
Held
Not held
Move
15:00 P. Upcoming
Held
Not held
Move

Calendar

Everyone, past and present.
August 2026 ← Jul Today Sep →
MON
TUE
WED
THU
FRI
SAT
SUN
2709:00F.10:00H.14:00T.16:00K.
2811:00L.13:00B.
2909:00S.10:00C.11:00J.15:00N.
+2 more
3011:00M.17:00G.
3109:00D.13:00T.16:00M.17:00R.
1
2
309:00F.10:00H.14:00T.16:00K.
411:00L.13:00B.13:00N.
509:00S.10:00C.16:00J.16:00E.
+2 more
611:00M.17:00G.
709:00D.13:00T.16:00M.17:00R.
8
9
1009:00F.10:00H.14:00T.
1110:00K.11:00L.11:00E.13:00B.
1209:00S.10:00C.15:00N.17:00A.
1310:00J.11:00M.17:00G.
1409:00D.13:00T.16:00M.
1510:00R.
16
1709:00F.10:00H.14:00T.16:00K.
1811:00L.13:00B.15:00P.
1909:00S.10:00C.15:00N.16:00E.
+1 more
2010:00J.11:00M.17:00G.
2109:00D.13:00T.16:00M.17:00R.
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
Past hours are greyed, not hidden. A struck-through name is an hour that was not held. A red dot is someone waiting on an answer.
In the calendar you already use
Subscribe once and it stays current — when you move an hour here, it moves there.
Entries show initials and a time. Read-only, one way out — this app never gets access to your calendar. Settings has the address itself, and how to replace it.

People

17 active
+ Add someone
PersonStanding hourRhythmHeldBalance
A. Wednesday 17:00 weekly 49 $1,000
B. Tuesday 13:00 weekly 43 $1,000
C. Wednesday 10:00 weekly 47 $1,080
D. Friday 09:00 weekly 36 $1,080
E. Wednesday 16:00 weekly 47 $960
F. Monday 09:00 weekly 41 $900
G. Thursday 17:00 weekly 35 $1,080
H. Monday 10:00 weekly 42 $800
J. Thursday 10:00 weekly 51 $1,080
K. Monday 16:00 weekly 32 $750
L. Tuesday 11:00 weekly 43 $800
M. Friday 16:00, Thursday 11:00 twice weekly 87 $2,340
N. Wednesday 15:00 weekly 55 $720
P. Tuesday 15:00 fortnightly 21 $360
R. Friday 17:00 weekly 43 $1,080
S. Wednesday 09:00 weekly 41 $600
T. Monday 14:00, Friday 13:00 twice weekly 102 $2,160
V. Friday 15:00 weekly 0 $0
W. Thursday 09:00 weekly 30 $480
Initials in every list. Full names sit one click deeper, and never appear on a screen you might share.

Add someone

Initials, a day, a time, a fee.
Who
Initials
Full name — optional
Their email
Their hour
Day
Time
Rhythm
Fee
First session
Twice weekly is a second hour, added on their page once they exist.
Their way in
No email is set up yet, so the link appears for you to send however you already talk to them. Settings says how to turn email on.
Add them Cancel

Waiting on you

Every change is yours to answer.
N. · Wednesday 21 October, 15:00
Inside the window · no charge either way
“I have to travel that Thursday. Anything later in the week would help.”
Offer a time
Leave as is
H. · Monday 21 September, 10:00
Inside the window · no charge either way
“Something has come up at work that week — could we find another time?”
Offer a time
Leave as is
The app states the policy; you decide. The patient is told the outcome only — there is no thread here, and there never will be.

July 2026

What was charged, and what came in.
$14,480
charged in July
$18,270
outstanding overall
PersonHoursChargedStatus
A. 5 $800 $1,000 owing
B. 4 $800 $1,000 owing
C. 5 $900 $1,080 owing
D. 5 $900 $1,080 owing
E. 5 $800 $960 owing
F. 4 $720 $900 owing
G. 5 $900 $1,080 owing
H. 4 $640 $800 owing
J. 5 $900 $1,080 owing
K. 4 $600 $750 owing
L. 4 $640 $800 owing
M. 10 $1,800 $2,340 owing
N. 5 $600 $720 owing
P. 2 $360 $360 owing
R. 5 $900 $1,080 owing
S. 5 $600 $600 owing
T. 9 $1,620 $2,160 owing
W. 0 $0 $480 owing
No reminders are ever sent — chasing a patient about money is a clinical act, not a scheduled job.

Away

Breaks, across the whole caseload.
23 August — 6 SeptemberSummer break
Hours not held37
People affected17

Set a break

Set the break
Every affected hour across the whole caseload updates at once. Nothing is charged for a break, and no one is sent anything.

Settings

The frame, the link, and you.
The frame
Cancellation window
Usual fee
A late cancellation is
Timezone
Save the frame
A.'s policy: less than 48 hours' notice is charged in full.
That sentence is what your patients read when they ask to move an hour. The app only ever restates what you have already told them yourself.

How they pay

What to call it
Where it sends them
Save the link
We store a link and nothing else. No card, no bank, no money moving through here — the button on their Account tab opens Ivy Pay and this app never learns what happened.

You

Your name
Practice
Save
Sign-in addressa@example.com
Emailnot set up
Until email is set up, invitation and sign-in links appear on screen for you to send yourself — by text, by email, however you already talk to them. Nothing is lost by leaving it this way; docs/deploy.md has the ten minutes it takes if you want it.

Your own calendar

Every hour in your practice, in the calendar you already use.
http://localhost:3000/cal/t/840d8ff236da7a81fbc7f5e5199b295bd3c293d681782724.ics
Entries show initials and a time. Anyone holding this address can read that much, so treat it like a key — if it gets out, replace it.
Replace this address

The calendar you already keep

Secret iCal address — read only Save and check
In Google Calendar: Settings → your calendar → Integrate calendar → Secret address in iCal format. Apple and Outlook each have their own version of the same thing.
This is the one direction that needed care. The app reads that calendar and uses it for exactly two things: it stops offering you times you are not free for, and it says so when an hour you are about to move runs into something. It never creates a session from a calendar entry — an event called “R” at 11:00 might be a patient or a haircut, and a schedule that guesses is worse than one that asks. It cannot write to your calendar at all.

Between Sessions

The companion appnot yet
The writing app that sits between one hour and the next. When it is ready, one line in .env — BETWEEN_SESSIONS_URL — puts a way through on every patient's Account tab. Nothing appears until then, because a dead link in a product someone is trusting with their schedule is worse than no link.
The join is deliberately one-way. This app can tell that one when the next session is, because a date is the frame a journal entry sits in. Nothing written there ever comes back here — the moment it could, this stops being a schedule and becomes a clinical record.

A.

Wednesdays 17:00 · since 12 August 2025
$1,000
outstanding
49
hours held
3
charged, not held
Next
Wednesday 19 August, 17:00
Move it

Record a payment

Record

Their way in

Makes a link for client4@example.com.
Make an invitation

The standing hour

12 August 2025 — 11 May 2026$180 · Wednesday 17:00
12 May 2026 — now$200 · Wednesday 17:00
Never edited in place. A fee or time change closes one row and opens the next, so last July keeps last July's fee for ever.
Change Wednesday 17:00
Day
Time
Fee
From
Change it
Everything before that date keeps the old terms. Sessions already moved by hand stay where you put them.
Add another hour in the week
Day
Time
Fee
From
Add it
This is how twice weekly is set: two standing hours, each with its own day, time and fee.

Sessions

AUG 12 Held $200
AUG 5 Held $200
JUL 29 Held $200
JUL 21 Moved → 15:00 $200
JUL 15 Held $200
JUL 8 Held $200
JUL 1 Not held —
JUN 24 Held $200
JUN 17 Held $200
JUN 10 Held $200
JUN 3 Held $200
MAY 27 Held $200
MAY 20 Held $200
MAY 13 Held $200
MAY 6 Held $180
APR 29 Held $180
APR 22 Held $180
APR 15 Held $180

Statement

July 2026
Not sent
Tell them it's ready
One line and a link, no amount, no attachment. The statement itself lives behind their login and always will.

Details

Initials
Full name
Email
Save
Pause
Ended
Pausing stops future hours without touching a single thing that already happened. Nothing here is ever deleted.

B.

Tuesdays 13:00 · since 5 October 2025
$1,000
outstanding
43
hours held
1
charged, not held
Next
Tuesday 18 August, 13:00
Move it

Record a payment

Record

Their way in

Makes a link for client17@example.com.
Make an invitation

The standing hour

5 October 2025 — now$200 · Tuesday 13:00
Never edited in place. A fee or time change closes one row and opens the next, so last July keeps last July's fee for ever.
Change Tuesday 13:00
Day
Time
Fee
From
Change it
Everything before that date keeps the old terms. Sessions already moved by hand stay where you put them.
Add another hour in the week
Day
Time
Fee
From
Add it
This is how twice weekly is set: two standing hours, each with its own day, time and fee.

Sessions

AUG 18 Upcoming —
Held
Not held
AUG 11 Held $200
AUG 4 Not held $200
JUL 28 Held $200
JUL 21 Held $200
JUL 14 Held $200
JUL 7 Held $200
JUN 30 Held $200
JUN 23 Held $200
JUN 16 Held $200
JUN 9 Held $200
JUN 2 Held $200
MAY 26 Held $200
MAY 19 Held $200
MAY 12 Held $200
MAY 5 Held $200
APR 28 Not held —
APR 21 Held $200

Statement

July 2026
Not sent
Tell them it's ready
One line and a link, no amount, no attachment. The statement itself lives behind their login and always will.

Details

Initials
Full name
Email
Save
Pause
Ended
Pausing stops future hours without touching a single thing that already happened. Nothing here is ever deleted.

C.

Wednesdays 10:00 · since 13 September 2025
$1,080
outstanding
47
hours held
0
charged, not held
Next
Wednesday 19 August, 10:00
Move it

Record a payment

Record

Their way in

Makes a link for client11@example.com.
Make an invitation

The standing hour

13 September 2025 — now$180 · Wednesday 10:00
Never edited in place. A fee or time change closes one row and opens the next, so last July keeps last July's fee for ever.
Change Wednesday 10:00
Day
Time
Fee
From
Change it
Everything before that date keeps the old terms. Sessions already moved by hand stay where you put them.
Add another hour in the week
Day
Time
Fee
From
Add it
This is how twice weekly is set: two standing hours, each with its own day, time and fee.

Sessions

AUG 12 Held $180
AUG 5 Held $180
JUL 29 Held $180
JUL 22 Held $180
JUL 15 Held $180
JUL 8 Held $180
JUL 1 Held $180
JUN 24 Held $180
JUN 17 Held $180
JUN 10 Held $180
JUN 3 Held $180
MAY 27 Held $180
MAY 20 Held $180
MAY 13 Held $180
MAY 6 Held $180
APR 29 Held $180
APR 22 Held $180
APR 15 Held $180

Statement

July 2026
Not sent
Tell them it's ready
One line and a link, no amount, no attachment. The statement itself lives behind their login and always will.

Details

Initials
Full name
Email
Save
Pause
Ended
Pausing stops future hours without touching a single thing that already happened. Nothing here is ever deleted.

D.

Fridays 09:00 · since 12 November 2025
$1,080
outstanding
36
hours held
1
charged, not held
Next
Friday 21 August, 09:00
Move it

Record a payment

Record

Their way in

Makes a link for client7@example.com.
Make an invitation

The standing hour

12 November 2025 — 24 January 2026$160 · Friday 09:00
25 January 2026 — now$180 · Friday 09:00
Never edited in place. A fee or time change closes one row and opens the next, so last July keeps last July's fee for ever.
Change Friday 09:00
Day
Time
Fee
From
Change it
Everything before that date keeps the old terms. Sessions already moved by hand stay where you put them.
Add another hour in the week
Day
Time
Fee
From
Add it
This is how twice weekly is set: two standing hours, each with its own day, time and fee.

Sessions

AUG 14 Held $180
AUG 7 Held $180
JUL 31 Held $180
JUL 24 Held $180
JUL 17 Held $180
JUL 10 Held $180
JUL 3 Held $180
JUN 26 Held $180
JUN 19 Held $180
JUN 12 Held $180
JUN 5 Held $180
MAY 29 Held $180
MAY 22 Held $180
MAY 15 Not held · waived —
MAY 7 Moved → 10:00 $180
MAY 1 Held $180
APR 24 Held $180
APR 17 Held $180

Statement

July 2026
Not sent
Tell them it's ready
One line and a link, no amount, no attachment. The statement itself lives behind their login and always will.

Details

Initials
Full name
Email
Save
Pause
Ended
Pausing stops future hours without touching a single thing that already happened. Nothing here is ever deleted.

E.

Wednesdays 16:00 · since 2 September 2025
$960
outstanding
47
hours held
1
charged, not held
Next
Wednesday 19 August, 16:00
Move it

Record a payment

Record

Their way in

Makes a link for client12@example.com.
Make an invitation

The standing hour

2 September 2025 — now$160 · Wednesday 16:00
Never edited in place. A fee or time change closes one row and opens the next, so last July keeps last July's fee for ever.
Change Wednesday 16:00
Day
Time
Fee
From
Change it
Everything before that date keeps the old terms. Sessions already moved by hand stay where you put them.
Add another hour in the week
Day
Time
Fee
From
Add it
This is how twice weekly is set: two standing hours, each with its own day, time and fee.

Sessions

AUG 11 Moved → 11:00 $160
AUG 5 Held $160
JUL 29 Held $160
JUL 22 Held $160
JUL 15 Held $160
JUL 8 Held $160
JUL 1 Held $160
JUN 24 Held $160
JUN 17 Held $160
JUN 10 Not held —
JUN 3 Held $160
MAY 26 Moved → 09:00 $160
MAY 20 Held $160
MAY 13 Held $160
MAY 6 Held $160
APR 29 Held $160
APR 22 Held $160
APR 15 Held $160

Statement

July 2026
Not sent
Tell them it's ready
One line and a link, no amount, no attachment. The statement itself lives behind their login and always will.

Details

Initials
Full name
Email
Save
Pause
Ended
Pausing stops future hours without touching a single thing that already happened. Nothing here is ever deleted.

Move an hour

L. · one exception, not a new rule
Currently
Tuesday 18 August, 11:00
L. · $160 · this one hour only
Move it to
Move this hour Cancel
Nothing is sent. L.'s app will show the new time when they next open it — telling them is yours to do, and this will sit at the top of every screen until you say you have.

Calendar

Everyone, past and present.
July 2026 ← Jun Today Aug →
MON
TUE
WED
THU
FRI
SAT
SUN
2909:00F.10:00H.14:00T.16:00K.
3011:00L.13:00B.
109:00S.10:00C.15:00N.16:00E.
+1 more
210:00J.11:00M.17:00G.
309:00D.13:00T.16:00M.17:00R.
4
514:00T.
609:00F.10:00H.
709:00K.11:00L.13:00B.15:00P.
809:00S.10:00C.15:00N.16:00E.
+1 more
910:00J.11:00M.17:00G.
1009:00D.13:00T.16:00M.17:00R.
11
12
1309:00F.10:00H.14:00T.16:00K.
1411:00L.13:00B.
1509:00S.10:00C.15:00N.16:00E.
+1 more
1611:00M.17:00G.
1709:00D.11:00J.13:00T.16:00M.
1809:00R.
19
2009:00F.10:00H.14:00T.16:00K.
2111:00L.13:00B.15:00P.15:00A.
2209:00S.10:00C.15:00N.16:00E.
2310:00J.11:00M.17:00G.
2409:00D.13:00T.
2515:00M.16:00R.
26
2709:00F.10:00H.14:00T.16:00K.
2811:00L.13:00B.
2909:00S.10:00C.11:00J.15:00N.
+2 more
3011:00M.17:00G.
3109:00D.13:00T.16:00M.17:00R.
1
2
Past hours are greyed, not hidden. A struck-through name is an hour that was not held. A red dot is someone waiting on an answer.
In the calendar you already use
Subscribe once and it stays current — when you move an hour here, it moves there.
Entries show initials and a time. Read-only, one way out — this app never gets access to your calendar. Settings has the address itself, and how to replace it.

Calendar

Everyone, past and present.
September 2026 ← Aug Today Oct →
MON
TUE
WED
THU
FRI
SAT
SUN
31
1
2
3
4
5
6
709:00F.10:00H.14:00T.16:00K.
811:00L.13:00B.
909:00S.10:00C.15:00N.16:00E.
+1 more
1010:00J.11:00M.17:00G.
1109:00D.13:00T.16:00M.17:00R.
12
13
1409:00F.10:00H.14:00T.16:00K.
1511:00L.13:00B.15:00P.
1609:00S.10:00C.15:00N.16:00E.
+1 more
1710:00J.11:00M.17:00G.
1809:00D.13:00T.16:00M.17:00R.
19
20
2109:00F.10:00H. ·14:00T.16:00K.
2211:00L.13:00B.
2309:00S.10:00C.15:00N.16:00E.
+1 more
2410:00J.11:00M.17:00G.
2509:00D.13:00T.16:00M.17:00R.
26
27
2809:00F.10:00H.14:00T.16:00K.
2911:00L.13:00B.15:00P.
3009:00S.10:00C.15:00N.16:00E.
+1 more
110:00J.11:00M.17:00G.
209:00D.13:00T.16:00M.17:00R.
3
4
Past hours are greyed, not hidden. A struck-through name is an hour that was not held. A red dot is someone waiting on an answer.
In the calendar you already use
Subscribe once and it stays current — when you move an hour here, it moves there.
Entries show initials and a time. Read-only, one way out — this app never gets access to your calendar. Settings has the address itself, and how to replace it.
Next session
Thursday
20 August · 11:00 · in 2 days
Your hour is Fridays at 16:00, twice weekly.
Ask to move it
$2,340 due 31 August.
Already happened›
AUG 14Held$180
AUG 13Held$180
AUG 7Held$180
AUG 6Held$180
JUL 31Held$180
JUL 30Held$180
JUL 25Moved → 15:00$180
JUL 23Held$180
JUL 17Not held$180
JUL 16Held$180
JUL 10Held$180
JUL 9Held$180
JUL 3Held$180
JUL 2Held$180
August 2026 ← →
M
T
W
T
F
S
S
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2021
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
● COMING · ○ NOT HELD · GREY, ALREADY HELD
TAP AN UPCOMING DAY TO ASK TO MOVE IT.
Due 31 August
$2,340
10 sessions in July$1,800
Paid 1 July
Paid in total$13,500
Pay $2,340 ↗
Invoices and statements
July 2026
Open
Your sessions in your own calendar›
Updates by itself when something moves
http://localhost:3000/cal/c/4831b73e2a6dacbf7fd4531c07c6d7b835ee66416872fdf6.ics
If neither button works, copy that address and paste it into your calendar app as a subscription. Each entry says only “Session” and a time — nothing else, ever, in case someone else sees your calendar.
Sign out
Use this if you are on a shared computer or phone.
Payment happens outside this app.
We never see your card or your bank.
← Account

Statement

July 2026
A. — private practice
DateItemAmount
JUL 1Payment received — Venmo−$1,440
JUL 2Session$180
JUL 3Session$180
JUL 9Session$180
JUL 10Session$180
JUL 16Session$180
JUL 17Session not held$180
JUL 23Session$180
JUL 25Session$180
JUL 30Session$180
JUL 31Session$180
Brought forward$1,260
Charged$1,800
Paid
Balance$1,620
Dates and amounts only.
No diagnosis, no codes, no notes.
Thursday
20 August · 11:00
Ask to move Thursday
20 August, 11:00
I'd like to move it
A.'s policy: less than 48 hours' notice is charged in full.
Send
A. will reply. Nothing changes until then.
A. — private practice

A shared record of the hour.

You and each patient see the same thing: the next session, the past ones, and what is owed. Nothing clinical, and it moves no money.

Your week
Mark an hour held or not held in one tap.
The standing hour
One rule per person; exceptions: moved, missed, away.
What came in
You record what you were paid.
What it will not do
It never messages your patients, never chases money, and holds nothing clinical. Telling a patient their hour moved is yours to do — it just will not let you forget.
Take a look
Your patients see their own schedule and their own balance. Nobody else's.
A. — private practice

Your sessions with A., in one place.

A. set this up. Open it when you want to check something.

When your next session is
And every one before it.
A way to ask to move one
A. answers. Nothing changes until they do.
What is owed
Dates and amounts, nothing else.
What is not here
Nothing clinical, no card details, no reminders. It is a schedule, and it stays quiet.
See my sessions
Only you and A. can see any of this.

You'll always
know when.

Enter your email and we'll send a link. There is no password to remember.

Send me a link
Nothing medical is kept here.
No notes, no diagnosis, nothing clinical.
A look around — nothing here is real

Next Session

A shared record of a therapy schedule: the next session, the past ones, and what is owed. Nothing clinical, and it moves no money. By therapists, for therapists.

The therapist's side
The week, what was held, what came in.
The patient's side
Their next session, a way to ask to move it, and what they owe.
Every screen here came out of the running app. Buttons and forms do nothing —
this is a look around, not an account.