← Back to lab
ProductIn developmentProject 10 / 14

PsyCRM

Practice management for one solo therapy practice in Romania: clients, sessions, encrypted notes, invoicing and intake forms. Organised around her day, not around the database.

At a glance

  • Four places, named for what she does
  • Confidentiality as product, not configuration
  • Localised, not translated

Ask for a walkthrough

The question

The open-source CRMs I looked at carry a sales pipeline you'd spend as long removing as building around, and none of them model an appointment or a clinical note. What would a tool look like if it started from a therapist's working day: the two minutes before someone sits down, and the ten minutes after they leave?

What I built

A practice app with clients, a calendar, session notes, prepaid packages, invoices with gap-free numbering, expenses, reports and intake forms with a public link. The home screen, Azi (today), lists the day's sessions in time order, each with what to walk in with: which session this is, when the last one was, credits left in a package, and a link to reread the last note.

Closing a session is one small sheet: did they come, how did they pay, and is the note written now or later. Paying on the spot issues the invoice already settled. The session screen puts the previous note and the client's context beside the editor, so before and after are one screen.

Inside

How it looks in use.

Role
Sole designer, developer and owner
Built with
Next.js, Postgres, Prisma, better-auth
Language
Romanian, with RON and Romanian invoicing
Status
Working, demo data only so far
Closing the 9 o'clock: she came, paid by card, the invoice is issued and settled.
Writing the note straight after, with the previous one beside it.
Azi: today's sessions in order, each with what to walk in with.
Azi: today's sessions in order, each with what to walk in with.
A session: the note editor, the previous note and the client's context on one screen.
A session: the note editor, the previous note and the client's context on one screen.
A client opens with where the work is; personal details stay closed until asked for.
A client opens with where the work is; personal details stay closed until asked for.
The week, bounded by her configured hours.
The week, bounded by her configured hours.
The intake form a new client fills in on their phone, from a private link.
The intake form a new client fills in on their phone, from a private link.

Up close

The details that carry it.

What's next, and what to reread
What's next, and what to rereadThe upcoming session is marked, with its number, the last visit and a link to the last note.
Closing a session in one sheet
Closing a session in one sheetAttendance, payment and the note in three questions, with the invoice handled for you.
The last note beside the new one
The last note beside the new oneNo tab switching in the minutes before someone walks in.
A client in one sentence
A client in one sentenceHow long, how often, what's next and what's owed, before any form fields.

Decisions that mattered

  • Four places, named for what she doesThe menu used to list every table in the database. Now it's Azi, Clienți, Calendar and Bani (money), with the rest tucked under "more".
  • Confidentiality as product, not configurationNotes are encrypted by the app before they reach the database, reading a note is itself logged, locked notes keep revisions, and a discretion mode masks names when the screen isn't private.
  • Localised, not translatedThe interface is Romanian on purpose, with RON formatting, Romanian dates, CUI and IBAN on invoices and the VAT exemption for psychotherapy cited on every one. One practice, one language, so there's no translation layer to edit around.

What I learned

The first version mirrored the data model, and it was complete and tiring. Reorganising it around a single day, with ordinary statuses in grey and colour kept for warnings, made the same features feel like half as much software.

Project notes

This project is still in development, shown here as work in progress. It keeps changing as I use it and learn from the people who do.

Something similar in mind?

Most of these started as a question I couldn't let go of. If you have one too, let's talk.

To MaxAn ideaWhat would you like to build?I've been wondering whether…I read every message myselfWrite →