Funtime.net

Completed

Aug 2022 - Nov 2022 (4 months)

Funtime.net is an early-stage cross-platform streaming initiative that combined Kotlin Multiplatform experimentation with an Android TV delivery track.

The project moved from platform bootstrapping and shared networking into playback reliability, scraper-backed metadata enrichment, and offline catalog quality improvements.

Built with: Kotlin Multiplatform Mobile, Kotlin, Android TV, ExoPlayer, Ktor, Kotlinx Serialization, Skrape{it}, Python (Jupyter notebooks), JSON asset pipelines, and Gradle.

Project Activity

Recent updates for Funtime.net. Completed

November 2022

  • Fixed Android TV offline-browser card UX by updating selected-state color treatment and allowing multi-line titles so longer movie/video names remain readable in card presenters.

October 2022

  • Finalized the series dataset by publishing `funtime_new_videos_final.json` with tv_id plus download URL and season/episode keys for stable in-app lookup.
  • Added an intermediate video metadata export (`funtime_new_videos.json`) containing download links and season/episode indexing to validate the scraper output pipeline.
  • Generated and committed an enriched movies dataset (`funtime_new_movies.json`) that includes IMDb identifiers and direct download URLs for offline catalog usage.
  • Implemented the movie-download extraction notebook workflow and refreshed the movies JSON output so scraping logic and complete data stayed versioned together.

September 2022

  • Extended repository scraping logic to extract video download URLs, derive season naming, and expose season-detail API paths used by TV-series navigation flows.
  • Patched player behavior to prevent idle-state transitions during active movie playback, reducing interrupted streaming sessions.
  • Added baseline movie/video JSON files and notebook artifacts in `GetFuntimeDataPython` to establish a reproducible offline metadata generation workflow.
  • Integrated ExoPlayer into the Android TV app, wiring playback activity/layout/resources to enable in-app video streaming.
  • Added repository-level ignore rules to keep generated/build-local files out of version control while the Android TV and data pipelines evolved.

August 2022

  • Integrated the Skrape{it} HTML parsing library and connected it to platform code paths to support structured scraping of source media pages.
  • Initialized the `Funtime.net` repository with core project metadata and licensing to establish the baseline for subsequent KMM and Android TV development.
  • Bootstrapped the Kotlin Multiplatform Mobile hello-world project structure in `Code/`, including Android and iOS app shells plus shared module wiring.
  • Expanded shared-module setup by adding multiplatform dependencies and updating common code to support cross-platform feature growth.
  • Integrated Ktor into the KMM stack for shared networking, with Android app and shared module updates that enabled reusable HTTP client flows.
  • Hardened Ktor networking by configuring platform-specific HTTP clients plus multiplatform logging and JSON serialization in shared code.

Objective Link to heading

  • Build and evolve a Kotlin Multiplatform media-streaming foundation that spans Android TV and iOS scaffolding while adding real playback, network scraping, and offline content metadata pipelines.
  • Improve browsing/playback usability and progressively enrich movie/series datasets with downloadable links and season-aware metadata.

Delivery focus Link to heading

  • Bootstrapped a KMM baseline (Code/) for shared networking/domain code and platform-specific app shells.
  • Integrated Ktor and Skrape{it} to support cross-platform HTTP access and HTML parsing for source data extraction.
  • Built Android TV playback flows in FunTimeTV with ExoPlayer and playback-state fixes.
  • Added and iterated JSON datasets plus Python notebook pipelines in GetFuntimeDataPython for movies/videos download catalogs.
  • Polished offline browsing card UI for clearer title rendering and stronger selected-state visual feedback.

Architecture decisions Link to heading

  • Kept early KMM experimentation (Code/) alongside the Android TV app stream (FunTimeTV) to separate shared-layer exploration from product-facing playback UI.
  • Used file-backed JSON assets and generated JSON outputs as the offline data contract for app browsing.
  • Concentrated web scraping/data-enrichment logic into repository + notebook workflows rather than embedding all extraction logic in UI layers.