/en/ case-studies / Opiekly
// Case study · HealthTech / Care for loved ones

Opiekly — smart caregiver matching for families seeking support for their loved ones

Opiekly is an app that connects families looking for care for a loved one with caregivers nearby. In a few minutes the family describes their needs, and the algorithm points to the best-matched caregivers and enables quick, direct contact.

It solves problems on both sides:

  • Families avoid hours of browsing listings and manually comparing candidates, gaining more confidence in their choice through smart matching and detailed caregiver profiles with all the essential information.
  • Caregivers find new clients faster, with their profile matched to families whose needs fit their experience, qualifications, location and availability — without competing for attention among dozens of listings.

Technically, Opiekly runs in the browser as a Progressive Web App (PWA) — allowing installation on mobile devices.

See for yourself — try Opiekly
Product · Opiekly
philosopht role · End-to-end — creative partner, strategy, UX/UI, design, code, integrations, testing, deployment and maintenance
Stack · React 19 · NestJS 11 · PostgreSQL 17
Sector · HealthTech / Care for loved ones
2
Roles with a separate user flow
up to 90%
automated test coverage
32
Analytics events in a single catalog
01 · Context

About the project and the client#

Opiekly grew out of a real problem: the care market in Poland is fragmented — families look for a caregiver on classifieds portals, losing hours vetting potential caregivers, while trustworthy caregivers often have nowhere to present their experience and qualifications. The idea was presented by Maciej Olejniczak — an industry veteran, who knows the market inside out and observes the problem from both perspectives.
Product
Opiekly
web platform
Target audience
People seeking care and caregivers
people looking for care for themselves or a loved one · independent caregivers
philosopht role
End-to-end
creative partner, UI/UX, architecture, frontend, backend, integrations, testing, DevOps and infrastructure, analytics, copy and maintenance — the whole product
Stack
React 19 · NestJS 11 · PostgreSQL 17
pnpm monorepo
Platform
Web responsive + PWA
A web app built in line with RWD + Progressive Web App (PWA), so it feels and behaves like a native app
Main flows
Onboarding · Matching · Ranking · Contact
The path from registration, through matching and ranking, to direct contact with the caregiver.
Product goal

Build an intuitive product based on the Client's market knowledge that improves the in-home care market by effectively connecting people who need support with matched local caregivers nearby — in minutes, no middlemen, saving both sides time and providing a clear insight into the details of the matched profiles.

"
The collaboration was at a very high level from the very beginning. What I appreciate most is their professionalism, commitment and constant contact at every stage of the project. I always knew where the work stood, and every matter was discussed on an ongoing basis.

What impressed me most was the way they approached my ideas. I could freely present my vision, even when it wasn't fully refined, and they were able to translate it into concrete solutions and propose their own, often even better concepts.
MO
Maciej Olejniczak
Founder · Opiekly
Internal client satisfaction survey
02 · Challenges

What we tackled#

Opiekly operates in an area that combines sensitive data, two different types of users and a complex process of matching a caregiver to a family's needs. The key challenges were how to simplify a very complex choice of caregiver, how to handle data safely, and how to design one product for two different roles.

How do you compare criteria that aren't comparable?

A family looking for a caregiver weighs many things at once: the scope of help, experience, localization, availability and specific health needs. The challenge was that these criteria don't share a single "weight" — different users may value them differently. So we had to design a way of presenting results that doesn't oversimplify the decision.

Sensitive data in the app

The app works with data such as health information, address and contact details. The challenge was how to show the user enough to make a decision, while not exposing that data to unnecessary exposure or misuse.

When to create the account in the profile wizard?

Onboarding had to balance an easy start with the need to verify the user. Creating the account too early discouraged users; too late meant losing their data and any way to contact them. The goal was to find the moment when the user is already engaged, but not yet "overwhelmed" by formalities.

Two roles in one app

The app serves two different types of users: families and caregivers. The challenge was that, despite a shared system, both groups have different needs, different information and a different way of using the product — which had to fit into one coherent experience.

"
Throughout the collaboration I had the sense that for every issue we could find a solution together. I never once heard that something „can’t be done” — the team always looked for a way to achieve the intended result. Their professional approach mattered most to me and gave me great comfort and trust.
MO
Maciej Olejniczak
Founder · Opiekly
Internal client satisfaction survey

Got a similarly complex project? Let's talk.

Matching, roles, sensitive data and scale — we know how to wrap it all into one coherent product.

03 · Approach

How we approached the project#

Four principles we followed: the client first — a long-time industry practitioner, then code. Simple, effective design — many people in the target audience don't use complex apps day to day. Every stage delivered end-to-end — database, server and a working screen in the browser — so the client sees a working feature, not a sketch. We ask when we don't know — because we care about the best product, not a flashy demo.

01

Setting the direction together with the client — an industry practitioner

Before we started, together with a client who has many years of experience in the care industry, we refined the product scope: the lists of care tasks, medical conditions and the optimal user journey — from the family describing the need, through the caregiver's profile, to contact. We also agreed on a shared domain language, which significantly sped up the later stages.

02

Simplicity and intuitiveness of the interface

We design for users who often don't use apps day to day — on both the family and the caregiver side. That's why every screen has to be understandable right away. Instead of elaborate forms, we use short steps, plain language and one primary action per screen. Here simplicity isn't an aesthetic touch, but a condition for fitting the target audience.

03

A working feature at the end of every iteration

