- Extension DOM mode: auth-context serializer — inlines CSS + images as data URLs, freezes form state, masks [data-dp-mask], strips scripts (R3 client) - API: extractDataUrls rewrites large inline resources into content-addressed assets (R3 server; verified 939KB inline -> 82-byte row + served asset) - Lead-gate steps: config on step, player overlay form blocks advance, submits to leads endpoint (editor toggle + MCP set_lead_gate) - Step-guide export (v2 slice): authed markdown + public HTML at /p/:token/guide - Video export (v3 slice, v0): ffmpeg slideshow of image steps + optional narration mux; DOM rasterization deferred to Chromium service (R4) - Editor: reorder arrows, embed-code copy, guide link, video export - REST reorder endpoint; MCP surface now 13 tools (export_guide, set_lead_gate, render_video) - ffmpeg added to runtime image E2E verified incl. R3 extraction round-trip, lead_gate in public JSON, guide renders, MCP agent exported guide + rendered video.
23 lines
774 B
Docker
23 lines
774 B
Docker
# Version: 0.1.0
|
|
FROM node:22-alpine AS build
|
|
WORKDIR /app
|
|
COPY package.json ./
|
|
COPY apps/api/package.json apps/api/
|
|
COPY apps/editor/package.json apps/editor/
|
|
RUN npm install --workspaces --include-workspace-root
|
|
COPY tsconfig.base.json ./
|
|
COPY apps ./apps
|
|
RUN npm run build -w apps/editor && npm run build -w apps/api
|
|
|
|
FROM node:22-alpine
|
|
RUN apk add --no-cache ffmpeg
|
|
WORKDIR /app
|
|
ENV NODE_ENV=production
|
|
COPY package.json ./
|
|
COPY apps/api/package.json apps/api/
|
|
RUN npm install --omit=dev -w apps/api --include-workspace-root=false && npm cache clean --force
|
|
COPY --from=build /app/apps/api/dist apps/api/dist
|
|
COPY --from=build /app/apps/api/public apps/api/public
|
|
COPY apps/api/src/migrations apps/api/dist/migrations
|
|
EXPOSE 3000
|
|
CMD ["node", "apps/api/dist/index.js"]
|