Case study · Web app

Moodica

An online therapy platform that matches clients with the right psychologist or psychiatrist.

Someone looking for therapy faces a long list of specialists and no way to tell who fits their problem, and booking, paying and meeting usually happen in three different places.

Moodica puts the questionnaire, the match, the appointment, the payment and the video session in one platform, built around data protection. It is still in development and not yet open to the public.

  • 700+ automated unit, integration and interface tests
  • 3 user roles: client, specialist, administrator
Year
2026
Role
Developer, graduation project
Built with
  • C#
  • ASP.NET Core MVC
  • Entity Framework Core
  • PostgreSQL
  • SignalR
  • Docker

01

The challenge

The data is among the most sensitive there is: a client’s answers about their mental health. The platform has to protect it by design, keep specialists’ credentials verified and never present a questionnaire result as a diagnosis.

On top of that the parts depend on each other: a booking must never double-book a specialist, a payment must match an appointment, and a video call must only open for the right two people at the right time.

Constraints

  • Personal data must follow KVKK, Turkey’s data protection law
  • Online therapy has legal conditions that are still being worked through before launch

02

My part

  1. Built the ASP.NET Core MVC application with Entity Framework Core on PostgreSQL, packaged with Docker.

  2. Wrote two-step verification, role-based authorisation and encrypted storage of questionnaire answers.

  3. Built the matching from a short questionnaire, plus a demo mode with eight sample specialists and five client scenarios.

  4. Built the appointment calendar, online payment and live video sessions with SignalR.

  5. Wrote more than 700 automated tests, including integration tests that run against a real PostgreSQL in Docker, and set up CI on GitHub Actions.

03

Key decisions

  1. The platform never diagnoses

    Chose
    The questionnaire only screens and routes; assessment and treatment always stay with the specialist.
    Why
    It keeps the product honest and inside what software may claim, and it shapes every screen’s wording.
  2. Let the database prevent double bookings

    Chose
    Appointment times are stored in UTC and a database rule rejects overlapping bookings.
    Why
    Application code can race under load or time zones; a rule in the database cannot be bypassed.
  3. Test against a real database

    Chose
    Integration tests start PostgreSQL in Docker and call the app over HTTP.
    Why
    Authorisation, two-step verification and consent flows only prove themselves end to end, and mocks would have hidden database behaviour.

04

Results

Most of the platform works end to end: the questionnaire and matching, booking and cancellation rules, e-mail reminders, post-session feedback and a sandbox payment with refund. Two people have also joined a live video call over the internet.

It is not public yet. Before launch the remaining work is legal (what an online therapy service must be licensed as) and operational (hosting and a TURN server for difficult networks). The source is on GitHub, in a repository that stays private for now.

Have a problem like this one?

Tell me what you are working on and I will get back to you.

kilichalit103@gmail.com
Next case study Yatırım Aklı An AI-assisted portfolio tracker that explains what the numbers mean.