All case studies

A panel for collecting recurring fees at a law firm

The life of one fee in the firm’s panel, with sample data.

A private panel for setting up monthly fees with a start and end date, connected to a payment gateway. Each fee is charged automatically, failed payments are retried and the subscription ends on its date.

Client
Law firm
In use since
February 2026
Tools
Next.js, PostgreSQL, Prisma, Docker

Client work, published without the client’s name.

Get in touch

What happens each month

Each notification from the gateway updates the fee’s status in the panel on its own. Sample data.

A moment in the fee’s life

Gateway25 February

Subscription created

Payment link sent by email to marc.puig@example.com

Your panelMarc Puig Vidal

Pending

Amount
€45 a month
First charge
1 March
End
31 December

Gateway1 March

Payment received

€45, the fee’s first charge.

Your panelMarc Puig Vidal

Active

Amount
€45 a month
March charge
Paid
Next charge
1 April

Gateway1 April

Payment failed

The client’s bank declined the €45 charge.

Your panelMarc Puig Vidal

Active

Amount
€45 a month
April charge
Payment failed
Retry
4 April

Gateway4 April

Payment received

€45, on the scheduled retry.

Your panelMarc Puig Vidal

Active

Amount
€45 a month
April charge
Paid
Next charge
1 May

Gateway31 December

Subscription cancelled

It reached its end date.

Your panelMarc Puig Vidal

Ended

Amount
€45 a month
Last charge
1 December
Next charge
None

What it looks like in the panel

Real captures of the panel, with sample data.

The panel's fee list with a pending fee's menu open, offering to resend the payment link by email, SMS or WhatsApp
The payment link goes out by email, SMS or WhatsApp (panel in Spanish).
The panel's search box with “marc.puig” typed in and a single result, a cancelled fee of 45 euros a month from 1 October 2025 to 30 September 2026
A fee ended on its end date (panel in Spanish).

The brief

An internal web tool to charge the firm's clients monthly fees that start and end on a set date, without creating each payment by hand.

What I built

It is a single screen: you create a fee on the left and see all of them, with their status, on the right.

New subscription form: name, email, monthly amount, phone, delivery method and start and end dates
The sign-up form (in Spanish), with sample data.
Detail of the fee list: client, amount, status and start and end dates of each fee
The fee list (in Spanish), with sample data.
  • To set up a fee you only need the name, email, monthly amount, and start and end dates. The panel creates the subscription in the payment gateway and the client receives the payment link by email, SMS or WhatsApp.
  • The subscription ends by itself on the end date. If it starts later, nothing is charged until that day.
  • If a payment fails, it is retried automatically.
  • Each fee's status (pending, active or cancelled) updates itself from the gateway's notifications.

A search of its own

Type part of the name, email, phone number or ID and the client's fee appears, with its status and dates.

The panel's search box with “marc.puig” typed in and a single result: an active fee of 45 euros a month
Searching for a client by email, with sample data.

What changed for the firm

Fees are no longer created or collected by hand: each one is set up once, with its start and end dates, and every month's charge goes out on its own. If a charge fails it is retried without anyone having to notice, and the status of each fee updates from the payment gateway's notifications. When a subscription reaches its end date it stops by itself. Finding a fee takes typing part of the client's name or email.

The contract with the firm does not allow publishing figures about its business, so this case describes the work and not its results.

After delivery

I host it on a private server, with backups, monitoring and up-to-date certificates.

Do you still charge recurring client fees by hand?