| # Dify Import/Export Baseline (Required) | |
| This repo will generate a Dify-importable Workflow App JSON at `dify/geo-workflow.app.json`. | |
| Because Dify export formats can vary by version/deployment, you must first export a minimal Workflow app from YOUR Dify instance and place it here: | |
| - `dify/sample/dify-export.json` | |
| ## 1) Export sample (manual) | |
| 1. In Dify UI, create a minimal Workflow App (one node is fine). | |
| 2. Use the UI Export function to export JSON. | |
| 3. Save the exported JSON as `dify/sample/dify-export.json` in this repo. | |
| ## 2) Validate sample JSON (local) | |
| Run: | |
| `powershell -NoProfile -Command "Get-Content dify/sample/dify-export.json -Raw | ConvertFrom-Json > $null; 'OK'"` | |
| Expected output: `OK` | |
| ## 3) Validate generated GEO workflow JSON | |
| After `dify/sample/dify-export.json` exists, validate the generated file with: | |
| `powershell -NoProfile -File scripts/verify-dify-app-json.ps1 -Path dify/geo-workflow.app.json -SamplePath dify/sample/dify-export.json -Strict` | |
| ## Repo DSL (source-of-truth) | |
| This repo also includes a human-maintained workflow spec: | |
| - `dify/dify_geo_checker_cn.dsl.yml` | |
| It captures the intended nodes, variables, and data flow. Once we have a real Dify export baseline, we can generate an importable Dify app JSON from this DSL. | |
| ## Stack (recommended) | |
| This repository includes a Docker Compose stack for: | |
| - `runner_service/` (FastAPI + Playwright; stores evidence in MinIO) | |
| - `db_service/` (FastAPI + Postgres; brand-pairs + persistence endpoints) | |
| - `postgres` + `minio` | |
| Quick start (manual): | |
| - `cp .env.example .env` | |
| - `docker compose up -d --build` | |
| - Smoke check: `powershell -NoProfile -File scripts/smoke-local.ps1` | |
| ## Hugging Face Spaces (single FastAPI) | |
| For Hugging Face Spaces (Docker), use the repo root `Dockerfile` which runs a single FastAPI app: | |
| - Runner API under `/runner/*` | |
| - DB API under `/db/*` | |
| When running the Dify workflow (`dify/dify_geo_checker_cn.dsl.yml`), set: | |
| - `runner_base_url` to `https://<space>.hf.space/runner` | |
| - `db_service_base_url` to `https://<space>.hf.space/db` | |
| Supabase + external MinIO config template: `.env.hf.example` | |
| ### Evidence URL (Cloudflare R2 public) | |
| If you enabled Cloudflare R2 public access and your public URL works as: | |
| - `https://pub-xxxx.r2.dev/<object-key>` | |
| Set: | |
| - `RUNNER_S3_PUBLIC_BASE_URL=https://pub-xxxx.r2.dev` | |
| Then the Runner returns screenshot URLs using the public domain (clickable in dashboards). | |