NetMirror is a high-performance web streaming application built from scratch to deliver a seamless, ad-free cinematic experience for movies and TV series in 1080p HD. Engineered with Next.js 15 App Router, React 19, TypeScript, and modern CSS architecture, the platform features Netflix-grade horizontal carousels, instant debounced search autocomplete, responsive HTML5 media playback, and client-side watch-progress persistence—without compromising stream stability or user privacy.
Modern on-demand streaming platforms must deliver sub-second visual responsiveness, instant media discovery, and buffer-free navigation. NetMirror was engineered entirely from scratch to replicate the visual fidelity, fluid micro-interactions, and catalog browsing of tier-1 streaming giants (Netflix, Prime Video) within a lightweight, ultra-performant web application.
To ensure maximum platform longevity, security, and compliance, NetMirror adheres to strict architectural isolation:
To deliver Netflix-style smooth track scrolling without sluggish third-party slider libraries, I developed a lightweight custom React hook utilizing CSS scroll-behavior and boundary clamping:
// src/hooks/useHorizontalScroll.ts - Lightweight Custom Track Scroller
import { useRef, useCallback } from "react";
export function useHorizontalScroll() {
const trackRef = useRef<HTMLDivElement>(null);
const scroll = useCallback((direction: "left" | "right", step = 0.8) => {
if (!trackRef.current) return;
const container = trackRef.current;
const scrollDistance = container.clientWidth * step;
const targetScroll =
direction === "left"
? container.scrollLeft - scrollDistance
: container.scrollLeft + scrollDistance;
container.scrollTo({
left: targetScroll,
behavior: "smooth",
});
}, []);
return {
trackRef,
scrollLeft: () => scroll("left"),
scrollRight: () => scroll("right"),
};
}A compelling streaming interface lives and dies by its visual discovery. NetMirror categorizes thousands of titles into intuitive thematic rows (Trending Now, Popular Movies, Top Rated, Now Playing, and TV Series) paired with skeleton shimmer loaders that prevent jarring layout jumps.
Rather than displaying blank screens or intrusive spinners while fetching content records:
Users expect instant search results as they type. To deliver seamless exploration across titles, cast members, and genres without hammering network endpoints or freezing the main thread, I engineered an optimized search controller with active request aborting.
The search component features production-grade client ergonomics:
The frontend controller eliminates query spam while keeping the search overlay fluid and responsive:
// src/components/SearchInput.tsx - Debounced Search with Abort Signal
"use client";
import { useState, useEffect, useRef } from "react";
export default function SearchInput({
onSearch
}: {
onSearch: (query: string) => void
}) {
const [searchTerm, setSearchTerm] = useState("");
const abortControllerRef = useRef<AbortController | null>(null);
useEffect(() => {
if (!searchTerm.trim()) {
onSearch("");
return;
}
const timer = setTimeout(() => {
// Cancel previous pending network request if still in-flight
if (abortControllerRef.current) abortControllerRef.current.abort();
abortControllerRef.current = new AbortController();
onSearch(searchTerm.trim());
}, 300);
return () => clearTimeout(timer);
}, [searchTerm, onSearch]);
return (
<div className="relative w-full max-w-md">
<input
type="text"
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
placeholder="Titles, people, genres..."
className="w-full bg-[#1e1e1e] text-white px-4 py-2.5 rounded-full border border-white/10 focus:border-red-600 focus:outline-none text-sm transition-all placeholder:text-gray-500"
/>
</div>
);
}Default browser video controls feel clumsy and inconsistent across operating systems. I crafted a bespoke HTML5 media player overlay with auto-hiding controls, keyboard playback shortcuts (Spacebar for play/pause, Arrow keys for seek, M for mute), and automatic watch-progress resumption.
| Feature | Client-Side Implementation | User Experience Outcome |
|---|---|---|
| Resume Playback | Saves current timestamp to localStorage key mapped to content ID | Users pick up exactly where they left off across visits |
| Watchlist / My List | Client-side collection stored in persistent browser storage | Instant bookmarking with zero signup friction |
| Auto-Hiding Controls | 3-second inactivity timer that fades playback HUD during full-screen view | Distraction-free edge-to-edge cinema viewing |
| Adaptive Mobile Gestures | Double-tap to skip 10 seconds forward/backward on touchscreens | Native app feel directly within the browser |
A clean client hook persists watch progress without requiring user logins or backend database overhead:
// src/hooks/useWatchProgress.ts - Client-Side Playback State Resumption
"use client";
import { useCallback } from "react";
export function useWatchProgress(contentId: string) {
const STORAGE_KEY = `netmirror_progress_${contentId}`;
const getSavedTime = useCallback((): number => {
if (typeof window === "undefined") return 0;
const saved = localStorage.getItem(STORAGE_KEY);
return saved ? parseFloat(saved) : 0;
}, [STORAGE_KEY]);
const saveProgress = useCallback((currentTime: number, duration: number) => {
if (typeof window === "undefined" || !duration) return;
// If watch progress exceeds 95%, clear record (mark as completed)
if (currentTime / duration > 0.95) {
localStorage.removeItem(STORAGE_KEY);
} else {
localStorage.setItem(STORAGE_KEY, currentTime.toString());
}
}, [STORAGE_KEY]);
return { getSavedTime, saveProgress };
}Over 65% of media consumption occurs on smartphones and tablets. NetMirror was built mobile-first, ensuring that high-density carousels, hero backdrops, and video controls remain fluid on small screens.
Hardware-accelerated CSS scroll-snap rows allowing effortless horizontal thumb flicking on iOS and Android.
Smooth slide-out navigation menu with accessible tap targets and background scroll locking.
Fullscreen video controls that adapt dynamically to notch cutouts and virtual keyboard inputs.
Responsive srcset poster sizes delivering lightweight images on mobile connections to conserve cellular data.
Operating a high-traffic media catalog requires robust cloud infrastructure and strict client privacy guarantees. NetMirror uses Vercel Edge Network routing and Cloudflare CDN caching to deliver sub-second global responses without logging user identities or requiring account signups.
| Architecture Layer | Technical Strategy | Performance / Privacy Result |
|---|---|---|
| Edge Static Delivery | Vercel Edge Network pre-rendering (Next.js SSG + ISR) | Sub-150ms global TTFB across edge points of presence |
| Zero Account Requirement | Client-side state architecture with zero user database tracking | 100% anonymous browsing and instant zero-click streaming |
| Asset Header Caching | Immutable cache-control headers (max-age=31536000) for static bundles | Zero repeat asset downloads on return visits |
| Air-Gapped Origin Security | Origin shielding and rate limiting preventing platform abuse | 99.99% continuous platform availability |
I'm available for full-time roles & freelance projects.
I thrive on crafting dynamic web applications and delivering seamless user experiences.