Accounts & Auth
Who can watch, upload, and moderate.
Everything a video-sharing platform needs, mapped module by module.
This is a build specification, not a working product — the full feature checklist, the color system, and the stack behind a video platform: upload and transcoding, playback, discovery, comments, channels, moderation, and the security work nobody notices until it's missing.
Twelve modules, each with the features that make it real. Core is the minimum to call this a working platform; Advanced is what separates it from a weekend project. Check items off as you scope your own build.
Who can watch, upload, and moderate.
A raw file drop becomes a playable video.
The watch page, first frame to next-up.
The right video, in front of the right viewer.
Reactions and comments — the loop that brings people back.
A home base and a way to grow an audience.
Where saved videos live between visits.
Tell people when something they follow happens.
Keep the platform safe without slowing creators down.
Easy to find, embed, and link outside the platform.
The plumbing that keeps everything fast and safe.
Usable on any device, by anyone, no excuses.
Six tokens, one job each. Click a swatch to copy its hex and preview it on a real component.
Click any swatch to preview it here — and copy the hex to your clipboard.
Page titles, hero type, section headers. Used with restraint — never for body copy.
Paragraphs, form fields, buttons, and every piece of UI copy. Set for long-form reading at normal sizes, with enough weight range to carry labels and emphasis without switching families.
Default body face across the whole product.
Timecodes, view counts, hex values — anywhere a number needs to feel measured, not decorative.
Property hooks and the new array_find() / array_any() helpers keep controllers short — no framework required to ship this.
CSS-first configuration via @theme, used here through the Play CDN for prototyping. Swap in the CLI/PostCSS build before shipping.
One icon set for the entire product — player controls, nav, badges, and every checkbox on this page.
Handles the interactive parts of this very page — filtering, the palette preview, and the scroll-spy nav.
Follow these steps to deploy and run the Cathode / VTube video platform locally or on a production server. From environment configuration to database seeding and the background media transcode worker.
Ensure PHP 8.4, SQLite/PDO extensions, and FFmpeg are available.
Open your terminal and verify the required command line utilities:
pdo_sqlite, fileinfo, mbstring, and json (all enabled by default in standard PHP 8.4).
Configure environment variables and initialize upload directories.
Create the .env configuration file from the template and prepare the storage directory:
Run schema creation and populate default channels, sample videos, and admin account.
Run the automated CLI migration script to generate tables (users, videos, comments, playlists, subscriptions, history, notifications) and seed initial demo data:
How uploaded video files are transcoded, thumbnailed, and served.
Cathode includes an integrated media processing service with graceful fallback. When FFmpeg is present, it generates 1080p/720p/480p renditions and extracts video poster frames automatically:
Validates MIME types (MP4, WebM, MOV) and streams chunked payloads.
H.264/AAC multi-resolution encoding with adaptive bitrate flags.
Extracts auto-keyframes at 10%, 50%, and 80% intervals for selection.
Execute heavy media transcoding and email alerts asynchronously.
To process heavy encoding jobs without blocking the HTTP request thread, run the worker in a separate terminal window:
If running in standalone dev mode without a worker, synchronous fallback processing is automatically engaged.
Start the application and begin exploring the full video platform.
Launch the local web server: