first commit#2
Open
GiuliaZobrist wants to merge 28 commits into
Open
Conversation
Files: ARCHITECTURE.md, diagram.md docs: merge hybrid scoring (Giulia) with assortment-gap model into unified architecture
Promotes risk_flags from a display badge to a scored pillar (composite_score weights rebalanced to 0.20 each) so two equally-hyped opportunities can rank differently once supply-chain/regulatory risk is priced in.
Signal/RetailerContext dataclasses match the canonical data contract in ARCHITECTURE.md. Source credibility, personas, risk taxonomy, and coverage keyword mappings live in standalone JSON config files so they're editable without touching pipeline code.
…thesise) Hybrid 5-pillar scorer (deterministic Breadth/Momentum/Coverage Gap/Risk + optional-LLM Transferability with a deterministic fallback so it never breaks without an API key). Dedup key includes source_type so distinct competitor/marketplace evidence is never silently collapsed. Seed signals cover all 5 demo opportunities so the pipeline runs end-to-end offline.
Answers from the scored opportunity list only (no invented SKUs/sources). Uses Claude if ANTHROPIC_API_KEY is set; otherwise a deterministic keyword-matching fallback so the chat never goes blank live.
RetailerContext wizard -> chat -> dashboard, with chat replies deep-linking into the matching dashboard card. Draft frontend only -- reads the same recommendations.json contract Lovable will consume later. README covers local run and free Streamlit Community Cloud deployment.
scrape_targets.json lists verified base domains and search/feed templates for every source in config/sources.json (Google Trends, Reddit, Galaxus, Zalando, Amazon, Ochsner Sport, Bachli Bergsport, Transa, Pinterest, BFS, gear media), flagging what's confirmed reachable vs. a best-effort template that needs a manual check before automating. fetch_reddit.py is a tested, auth-free fetcher pulling live r/trailrunning posts into the Signal shape, ready to swap into collectors.py in place of seed data.
Adds SportXX, Decathlon Switzerland, Brack.ch, Microspot, Manor, and Globus to config/sources.json (credibility) and resources/scrape_targets.json (real domains + search templates), ranked by outdoor relevance: premium specialist > mass-market sports > generalist marketplace > department store. ARCHITECTURE.md §11 and resources/README.md updated to match.
Summary, run instructions, inputs/outputs, ranked opportunities (pulled from a live pipeline run), evidence trail, reusability, known limitations, and architecture notes. Team name, demo URL, and video URL left as TODO -- only the team can fill those in.
Adds display-only sub-fields per pillar (Momentum: growth/geographic_spread; Transferability: outdoor_relevance/climate_fit/dach_availability_gap; Coverage Gap: availability_gap/retail_saturation/brand_availability) plus a separate Noise metric (social-only ratio + recency). composite_score math is unchanged -- these only enrich the JSON/dashboard breakdown.
Sidebar selectbox swaps in a precomputed recommendations.json (persona variants for now) with zero pipeline rerun, per diagram.md §6.1's "cheap trick that still proves reusability live". Also fills in team name/members in SUBMISSION.md (provided by the user) and cleans up leftover TODO prefixes.
Adds frontend/ (React + TanStack Router + Zustand + shadcn/ui), a teammate's Lovable-built chat-wizard + Act Now/Watch dashboard. Currently runs on mock data in src/lib/domain.ts, no backend call yet. Both this and the Streamlit app independently converged on the same RetailerContext -> weighted composite -> explainability shape. frontend/INTEGRATION.md maps every field between domain.ts and the Python backend's recommendations.json (including the redflag/risk inversion) for future wiring -- not attempted live here, to avoid destabilizing either side this close to the deadline.
RetailerContext.target_market/comparison_markets and Signal.market now accept free text (Switzerland, Swiss, Germany, Austria, DACH, ...) and normalise to CH/DE/AT/etc via config/market_aliases.json -- DACH expands to [CH, DE, AT]. Added DE/AT search signals to seed data so the alias isn't just plumbing with nothing behind it. Also adds app/.env.example for the optional ANTHROPIC_API_KEY, and records frontend npm install (package-lock.json, regenerated routeTree.gen.ts) after confirming the Lovable frontend builds and runs standalone.
claude-3-5-sonnet-latest returned a 404 (deprecated/removed alias), silently falling back to the heuristic scorer/chat every time. Confirmed the fix against the live API: transferability scoring now runs via the real LLM with no error.
… step Config-only theme (no logic changes) for a cleaner, more presentable UI. Documents newspaper4k as the recommended next integration for the Gear Media/Newspaper source -- not wired in, evaluated for post-submission.
…riginal-plan Feature/vibe code from original plan
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.