仕様・API

技術スタック

モノレポ構成・Docker。

技術スタック(確定)

リポジトリ

  • npm workspaces モノレポ(ルート package.json
  • apps/web … 管理UI・公開入口(Next.js 14 App Router)
  • apps/api … REST API(FastAPI)
  • packages/viewer … スワイプ閲覧ランタイム(TypeScript、埋め込み/ZIP向け)

ランタイム

領域技術
フロントNext.js 14, React 18, TypeScript, Tailwind
APIPython 3.12, FastAPI, Pydantic, SQLAlchemy 2
DBPostgreSQL 16
オブジェクトストレージS3互換(開発: MinIO、本番: R2 / S3 + CDN 前提)
リバースプロキシ既存 nginx-proxy + acme-companion(ploxy)

通信

  • ブラウザ → Next のみ同一オリジン。/api/*Next の rewriteapi サービスへ転送(API_INTERNAL_URL)。
  • 公開LP API(仕様書の /v1/public/...)は FastAPI が提供。

デプロイ

  • docker composepostgres / minio / api / web
  • web のみ proxy ネットワークに接続し、sslip.io 等のホストで HTTPS。

管理API(v0.1 実装)

詳細・リクエスト形式は manage-api-v0.1.md を正とする。

環境変数 ADMIN_TOKEN(Compose では SWIPE_LP_ADMIN_TOKEN から注入)を Authorization: Bearer … または X-Admin-Token で送る。

メソッドパス内容
POST/v1/manage/workspacesWorkspace 作成 { name, slug }
GET/v1/manage/workspaces一覧
POST/v1/manage/workspaces/{id}/landing-pagesLP 作成(public_id は ULID 自動、初回定義は steps 1件以上
GET/v1/manage/workspaces/{id}/landing-pagesLP 一覧
POST/v1/manage/workspaces/{ws}/landing-pages/{lp}/assetsメディアアップロード(multipart/form-datafile
PATCH/v1/manage/workspaces/{ws}/landing-pages/{lp}definition 更新(definition.id は変更不可)
POST/v1/manage/workspaces/{ws}/landing-pages/{lp}/publish公開
POST/v1/manage/workspaces/{ws}/landing-pages/{lp}/unpublish非公開(公開URL・埋め込みは 410。下書き定義は残る)
POST/v1/manage/workspaces/{ws}/landing-pages/{lp}/keys計測キー発行(平文は一度だけレスポンス)
GET/v1/manage/workspaces/{ws}/landing-pages/{lp}/analytics/summary集計サマリー(取り込みバッチから算出)

計測インジェスト

  • POST /v1/analytics/eventsapi-v0.1.mdX-SwipeLP-Key 必須。開発シードのデモキー: pk_live_swipelp_seed_demo_0001demo LP 用)。

ソース: docs/spec/stack.md