Release v3.7: Codebase cleanup and security improvements
Some checks failed
Release APKs / Build TV APK (push) Has been cancelled
Release APKs / Build Mobile APK (push) Has been cancelled
Release APKs / Create Release (push) Has been cancelled

This commit is contained in:
vndangkhoa 2026-02-18 19:07:13 +07:00
parent 056824cfa8
commit 7d696a93af
6 changed files with 102 additions and 104 deletions

View file

@ -1,5 +1,5 @@
# Stage 1: Build Image (Frontend) # Stage 1: Build Image (Frontend)
FROM node:18-alpine AS frontend-builder FROM node:20-alpine AS frontend-builder
WORKDIR /app/frontend WORKDIR /app/frontend
COPY frontend-react/package*.json ./ COPY frontend-react/package*.json ./
RUN npm install RUN npm install
@ -7,7 +7,7 @@ COPY frontend-react/ .
RUN npm run build RUN npm run build
# Stage 2: Build Image (Backend) # Stage 2: Build Image (Backend)
FROM golang:1.23-alpine AS backend-builder FROM golang:1.24-alpine AS backend-builder
WORKDIR /app/backend WORKDIR /app/backend
# Install build dependencies # Install build dependencies
RUN apk add --no-cache gcc musl-dev RUN apk add --no-cache gcc musl-dev

154
README.md
View file

@ -1,82 +1,78 @@
# StreamFlow V3.6 # StreamFlow V3.7
StreamFlow is a high-performance video streaming web application featuring a pure Go backend and a modern React + Tailwind frontend. StreamFlow is a high-performance video streaming web application featuring a pure Go backend and a modern React + Tailwind frontend.
## 🚀 Features ## 🚀 Features
- **Modern UI**: Built with React, TypeScript, and Tailwind CSS for a premium, responsive experience. - **Modern UI**: Built with React, TypeScript, and Tailwind CSS for a premium, responsive experience.
- **High Performance**: Backend written in Go (Golang) for speed and concurrency. - **High Performance**: Backend written in Go (Golang) for speed and concurrency.
- **Smart Scraping**: Integrated scraping engine (Rophim) with automated episode extraction. - **Smart Scraping**: Integrated scraping engine (Rophim) with automated episode extraction.
- **HLS Streaming**: Native HLS playback support. - **HLS Streaming**: Native HLS playback support.
- **Android TV Support (New)**: Optimized TV client with D-pad controls and 10s skip. - **Android TV Support**: Optimized TV client with D-pad controls and 10s skip.
- **Performance Optimized**: Parallel API fetching and global image caching for instant loading. - **Performance Optimized**: Parallel API fetching and global image caching for instant loading.
- **Android TV App**: Native TV app support with dedicated APK available for download. - **Android TV App**: Native TV app support with dedicated APK available for download.
- **Docker Ready**: Multi-stage Docker build optimized for NAS Synology (linux/amd64). - **Docker Ready**: Multi-stage Docker build optimized for NAS Synology (linux/amd64).
- **PWA Support**: Install as a progressive web app on mobile devices.
## 🛠️ Tech Stack
## 🛠️ Tech Stack
- **Backend**: Go (Chi Router, GORM, GoQuery)
- **Frontend**: React, TypeScript, Vite, Tailwind CSS - **Backend**: Go 1.23 (Chi Router, GORM, GoQuery)
- **Database**: SQLite - **Frontend**: React 19, TypeScript, Vite 7, Tailwind CSS 4
- **Deployment**: Docker - **Database**: SQLite
- **Deployment**: Docker
## 📦 Installation
## 📦 Installation
### Prerequisites
### Prerequisites
- Go 1.22+
- Node.js 20+ - Go 1.23+
- Docker (optional) - Node.js 20+
- Docker (optional)
### Local Development
### Local Development
1. **Backend**
```bash 1. **Backend**
cd backend ```bash
go mod tidy cd backend
go run ./cmd/server/main.go go mod tidy
``` go run ./cmd/server/main.go
Server runs at `http://localhost:8000`. ```
Server runs at `http://localhost:8000`.
2. **Frontend**
```bash 2. **Frontend**
cd frontend-react ```bash
npm install cd frontend-react
npm run dev npm install
``` npm run dev
Frontend runs at `http://localhost:5173` (proxying to backend). ```
Frontend runs at `http://localhost:5173` (proxying to backend).
### Docker Deployment (Recommended for NAS Synology)
### Docker Deployment (Recommended for NAS Synology)
1. **Environmental Variables**: Create a `.env` file or set them in your NAS:
```env 1. **Run with Docker Compose**:
TMDB_API_KEY=your_api_key_here ```yaml
``` version: '3.8'
2. **Run with Docker Compose**: services:
```yaml streamflow:
version: '3.8' image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.7
container_name: streamflow
services: platform: linux/amd64
streamflow: ports:
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.6 - "3478:8000"
container_name: streamflow environment:
platform: linux/amd64 - DATABASE_URL=/app/data/streamflow.db
ports: - TZ=Asia/Ho_Chi_Minh
- "3478:8000" volumes:
environment: - ./data:/app/data
- DATABASE_URL=/app/data/streamflow.db restart: unless-stopped
- TMDB_API_KEY=${TMDB_API_KEY} ```
volumes:
- ./data:/app/data ```bash
restart: always docker-compose up -d
``` ```
```bash Access the application at `http://YOUR_NAS_IP:3478`. You can download the **Android TV App** directly from the navigation bar once the webapp is running.
docker-compose up -d
```
Access the application at `http://YOUR_NAS_IP:3478`. You can download the **Android TV App** directly from the navigation bar once the webapp is running.
## 📂 Project Structure ## 📂 Project Structure

