- Fastify API: demos/steps CRUD, content-addressed assets, scoped API keys (read/author/publish/admin, draft-only default per D4) - Player: image + sandboxed DOM steps, hotspots, tooltips, keyboard nav, privacy-first beacons (no IP storage, viewer tokens only — R7) - Editor: React SPA — demo list, drag-to-draw hotspots, annotations, publish - MCP server: Streamable HTTP, scope-filtered tools, untrusted-data wrapping on viewer-supplied content (R8); platform never calls a model - Capture extension (MV3): screenshot-flow recording, hotspots pre-placed from real clicks - Docker: single app image + postgres, Traefik-ready (expose only) E2E verified: capture->author->publish->play->beacon->lead->analytics + full MCP tool surface with scope filtering.
22 lines
744 B
Docker
22 lines
744 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
|
|
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"]
|