OT
Back to work

Case study

SerieMatch

A fullstack series discovery app that helps users find recommendations based on their tastes, platforms, viewing mood and personal preferences.

Project focus
Next.jsNestJSPrismaPostgreSQLMeilisearchTMDB APITypeScriptZodTailwind CSSshadcn/ui

What I built

Key product features

Account creation and authentication
Preference questionnaire based on tastes, platforms and viewing mood
Searchable series catalogue powered by Meilisearch
Personal library with to-watch, watched and not-interested statuses
Scoring-based recommendation system influenced by user ratings

Technical approach

Tech decisions

  • Use a scoring algorithm instead of AI to keep recommendations explainable, predictable and easier to iterate on.
  • Use thumbs-based ratings to increase or decrease recommendation scores based on user feedback.
  • Use Meilisearch to provide fast catalogue search and filtering by genre, mood and platform.
  • Use the TMDB API to import and enrich series data with metadata, posters and popularity signals.
  • Share TypeScript and Zod schemas between frontend and backend to keep API contracts and validation consistent.

Context

SerieMatch was built as a product-focused fullstack project to make series discovery more personal than a basic catalogue. Users can create an account, complete a preference questionnaire, browse a searchable catalogue and build a personal library around what they want to watch, have already seen or are not interested in.

Architecture

The application uses Next.js for the frontend, NestJS for the API, Prisma with PostgreSQL for persistence, Meilisearch for catalogue search, and the TMDB API to enrich series data. Shared TypeScript and Zod schemas keep validation and data contracts consistent across the stack.

Challenges

The main challenge was designing a recommendation flow without relying on AI: user preferences, platform choices, moods, genres and personal ratings all need to influence the recommendation score in a predictable and maintainable way.

Outcome

The result is a structured fullstack application with authentication, preference onboarding, catalogue search, personal library management and a scoring-based recommendation system that improves as the user rates series.