# Process & sell — end-to-end summary (Descrybe v2) Last updated: 2026-08-04 Repo: `f:/laragon/www/_MY/descrybe-v2` Short guide for verifying the parallel feature work: standard fields, feed auto-map, sync+process (including EPREL/specs), export, and the public API + docs. ## Prerequisites ```powershell cd f:/laragon/www/_MY/descrybe-v2 docker compose up -d # Postgres on host :5433 (healthy) $env:DATABASE_URL = "postgres://descrybe:descrybe@localhost:5433/descrybe?sslmode=disable" # Goose migrations through 009 (008 standard fields config, 009 processing step progress; 007 already applied) cd apps/api go run github.com/pressly/goose/v3/cmd/goose@v3.24.3 -dir sql/schema postgres $env:DATABASE_URL up # API + worker (separate terminals) go run ./cmd/api go run ./cmd/worker # Web cd ../web npm install npm run dev ``` - Web: http://localhost:5174 - API: http://localhost:8080 - API docs (RapiDoc): http://localhost:5174/docs - OpenAPI YAML: http://localhost:8080/api/v1/openapi.yaml ## Demo credentials From [demo-user.md](demo-user.md): | Field | Value | |-------|--------| | Email | `demo@descrybe.test` | | Password | `DemoPass123!` | | Role | Platform admin; **Platform Demo** only (not A1) | | Default company | **Platform Demo** (sandbox; see [safe-test-fixtures.md](safe-test-fixtures.md)) | | Demo API key | `dk_demo_local_descrybe_test_key_v1` → Platform Demo only | Re-seed anytime: ```powershell cd apps/api $env:DATABASE_URL = "postgres://descrybe:descrybe@localhost:5433/descrybe?sslmode=disable" go run ./cmd/seed-demo -postgres $env:DATABASE_URL ``` `seed-demo` assigns the **Platform Demo** plan (~1M AI credits). Do **not** top up or rename **A1 Slovenija**. Resolve Platform Demo `company_id` from SQL/`/api/auth/me` before any wallet UPDATE. ## How to test (happy path) 1. **Login** at http://localhost:5174/login with the demo credentials → land on `/dashboard` (company **Platform Demo**). 2. **Standard fields** → open `/standard-fields`, enable the **recommended** standard fields (company config from migration `008`). 3. **Open a feed** → `/feeds`, pick an input feed with URL data → `/feeds/{feedId}` (and `/feeds/{feedId}/mapping`). 4. **Auto-map** → run auto-map on the feed mapping so source columns/paths bind to product + standard fields. 5. **Sync + process a sample** → sync the feed (URL CSV/XML → `raw_products`), then start a small processing job (dashboard Background Tasks `/processing`, or select raw products and process). Keep the **worker** running. 6. **See EPREL / specs** → open a processed product; when `EPREL_ENABLED=true` and an EPREL id is present, attributes include `eprel_*` / nested `eprel`; specs come from the `parse_specs` / `fill_fields` steps. See [eprel.md](eprel.md). 7. **Export** → `/export-feeds`, generate or open the public XML/CSV stream for a template that maps `eprel_*` / attribute sources. 8. **Public API + docs** → browse http://localhost:5174/docs (RapiDoc) and smoke: ```bash curl -s -H "Authorization: Bearer dk_demo_local_descrybe_test_key_v1" \ "http://localhost:8080/api/v1/products?limit=1" ``` Processing via public API (same pipeline as the dashboard): - `POST /api/v1/process` - `GET /api/v1/process/{id}` ## Env flags Set on the **API** and especially the **worker** (enrichment runs in `ProcessJob`): | Variable | Default | Purpose | |----------|---------|---------| | `EPREL_ENABLED` | `false` | Turn on EPREL enrichment step | | `EPREL_TIMEOUT` | `10s` | HTTP client timeout | | `EPREL_BASE_URL` | `https://eprel.ec.europa.eu/api` | Override for tests/proxies | | `EPREL_FICHE_LANGUAGE` | `EN` | Product fiche language | | `EPREL_API_KEY` | _(empty)_ | Optional `X-API-KEY` — never log | | `OPENAI_API_KEY` | _(empty)_ | Enables OpenAI enhance; without it, heuristic fallback still runs | | `OPENAI_MODEL` | `gpt-4o-mini` | Chat model | | `OPENAI_BASE_URL` | `https://api.openai.com/v1` | Override for proxies | Example worker env: ```powershell $env:DATABASE_URL = "postgres://descrybe:descrybe@localhost:5433/descrybe?sslmode=disable" $env:EPREL_ENABLED = "true" $env:OPENAI_API_KEY = "sk-..." # optional go run ./cmd/worker ``` ## What was deferred Not in scope for this reconcile / parallel feature pass (see [status-and-gaps.md](status-and-gaps.md)): - **Stripe** checkout / subscriptions (manual credits + plans only) - **River** job client (DB claim + NOTIFY remains) - Feed **FTP / Excel / uploaded-file** ingest; export **schedule / object storage** - Rich WooCommerce mapping UI + live store E2E - Production cutover blockers: Clerk email patch, membership role promotion, SMTP set-password smoke - Org export/import, WebSocket live updates, GitHub Actions CI - Structured-descriptions / vector-categories **backend** APIs (UI shells exist) - Pinecone index tuning (optional; needs config) ## Related docs - [demo-user.md](demo-user.md) — credentials, API key, company counts - [eprel.md](eprel.md) — EPREL step, export aliases, tests - [status-and-gaps.md](status-and-gaps.md) — full gap list - [go-live-checklist.md](go-live-checklist.md) — cutover gates - Root [README.md](../README.md) — quick start ## Build smoke (reconcile) ```powershell cd apps/api; go build ./... cd ../web; npm run check ``` Expected: Go packages compile; `svelte-check` reports 0 errors / 0 warnings.