View file

@ -57,7 +57,7 @@ func main() {
r.Route("/api", func(r chi.Router) { r.Route("/api", func(r chi.Router) {
r.Get("/health", func(w http.ResponseWriter, r *http.Request) { r.Get("/health", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`{"status":"healthy", "version":"v3.6-go"}`)) w.Write([]byte(`{"status":"healthy", "version":"v3.7"}`))
}) })
api.RegisterRoutes(r, handler) api.RegisterRoutes(r, handler)

View file

@ -1,20 +1,22 @@
version: '3.8' version: '3.8'
services: services:
streamflow: streamflow:
# build: . image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.7
image: git.khoavo.myds.me/vndangkhoa/kv-streamflow:v3.6 container_name: streamflow
container_name: streamflow platform: linux/amd64
platform: linux/amd64 ports:
ports: - "3478:8000"
- "3478:8000" environment:
environment: - DATABASE_URL=/app/data/streamflow.db
- DATABASE_URL=/app/data/streamflow.db - PORT=8000
# - TMDB_API_KEY=${TMDB_API_KEY} - TZ=Asia/Ho_Chi_Minh
volumes: volumes:
- ./data:/app/data - ./data:/app/data
restart: always restart: unless-stopped
healthcheck:
volumes: test: ["CMD", "wget", "-q", "--spider", "http://localhost:8000/api/health"]
streamflow_data: interval: 30s
streamflow_cache: timeout: 10s
retries: 3
start_period: 10s

View file

@ -1,4 +1,4 @@
import { Component, ErrorInfo, ReactNode } from 'react'; import { Component, type ErrorInfo, type ReactNode } from 'react';
interface Props { interface Props {
children: ReactNode; children: ReactNode;

View file

@ -1,4 +1,4 @@
import { defineConfig } from 'vite' import { defineConfig } from 'vitest/config'
import react from '@vitejs/plugin-react' import react from '@vitejs/plugin-react'
import { VitePWA } from 'vite-plugin-pwa' import { VitePWA } from 'vite-plugin-pwa'