In short
- Challenge
- A TV-series marathon has no plan: nobody knows how long it takes, when it ends, or whether it collides with exams or sleep.
- Solution
- A web app that turns your free time into a plan: days per week and hours per day in, an end date out.
- Delivered
- Six pages in Vue 3 and Vuetify, live search over The Movie Database, accounts and watchlists in Firestore.
01 · The problem
A binge with no plan
For people who love TV series, a marathon is chaos: how long will it take, when will it end, and will it collide with exams or sleep?
Marathoner turns it into a planned experience, based on the free time you have.
02 · The brief
One exam, three constraints
What the course asked for
A website with several pages, an external API and a database holding the user’s data. Marathoner is my answer to each of the three.
- 01 Several pagesSix pages, one job each
From the login to the planner, and an ironic page of ready-made excuses.
- 02 An external APIThe Movie Database
Series, posters, episodes and running times.
- 03 A databaseFirestore
Accounts and watchlists stay between visits.
03 · The choices
From a key pressed to a saved plan
- 01You type
Search starts from the field on the home page
- 02A 300 ms wait
The debounce avoids a request on every key
- 03The Movie Database
Series, posters, episodes and runtimes from the API
- 04Only the latest answer
Responses that arrive out of order are dropped
- 05The planner works it out
Days, hours, end date and episodes per session
- 06Firestore saves
Accounts and watchlists stay between visits
What happens between a key pressed and a watchlist saved.
04 · The project
Every page has one job
- 01 Search
- 02 Planner
- 03 Alerts
- 04 Excuses
01/04 Search
Search that answers while you type
The home page is a large search field over The Movie Database: suggestions appear after a 300 ms debounce, with protection against out-of-order responses, above trending and top-rated series.
- Live search
- Trending now
02/04 Planner
Two sliders, an end date
Pick days per week and hours per day: thanks to Vue’s reactivity the planner instantly recalculates viewing days, weeks, the finish date and episodes per session.
- Days per week · hours per day
- Finish date
03/04 Alerts
Exams first, then sleep
Two built-in alerts: an exam warning that tells you how many episodes a day you need to finish in time, and a sleep check that reminds you to stop at a decent hour.
- Deadline alert
- Sleep check
04/04 Excuses
A tone of voice, too
The excuses page has no maths at all: ready-made excuses to cancel plans, with a fake “credibility” meter. It exists to make visitors smile and gives the product a personality.
05 · The outcome
A working web app
What I delivered
Built with Vue 3, Vue Router and Vuetify’s Material components, Firebase Firestore for accounts and watchlists, and the TMDB API for posters, episodes and running times.
What I learned
Wiring the TMDB API, Firestore and Vue’s reactivity showed me how data, waiting time and state shape an interface: a debounced search or a response that arrives out of order is a user-experience problem before it is a technical one.