- Vite + React + TS + Tailwind SPA served by FastAPI (multi-stage Docker build) - Four color schemes (Midnight default, Forest, Slate, YouTube) x dark/light, adjustable text size; persisted to user preferences and localStorage - Header search, grid/list toggle, theme menu; sidebar filters (show state, sort, include Shorts/live, language + topic tag chips with any/all matching) - Infinite-scroll feed of video cards; click opens youtube.com in a new tab; per-video watched / saved / hidden actions with optimistic updates - SPA fallback routing; login screen for unauthenticated users
28 lines
629 B
Docker
28 lines
629 B
Docker
# Stage 1: build the frontend SPA
|
|
FROM node:20-alpine AS frontend
|
|
WORKDIR /fe
|
|
COPY frontend/package.json ./
|
|
RUN npm install
|
|
COPY frontend/ ./
|
|
RUN npm run build
|
|
|
|
# Stage 2: backend runtime, serving the built SPA
|
|
FROM python:3.12-slim
|
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
PYTHONUNBUFFERED=1 \
|
|
PIP_NO_CACHE_DIR=1 \
|
|
PIP_DISABLE_PIP_VERSION_CHECK=1
|
|
|
|
WORKDIR /app
|
|
|
|
COPY backend/requirements.txt .
|
|
RUN pip install -r requirements.txt
|
|
|
|
COPY backend/ .
|
|
COPY --from=frontend /fe/dist ./app/static_spa
|
|
|
|
RUN adduser --disabled-password --gecos "" appuser && chown -R appuser /app
|
|
USER appuser
|
|
|
|
EXPOSE 8000
|
|
CMD ["sh", "entrypoint.sh"]
|