# TyClifford.com — Media Player

A self-hosted multimedia player website built with PHP + SQLite + Video.js.
Styled to match the existing `gate.php` / `index.php` dark theme exactly.

---

## Requirements

- PHP 8.0+ with `pdo_sqlite`, `fileinfo` extensions
- Write permissions on the `data/` and `media/` directories

---

## Installation

1. **Upload** all files to your web server (e.g. `/live/` or wherever `/index.php` lives).

2. **Set permissions** so PHP can write to these directories:
   ```bash
   mkdir -p data media/videos media/thumbs
   chmod 755 data media media/videos media/thumbs
   ```

3. **Visit** `index.php` — the SQLite database is created automatically on first load.

4. **Log into admin** at `admin/login.php`
   - Default password: **`admin`**
   - ⚠️ Change it immediately in **Admin → Settings → Change Password**

---

## File Structure

```
/                        ← web root (deploy here)
├── index.php            ← Main player + catalogue (home page)
├── catalogue.php        ← Full video catalogue browse page
├── includes/
│   ├── db.php           ← SQLite bootstrap + helper functions
│   └── layout.php       ← Shared HTML head, topbar, footer, pagination
├── admin/
│   ├── index.php        ← Video list with search + pagination
│   ├── add.php          ← Add new video with multi-format sources
│   ├── edit.php         ← Edit video metadata + manage sources
│   ├── settings.php     ← Site settings, per-page count, password
│   ├── login.php        ← Admin login
│   ├── logout.php       ← Session destroy + redirect
│   └── auth.php         ← Session auth helpers
├── media/               ← All media files (created automatically)
│   ├── videos/          ← Uploaded video files
│   └── thumbs/          ← Uploaded thumbnail images
└── data/
    └── media.db         ← SQLite database (auto-created)
```

---

## Usage

### Adding Videos (Admin)

1. Go to `admin/add.php`
2. Fill in title, description, duration, sort order
3. Upload a thumbnail (JPG/PNG/WebP)
4. Upload one or more video files — each can be a different format or quality:
   - **MP4** (H.264) — widest compatibility
   - **WebM** (VP9) — smaller size, modern browsers
   - **OGV** — Firefox fallback (legacy)
5. Set quality labels (1080p, 720p, 480p, etc.)
6. Save — Video.js will auto-select the best format the browser supports

### Catalogue Per-Page

Configurable in **Admin → Settings → Videos per page** (1–50).
The home page catalogue and the full catalogue page both respect this setting.

### Publishing

Videos can be toggled between **Published** and **Draft** from the admin list.
Only published videos appear on the public-facing pages.

### Sorting

Use the **Sort Order** field — lower numbers appear first. Default is 0.

---

## Player Features

- **Video.js 8.x** — responsive, accessible HTML5 player
- Custom skin matching the site's dark purple/green theme
- Playback rate controls: 0.5×, 1×, 1.25×, 1.5×, 2×
- Multiple source fallback — browser picks best format automatically
- Thumbnail posters
- Keyboard accessible

---

## Security Notes

- Change the default admin password (`admin`) immediately after setup
- Consider adding `.htaccess` HTTP auth or IP restriction to `/admin/`
- The `data/` directory should not be web-accessible; add to `.htaccess`:
  ```apache
  <Directory data>
    Require all denied
  </Directory>
  ```
- For production, consider adding CSRF tokens to admin forms

---

## Customisation

- **Branding**: Edit site title/subtitle in Admin → Settings
- **Theme colours**: All CSS variables are in `includes/layout.php` `:root {}`
- **Social links**: Edit the About/Links cards in `index.php`