Every update is a working feature in the browser, not a static demo. The process runs on a short loop: presentation, feedback, iteration. Each module is delivered in full — together with the database, interface and tests. Integration happens continuously, without deferring it to later stages.

04

Ongoing client contact and early validation of assumptions

We treat the client's industry knowledge as our compass, so we stay in constant contact on an always-open line. We regularly present progress and validate assumptions before going deeper — reducing the risk of major changes at advanced stages, and quickly incorporating suggestions and discussing ideas.

04 · App screens

Key views#

05 · Outcome

What we delivered#

A web platform ready to launch, with the full flow for the family and the caregiver — covering registration, matching, secure accounts and contact between users.

Matching algorithm
Caregiver matching based on tasks, location, mobility and user preferences — so the results are as relevant as possible from the very first contact.
User profiles
Rich profiles based on real care needs (tasks, conditions, experience), designed together with industry expertise.
Two roles
One platform serving two types of users — the family and the caregiver — with separate paths and a tailored interface.
Smooth account wizard
A wizard that guides the user step by step, tailored to their role, with no unnecessary fields or collecting data "just in case".
Intuitive interface
An interface designed for non-technical people — short steps, plain language and the key action always within reach.
Analytics
An analytics and user-action monitoring system that surfaces problems in the flow and the places where users encounter difficulties — from the app's first day live.
"
I can wholeheartedly recommend this team to anyone looking for a partner who will not only build an app or write software, but also bring their own experience, knowledge and commitment as an invaluable asset to the project.
MO
Maciej Olejniczak
Founder · Opiekly
Internal client satisfaction survey

Want similar outcomes at your company?

Initial analysis and estimate within 48h. No obligations — the first step is always on us.

From here — technical deep dive
Section 06 is aimed at tech leads, CTOs and developers. If you've already seen the results — feel free to jump straight to the contact section ↓.
06 · Architecture and technical approach

Decisions that made the difference#

The technical decisions that shaped the system's quality the most. A modern but standard stack — no exotic dependencies, easy to maintain and audit.

Decision 01 · API contract with the backend

API generated from OpenAPI instead of hand-maintained contracts

NestJS generates the OpenAPI spec from controllers and DTOs, and the frontend consumes an automatically generated client (TypeScript, React Query, Zod). OpenAPI becomes the single source of truth.

A contract change in the backend immediately triggers a compile error in the frontend, eliminating type drift and runtime bugs.

Decision 02 · Matching algorithm on the SQL side

Matching logic moved into the database layer

The algorithm (filters, haversine distance, task coverage and ranking) runs in a single SQL query. The app receives an already-sorted result, with no extra processing in JS.

This removes data-transfer cost and keeps things scalable as the number of caregivers grows.

Decision 03 · Runtime error monitoring

Sentry as the source of truth for application stability

Sentry monitors runtime errors on the frontend and backend. It answers the stability question: what breaks, where in the stack, for how many users, in which version.

Source maps and a Sentry tunnel provide readable stack traces and bypass adblockers, so the error picture reflects the real user population.

Decision 04 · Product and behaviour analytics

PostHog as the measure of product usability

PostHog analyzes user behaviour and conversion in the product. It answers the usability question: which paths work, where users drop off, which features actually get used.

Shared event definitions live in a shared enum, which eliminates analytics drift between frontend, backend and dashboards.

Decision 05 · Context-based feedback

Feedback collected at points of real product interaction

Surveys fire after key actions (e.g. sending a request, revealing contact), instead of permanent widgets.

It runs in two modes: with consent (full PostHog integration) and without consent (anonymous events with no user identification and no way to link sessions).

Tech stack#

Library choices around the decisions above. Standard, well-maintained, no abandonment risk.

FRAMEWORK · NAVIGATION

React 19TanStack StartTanStack RouterVite

LANGUAGE

TypeScript

UI & STYLING

Tailwind CSS 4shadcn/uiRadix UILucide ReactSonner

STATE, DATA & CODEGEN

TanStack QueryTanStack FormKubb · OpenAPIZodky

BACKEND & DB

NestJS 11MikroORMPostgreSQL 17Kyselynestjs-zodsharp

AUTH · NOTIFICATIONS

JWT · httpOnly cookiesargon2Refresh rotationnodemailerReact EmailCORS · credentials

OBSERVABILITY & ANALYTICS

SentryPostHogSource mapsSession Replay (lazy)Sentry tunnelInsightsEvent enumSurvey triggersAnonymous fallback

INFRA & DEVOPS

pnpm monorepoDocker ComposeGitLab CI/CD

Environments and paths to production#

Four environments, each with a different trust scope. Build and deploy automated through GitLab CI/CD, image tags immutable per commit — a running image can never be accidentally overwritten.

01 · Local Local // audience philosopht team 02 · Dev Development // audience philosopht team 03 · Staging Pre-prod // audience client 04 · Prod Production // audience end users
Table of contents
  1. 01 Project context
  2. 02 Challenges
  3. 03 Approach
  4. 04 App screens
  5. 05 Results
  6. 06 Architecture & tech
  7. Contact
Ready when you are

Tell us what you need.

Have an idea for an app or need tech support? Write to us — we'll prepare an initial analysis and estimate within 48h.

Write to us
Office
philosopht Dawid Michota
ul. Świętokrzyska 41A
26-001 Wola Kopcowa, Poland
NIP 6573002241
Free consultation