WatchIO Cover Image

WatchIO

Streaming platform with room creation and watch together

October 2023 - January 2024
WatchIO Thumbnail Image

Frontend & Design

Backend & Database

Figma
React.js
Next.js
Material UI
TailwindCSS
Express.js
Node.js
MongoDB
Stripe
Docker
OMDb API

Overview

Role

The WatchIO project was a team effort in collaboration with @radkam2000 to create an engineering thesis. My main task was to design and implement the user interface - from concept to mockups to the final frontend.

Problem

Users face difficulties in sharing content with others: they have to use external solutions, create separate accounts or send links, which spoils the user experience. They lack a simple, integrated way to view and interact together.

Goal

Creating a consistent, intuitive environment that allows users to easily share playlists and subscriptions, watch series together, and build relationships and communities - all on one platform.

Solution

Features such as shared playlists, shared subscription (up to 5 people) and synchronous viewing rooms have been designed to allow users to experience screenings together. The interface has been simplified to make operation quick, easy to understand and friendly to any age group.

User Value

WatchIO allows users to experience screenings together without technical complications - everything happens in one place, without having to switch between apps. With synchronous viewing and shared playlists, users can build relationships, comment in real time and get more enjoyment out of watching together - even from a distance. The interface supports these needs while being accessible and intuitive for less technical people as well.

Main Page WatchIO Image

Idea

Research

During the research phase, I focused on understanding the needs of streaming users in a group or at a distance

I conducted:

  • Analyzing popular platforms (e.g., Netflix, Disney+, Teleparty, Watchparty) for sharing features, playlists and collaborative viewing
  • Qualitative interviews - talking mainly to peers who often share accounts or watch together with relatives, even when living apart
  • Frustration and needs analysis:
    • need for synchronized video without stuttering
    • inability to create shared lists of series/movies
    • need to share passwords in traditional subscriptions
    • the increasingly difficult sharing of accounts on popular platforms.

Conslusions

Users want a simple and aesthetically pleasing tool that enables shared viewing without technical complications and facilitates subscription and content sharing with a trusted group.

Arrow Down

Target group

  • People aged 20-55+ - both younger users (students, young couples, singles) and older users (parents, friends, people living far away from loved ones)
  • Regularly watch movies and series and want to share the experience with others, regardless of where they live
  • Bargains and expectations: Watching together remotely, sharing an account without complications, building relationships through joint screenings in a simple and friendly way.

Requirements

Adam, 25 y.o.

graphic designer, recently moved to another city because of a new job

Finally I can watch the series with the crew like I used to - even though everyone sits in a different city. It really makes for a home movie atmosphere!

Who is he?

  • Adam recently graduated from college and moved to Krakow for work
  • He likes to spend evenings with a good TV series or movie, preferably together with friends (even if they are in different parts of Poland)
  • Often shares recommendations in groups and chat rooms
  • Is active online, appreciates aesthetic design and simplicity in the applications he uses

Main challenges

  • Difficulty watching something together with friends remotely: well synchronized, without lag or technical problems
  • Need to share subscriptions without passing passwords or contriving
  • Lack of a single place to gather shared lists of series with friends
  • Longing to experience emotions together despite physical distance

How the app will help him

  • With the synchronized room viewing feature, Adam can watch series with friends "as if in one room"
  • The shared subscription feature allows him to easily invite friends to one payment, without sharing logins
  • A shared watchlist means they can plan their next screenings together and recommend series to each other without the clutter
  • Intuitive and modern interface makes the whole thing simple and fun to use
WatchIO Phones Images

Design process

At the UX stage, I focused on understanding user needs and developing an intuitive flow. I made sure that the whole thing was consistent with the business goals of the project, but at the same time as simple and user-friendly as possible in everyday use.

Site map

Wireframe

As UI designer, I designed the interface based on modern patterns, taking care of accessibility, visual hierarchy and clarity. I created a simple library that ensured consistency of components and accelerated implementation.

At the implementation stage, I was in charge of implementing the frontend using NextJS and the MaterialUI component library. I was responsible for the responsiveness of the interface, interactions and integration with the server part.

"use client"; 
import React, { useState, useEffect } from "react"; 
import dynamic from "next/dynamic"; 
import LoadingFilms from "./loading"; 
const FilmsSlider = () => { 
    const getFilms = async () => { 
        try { 
            const response = await fetch("http://localhost:5000/api/series", { 
                method: "GET",
            }); 
            if (response.status === 200) { 
                const res = await response.json(); 
                return res.data.series; 
            } else return []; 
        } catch (error) { 
            console.log(error); 
            return []; 
        } 
    }; 
    const [series, setSeries] = useState(null); 
    useEffect(() => { 
        getFilms().then((data) => { 
            setSeries(data); 
        }); 
    }, []); 
    const Films = dynamic(() => import("./Films"), { 
        ssr: false,
        loading: () => <LoadingFilms />,
    }); 
    return <div>{series && <Films series={series} />}</div>; 
}; 
export default FilmsSlider; 

Example: films presentation base (slider) on main page

Implementation

Main page

User page

Design

  • I meticulously designed the home page, but some of the views (user profile, admin panel) were created on the run, without many iterations
  • In the admin panel, I used ready-made Material UI components, adding only my own KPIs
  • Customizing ready-made MUI components and trying to make them consistent with the rest of the interface was very time-consuming

Programming

  • The code isn't perfect; due to the deadline, there are a few repetitions
  • This was my first time using Context API on a larger scale. I learned how to build complex contexts, although I know that a better approach would be to split them into smaller modules next time around
  • I encountered problems with middleware.js in Next.js. I tested various approaches to authorization extensively before finally settling on middleware

Challenges and learning

  • I added a privacy policy and terms of service (based on a generator) to see how such elements looks like in practice
  • I learned how to communicate better with backend dev teammate - even though the API was largely ready, I had to report the need for adjustments and new features

Summary

The biggest lesson? It's better to plan the code architecture (especially Context API) and give yourself more space for design iterations, but at the same time, I saw how important collaboration and quick decision-making are in a real, time-limited project.