Harden Docker packaging and bundle frontend assets locally
- replace fragile Docker file bind mount with persistent /data storage - add container entrypoint to link config.json from persistent storage - tighten Docker image permissions and add a basic healthcheck - add .dockerignore to keep git metadata and runtime files out of the image - bundle hls.js locally instead of loading it from a CDN - download and serve UI/theme fonts locally instead of Google Fonts - update service worker cache entries for local assets - refresh README to reflect local bundled assets and cleaner deployment docs
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.DS_Store
|
||||||
|
*.swp
|
||||||
|
data
|
||||||
|
assets/preview.png
|
||||||
|
assets/.DS_Store
|
||||||
|
src/.DS_Store
|
||||||
|
.version.json.swp
|
||||||
@@ -45,7 +45,7 @@ This demo runs with sample XMLTV feeds to showcase the interface.
|
|||||||
- ⚙️ **Re-editable setup** — protected by an admin key, no SSH required to update config
|
- ⚙️ **Re-editable setup** — protected by an admin key, no SSH required to update config
|
||||||
- 🔔 **Update notifications** — a badge appears in the topbar when a new release is available on GitHub
|
- 🔔 **Update notifications** — a badge appears in the topbar when a new release is available on GitHub
|
||||||
- 🔄 **Auto-reload** EPG every 30 minutes
|
- 🔄 **Auto-reload** EPG every 30 minutes
|
||||||
- 0️⃣ **Zero JS dependencies** — vanilla PHP, hls.js loaded from CDN
|
- 0️⃣ **Zero build tooling** — vanilla PHP/JS/CSS, with bundled local assets
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,87 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'Barlow Condensed';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/barlow-condensed-300.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Barlow Condensed';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/barlow-condensed-400.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Barlow Condensed';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/barlow-condensed-600.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Barlow Condensed';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/barlow-condensed-700.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Share Tech Mono';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/share-tech-mono-400.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Rajdhani';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/rajdhani-400.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Rajdhani';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/rajdhani-600.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Rajdhani';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/rajdhani-700.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'IM Fell English';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/im-fell-english-400.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'IM Fell English';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/im-fell-english-400-italic.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Special Elite';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: url('/assets/fonts/special-elite-400.ttf') format('truetype');
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Vendored
+2
File diff suppressed because one or more lines are too long
@@ -109,7 +109,7 @@ $submitted_key = trim($_POST['admin_key_input'] ?? $_POST['admin_key_hidden']
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>GridTV — Setup</title>
|
<title>GridTV — Setup</title>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Barlow+Condensed:wght@300;400;600;700&display=swap" rel="stylesheet">
|
<link rel="stylesheet" href="/assets/fonts/fonts.css">
|
||||||
<style>
|
<style>
|
||||||
:root {
|
:root {
|
||||||
--bg:#0a0b0d;--surface:#111318;--surface2:#181b22;
|
--bg:#0a0b0d;--surface:#111318;--surface2:#181b22;
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.4.12/hls.min.js"></script>
|
<script src="/assets/vendor/hls.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
<?php
|
<?php
|
||||||
$js_dir = __DIR__ . '/../js/';
|
$js_dir = __DIR__ . '/../js/';
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||||
<meta name="apple-mobile-web-app-title" content="GridTV">
|
<meta name="apple-mobile-web-app-title" content="GridTV">
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Barlow+Condensed:wght@300;400;600;700&display=swap" rel="stylesheet">
|
<link rel="stylesheet" href="/assets/fonts/fonts.css">
|
||||||
<?php
|
<?php
|
||||||
$css_dir = __DIR__ . '/../css/';
|
$css_dir = __DIR__ . '/../css/';
|
||||||
$css_files = ['base', 'topbar', 'grid', 'mobile', 'player', 'modals', 'search', 'program', 'favorites', 'updater'];
|
$css_files = ['base', 'topbar', 'grid', 'mobile', 'player', 'modals', 'search', 'program', 'favorites', 'updater'];
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
const CACHE_NAME = 'gridtv-v1';
|
const CACHE_NAME = 'gridtv-v2';
|
||||||
|
|
||||||
// Ressources statiques à mettre en cache immédiatement
|
// Ressources statiques à mettre en cache immédiatement
|
||||||
const STATIC_ASSETS = [
|
const STATIC_ASSETS = [
|
||||||
'/',
|
'/',
|
||||||
'/index.php',
|
'/index.php',
|
||||||
'/manifest.json',
|
'/manifest.json',
|
||||||
|
'/assets/fonts/fonts.css',
|
||||||
'/assets/icon-192.png',
|
'/assets/icon-192.png',
|
||||||
'/assets/icon-512.png',
|
'/assets/icon-512.png',
|
||||||
'https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Barlow+Condensed:wght@300;400;600;700&display=swap',
|
'/assets/vendor/hls.min.js'
|
||||||
'https://cdnjs.cloudflare.com/ajax/libs/hls.js/1.4.12/hls.min.js'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// Install : mise en cache des assets statiques
|
// Install : mise en cache des assets statiques
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Néons rose/cyan sur noir absolu. Blade Runner.
|
* Néons rose/cyan sur noir absolu. Blade Runner.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Rajdhani:wght@400;600;700&display=swap');
|
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--bg: #000008;
|
--bg: #000008;
|
||||||
--surface: #080010;
|
--surface: #080010;
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Salle de régie sombre, la base.
|
* Salle de régie sombre, la base.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Barlow+Condensed:wght@300;400;600;700&display=swap');
|
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--bg: #0a0b0d;
|
--bg: #0a0b0d;
|
||||||
--surface: #111318;
|
--surface: #111318;
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Papier jauni, encre rouge et bleue, machine à écrire.
|
* Papier jauni, encre rouge et bleue, machine à écrire.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Special+Elite&display=swap');
|
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--bg: #f2e8c8;
|
--bg: #f2e8c8;
|
||||||
--surface: #ede0b0;
|
--surface: #ede0b0;
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Brun chaud, cuivre, laiton. Très 1880.
|
* Brun chaud, cuivre, laiton. Très 1880.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=IM+Fell+English:ital@0;1&display=swap');
|
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--bg: #160e04;
|
--bg: #160e04;
|
||||||
--surface: #201408;
|
--surface: #201408;
|
||||||
|
|||||||
Reference in New Issue
Block a user