hosting-video-18 is a dark-themed, modern, responsive website for hosting and presenting 18+ video content. The product serves two audiences: anonymous adult visitors on Android and desktop who need a fast, discreet, credible archive of videos to browse, search, and watch; and a single admin operator who needs a dense, functional control surface to manage the video catalogue.
The product intent is a members-only vault aesthetic — an interface that withholds more than it shows, treats categories as a coded classification system, and presents the catalogue as a printed archive index rather than a grid of identical cards. The experience is built around a mandatory 18+ age gate, a catalogue index with thumbnail listings, category browsing, search, an HTML5 player with playback controls, a secure admin login and dashboard for managing titles, descriptions, categories, and video URLs, plus supporting pages for profile, privacy policy, terms of use, and content reporting.
Video storage is deliberately decoupled from the main application so that an external video hosting provider can be adopted later without restructuring the application. Sample videos and placeholder thumbnails are used initially, and no explicit sexual content is permitted in any sample material.
The current delivery is a first-party web application with a public-facing catalogue and a protected admin surface. Anonymous visitors pass through an age gate before accessing video content, then browse the catalogue index, filter by category, search, and watch videos in an HTML5 player. A content reporting form is available to any visitor. A single admin operator authenticates through a secure login and manages the catalogue through a dashboard.
Actors:
Ownership and delivery boundary:
Narrow exclusions:
The product is a gated video archive. The first screen a visitor encounters is not a marketing hero but an age gate — a coded specimen on a dark plate that requires explicit 18+ confirmation before any video content becomes accessible. Once confirmed, the visitor enters a catalogue index organized as a printed archive listing: full-width category rail, then asymmetric rows of 16:9 thumbnails with metadata blocks, separated by hairline rules.
The catalogue, player, and supporting pages are publicly reachable without an account. The admin dashboard is protected and requires authentication. Admin access is provisioned or invited before first use, and the admin verifies identity on return. The login surface is anonymously reachable so that an unauthenticated admin can establish access; the dashboard itself remains protected.
Video storage is decoupled: the application manages catalogue metadata and video URLs, while the video files live in a separate storage layer. This boundary is current and intentional — it allows an external video hosting provider to be adopted later without restructuring the application.
No content_source reference directive was supplied. This section is intentionally omitted.
FR-01 — Dark, responsive 18+ video hosting website As a Pengunjung (Viewer), I should access a modern, responsive website with a dark theme that works on Android and desktop, so that I can browse video content comfortably on any device.
FR-02 — Home page with video list and thumbnails As a Pengunjung (Viewer), I should see a home page listing videos with thumbnail images, so that I can browse the available catalogue.
FR-03 — Video categories As a Pengunjung (Viewer), I should browse videos by category, so that I can find content in a specific classification.
FR-04 — Search feature As a Pengunjung (Viewer), I should search for videos, so that I can find specific content by title or keyword.
FR-05 — HTML5 video player with playback controls As a Pengunjung (Viewer), I should watch videos in an HTML5 player with playback controls, so that I can play, pause, seek, and adjust volume.
FR-06 — Admin dashboard for catalogue management As an Admin, I should manage video titles, descriptions, categories, and URLs through a dashboard, so that I can maintain the catalogue.
FR-07 — Secure admin login system As an Admin, I should authenticate through a secure login system, so that the dashboard and backend are protected.
FR-08 — Admin provisioning and return verification As an Admin, I should receive provisioning or invitation before first use and verify my identity on return, so that my access remains bound to the correct operator.
FR-09 — Profile page As a Pengunjung (Viewer), I should read a profile page, so that I can learn about the service.
FR-10 — Privacy policy page As a Pengunjung (Viewer), I should read the privacy policy, so that I understand how my data is handled.
FR-11 — Terms of use page As a Pengunjung (Viewer), I should read the terms of use, so that I understand the conditions of using the service.
FR-12 — Content reporting form As a Pelapor Konten, I should submit a content report, so that problematic content can be recorded and acted upon.
FR-13 — 18+ age warning before content access As a Pengunjung (Viewer), I should confirm I am 18+ before accessing video content, so that the platform enforces its age restriction.
FR-14 — Age confirmation must succeed before content access As a Pengunjung (Viewer), I should have my age confirmation succeed before any video content becomes accessible, so that the gate is enforced.
FR-15 — Sample videos and placeholder thumbnails As a Pengunjung (Viewer), I should see sample videos and placeholder thumbnails initially, so that the catalogue is populated before real content is added.
FR-16 — No explicit sexual content in samples As a Pengunjung (Viewer), I should not encounter explicit sexual content in sample videos or placeholder thumbnails, so that the initial catalogue complies with the content constraint.
FR-17 — Decoupled video storage As an Admin, I should have video storage separated from the main application, so that an external video hosting provider can be adopted later.
FR-18 — Backend persistence for catalogue, reports, auth, and URLs As an Admin, I should have backend persistence for catalogue changes, content reports, authentication, and video URLs, so that data survives across sessions.
FR-19 — Functional backend, authentication, and upload As an Admin, I should have backend, authentication, and upload functionality that genuinely works, so that the product is complete.
FR-20 — Clean code structure and run instructions As an Admin, I should have a clean code structure and instructions for running the project, so that the project can be set up and maintained.
Product context: An anonymous adult visitor who has confirmed they are 18+ and wants to browse a discreet, credible video archive on Android or desktop. The visitor arrives without an account and expects fast, uncluttered access to the catalogue.
Primary goal: Find and watch a video of interest without friction.
Distinct accepted responsibilities:
Relevant inputs or decisions: Age confirmation decision; category selection; search query; video selection; playback control decisions; report submission decision.
Interactions with other accepted participants: The viewer's actions populate the catalogue that the Admin manages. The viewer may also act as a Pelapor Konten when submitting a report.
Observable success: The viewer finds and watches a video without obstruction, and the catalogue reflects the Admin's latest changes.
Product context: A single operator responsible for maintaining the video catalogue. The admin works through a dense, ruled ledger interface that prioritizes functional clarity over decoration.
Primary goal: Keep the catalogue accurate and complete so that viewers see correct titles, descriptions, categories, and URLs.
Distinct accepted responsibilities:
Relevant inputs or decisions: Credentials; video metadata (title, description, category, URL); publish/draft status; report review decisions.
Interactions with other accepted participants: The admin's catalogue changes are visible to Pengunjung (Viewer). The admin reviews reports submitted by Pelapor Konten.
Observable success: Catalogue changes are saved and reflected in the viewer-facing catalogue.
Product context: A user who encounters problematic content and wants to report it. The reporter may be a viewer or any visitor who has passed the age gate.
Primary goal: Submit a content report so that problematic content is recorded and acted upon.
Distinct accepted responsibilities:
Relevant inputs or decisions: Report reason; report description; submission decision.
Interactions with other accepted participants: The report is recorded for the Admin to review and act upon.
Observable success: The report is submitted and a confirmation is shown.
Muse: Peter Saville. Headline: Austere code-language for a dark, gated video archive.
The visual language is a gate: one precise artefact, coded colour, small metadata set against silence, and a colour-alphabet system that reads as classification rather than decoration. The dark ground satisfies the explicit dark-theme requirement, while the restraint and institutional credibility suit an adult video archive.
Palette (dark mode):
#0B0B0C — near-black ground carrying ~75% of every screen.#141416 — used only for player chrome, admin tables, and the age-gate card, never as a card grid.#EDEAE4 — warm off-white, not pure white; reads as paper against the black.#E8552A — exact spot orange; the single voice of action (age-gate confirm, play control, active nav rule, admin save).#C6F24E — acid lime; reserved exclusively for status/verification ("verified 18+", report-received, published/draft chips).#7A7A7E — metadata only (duration, views, timestamps, footnotes).#2A2A2D — primary structural device.#E8552A, #C6F24E, #4E7DF2, #E8C24E, #B44EE8 — each used as a 4px rule or small square, never as a filled card.Typography:
clamp(40px, 9vw, 64px) for the age-gate line.Shape language: Hard edges everywhere — 0px radius on cards, buttons, inputs, and the player frame. 1px hairline rules in #2A2A2D as the primary structural device. 4px colour-code squares and 2px active-state rules as the only "graphic" shapes. No pills, no blobs, no soft shadows; depth is expressed by hairline borders and a single 1px inner highlight on surfaces.
Layout: 12-column strict grid with 24px gutters, max-width 1440px, 32px page margin at 375px and 80px at 1280px. Home is a catalogue index: a full-width category rail of colour-coded tabs, then a two-column asymmetric list (thumbnail 16:9 left, metadata block right, hairline rule between rows) at desktop, collapsing to a single stacked list at 375px. Thumbnails sit flush to the grid edge with zero radius. The player page is a dark stage: player occupies columns 1–8 full-bleed to the left margin, with a narrow metadata column 9–12.
Imagery: Thumbnails are treated as found artefacts — desaturated placeholder stills (CSS-generated 16:9 blocks with a diagonal hairline pattern and a centred duration stamp) rather than photographic content. Each thumbnail carries a small colour-code square in the top-left corner identifying its category. No illustration, no characters, no stock people, no gradient blobs. The only non-photographic imagery is the diagrammatic age-gate mark: a single 1px circle with "18" set inside it, centred in vast dark space.
The age gate as a coded specimen.
The first screen is a gate, not a marketing hero. A full-viewport #0B0B0C field. Dead centre sits a 1px-stroke circle, 96px at mobile and 160px at desktop, containing "18" in wide Archivo at clamp(40px, 9vw, 64px). Directly beneath, a single line of uppercase 12px tracked metadata reads "KONTEN DEWASA — VERIFIKASI USIA DIPERLUKAN". Below that, two flush-left, zero-radius buttons on one hairline row: "SAYA 18+" filled #E8552A with #0B0B0C text, and "KELUAR" as outlined #2A2A2D with muted text. A thin vertical hairline runs from the top of the viewport down to the circle, and a matching one from the circle to the bottom edge, so the composition reads as a coded specimen on a dark plate. Nothing else is on screen — no nav, no logo lockup beyond a 12px tracked wordmark in the top-left corner, no imagery, no gradient.
This concept recomposes accepted content and controls only: the age gate, the confirmation action, and the exit action. It introduces no new behaviour, page, or destination.
Interaction Model: Static Motion Tempo: still Hero Dimensionality: flat
Landing Hero Motion Brief:
#0B0B0C ground.#E8552A to transparent; the gate is dismissed and the catalogue becomes accessible.#E8552A to transparent across the gate card; category tab selection slides a 2px underline in 180ms; thumbnails do not lift — on hover a hairline border goes from #2A2A2D to the category's code colour and the title's tracking widens by 0.01em. No parallax, no scroll animation, no bouncy easing.#0B0B0C field; 1px-stroke circle centred with "18" inside; vertical hairline running full viewport height through the circle; metadata line beneath; two flush-left zero-radius buttons on one hairline row; 12px tracked wordmark top-left.prefers-reduced-motion, leaving instant state changes. The gate dismisses immediately on confirmation without the colour wipe.NFR-01 — Dark theme The site must use a dark theme with the specified palette. Provenance: explicit. Rationale: The user explicitly requested a dark theme.
NFR-02 — Responsive design for Android and desktop The site must be responsive and usable on Android and desktop viewports. Provenance: explicit. Rationale: The user explicitly requested responsive design for Android and desktop.
NFR-03 — Modern design The site must present a modern design consistent with the creative direction. Provenance: explicit. Rationale: The user explicitly requested a modern design.
NFR-04 — Secure admin authentication The admin login system must be secure. Provenance: explicit. Rationale: The user explicitly requested a secure admin login system.
NFR-05 — Functional backend, authentication, and upload Backend, authentication, and upload functionality must genuinely work before the product is declared complete. Provenance: explicit. Rationale: The user explicitly required this verification.
NFR-06 — Decoupled video storage Video storage must be separated from the main application so that an external video hosting provider can be adopted later. Provenance: explicit. Rationale: The user explicitly required this separation.
NFR-07 — No explicit sexual content in samples Sample videos and placeholder thumbnails must not contain explicit sexual content. Provenance: explicit. Rationale: The user explicitly prohibited this.
NFR-08 — Clean code structure and run instructions The project must have a clean code structure and instructions for running it. Provenance: explicit. Rationale: The user explicitly requested this.
NFR-09 — Readable text and controls at all viewports Headlines, wordmarks, labels, numbers, cards' text, and controls must stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit. Provenance: explicit (creative direction). Rationale: The creative direction requires readable text and controls to stay whole at every viewport.
NFR-10 — Reduced-motion support
All motion must be disabled under prefers-reduced-motion, leaving instant state changes. Provenance: explicit (creative direction). Rationale: The creative direction requires reduced-motion support.
Assumptions:
Constraints:
#E8552A, #C6F24E, #4E7DF2, #E8C24E, #B44EE8) used to classify video categories.#E8552A to transparent that occurs when the age gate is confirmed.

No comments yet. Be the first!