From 032bda7cb7705ffce8269d7a7f53ebf3c326be4f Mon Sep 17 00:00:00 2001 From: Niranjan Kurambhatti Date: Sat, 25 Jul 2026 07:33:28 +0000 Subject: [PATCH] positioning: drop Shopify from wording; URL as sole intake MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reframe the top-level positioning + operating contracts around a single intake primitive: an existing web page link. Aligns Shoploop with the NVIDIA OpenUSD product configurator reference architecture (https://developer.nvidia.com/blog/developing-product-configurators-with-openusd/) where the customer's data is aggregated, expressed as OpenUSD, exposed as variants (model x material x style x artwork), rendered, QC'd, and delivered. Wording changes only. Connector code under connectors/shopify/ and apps/ is untouched — Shopify remains one of many optional secondary data sources, never a required intake. - README.md: new 'Intake: one URL' section; drop 'on Shopify' from tagline; swap 'Shopify admin API' out of the loop diagram in favor of the generic web publish path; contributor list swaps 'Shopify admin API adapter' for 'URL to USD product-twin extractor'. - POSITIONING.md: new 'Intake — one URL, nothing else' section anchored to NVIDIA OpenUSD ref arch; drop 'on Shopify' from one-liner; loop step 3 no longer requires Shopify commerce read; loop step 7 rewrites as 'update the page' via PR or hosted-CMS API. - agent.md: new locked 'Intake rule'; four-repo table renames shoploop-shopify -> shoploop-delivery in wording; active board swaps 'Shopify app scaffold' for 'URL page parser'; decision gate adds rule 6 (reject non-URL intake surfaces); founder location Houston -> Seattle to match current context. - soul.md: platform-neutralize checkout dogma; add URL as the intake primitive in the stack-as-soul block; drop Shopify-specific metaphors. - AGENTS.md: locked-decisions swaps 'Shopify App Store' for URL paste on shoploop.studio; architecture loop leads with 'Existing Web Page URL'; releases v0.2 renamed 'URL-intake Public Beta'; never-do list adds 'propose intake surfaces other than URL'; founder location Houston -> Seattle. - LOOP_SPEC.md: Loop 1 rewritten as 'URL Intake (Page -> Twin)' with full 9-primitive spec; original connector ingest demoted to Loop 1b (secondary, optional); Loop 6 rewritten as 'Web Page Update (PR-first)' with hosted-CMS API as optional-connect path only; Loop 8 regression scope widened from Shopify+WooCommerce to top 30 storefront templates; scheduling policy re-gated on URL paste, not connector enrollment. - design.md: description + hero one-liner drop 'on Shopify' / 'for every Shopify tabletop brand' in favor of 'one URL in, configurator out' / 'every tabletop brand with a web page'. --- AGENTS.md | 36 ++++++++++++++++++--------------- LOOP_SPEC.md | 55 +++++++++++++++++++++++++++++++++----------------- POSITIONING.md | 30 ++++++++++++++++++--------- README.md | 26 ++++++++++++++++-------- agent.md | 51 ++++++++++++++++++++++++++-------------------- design.md | 4 ++-- soul.md | 17 ++++++++-------- 7 files changed, 135 insertions(+), 84 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 636ea94..9c0d0fe 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,15 +6,15 @@ You are working in the [Shoploop](https://github.com/ninan-versioning/shoploop) Owns `ARCHITECTURE.md`, `agent.md`, `soul.md` — the operating contracts every other repo and every AI agent reads. Cross-repo orchestration, threat response, policy enforcement engine, billing/metering, cost guardrails, data-ownership receipts, enterprise distribution. -**Do not put here:** product/render code (→ shoploop-core), Shopify-specific code (→ shoploop-shopify), growth orchestration code (→ shoploop-growth), public schemas (→ open-brand). This is the brain, not the body. +**Do not put here:** product/render code (→ shoploop-core), delivery/adapter code (→ shoploop-delivery, formerly shoploop-shopify), growth orchestration code (→ shoploop-growth), public schemas (→ open-brand). This is the brain, not the body. --- ## Mission -Shoploop = Grip-from-below. Grip serves LVMH/L'Oréal at enterprise pricing. Shoploop serves **$1M–$10M GMV Shopify D2C brands at $99–$299/month**. Distribution: Shopify App Store first. Dogfood: [Drink Varitea](https://github.com/ninan-versioning/drinkvaritea). +Shoploop = Grip-from-below. Grip serves LVMH/L'Oréal at enterprise pricing. Shoploop serves **$1M–$10M GMV tabletop D2C brands at $99–$299/month**. Distribution: URL paste on shoploop.studio first. Dogfood: [Drink Varitea](https://github.com/ninan-versioning/drinkvaritea). -Full-funnel positionless AI marketing for physical products. **AWS + NVIDIA + Mistral** stack. +Full-funnel positionless AI marketing for tabletop physical products. **URL is the only intake.** **AWS + NVIDIA + Mistral** stack. ## Locked decisions — do not re-litigate @@ -22,12 +22,13 @@ Full-funnel positionless AI marketing for physical products. **AWS + NVIDIA + Mi - AWS build stack (never Vercel for GPU workloads) - Mistral + Codestral for autoresearch (climbmix-400b-shuffle dataset) - Varitea as primary dogfood -- Shopify App Store as primary distribution +- **URL paste is the sole intake surface** (per [NVIDIA OpenUSD product configurator reference architecture](https://developer.nvidia.com/blog/developing-product-configurators-with-openusd/)). No catalog upload, no CSV, no SKU form. OAuth connects are secondary/optional. +- URL paste on shoploop.studio as primary distribution - 2D → lifestyle image wedge ships first (6 weeks); full USD pipeline after PMF signal - Three-tier render: `flux_pro` default · `ai_product_photo` mid · `omniverse` Scale tier only - Single OSS surface: [`open-brand`](https://github.com/ninan-versioning/open-brand) (replaces planned open-pmf, renamed from open-icp) - Klaviyo: orchestrate above, not beside -- Shopify Autopilot: channel expansion + brand-constrained creative is the wedge +- Channel expansion + brand-constrained creative from a single URL is the wedge ## Decision gate — every PR must answer @@ -40,13 +41,15 @@ Full-funnel positionless AI marketing for physical products. **AWS + NVIDIA + Mi ## Architecture loop ``` -Shopify Catalog → Product Ingest (→ product_twin.usda) -→ Scene Composer (brand_rules.json + USD stage) -→ Render Pipeline (Flux Pro default; AWS EC2 G/P + OpenUSD at Scale) -→ Post-Process (ComfyUI / SD-XL) → Creative Pack -→ Distribution (Meta / TikTok / Google / Klaviyo / Postiz) -→ Performance Ingest (ROAS, CTR, CAC, GA4) -→ Thompson Sampling → brand_rules.json (loop closes) +Existing Web Page URL + → Page Parser (DOM + JSON-LD + OG + PDP heuristics) + → Product Ingest (→ product_twin.usda + brand_rules.json + variant sets) + → Scene Composer (brand_rules.json + USD stage) + → Render Pipeline (Flux Pro default; AWS EC2 G/P + OpenUSD at Scale) + → Post-Process (ComfyUI / SD-XL) → Creative Pack + → Distribution (Meta / TikTok / Google / Klaviyo / Postiz) + → Performance Ingest (ROAS, CTR, CAC, GA4, PostHog) + → Thompson Sampling → brand_rules.json (loop closes) ``` Moat = USD scene graph + brand constraint enforcement. Not image generation. `soul.md` defines aesthetic constraints enforced at Scene Composer. **Kinfolk test**: if a frame wouldn't fit a Kinfolk spread, it's a regression. @@ -57,7 +60,7 @@ Moat = USD scene graph + brand constraint enforcement. Not image generation. `so |---|---| | [shoploop](https://github.com/ninan-versioning/shoploop) | Control plane · orchestration · policy · threat response | | [shoploop-core](https://github.com/ninan-versioning/shoploop-core) | OpenUSD · brand_rules engine · Scene Composer · closed moat | -| [shoploop-shopify](https://github.com/ninan-versioning/shoploop-shopify) | Shopify app · admin extensions · theme extensions | +| [shoploop-delivery](https://github.com/ninan-versioning/shoploop-shopify) | Web-publish adapters (GitHub PR + hosted-CMS admin APIs) · embed · AR configurator (repo still named shoploop-shopify on disk; rename tracked) | | [shoploop-growth](https://github.com/ninan-versioning/shoploop-growth) | Full-funnel growth · paid + organic + lifecycle | | [open-brand](https://github.com/ninan-versioning/open-brand) | Public OSS · brand_rules schema · reference pipeline | | [drinkvaritea](https://github.com/ninan-versioning/drinkvaritea) | Dogfood brand (loose-leaf tea) | @@ -65,7 +68,7 @@ Moat = USD scene graph + brand constraint enforcement. Not image generation. `so ## Releases - **v0.1 Varitea Closed-Loop** (Aug 1) — dogfood cut. Flux Pro tier. No Stripe. No Omniverse. Kinfolk gate green. -- **v0.2 Shopify App Store Launch** (Oct 1) — public beta. GDPR webhooks. Stripe + managed billing. open-brand v0 published. +- **v0.2 URL-intake Public Beta** (Oct 1) — shoploop.studio paste-a-URL flow live. GDPR webhooks on optional connects. Stripe + managed billing. open-brand v0 published. - **v0.3 Enterprise / Scale Tier** (Dec 15) — Omniverse. AP2 mandates. Amazon SP-API. Lifecycle automation. ## Tone for agents working here @@ -83,11 +86,12 @@ Moat = USD scene graph + brand constraint enforcement. Not image generation. `so - Re-explain D2C market sizing — already done - Open with sycophantic preambles ("Great question!", "Let's dive in!") - Produce trend reports -- Re-explain NVIDIA Omniverse, OpenUSD, Shopify app architecture, Temporal, Thompson Sampling, gstack, Mistral/Codestral, Polaris/Remix +- Re-explain NVIDIA Omniverse, OpenUSD, usd-content-agents, Temporal, Thompson Sampling, gstack, Mistral/Codestral, Polaris/Remix +- Propose intake surfaces other than URL. If a task needs data the URL can't provide, expose it as an optional secondary connect — not a required intake. ## Founder context -Solo technical founder, Houston TX, visa constraints. Parallel projects: Shoploop (primary), Drink Varitea (dogfood), Open Employee, Agentframe, Saas-Ikigai, Klartech. Stack: TypeScript/Node.js · Python · React/Next.js · AWS · Vercel (non-GPU) · Shopify · Temporal · Supabase · Cloudflare · LibSQL. Budget: $10K committed. +Solo technical founder, Seattle WA, visa constraints. Parallel projects: Shoploop (primary), Drink Varitea (dogfood), Open Employee, Agentframe, Saas-Ikigai, Klartech. Stack: TypeScript/Node.js · Python · React/Next.js · AWS · Vercel (non-GPU) · Temporal · Supabase · Cloudflare · LibSQL. Budget: $10K committed. --- diff --git a/LOOP_SPEC.md b/LOOP_SPEC.md index ae35409..0ffdf4a 100644 --- a/LOOP_SPEC.md +++ b/LOOP_SPEC.md @@ -4,8 +4,11 @@ _Last updated: 2026-07-24 · Status: drafted, not scheduled_ ## The Product = The Reverse-Feedback Content Loop +**Intake rule (locked):** the only intake is an existing web page link. All other data sources (Google Ads, Meta, Klaviyo, GitHub) are secondary, optional connects layered on after the URL is parsed. + ``` -Customer connects (Nango) → PostHog reads impact → Creative Mutation generates variants +Customer pastes URL → Page Parser → product_twin.usda + brand_rules.json + variant sets +→ PostHog reads impact → Creative Mutation generates variants → 3D Render Batch produces MP4/PNG/USDZ → Ads Auto-Publish (Postiz) & Website Update PR → PostHog reads impact → posterior compounds nightly ``` @@ -18,17 +21,30 @@ Each loop is defined against the 9-primitive framework: Target · Fitness · Sea --- -### Loop 1 — Connector Ingest -- **Runs:** every 15 min -- **Job:** Nango pulls fresh data from customer's Google Ads + Shopify + PostHog + Meta + Klaviyo + GitHub into their own Postgres partition -- **Target:** 100% connector uptime, <5min data freshness lag by 2026-09-30 +### Loop 1 — URL Intake (Page → Twin) +- **Runs:** on paste (event-driven) + revalidate every 24h per active URL +- **Job:** fetch the pasted page, run Page Parser (DOM + JSON-LD + OG + PDP heuristics + LLM extract fallback), emit `product_twin.usda` + `brand_rules.json` + variant sets into the customer's Postgres partition and git +- **Target:** ≥90% of pasted URLs produce a renderable twin without human touch by 2026-09-30 +- **Fitness:** (auto-parse-success × 0.6) + (extractor-confidence × 0.4) +- **Search Space:** extractor strategies × material heuristics × variant-inference prompts +- **Stopping:** twin passes Validation Agent OR 3 extractor strategies exhausted → human review queue +- **Mutation:** on low confidence, escalate to next extractor; log which strategy won per URL pattern +- **Memory:** per-domain extractor priors in Postgres (Shoploop learns which strategy fits which storefront pattern) +- **Ground Truth:** Validation Agent + weekly human spot-check +- **Boundary:** no auto-render until twin passes Validation Agent; failed twins land in customer's review queue +- **Decay:** per-domain priors halved every 90 days (page templates drift) + +### Loop 1b — Optional Connector Ingest (secondary) +- **Runs:** every 15 min, only for customers who have connected optional data sources +- **Job:** Nango pulls fresh data from optional connects (Google Ads, PostHog, Meta, Klaviyo, GitHub) into their own Postgres partition. Never required for Loops 2–6 to start. +- **Target:** 100% connector uptime on connected sources, <5min freshness lag - **Fitness:** rows-synced-per-15min / expected-rows; alert if <95% -- **Search Space:** connectors enabled at customer onboarding +- **Search Space:** connectors enabled by customer post-URL-paste - **Stopping:** none (continuous) - **Mutation:** on API error, backoff + retry per Nango retry policy - **Memory:** last-cursor per connector in Postgres - **Ground Truth:** connector's own API response -- **Boundary:** OAuth expiration triggers customer email, does not auto-refresh +- **Boundary:** OAuth expiration triggers customer email, does not auto-refresh; a URL customer with zero connects still gets full Loop 2–6 output - **Decay:** cursor state resets on connector reconnect ### Loop 2 — PostHog Reverse-Feedback Analyst @@ -83,15 +99,15 @@ Each loop is defined against the 9-primitive framework: Target · Fitness · Sea - **Boundary:** hard $ cap per week per customer; customer sets in onboarding - **Decay:** paused ads deleted after 30 days idle -### Loop 6 — Website Update PR / API Push +### Loop 6 — Web Page Update (PR-first) - **Runs:** daily 3am PT -- **Job:** for website changes (new hero, updated PDP 3D asset, copy tweaks, molecule swaps), open PR against customer's GitHub repo OR push to Shopify admin API. Adapter chosen at onboarding -- **Target:** website changes go live within 24h of Loop 3 approval +- **Job:** for changes to the pasted URL(s) (new hero, updated PDP 3D asset, copy tweaks, molecule swaps), open a PR against the customer's page repo (GitHub default). If the page lives on a hosted CMS the customer has optionally connected, push via that platform's admin API instead. Adapter auto-detected from the URL and customer's optional connects. +- **Target:** page changes go live within 24h of Loop 3 approval - **Fitness:** median-time-from-approval-to-live < 24h -- **Search Space:** all pages tagged for auto-update in customer config -- **Stopping:** customer approval required on GitHub PR path; auto on Shopify API path with rollback watch +- **Search Space:** all URLs the customer has pasted + subpages the parser has discovered +- **Stopping:** customer approval required on GitHub PR path; auto on hosted-CMS API path with rollback watch (only when customer has connected the CMS) - **Mutation:** on PR rejection, learn from customer's commit diff (feed back to Loop 3) -- **Memory:** PR history + Shopify version log per customer +- **Memory:** PR history + hosted-CMS version log per customer - **Ground Truth:** post-deploy PostHog session recording sample - **Boundary:** irreversible destructive changes (delete page, remove SKU) always require PR + human approve, never auto-API - **Decay:** PR auto-closes after 7 days no activity, re-opens with fresh context @@ -111,10 +127,10 @@ Each loop is defined against the 9-primitive framework: Target · Fitness · Sea ### Loop 8 — Platform Health (Nango + Embed + Renders) - **Runs:** hourly -- **Job:** pings every customer's Nango OAuth + embed instance + render pipeline. Alerts on breakage. Weekly regression tests against top 20 Shopify + top 10 WooCommerce themes for embed compatibility -- **Target:** 99.9% embed uptime, MTTR < 30min, zero silent connector failures +- **Job:** pings every customer's URL intake + optional Nango OAuth + embed instance + render pipeline. Alerts on breakage. Weekly regression tests against the top 30 storefront page templates (Shopify, WooCommerce, BigCommerce, Squarespace, Webflow, static HTML) for parser + embed compatibility +- **Target:** 99.9% embed uptime, MTTR < 30min, zero silent parser or connector failures - **Fitness:** (uptime × 0.5) + (1/MTTR × 0.3) + (regression_pass_rate × 0.2) -- **Search Space:** all live customer instances + top 30 host themes +- **Search Space:** all live customer instances + top 30 storefront page templates - **Stopping:** none (continuous) - **Mutation:** on regression failure, auto-file fix PR to packages/embed - **Memory:** incident log per customer, theme compatibility matrix @@ -159,9 +175,10 @@ Loop 3 uses PostHog session recordings (VLM samples 5/cycle for genuine vs rage- ## Scheduling policy -- Loops 1, 8 always-on (platform reliability) -- Loops 2, 3, 4, 5 gated by "customer has enrolled + Nango connected" -- Loop 6 gated by "customer chose GitHub or Shopify adapter" +- Loop 1, Loop 8 always-on (platform reliability) +- Loop 1b (optional connectors) runs only for customers who have connected optional sources +- Loops 2, 3, 4, 5 gated by "customer has pasted at least one URL and twin passed Loop 1 Validation" +- Loop 6 gated by "customer has a page repo (GitHub PR path) OR has connected a hosted CMS (API path)" - Loop 7 gated by "customer has trilingual enabled" (default: yes) - Loops 9, 10 always-on (founder-facing) diff --git a/POSITIONING.md b/POSITIONING.md index ec29051..4eb66d2 100644 --- a/POSITIONING.md +++ b/POSITIONING.md @@ -1,10 +1,10 @@ # Shoploop — Positioning -_Last updated: 2026-07-25 · Branch: jared/tabletop-swap_ +_Last updated: 2026-07-25 · Branch: jared/drop-shopify-wording-url-intake_ ## One line -**Full-funnel positionless AI marketing for tabletop products on Shopify.** +**Full-funnel positionless AI marketing for tabletop products.** ## What "tabletop" means @@ -17,19 +17,31 @@ Countertop/shelf-visible SKUs a consumer can grip, rotate, and inspect in 3D. Ve - **Wedge 2+** — skincare, spirits, coffee, sauces, supplements, candles, condiments, home fragrance - **Never** — injectables, medical devices, prescription-only, cold-chain biologics +## Intake — one URL, nothing else + +**The only intake is an existing web page link.** No catalog upload, no OAuth wizard, no CSV, no SKU form. Paste the URL of a product page (PDP, landing, brand homepage, Linktree). Shoploop extracts: + +- The product model (geometry class + dimensions) → `product_twin.usda` +- Materials (glass, PET, HDPE, aluminum, cardboard) → PBR shader graph +- Brand rules (palette, type, logo, voice) → `brand_rules.json` +- Variant axes (size, flavor, dosage, molecule) → USD variant sets +- Existing copy in whatever language(s) the page ships + +This matches the [NVIDIA OpenUSD product configurator reference architecture](https://developer.nvidia.com/blog/developing-product-configurators-with-openusd/): aggregate data → OpenUSD → variants → render → deliver. The URL is the aggregation layer; OpenUSD is the composition layer; Omniverse Kit is the delivery layer. + ## What "positionless full-funnel" means One agent, one loop, one graph — from ad impression to purchase to reorder — with no human "position" (media buyer, designer, copywriter, dev) required in the middle. -The customer connects their stack once. The agent then: +The customer pastes one URL. The agent then: -1. Reads their ad performance (Google Ads, Meta, Klaviyo) -2. Reads their site engagement (PostHog sessions, session recordings) -3. Reads their commerce (Shopify orders, ATC, checkout drop-off) -4. Mutates creatives (3D angle × molecule × material × copy × language) +1. Parses the page into a USD product twin + brand rules + variant graph +2. Reads ad performance where available (Google Ads, Meta, Klaviyo — optional connect) +3. Reads on-page engagement (PostHog auto-instrumented) +4. Mutates creatives (model × material × style × artwork × copy × language) 5. Renders (Blender + MolecularNodes + NVIDIA Omniverse + USD) 6. Publishes ads (Postiz to Meta/Google/YouTube) -7. Updates the website (GitHub PR or Shopify admin API) +7. Updates the page (GitHub PR against the page repo, or web publish API for hosted platforms) 8. Measures impact 9. Compounds the posterior nightly @@ -45,7 +57,7 @@ The customer connects their stack once. The agent then: | Alternative | What it does | Where it stops | |---|---|---| -| **grip.tools** | 3D commerce for luxury (LVMH, L'Oréal) | $500k/yr enterprise, agency-installed, not self-serve, no tabletop wedge for SMB Shopify, no molecular layer | +| **grip.tools** | 3D commerce for luxury (LVMH, L'Oréal) | $500k/yr enterprise, agency-installed, not self-serve, no tabletop wedge for SMB, no molecular layer, requires asset handoff (not URL intake) | | **Vagon.io / Innoactive** | Remote 3D streaming | Renders on their servers, no domain expertise, no ad-ops integration | | **Threekit / Emperia** | 3D product configurators | Configurator only, no ad-ops loop, no trilingual, no molecular | | **Postiz (upstream)** | Social scheduler | Scheduler only, no rendering, no PostHog feedback, no rendering pipeline | diff --git a/README.md b/README.md index eadfd0d..c66e464 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,29 @@ # Shoploop -**Full-funnel positionless AI marketing for tabletop products on Shopify.** +**Full-funnel positionless AI marketing for tabletop products.** -Any SKU a customer can grip, rotate, and inspect in 3D — bottles, jars, tubes, tins, boxes, sachets. grip.tools serves LVMH at $500k/yr. Shoploop serves every Shopify tabletop brand at **$0 OSS** / **$0 trial** / **$299/mo managed**. Self-hostable. AGPL-3.0. +Any SKU a customer can grip, rotate, and inspect in 3D — bottles, jars, tubes, tins, boxes, sachets. grip.tools serves LVMH at $500k/yr. Shoploop serves every tabletop brand at **$0 OSS** / **$0 trial** / **$299/mo managed**. Self-hostable. AGPL-3.0. ## What tabletop means Countertop / shelf-visible SKUs. **Not** injectables, devices, or Rx-only. First vertical wedge: **Ayurvedic + nutraceutical + OTC wellness** — that's where trilingual Devanagari support is our unfair advantage. Wedge two and beyond: skincare, spirits, coffee, sauces, supplements, candles. +## Intake: one URL + +**The only intake is an existing web page link.** Paste any product page — a PDP, a landing page, a Linktree, a brand homepage — and Shoploop parses it into a USD product twin, brand rules, and a variant graph. No catalog upload, no OAuth wizard, no CSV. One URL in, product configurator out. + +Inspired by the [NVIDIA OpenUSD product configurator reference architecture](https://developer.nvidia.com/blog/developing-product-configurators-with-openusd/): aggregate the product data, express it as OpenUSD, expose variants (model × material × style × artwork), render, QC, distribute. + ## The Product = The Reverse-Feedback Content Loop ``` -Customer connects (Nango) +Customer pastes a URL + → Page parsed into USD product twin + brand_rules.json + variant graph → PostHog surfaces opportunities - → Creative Mutation generates variants (3D angle × molecule × material × copy) + → Creative Mutation generates variants (model × material × style × artwork × copy) → Blender + MolecularNodes + Omniverse + USD render → Postiz auto-publishes ads (Meta / Google / YouTube Shorts) - → GitHub PR or Shopify admin API updates the website + → GitHub PR or web publish API updates the page → PostHog measures impact → posterior compounds nightly ``` @@ -41,17 +48,18 @@ See [`LOOP_SPEC.md`](./LOOP_SPEC.md). Each loop is defined against the 9-primiti **Frontend / Studio:** TypeScript · React · Next.js · React Three Fiber · Polotno · MediaPipe **Rendering:** Blender · MolecularNodes (Brady Johnston) · NVIDIA Omniverse Kit · OpenUSD · NVIDIA usd-content-agents (Material/Physics/Joint/Texture/Validation Agents) +**Intake:** URL fetch → DOM + JSON-LD + OG + PDP extractor → product_twin.usda + brand_rules.json **Backend / Infra:** Node.js · Python · Supabase (Postgres) · Nango (self-hosted OAuth broker, MIT) · Temporal · AWS g5.xlarge spot pool · Cloudflare CDN · Vercel **AI / Agent:** Mistral / Codestral · Thompson Sampling · autoresearch loops **Analytics:** PostHog (session recordings, funnel, feature flags) -**Distribution:** Postiz (AGPL scheduler, forked with hi/mr locales) · Shopify Admin API · Google Ads · Meta Ads · Klaviyo +**Distribution:** Postiz (AGPL scheduler, forked with hi/mr locales) · Google Ads · Meta Ads · Klaviyo **Provenance:** OpenTimestamps · Sentinel-2 (Copernicus) · IPFS (web3.storage) ## Positioning See [`POSITIONING.md`](./POSITIONING.md) for the full deck. -**One line:** Shoploop is grip.tools, democratized — for every Shopify tabletop brand. +**One line:** Shoploop is grip.tools, democratized — for every tabletop brand with a web page. ## License @@ -66,12 +74,14 @@ pnpm install pnpm dev ``` +Then paste any product URL into the local Studio and watch the twin render. + ## Contributing We're looking for contributors in: - Blender / MolecularNodes PBR material accuracy - Marathi / Hindi cultural QA for Ayurvedic terminology -- Shopify admin API adapter +- URL → USD product-twin extractor (DOM + JSON-LD + OG + PDP heuristics) - Postiz upstream integration (hi/mr locale merge) Open a PR or a discussion. diff --git a/agent.md b/agent.md index 9804d65..9e95a3b 100644 --- a/agent.md +++ b/agent.md @@ -1,64 +1,70 @@ -As a Shoploop-pa, you are the research and build partner for Shoploop / Creative Loop — a Shopify-native product turning physical product catalogs into high-volume, brand-safe ad creative via 3D rendering, AI scene composition, and positionless full-funnel marketing automation. Positioning: Grip-from-below. Grip serves LVMH/L'Oréal at enterprise pricing. Shoploop serves $1M–$10M GMV Shopify D2C brands at $99–$299/month. Dogfood brand: Drink Varitea (loose-leaf tea, Shopify + Stripe + GA4). Distribution: Shopify App Store first. +As a Shoploop-pa, you are the research and build partner for Shoploop / Creative Loop — full-funnel positionless AI marketing for tabletop physical products. The product turns any existing product web page into high-volume, brand-safe ad creative + a 3D configurator via URL intake → OpenUSD product twin → variant graph → render → distribute. Positioning: Grip-from-below. Grip serves LVMH/L'Oréal at enterprise pricing. Shoploop serves $1M–$10M GMV tabletop D2C brands at $99–$299/month. Dogfood brand: Drink Varitea (loose-leaf tea). Distribution: URL paste on shoploop.studio first. + +## Intake rule (locked) + +**The only intake is an existing web page link.** Not a catalog. Not a CSV. Not an OAuth flow. Not a SKU form. One URL in. The intake pipeline parses DOM + JSON-LD + OG + PDP heuristics into `product_twin.usda` + `brand_rules.json` + variant sets. Every product, agent, doc, and reference site assumes URL as the sole intake surface. Anything else is a secondary optional connect. ## The Founder -Technical founder in Houston, TX (visa constraints apply — factor into hiring/legal advice). Building in parallel: Shoploop (primary), Drink Varitea (dogfood), Open Employee (AI agent workforce, Temporal + Nango + MCP), Agentframe (Agent UI protocol), Saas-Ikigai (Founder OS), Klartech Solutions (marketing automation). Stack: TypeScript/Node.js · Python · React/Next.js · AWS · Vercel · Shopify · Temporal · Supabase · Cloudflare · LibSQL · gstack sprint workflow. Committed budget: $10K. AWS + Mistral stack. +Technical founder in Seattle, WA (visa constraints apply — factor into hiring/legal advice). Building in parallel: Shoploop (primary), Drink Varitea (dogfood), Open Employee (AI agent workforce, Temporal + Nango + MCP), Agentframe (Agent UI protocol), Saas-Ikigai (Founder OS), Klartech Solutions (marketing automation). Stack: TypeScript/Node.js · Python · React/Next.js · AWS · Vercel · Temporal · Supabase · Cloudflare · LibSQL · gstack sprint workflow. Committed budget: $10K. AWS + NVIDIA + Mistral stack. ## Operating Mode -Bias toward shipping — one action, not a decision tree. No re-explaining: NVIDIA Omniverse, OpenUSD, Shopify app architecture, Temporal, Thompson Sampling, gstack, autoresearch, Mistral/Codestral, Polaris/Remix. Code-first when relevant. Challenge wrong framings before answering. Attach monthly cost to every architecture suggestion. Default focus: Shoploop/Varitea unless another project is explicit. +Bias toward shipping — one action, not a decision tree. No re-explaining: NVIDIA Omniverse, OpenUSD, usd-content-agents, Temporal, Thompson Sampling, gstack, autoresearch, Mistral/Codestral, Polaris/Remix. Code-first when relevant. Challenge wrong framings before answering. Attach monthly cost to every architecture suggestion. Default focus: Shoploop/Varitea unless another project is explicit. -**Never:** suggest Vercel for GPU workloads · rebuild when scoping down works · re-research Grip/Uplane/Optimove/Postiz · re-explain D2C market sizing · open sycophantic openers · produce trend reports. +**Never:** suggest Vercel for GPU workloads · rebuild when scoping down works · re-research Grip/Uplane/Optimove/Postiz · re-explain D2C market sizing · open sycophantic openers · produce trend reports · propose intake surfaces other than URL. ## Locked Decisions -gstack + AWS build stack · climbmix-400b-shuffle as autoresearch dataset · Varitea as dogfood · App Store distribution · 2D→lifestyle image wedge first (6-week ship), full USD pipeline after PMF signal. +gstack + AWS build stack · climbmix-400b-shuffle as autoresearch dataset · Varitea as dogfood · **URL paste as the sole intake** (per NVIDIA OpenUSD configurator reference architecture) · 2D→lifestyle image wedge first (6-week ship), full USD pipeline after PMF signal. ## Architecture ``` -Shopify Catalog → Product Ingest (→ product_twin.usda) -→ Scene Composer (brand_rules.json + USD stage) -→ Render Pipeline (AWS EC2 G/P → OpenUSD → EXR) -→ Post-Process (ComfyUI / SD-XL) → Creative Pack -→ Distribution (Meta / TikTok / Klaviyo) -→ Performance Ingest (ROAS, CTR, CAC) -→ Thompson Sampling → brand_rules.json (loop) +Existing Web Page URL + → Page Parser (DOM + JSON-LD + OG + PDP heuristics) + → Product Ingest (→ product_twin.usda + brand_rules.json + variant sets) + → Scene Composer (brand_rules.json + USD stage) + → Render Pipeline (AWS EC2 G/P → OpenUSD → EXR) + → Post-Process (ComfyUI / SD-XL) → Creative Pack + → Distribution (Meta / TikTok / Klaviyo / YouTube Shorts) + → Performance Ingest (ROAS, CTR, CAC via PostHog + optional platform connects) + → Thompson Sampling → brand_rules.json (loop) ``` -Moat: USD scene graph with brand constraint enforcement — not image generation. soul.md defines aesthetic constraints enforced at Scene Composer. Kinfolk test: if a frame wouldn't fit a Kinfolk spread, it's a regression. +Moat: URL → USD scene graph with brand constraint enforcement — not image generation. soul.md defines aesthetic constraints enforced at Scene Composer. Kinfolk test: if a frame wouldn't fit a Kinfolk spread, it's a regression. ## Four Repos — Routing Table | Task | Repo | |---|---| | Orchestration, policy, budget AI, enterprise deployment | `shoploop` (control plane) | -| brand_rules.json schema, OpenUSD twin, AP2 protocol | `shoploop-core` (twin layer) | -| Shopify app, OAuth, metafields, PDP, AR configurator | `shoploop-shopify` (delivery layer) | +| brand_rules.json schema, OpenUSD twin, AP2 protocol, URL page parser | `shoploop-core` (twin layer) | +| Web publish adapters (GitHub PR path, hosted-CMS admin APIs), embed, PDP, AR configurator | `shoploop-delivery` (delivery layer — formerly shoploop-shopify) | | Meta/Google/TikTok ads, Klaviyo, A/B engine, Postiz organic | `shoploop-growth` (growth layer) | Read the target repo's README.md + AGENTS.md before acting. Write decisions back to the repo. ## Active Board (16 issues, 4 repos) -**Unblocking sequence:** `shoploop-core #1` (brand_rules schema) + `shoploop-shopify #1` (app scaffold) ship in parallel — everything else is downstream. +**Unblocking sequence:** `shoploop-core #1` (brand_rules schema) + `shoploop-core #2` (URL page parser v1) ship in parallel — everything else is downstream. | Sprint | Issue | Repo | Signal | |---|---|---|---| | **NOW** | M1: brand_rules.json v1 schema | core | protocol-adoption | -| **NOW** | M1: Shopify app scaffold — OAuth + product sync | shopify | acquisition | +| **NOW** | M1: URL page parser — DOM + JSON-LD + OG → product_twin.usda | core | acquisition | | **NEXT** | M1: ARCHITECTURE.md + agent.md v2 + soul.md v2 | shoploop | protocol-adoption | | **NEXT** | M1: Paid creative engine — Meta + Google + TikTok | growth | acquisition | -| **THEN** | M2: Image-to-twin via blender-mcp + Hunyuan3D | core | acquisition | -| **THEN** | M2: PDP asset auto-publishing to storefront | shopify | retention | +| **THEN** | M2: Image-to-twin via blender-mcp + Hunyuan3D (URL-triggered) | core | acquisition | +| **THEN** | M2: Web-publish adapters — GitHub PR + hosted-CMS admin APIs | delivery | retention | | **THEN** | M2: Lifecycle — Klaviyo + Optimove SKU flows | growth | retention | | **THEN** | M2: Budget AI — campaign spend routing by SKU | shoploop | expansion | | **LATER** | M3: OpenUSD stage + AP2 + channel-compliant export | core | protocol-adoption | -| **LATER** | M3: Amazon SP-API marketplace sync | shopify | expansion | +| **LATER** | M3: Marketplace publish adapters (Amazon SP-API, etc.) | delivery | expansion | | **LATER** | M3: Experiment engine — A/B with brand_rules promo | growth | retention | | **LATER** | M3: Policy enforcement — brand_rules governance | shoploop | retention | -| **M4** | M4: GA4 + Shopify Analytics feedback loop | core | retention | -| **M4** | M4: AR Quick Look + 3D configurator on storefront | shopify | retention | +| **M4** | M4: GA4 + on-page analytics feedback loop | core | retention | +| **M4** | M4: AR Quick Look + 3D configurator embed | delivery | retention | | **M4** | M4: Organic pipeline — Postiz + content calendar | growth | acquisition | | **M4** | M4: Enterprise — multi-brand, AWS deployment | shoploop | expansion | @@ -73,6 +79,7 @@ autoresearch on H100 — val_bpb vs num_params_M Pareto curve (DEPTH 8→2). Goa 3. Mistral/Codestral cheaper than API call? Route to autoresearch. 4. Ships in ≤2 weeks solo? If not, scope down. 5. Monthly AWS/API cost? State it. +6. Requires an intake other than a URL? If yes, reject or hide behind the URL primitive. ## Tone diff --git a/design.md b/design.md index 324c18a..f54973b 100644 --- a/design.md +++ b/design.md @@ -3,7 +3,7 @@ version: alpha name: Shoploop description: > Grip's precision, democratized. Full-funnel positionless AI marketing for - tabletop products on Shopify. Warm cream base, near-black type, chartreuse + tabletop products — one URL in, product configurator out. Warm cream base, near-black type, chartreuse action, buttercream yellow + lavender content panels, one deliberate dark city hero. Trilingual (hi/en/mr) — Devanagari and Latin display share a serif-heavy voice. @@ -147,7 +147,7 @@ components: ## Overview -**One sentence:** Grip's precision on GrowthLoop's sky, launched from Uplane's city at night, converting with Optimove's chartreuse — democratized for every Shopify tabletop brand. +**One sentence:** Grip's precision on GrowthLoop's sky, launched from Uplane's city at night, converting with Optimove's chartreuse — democratized for every tabletop brand with a web page. Shoploop is not a SaaS dashboard. It is not a marketing agency site. It is a **commerce infrastructure company** with the design confidence of a semiconductor manufacturer and the conversion directness of a campaign platform. diff --git a/soul.md b/soul.md index 8fc8f85..6a003c2 100644 --- a/soul.md +++ b/soul.md @@ -8,7 +8,7 @@ _This file is the identity layer. It does not expire. Read it at the start of ev A commerce infrastructure company for physical products. -Not an agency. Not a dashboard. Not a Shopify theme. Not a "marketing AI tool." +Not an agency. Not a dashboard. Not a storefront theme. Not a "marketing AI tool." We are what happens when you apply the engineering discipline of a semiconductor company — version control, protocol standards, automated pipelines, verification gates — to the problem of selling physical products at scale. @@ -28,10 +28,10 @@ When that protocol is open: - Any brand can codify their visual identity as a machine-readable ruleset - Any renderer (NVIDIA Omniverse, Three.js, Blender) can consume it -- Any distribution surface (Google, Meta, Shopify PDP, AR) can request compliant assets +- Any distribution surface (Google, Meta, any PDP, AR) can request compliant assets - The moat shifts from "Grip owns the tool" to "shoploop owns the protocol" -This is the same move OpenAI made with function calling, Stripe made with the payments API, and Shopify made with the checkout. Not the implementation — the interface. +This is the same move OpenAI made with function calling and Stripe made with the payments API. Not the implementation — the interface. **We open-source `shoploop-core`.** The USD schema. The brand rules contract. The AP2 adapter. The Open Universal Commerce Protocol. We keep the intelligence (budget AI, campaign operators, lifecycle orchestration) proprietary in `shoploop`. @@ -56,7 +56,7 @@ That gap is the market. A product render is not a file you send to a designer. It is a node in a graph with inputs (USD stage, brand rules, channel spec) and outputs (compliant asset). It can be diffed, rolled back, verified, and deployed. Grip showed this was possible. We make it protocol. **4. The checkout is always the conversion.** -Every surface — AR Quick Look, 3D configurator, campaign ad, lifecycle email — exists to route a person to a Shopify checkout. Nothing else is a conversion. +Every surface — AR Quick Look, 3D configurator, campaign ad, lifecycle email — exists to route a person to the customer's own checkout, wherever it lives. The checkout is platform-neutral; the URL is the anchor. **5. GitHub is the memory layer.** Sessions end. Context clears. What persists is the repo. Commits are decisions. PRs are agreements. Issues are demand signals. @@ -66,12 +66,13 @@ Sessions end. Context clears. What persists is the repo. Commits are decisions. ## The stack as soul ``` +URL (the intake) → one paste replaces the catalog upload, CSV, OAuth wizard NVIDIA Omniverse / RTX → product exists as a true real-time 3D twin OpenUSD (open protocol) → the twin is portable, diffable, composable — like git for geometry Grip.tools (reference) → proof that brand-rules-as-code works at enterprise scale shoploop-core (our bet) → the open schema that makes any tool Grip-compatible AWS + Mistral → intelligence runs on infrastructure CFOs already approve -Shopify → the checkout is the conversion. always. +Customer's own checkout → the checkout is the conversion, wherever it lives Uplane → AI runs the campaigns so humans run the marketing Optimove → lifecycle is positionless — no fixed role owns the customer Postiz → organic distribution is a pipeline, not a calendar @@ -81,19 +82,19 @@ Postiz → organic distribution is a pipeline, not a calenda ## Identity -**One sentence:** Shoploop is the open infrastructure layer that turns physical products into first-class software deployments — bought through Shopify, distributed by AI, rendered by NVIDIA. +**One sentence:** Shoploop is the open infrastructure layer that turns any product web page into a first-class software deployment — parsed from a URL, distributed by AI, rendered by NVIDIA. **Category:** Positionless physical commerce infrastructure. **The competitive moat:** -Open protocol (core) × proprietary intelligence (shoploop) × Shopify distribution (shopify) × campaign automation (growth). +Open protocol (core) × proprietary intelligence (shoploop) × platform-neutral URL intake + delivery (delivery) × campaign automation (growth). Each layer compounds. None is sufficient alone. --- ## What we will never become -- A Shopify theme builder +- A storefront theme builder - A content agency with AI features bolted on - A CDP that happens to support e-commerce - A "marketing suite" with 47 features