┌───────────────────────┐
│ Front‑End (Web/Mobile)│
│ - React (Next.js) │
│ - React‑Native (iOS/Android)│
└───────┬───────────────┘
│ API (REST/GraphQL)
▼
┌───────────────────────┐ ┌─────────────────────┐
│ API Gateway (Kong) │◄──────►│ Auth Service (Keycloak)│
└───────┬───────────────┘ └─────────────────────┘
│
▼
┌───────────────────────┐
│ Video Service (Go) │ ←─► FFmpeg pipeline (transcode to HLS/DASH)
│ - Metadata DB (PostgreSQL)
│ - Streaming CDN (CloudFront)
└───────┬───────────────┘
│
▼
┌───────────────────────┐
│ RapidShare‑Like │
│ Download Service (Go)│
│ - Object Store (S3‑compatible) │
│ - Signed‑URL Generator │
└───────┬───────────────┘
│
▼
┌───────────────────────┐
│ Analytics & Events │
│ - Kafka → ClickHouse│
│ - Dashboard (Metabase)│
└───────────────────────┘
All services are containerised (Docker) and orchestrated via Kubernetes with auto‑scaling.
| Element | Description |
|--------|-------------|
| Name | Tante Sama Keponakan – Lifestyle & Entertainment Hub |
| Goal | Provide a dedicated, searchable, social‑ready video hub that surfaces new episodes, behind‑the‑scenes clips, downloadable assets, and community interaction for fans of the “Tante Sama Keponakan” brand. |
| Key Value | • Monetise high‑engagement content (ads, sponsorships, premium downloads).
• Keep the audience inside the ecosystem (watch → share → download).
• Leverage a RapidShare‑like storage layer for massive, scalable, fast‑downloadable assets (e.g., high‑resolution video files, exclusive PDFs, music tracks). |
| Target Audience | • Fans of Indonesian lifestyle & entertainment (primarily 18‑35 y/o).
• Creators/brands looking for placement in a culturally‑relevant video hub.
• Power‑users who want to download full‑resolution assets for offline viewing/repurposing. | Video Tante Ngentot Sama Keponakan Rapidshare
| Screen | Core Elements | Interaction Highlights |
|--------|---------------|------------------------|
| Home | - Hero carousel (latest episode)
- “Continue Watching” strip
- Category tabs (Lifestyle, Music, Food) | Swipe carousel, auto‑play preview (muted 5 s). |
| Episode Detail | - Video player (HLS)
- Episode title, description, tags
- Action bar: Like, Comment, Share, Download
- Related clips carousel | Clicking Download opens modal with quality selector → Generate link (spinner → link appears). |
| Download Modal | - Quality radio list
- Estimated size
- “Copy Link” button (clipboard)
- “Open in new tab” shortcut | Link auto‑copies; toast notification “Link copied”. |
| Playlist | - Grid of saved episodes
- Drag‑to‑reorder (mobile long‑press) | Tap episode → quick‑play or edit playlist. |
| Comments | - Threaded view, avatar, timestamp
- “Reply” button, emoji picker | Inline reply expands, optimistic update. |
| Admin Upload | - Drag‑and‑drop zone for video file
- Metadata form (title, tags, description, thumbnail)
- “Publish” toggle (draft / live) | Shows progress bar; on success shows “Video processing… (will be live in 5 min)”. | All services are containerised (Docker) and orchestrated via
All colors follow the brand palette: deep teal (#006064), warm coral (#FF6F61), soft gray (#F5F5F5). Font: Inter (variable). | Element | Description | |--------|-------------| | Name
| Category | Detail |
|----------|--------|
| Performance | • Page load < 2 s on 3G (core‑web‑vitals).
• Video start‑up latency < 1 s after play. |
| Scalability | • Video ingest pipeline must handle 10 GB/min peak.
• Download service must sustain 5 k req/s. |
| Security | • Signed URLs use HMAC‑SHA256, expire after configurable TTL.
• All API traffic via HTTPS, JWT‑based auth. |
| Compliance | • Store user‑generated comments in GDPR‑compliant region (EU/ID). |
| Observability | • Centralised logging (ELK), metrics (Prometheus), alerts for 99.9 % uptime. |
| Availability | • 99.95 % SLA for streaming; 99.9 % for download endpoint. |
| Maintainability | • Codebase in TypeScript (Node.js + React) for front‑end, Go for download service.
• CI/CD pipeline with automated unit/integration tests (> 80 % coverage). |
| ID | Requirement | Acceptance Criteria |
|----|-------------|---------------------|
| FR‑01 | Content Ingestion – Admin can upload a new “Tante Sama Keponakan” episode (video + thumbnail + meta). | • Upload UI accepts MP4, WebM, 1080p‑4K.
• System automatically generates streaming renditions (HLS/DASH) and a RapidShare download bundle (original + 720p). |
| FR‑02 | Video Playback – Users watch via adaptive streaming (HLS/DASH). | • Playback works on Chrome, Safari, Android, iOS.
• Playback resumes from last position (local storage). |
| FR‑03 | Download Service – Provide secure, time‑limited direct download links. | • After clicking Download, a signed URL (valid 24 h) is returned.
• Link points to an S3‑compatible bucket that mimics RapidShare behaviour (public‑share link). |
| FR‑04 | Social Interaction – Like, comment, share. | • Likes update instantly (optimistic UI).
• Comments are paginated, can be flagged. |
| FR‑05 | Recommendation Engine – Show “Next Episode”, “Related Lifestyle Clips”. | • Uses collaborative filtering + tag‑based relevance. |
| FR‑06 | User‑Generated Playlists – Save episodes to personal playlists. | • Playlists are private by default, can be set public. |
| FR‑07 | Analytics Dashboard – For internal stakeholders and sponsors. | • Shows views, watch‑time, download count, ad‑impressions per episode. |
| FR‑08 | Access Control – Free vs. Premium tier. | • Free users see ads and 720p streaming only.
• Premium users get ad‑free 4K + unlimited downloads. |
| FR‑09 | Responsive UI – Same experience on web, iOS, Android. | • All UI components adapt to ≤ 320 px width. |
| FR‑10 | Localization – Bahasa Indonesia primary, English optional. | • All UI strings externalised, language switch toggles instantly. |
openapi: 3.0.3
info:
title: Tante Sama Keponakan Video Hub API
version: 1.0.0
servers:
- url: https://api.tantesama.id/v1
paths:
/episodes:
get:
summary: List published episodes
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PerPage'
- name: tag
in: query
schema: type: string
responses:
'200':
description: Paginated list
content:
application/json:
schema:
$ref: '#/components/schemas/EpisodeList'
/episodes/id:
get:
summary: Episode detail (metadata + streaming URLs)
parameters:
- name: id
in: path
required: true
schema: type: string
responses:
'200':
description: Episode object
content:
application/json:
schema:
$ref: '#/components/schemas/Episode'
/episodes/id/download:
post:
summary: Generate time‑limited download link
security: [ bearerAuth: [] ]
parameters:
- name: id
in: path
required: true
schema: type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
quality:
type: string
enum: [1080p,720p,4K]
default: 1080p
responses:
'200':
description: Signed URL
content:
application/json:
schema:
type: object
properties:
url:
type: string
format: uri
expiresAt:
type: string
format: date-time
Notes