仕様・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 |
| API | Python 3.12, FastAPI, Pydantic, SQLAlchemy 2 |
| DB | PostgreSQL 16 |
| オブジェクトストレージ | S3互換(開発: MinIO、本番: R2 / S3 + CDN 前提) |
| リバースプロキシ | 既存 nginx-proxy + acme-companion(ploxy) |
通信
- ブラウザ → Next のみ同一オリジン。
/api/*は Next の rewrite でapiサービスへ転送(API_INTERNAL_URL)。 - 公開LP API(仕様書の
/v1/public/...)は FastAPI が提供。
デプロイ
docker composeでpostgres/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/workspaces | Workspace 作成 { name, slug } |
GET | /v1/manage/workspaces | 一覧 |
POST | /v1/manage/workspaces/{id}/landing-pages | LP 作成(public_id は ULID 自動、初回定義は steps 1件以上) |
GET | /v1/manage/workspaces/{id}/landing-pages | LP 一覧 |
POST | /v1/manage/workspaces/{ws}/landing-pages/{lp}/assets | メディアアップロード(multipart/form-data・file) |
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/events… api-v0.1.md。X-SwipeLP-Key必須。開発シードのデモキー:pk_live_swipelp_seed_demo_0001(demoLP 用)。