尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
An AI-powered SaaS platform for creating, pricing, publishing, and managing optimized eBay listings — with deep specialization in coins, bullion, and precious-metals collectibles, and a modular architecture designed to scale across additional verticals.檢視完整 README ↗An AI-powered SaaS platform for creating, pricing, publishing, and managing optimized eBay listings — with deep specialization in coins, bullion, and precious-metals collectibles, and a modular architecture designed to scale across additional verticals.
URL: https://lister.teckstart.com
Teckstart Listing Assistant turns photos (and optional video or voice notes) into complete, eBay-ready listings. A multi-stage AI pipeline identifies the item, resolves the correct eBay category, fetches required item specifics, generates SEO-optimized titles and descriptions, and estimates fair-market pricing from recent sold comps — then publishes directly to eBay via the Inventory API.
Beyond single-item listing creation, the platform includes a full suite of seller tools: bulk listing via CSV/Excel upload, competitor market research, auto-repricing rules, cost-of-goods-sold (COGS) tracking, profit reporting, live precious-metals spot prices with melt-value protection, team/organization management, and a Stripe-powered subscription billing system with tier-based feature gating.
┌───────────────────────────────────────────────┐
│ React 18 PWA (Vite) │
│ │
│ Public: Landing, Login, Signup, Auth, │
│ eBay Callback, Terms, Privacy │
│ │
│ Protected (v2): Home, Analyze, Drafts, │
│ Dashboard, Settings, Billing, Team, │
│ Admin, Bulk, Market, Reprice Rules, │
│ Profit Report, COGS Editor, Listings │
└───────────────────────┬───────────────────────┘
│
┌───────────────────────┴───────────────────────┐
│ Supabase Auth (JWT) │
│ Google OAuth · Email/Password · RBAC │
└───────────────────────┬───────────────────────┘
│
┌──────────────────────────────────┼──────────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ Edge Functions │ │ Supabase Storage │ │ Stripe Billing │
│ (Deno) │ │ (listing-media, │ │ Checkout · Portal │
│ │ │ avatars, RLS) │ │ Webhooks · Tiers │
│ AI Pipeline │ └──────────────────────┘ └─────────────────────┘
│ eBay APIs │
│ Stripe Sync │ ┌──────────────────────┐
│ Cron Jobs │◄────────►│ eBay REST APIs │
│ RAG Retrieval │ │ Inventory · Taxonomy│
└────────┬────────┘ │ Browse · Fulfillment│
│ └──────────────────────┘
▼
┌──────────────────────────────────────────────────────────────┐
│ Supabase PostgreSQL │
│ │
│ profiles · organizations · org_members · org_invitations │
│ drafts · subscriptions · usage_tracking · spot_price_cache │
│ ebay_tokens · competitor_prices · market_price_history │
│ listing_cogs · listing_financials · market_watches │
│ category_mappings · category_aspects_cache · ebay_taxonomy │
│ knowledge_base (pgvector) · gemini_usage · cost_alerts │
│ support_tickets · test_items · lookup_decisions │
│ category_hygiene_log │
│ │
│ Row Level Security on all user-scoped tables │
└──────────────────────────────────────────────────────────────┘
The analyze-item edge function implements a sophisticated multi-stage AI analysis pipeline. A modular sub-agent architecture (controller + registry + visual-agent + market-agent) orchestrates the flow, with domain-specific logic for each supported vertical.
The controller calls Gemini to analyze all images (and video frames) to identify the item type, domain (coins/bullion vs. general collectibles vs. electronics, etc.), metal type, and keywords. An item embedding is pre-computed once and shared across downstream sub-agents to avoid duplicate API calls. Results inform all downstream category and attribute selection.
Retrieves eBay's required and optional item specifics (aspects) for the resolved category. Results are cached in the category_aspects_cache table (7-day TTL) to minimize API calls. Provides the JSON schema for Pass 2 AI generation.
Uses Gemini with a domain-specific system prompt (from the domain registry). Context includes item images, identification results, competitor pricing, and category-specific requirements. Generates title, description, condition, price range, metal weight, and item specifics matching the schema.
If category wasn't locked in pre-lookup, uses the AI-generated title for a second eBay Taxonomy lookup as verification/override. Applies metal-type compatibility checks to prevent cross-metal assignments.
If category was corrected after Pass 2, item specifics may have been generated against the wrong schema. Gemini is called again with images + the correct category schema to regenerate only the item specifics. Falls back to surgical scrubbing if regeneration fails.
controller.ts): Orchestrates the sequential identification pass followed by a parallel burst of the visual and market sub-agentsregistry.ts): Central registry mapping each domain to its vision goals (zoom targets), grounding queries, and critical attributesvisual-agent.ts): Performs domain-specific visual inspection (e.g., reading slab labels for coins, model numbers for electronics)market-agent.ts): Performs RAG-grounded market analysis and category validation using the knowledge basedomainPrompts.ts): Per-domain system prompts for GeminiA pgvector-enabled knowledge_base table stores domain knowledge (coin grading standards, pricing references). The retriever (rag/retriever.ts) performs semantic search using item embeddings (rag/embedding.ts) to ground AI outputs in factual data, reducing hallucination on attributes like grade, composition, and fair market value.
See tests in src/test/analyze-item-category-fallback.test.ts for domain fallback behavior.
The backend consists of Supabase Edge Functions (Deno runtime):
| Function | Purpose |
|---|---|
analyze-item | Multi-stage AI pipeline: image/video analysis → category resolution → listing generation |
transcribe-voice | Server-side audio transcription for voice notes |
video-frame-extract | Extracts representative frames from uploaded videos for AI analysis |
bulk-generate-descriptions | Batch AI description generation for bulk-listing workflows |
| Function | Purpose |
|---|---|
ebay-publish | Full Inventory API publishing: inventory item + offer + publish (5,380 lines) |
ebay-pricing | Fetches recent sold listings for price comparison |
ebay-policies | Fetches fulfillment, payment, and return business policies |
ebay-listings | Retrieves and manages the user's active eBay listings |
ebay-draft-cleanup | Owner-only cleanup of leftover UNPUBLISHED eBay offers |
ebay-user | eBay identity/account info for connected users |
ebay-competitor-search | Competitor listing search for market research |
ebay-reprice | Applies repricing updates to live eBay listings (batched) |
disconnect-ebay | Revokes eBay OAuth connection |
category-lookup | eBay Taxonomy API category suggestions |
sync-ebay-taxonomy | Bulk sync of eBay category taxonomy |
setup-categories | Category setup and configuration |
filter-comparable-listings | Filters sold listings to find true comparables |
| Function | Purpose |
|---|---|
spot-prices | Fetches and caches live metal spot prices (15-min shared cache) |
keyword-research | AI-assisted keyword discovery for listing optimization |
market-watch-refresh | Refreshes saved market watch searches |
optimize-listing | AI-powered listing optimization suggestions |
| Function | Purpose |
|---|---|
bulk-publish | Batch publish multiple listings to eBay (tier-gated row caps) |
| Function | Purpose |
|---|---|
create-checkout | Creates Stripe Checkout sessions (Starter $19 / Pro $49 / Shop $99) |
stripe-webhook | Handles Stripe events with signature verification; syncs subscription state |
check-subscription | Cache-first subscription status check (60-min TTL, falls back to live Stripe) |
customer-portal | Creates Stripe Billing Portal sessions for self-service management |
get-free-credits | Returns tier, credits used, credits remaining, and limit status |
| Function | Purpose |
|---|---|
auto-reprice-cron | Scheduled auto-repricing execution |
auto-reprice-trigger | Manual trigger for auto-reprice operations |
category-hygiene-cron | Scheduled category data validation and cleanup |
competitor-prices-cron | Scheduled competitor price refresh |
cost-alert-cron | Scheduled cost threshold alerting |
| Function | Purpose |
|---|---|
system-status | System health and status monitoring |
cogs-report | COGS and profit reporting data |
The PostgreSQL database includes 23 tables with Row Level Security on all user-scoped tables:
profiles: User profiles with display name, avatar, eBay connection metadata (ebay_username, ebay_account_type), and Stripe customer ID cachingorganizations: Team/organization management with per-org free-tier reset dayorg_members: Organization membership mappingsorg_invitations: Pending team invitationsdrafts: Saved listing drafts (title, description, price range, category, item specifics, condition, metal data, package dimensions, quantity, images, video)ebay_tokens: OAuth token storage for connected eBay accounts (access + refresh tokens with expiry)subscriptions: Stripe subscription data (sub ID, customer ID, product ID, price ID, status, period end, cancel-at-period-end) with RLSusage_tracking: Per-org usage events for credit enforcement (action type, org affiliation, timestamps)gemini_usage: AI API consumption trackingcost_alerts: Cost threshold alertingspot_price_cache: Shared 15-minute cache for live metal spot pricescompetitor_prices: Cached competitor pricing data with price distribution JSONBmarket_price_history: Historical market price trackingmarket_watches: Saved market search monitorscategory_mappings: User-verified category mappingscategory_aspects_cache: eBay category aspects with 7-day TTLebay_taxonomy_cache: Cached eBay taxonomy treelookup_decisions: Category lookup decision audit trailcategory_hygiene_log: Category data validation run logslisting_cogs: Per-listing cost of goods soldlisting_financials: eBay transaction financial data (sale price, shipping, fees, SKU)knowledge_base: pgvector-enabled RAG knowledge base for domain groundingsupport_tickets: User support ticket trackingtest_items: Test fixtures for E2E testing| Tier | Price | AI Analyses/Month | Bulk Rows | Key Features |
|---|---|---|---|---|
| Free (Starter) | $0 | 6 (per-org, rolling window) | 5 | Single-item listing, AI analysis, eBay publish |
| Pro | $49/mo | 50 | 25–50 | All Free features + bulk listing, market research, auto-reprice |
| Shop (Unlimited) | $99/mo | Unlimited | 1,000 | All Pro features + unlimited analyses, team management, profit reports, COGS tracking |
| Admin | — | Unlimited | 1,000 | System administration, usage analytics, system status |
Tier detection is performed via the subscriptions table's product_id, with a cache-first strategy (60-minute DB cache, falling back to live Stripe API). Free-tier credit windows reset on a configurable per-organization day-of-month, tracked via a PL/pgSQL function (get_free_tier_window_start).
# Clone the repository
git clone https://github.com/twinwicksllc/listing-assistant-pro.git
cd listing-assistant-pro
# Install dependencies
npm install
# Copy environment file and fill in your values
cp .env.example .env.local
Create a .env.local file (or .env for local Supabase CLI) with the following:
# Supabase (public/anon keys — required for the frontend)
VITE_SUPABASE_PROJECT_ID=your_project_id_here
VITE_SUPABASE_PUBLISHABLE_KEY=your_anon_key_here
VITE_SUPABASE_URL=https://your-project-id.supabase.co
Additional secrets required on the Supabase project (set via Supabase dashboard or CLI):
GEMINI_API_KEY — Google Gemini API keySTRIPE_SECRET_KEY — Stripe secret keySTRIPE_WEBHOOK_SECRET — Stripe webhook signing secretAPP_URL — Public app URL for Stripe redirect URLsSENTRY_DSN — Sentry error monitoring (optional)npm run dev
The app will be available at http://localhost:8080
# Link your Supabase project
supabase link --project-ref your-project-ref
# Push database migrations
supabase db push --yes --include-all
# Deploy edge functions
supabase functions deploy analyze-item --no-verify-jwt
supabase functions deploy ebay-publish --no-verify-jwt
# ... repeat for other functions as needed
npm run test # Run all unit tests (Vitest)
npm run test:watch # Watch mode
npm run test:e2e # Full E2E suite
npm run test:e2e:smoke # Smoke tests only
npm run test:e2e:full # Full lifecycle tests
npm run test:coin-validation # Coin condition validation
npm run test:coin-e2e # Coin condition E2E
npm run verify:coin-mandate # Verify eBay coin condition mandate compliance
Four GitHub Actions workflows automate the development pipeline:
| Workflow | Trigger | Purpose |
|---|---|---|
test.yml | Push/PR | Runs unit tests |
e2e-pr-smoke.yml | Pull request | Runs Playwright smoke tests against PR |
| `e2e-full-lifecycle.yml | Weekly (Mon 2AM UTC) + manual | Full lifecycle E2E tests with test user setup and cleanup |
deploy-functions.yml | Push to main (functions/migrations changed) | Pushes DB migrations and deploys edge functions to Supabase |
Vercel automatically builds and deploys the frontend on push to main.
mainThe app is configured for lister.teckstart.com. To use a custom domain:
start_url in vite.config.ts PWA manifestlisting-assistant-pro/
├── src/
│ ├── v2/ # V2 UI redesign (active)
│ │ ├── pages/ # 15 v2 page components
│ │ ├── components/ # v2 shared components (AppShell, SideNav, etc.)
│ │ └── theme.ts # v2 theme configuration
│ ├── pages/ # Legacy/v1 pages (auth, landing, core logic)
│ ├── components/ # Shared UI components (analyze, admin, camera, etc.)
│ ├── hooks/ # React hooks (auth, drafts, analysis, publish, etc.)
│ ├── lib/ # Utilities (imageOptimizer, ebayCategoryMap, etc.)
│ ├── types/ # TypeScript type definitions
│ ├── contexts/ # React contexts (AuthContext)
│ ├── integrations/ # Supabase client integration
│ └── test/ # Unit tests
├── supabase/
│ ├── functions/ # edge functions (Deno)
│ │ ├── _helpers/ # Shared helpers (agent-system, RAG, eBay, Sentry)
│ │ │ ├── agent-system/ # Sub-agent architecture (controller, registry, sub-agents)
│ │ │ └── rag/ # RAG embedding & retrieval
│ │ └── *.ts # Individual edge function entry points
│ ├── migrations/ # SQL migrations (timestamped)
│ └── config.toml # Supabase project configuration
├── e2e/ # Playwright E2E tests & fixtures
├── scripts/ # Utility scripts (test setup, seeding, etc.)
├── .github/workflows/ # CI/CD pipelines
└── package.json
git checkout -b feature/amazing-featuregit commit -m 'feat: add amazing feature'git push origin feature/amazing-featureThis project is proprietary software owned by Teckstart.