< cd ~/raba.pl

Business products

Sztuka Harmonii

Give a psychology practice one view of its day, even when patients book in four different places.

  • live
  • February 2026 - present
  • Solo: product, code, integrations

The problem

Every booking platform has its own calendar and data format. A useful internal system needed to show the whole schedule while supporting patients who still book through those existing channels.

My part

Responsible for the product and engineering work described here. The practice demo uses synthetic staff and patient records.

What this shows

I can translate a service business's day-to-day complexity into an integrated product, from its public front door to its internal operations.

Where it started

Sztuka Harmonii serves patients in Gdańsk, Gdynia and Sopot. Its public website, direct booking flow and internal practice panel are parts of the same service.

See it in action

Product walkthrough · 1:05 · 60 FPS · English narration
Sztuka Harmonii interface

English AI narration · Subtitles included · Play with sound, or read the transcript.

Read the video transcript

0:00 I built a connected system for a psychology practice, from its public website to daily operations.

0:09 Patients can browse in four languages.

0:13 A short matching flow helps patients find a specialist and an available appointment.

0:27 Behind the website, staff manage the practice in one panel. This recording uses synthetic data.

0:41 Visits from four booking platforms come together in one calendar.

0:49 That shared calendar also powers occupancy, returning-patient and revenue reports.

0:56 The result is a connected workflow, with patient information kept out of this demo.

The decisions behind the product

Start with one shared calendar

I normalized visits from Booksy, ZnanyLekarz, RankingLekarzy and TwójPsycholog into a common calendar. Two providers connect through APIs; the other two use exported files, so the product works with the access actually available.

Connect discovery to booking

I built the four-language public site and a booking widget with a seven-question match, a search by city and available time, and self-service cancellation and rescheduling.

Build operations around the same data

The panel uses the combined calendar for schedules, billing and statistics. Occupancy, returning patients and unpaid visits come from that shared view, with permissions defined for six staff roles.

What came out of the work

Four sources, one working view

The practice panel brings visits from four booking platforms into one grid by week and specialist. Staff can follow a booking through the schedule, statistics and billing without a separate manual analytics import.

A growing search presence

Google recorded 7,278 search clicks across April to September 2026. Monthly clicks went from 806 in April to 2,392 in September. These are domain-level search results, including subdomains.

  • 96confirmed online appointment bookings73 distinct phone contacts · 16 July - 8 Oct 2026 · internal test records excluded
  • 32contacts joining group-session waitlists38 submissions · 5 Aug - 8 Oct 2026 · internal test records excluded
  • 22group-waitlist contacts referred by Google27 submissions · through 8 Oct 2026 · no captured paid campaign tag
  • Top 4average Google position for an attachment-style articleAverage position 3.99 · 368 search clicks · 7 Sept - 4 Oct 2026
  • 37blog pages averaging Google's top 10 positionsAverage position ≤10 and at least 100 impressions · 7 Sept - 4 Oct 2026
  • 4booking platforms normalized into one calendarChecked 6 Oct 2026
  • 7,278Google search clicks in 6 monthsGoogle Search Console · 1 Apr - 30 Sept 2026
  • +196.8%Monthly search click growthSept 2026 vs Apr 2026

Search metrics use the scope shown with each result. Search position is an average across searches.

Traffic over time

Google Search Console

Google search clicks

+196.8% · Sept vs Apr 2026

Domain property: sztukaharmonii.pl (all subdomains)

Latest month
2,3921 Sept - 30 Sept 2026
First month
8061 Apr - 30 Apr 2026
Google search clicks per month, 1 Apr to 30 Sept 2026Google Search Console. Domain property: sztukaharmonii.pl (all subdomains). Monthly clicks. 1 Apr: 806; 1 May: 912; 1 Jun: 766; 1 Jul: 847; 1 Aug: 1,555; 1 Sept: 2,392. Vertical axis starts at zero.01.3k2.5k1 Apr - 30 Apr 2026: 806 clicks1 May - 31 May 2026: 912 clicks1 Jun - 30 Jun 2026: 766 clicks1 Jul - 31 Jul 2026: 847 clicks1 Aug - 31 Aug 2026: 1,555 clicks1 Sept - 30 Sept 2026: 2,392 clicksAprMayJunJulAugSept
6 complete months · 1 Apr - 30 Sept 2026 · Download chartFirst month Latest month
Source, methodology and monthly data

