From 1bd3ff694378e533b39d1f71e87c7ac35262f3ee Mon Sep 17 00:00:00 2001 From: Kevin Reznicek Date: Tue, 16 Jun 2026 22:54:18 -0700 Subject: [PATCH] Clean up Streamlit pages --- .../dashboard/pages/3_Approval_Queue.py | 52 ------------------- .../dashboard/pages/4_Design_Queue.py | 18 ------- .../dashboard/pages/5_Product_Drafts.py | 22 -------- ...y_Draft_Listings.py => 6_Etsy_Listings.py} | 0 .../dashboard/pages/7_Analytics.py | 16 ------ 5 files changed, 108 deletions(-) delete mode 100644 src/ecommerce_agent/dashboard/pages/3_Approval_Queue.py delete mode 100644 src/ecommerce_agent/dashboard/pages/4_Design_Queue.py delete mode 100644 src/ecommerce_agent/dashboard/pages/5_Product_Drafts.py rename src/ecommerce_agent/dashboard/pages/{6_Etsy_Draft_Listings.py => 6_Etsy_Listings.py} (100%) delete mode 100644 src/ecommerce_agent/dashboard/pages/7_Analytics.py diff --git a/src/ecommerce_agent/dashboard/pages/3_Approval_Queue.py b/src/ecommerce_agent/dashboard/pages/3_Approval_Queue.py deleted file mode 100644 index 13d3694..0000000 --- a/src/ecommerce_agent/dashboard/pages/3_Approval_Queue.py +++ /dev/null @@ -1,52 +0,0 @@ -import uuid - -import streamlit as st - -from ecommerce_agent.dashboard.client import get, get_asset, post -from ecommerce_agent.dashboard.ui import page_header, show_error - -page_header("Approval Queue", "All workflow pauses that require a human decision.") - -try: - items = get("/approval-queue") - if not items: - st.info("No approvals are waiting.") - for item in items: - approval_type = item["approval_type"] - payload = item["payload"] - with st.expander(f"{approval_type}: {item['id']}", expanded=True): - if approval_type == "trend": - st.json(payload) - elif approval_type == "design": - design = payload.get("design", {}) - if design.get("asset_uri"): - st.image(get_asset(design["asset_uri"])) - st.json(payload.get("brief", {})) - else: - st.json(payload.get("listing_copy", {})) - - note = st.text_area("Review note", key=f"note-{item['id']}") - choices = ["approve", "reject"] - if approval_type != "trend": - choices.append("request_revision") - decision = st.radio( - "Decision", - choices, - horizontal=True, - key=f"decision-{item['id']}", - ) - if st.button("Submit decision", key=f"submit-{item['id']}", type="primary"): - post( - f"/runs/{item['id']}/decisions", - { - "approval_type": approval_type, - "decision": decision, - "actor": "streamlit-admin", - "note": note or None, - "idempotency_key": f"streamlit:{item['id']}:{uuid.uuid4()}", - }, - ) - st.success("Decision recorded.") - st.rerun() -except Exception as error: - show_error(error) diff --git a/src/ecommerce_agent/dashboard/pages/4_Design_Queue.py b/src/ecommerce_agent/dashboard/pages/4_Design_Queue.py deleted file mode 100644 index b9f92dd..0000000 --- a/src/ecommerce_agent/dashboard/pages/4_Design_Queue.py +++ /dev/null @@ -1,18 +0,0 @@ -import streamlit as st - -from ecommerce_agent.dashboard.client import get, get_asset -from ecommerce_agent.dashboard.ui import page_header, show_error - -page_header("Design Queue", "Generated assets and their review status.") -try: - designs = get("/designs") - if not designs: - st.info("No designs have been generated.") - for design in designs: - left, right = st.columns([1, 2]) - with left: - st.image(get_asset(design["asset_uri"]), caption=design["model"]) - with right: - st.json(design) -except Exception as error: - show_error(error) diff --git a/src/ecommerce_agent/dashboard/pages/5_Product_Drafts.py b/src/ecommerce_agent/dashboard/pages/5_Product_Drafts.py deleted file mode 100644 index 5bd1aa9..0000000 --- a/src/ecommerce_agent/dashboard/pages/5_Product_Drafts.py +++ /dev/null @@ -1,22 +0,0 @@ -import streamlit as st - -from ecommerce_agent.dashboard.client import get, post -from ecommerce_agent.dashboard.ui import page_header, show_error, table - -page_header("Product Drafts", "Approved concepts and prepared product/listing copy.") -try: - concepts = get("/concepts") - ready = [item for item in concepts if item["status"] == "concept"] - if ready: - concept_id = st.selectbox( - "Approved concept", - options=[item["id"] for item in ready], - format_func=lambda value: next(item["title"] for item in ready if item["id"] == value), - ) - if st.button("Start product workflow", type="primary"): - post(f"/concepts/{concept_id}/workflows") - st.success("Product workflow started and paused for design review.") - st.rerun() - table(get("/product-drafts"), empty="No product drafts yet.") -except Exception as error: - show_error(error) diff --git a/src/ecommerce_agent/dashboard/pages/6_Etsy_Draft_Listings.py b/src/ecommerce_agent/dashboard/pages/6_Etsy_Listings.py similarity index 100% rename from src/ecommerce_agent/dashboard/pages/6_Etsy_Draft_Listings.py rename to src/ecommerce_agent/dashboard/pages/6_Etsy_Listings.py diff --git a/src/ecommerce_agent/dashboard/pages/7_Analytics.py b/src/ecommerce_agent/dashboard/pages/7_Analytics.py deleted file mode 100644 index b301f5f..0000000 --- a/src/ecommerce_agent/dashboard/pages/7_Analytics.py +++ /dev/null @@ -1,16 +0,0 @@ -import streamlit as st - -from ecommerce_agent.dashboard.client import get, post -from ecommerce_agent.dashboard.ui import page_header, show_error, table - -page_header("Analytics", "Raw Etsy metrics and derived recommendations.") -try: - published = [item for item in get("/etsy-listings") if item["state"] == "published"] - if published: - listing_id = published[0]["id"] - if st.button("Collect mock analytics now"): - post(f"/etsy-listings/{listing_id}/monitor") - st.rerun() - table(get("/analytics"), empty="Publish a listing before collecting analytics.") -except Exception as error: - show_error(error)