commit 5d8fe81e5f126b27524715fade4a73bfa0169c8e Author: Sebastjan Date: Fri Apr 24 15:35:38 2026 +0200 Initial: FOLX live landing page diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a7cd854 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +*.log +.DS_Store +.env +*.swp diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..097ada0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM node:20-alpine + +RUN apk add --no-cache curl + +WORKDIR /app + +# Install deps first (cache layer) +COPY package.json ./ +RUN npm install --omit=dev && npm cache clean --force + +# Copy sources +COPY src ./src +COPY views ./views +COPY public ./public + +# Non-root user +RUN addgroup -g 1001 app && adduser -D -u 1001 -G app app && chown -R app:app /app +USER app + +EXPOSE 3000 + +HEALTHCHECK --interval=30s --timeout=5s --retries=3 \ + CMD curl -fsS http://127.0.0.1:3000/api/health || exit 1 + +CMD ["node", "src/server.js"] diff --git a/package.json b/package.json new file mode 100644 index 0000000..c49e271 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "folx-live", + "version": "1.0.0", + "description": "FOLX Music Television — live stream landing page (folx.live)", + "main": "src/server.js", + "scripts": { + "start": "node src/server.js", + "dev": "node --watch src/server.js" + }, + "engines": { + "node": ">=20" + }, + "dependencies": { + "ejs": "^3.1.10", + "express": "^4.21.0" + } +} diff --git a/public/brand/folx-full-neg.png b/public/brand/folx-full-neg.png new file mode 100644 index 0000000..b3b71e3 Binary files /dev/null and b/public/brand/folx-full-neg.png differ diff --git a/public/brand/folx-full-neg.svg b/public/brand/folx-full-neg.svg new file mode 100644 index 0000000..a35e73f --- /dev/null +++ b/public/brand/folx-full-neg.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/folx-full-poz.png b/public/brand/folx-full-poz.png new file mode 100644 index 0000000..8abebd9 Binary files /dev/null and b/public/brand/folx-full-poz.png differ diff --git a/public/brand/folx-full-poz.svg b/public/brand/folx-full-poz.svg new file mode 100644 index 0000000..8cb5331 --- /dev/null +++ b/public/brand/folx-full-poz.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/folx-logo-neg.png b/public/brand/folx-logo-neg.png new file mode 100644 index 0000000..4c55a5a Binary files /dev/null and b/public/brand/folx-logo-neg.png differ diff --git a/public/brand/folx-logo-poz.png b/public/brand/folx-logo-poz.png new file mode 100644 index 0000000..6f45dc7 Binary files /dev/null and b/public/brand/folx-logo-poz.png differ diff --git a/public/brand/folx-mark-only.pdf b/public/brand/folx-mark-only.pdf new file mode 100644 index 0000000..fa226ac Binary files /dev/null and b/public/brand/folx-mark-only.pdf differ diff --git a/public/brand/folx-mark.pdf b/public/brand/folx-mark.pdf new file mode 100644 index 0000000..fa226ac Binary files /dev/null and b/public/brand/folx-mark.pdf differ diff --git a/public/brand/folx-with-tagline-neg.png b/public/brand/folx-with-tagline-neg.png new file mode 100644 index 0000000..1677a95 Binary files /dev/null and b/public/brand/folx-with-tagline-neg.png differ diff --git a/public/brand/folx-with-tagline-neg.svg b/public/brand/folx-with-tagline-neg.svg new file mode 100644 index 0000000..4846b43 --- /dev/null +++ b/public/brand/folx-with-tagline-neg.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/folx-with-tagline-poz.png b/public/brand/folx-with-tagline-poz.png new file mode 100644 index 0000000..2d3b3dc Binary files /dev/null and b/public/brand/folx-with-tagline-poz.png differ diff --git a/public/brand/folx-with-tagline-poz.svg b/public/brand/folx-with-tagline-poz.svg new file mode 100644 index 0000000..0a00a76 --- /dev/null +++ b/public/brand/folx-with-tagline-poz.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/server.js b/src/server.js new file mode 100644 index 0000000..4f6cbf4 --- /dev/null +++ b/src/server.js @@ -0,0 +1,28 @@ +const path = require('path'); +const express = require('express'); + +const app = express(); +const PORT = process.env.PORT || 3000; + +const STREAM_URL = process.env.HLS_URL || 'https://folxplay.b-cdn.net/live/stream1_master.m3u8'; + +app.set('view engine', 'ejs'); +app.set('views', path.join(__dirname, '..', 'views')); + +app.use(express.static(path.join(__dirname, '..', 'public'), { + maxAge: '1h', + etag: true, +})); + +app.get('/', (_req, res) => { + res.render('index', { hlsUrl: STREAM_URL }); +}); + +app.get('/api/health', (_req, res) => { + res.json({ ok: true, hls: STREAM_URL, ts: Date.now() }); +}); + +app.listen(PORT, () => { + console.log(`[folx-live] listening on :${PORT}`); + console.log(`[folx-live] HLS source: ${STREAM_URL}`); +}); diff --git a/views/index.ejs b/views/index.ejs new file mode 100644 index 0000000..2d71195 --- /dev/null +++ b/views/index.ejs @@ -0,0 +1,712 @@ + + + + + + FOLX Music Television — Live | Volksmusik & Schlager + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Volksmusik
+ Rund um die Uhr. +

+
+ 24 / 7 Live + + HD + + DE · AT · CH +
+
+ +
+ + +
+
+
Stream wird geladen…
+
+ +
+
+ On Air +
+
+ + +
+
+
+
+ +
+
+
+
01
+
24 / 7 Live
+
Rund um die Uhr das Beste aus der Volksmusik- und Schlagerszene — ohne Unterbrechung.
+
+
+
02
+
Oberkrainer
+
Die Legenden der Oberkrainer Musik, traditionell und modern interpretiert.
+
+
+
03
+
Bayrisch
+
Von klassischer Blasmusik bis zeitgenössischem Schlager aus Bayern und Tirol.
+
+
+
04
+
Zillertaler
+
Pure alpine Lebensfreude aus dem Herzen der Zillertaler Berge.
+
+
+
+ +
+ +

Das läuft bei FOLX

+

+ Ob junge Menschen, Mid Ager oder Best Ager — für jeden ist etwas dabei. Die größten Stars, + die modernsten Videos und die beste volkstümliche Musik, die das Herz jedes Fans höher schlagen lässt. +

+ +
+
+
Morgenstund hat Gold im Mund
+
Folx TV macht das Aufstehen zum Genuss. Starten Sie Ihren Tag mit der besten Musik und den neuesten Informationen.
+
Täglich ab 06:00
+
+
+
Folx Interaktiv
+
Unsere Moderatoren und Zuschauer werden von den Gästen aus der Volks- und Schlagermusikszene begleitet. Täglich aktuelle News, Sport, Klatsch und Tratsch.
+
Di & Do ab 14:00
+
+
+
Folx Box
+
Eine unwiderstehliche Mischung. Sie kriegen nie genug von Ihren beliebtesten volkstümlichen Musikvideos — hier entscheiden SIE, was gespielt wird.
+
Di & Do ab 20:00
+
+
+
Folx Live
+
100 % Live. Gruppen, die sich noch wagen live zu spielen. Ein echter Ohrenschmaus.
+
Freitag ab 20:15
+
+
+
Folx Stadl
+
Legenden der Volksmusik- und Schlagerszene präsentieren sich im einzigartigen Hüttenambiente.
+
Samstag ab 20:15
+
+
+
+ + + + + + +