Open Google Search Console report · Checked 8 Oct 2026

Domain property: sztukaharmonii.pl (all subdomains). Provider timezone: America/Los_Angeles.

  • Six complete calendar months: 1 April to 30 September 2026. Current is September; comparison baseline is April. Both comparison months have 30 days. This is not a comparison against the preceding six months.
  • Final web-search data, all countries and devices, America/Los_Angeles reporting timezone. Search clicks are not website visits or unique visitors.
  • Domain properties include all subdomains with property aggregation. Documentation pages retain exact page filters from the preceding evidence collection and measure documentation interest, not adoption.
  • Monthly chart values and the six-month total are reconciled with independently queried totals.
  • The percentage, where shown, compares September 2026 with April 2026, the last and first complete months of this window.
Complete monthly totals
MonthGoogle search clicks
1 Apr - 30 Apr 2026806
1 May - 31 May 2026912
1 Jun - 30 Jun 2026766
1 Jul - 31 Jul 2026847
1 Aug - 31 Aug 20261,555
1 Sept - 30 Sept 20262,392
PostHog recorded activity5,886 pageviews in 28 days

sztukaharmonii.pl and www.sztukaharmonii.pl only · UTC

Recorded activity is affected by consent, blockers, tracking gaps and internal traffic.

Recorded totals, separate from search data
Metric7 Sept - 4 Oct 202610 Aug - 6 Sept 2026
Recorded pageviews5,8865,135
Recorded sessions3,2942,912

Inside the implementation

Explore the features, architecture and quality checks

What I built

  • A public site in Polish, English, Ukrainian and German (next-intl), with booking that needs no prepayment
  • A booking widget at zapisy.sztukaharmonii.pl: a 7-question match, a search by city and free slots, and self-service cancel and reschedule
  • An internal panel with 44 sections: calendar, patients, schedules, tasks, billing, statistics and integrations
  • A calendar that normalizes visits from four platforms into one grid: API adapters for Booksy and ZnanyLekarz (Docplanner), exported files for RankingLekarzy and TwójPsycholog
  • Statistics computed from that calendar with no manual import: hourly occupancy, weekly rhythm, returning patients, revenue
  • Role-based access for six roles, from owner to intern, defined in one policy module

How it works

  1. PatientBooks on the site, in the widget, or on one of four booking platforms.
  2. Booking widgetA 7-question match or a search by city narrows the free slots.
  3. Sync cycleAPI adapters pull Booksy and ZnanyLekarz; RankingLekarzy and TwójPsycholog arrive as exports.
  4. One calendarThe panel merges every visit into one grid per week and specialist.
  5. Stats and billingOccupancy, returns, revenue and unpaid visits come from that grid.

Quality and reliability

  • The offline acceptance test starts the Next server with a preload that wraps net.Socket.connect, so any outbound connection is refused and logged; PGlite keeps the database in-process
  • Patients appear in the panel only as keys such as p-118, never by name

Technology

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • next-intl
  • Drizzle
  • PostgreSQL
  • PGlite
  • Zod
  • Vitest
  • Playwright
  • Sentry
  • Vercel

Explore another problem I worked on

>_ Your next project

Liked what you saw?
Let’s get in touch!

Have an idea, a challenge, or a role in mind? I’d love to hear about it.

Let’s talk

>_ Start a conversation

Liked what you saw?
Let’s get in touch!

Tell me what you’re working on. Let’s see how I can help.

Email mepatryk@raba.pl
Send a message