Comparo Performance - Laravel price & trust comparison platform
  • PHP 64.6%
  • JavaScript 19.3%
  • TypeScript 15.4%
  • CSS 0.2%
  • Shell 0.2%
  • Other 0.2%
Find a file
Stanektechcz bd6206c2c7
Merge PR #2: Phase 4 schema + engines, staging environment, security hardening, aaPanel runbook
Phase 4 wave 1 + staging environment + security audit fixes
2026-09-27 04:02:45 +02:00
.claude docs(phase-2): record design, task graph and autonomous decisions 2026-09-25 12:59:28 +02:00
.codex chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
.github ci(staging): match phase branches with slashes (phase-**) 2026-09-26 23:55:19 +02:00
app fix(security): close audit findings H-1, M-1, M-3, M-4, M-5, L-1, L-2 and the demo AggregateRating leak 2026-09-26 23:51:07 +02:00
bootstrap fix(security): close audit findings H-1, M-1, M-3, M-4, M-5, L-1, L-2 and the demo AggregateRating leak 2026-09-26 23:51:07 +02:00
config feat(ops): define the staging environment and add staging tooling (A-39) 2026-09-26 23:25:15 +02:00
database feat(database): Phase 4 reviews, verification and orders schema (P4-02) 2026-09-26 23:21:02 +02:00
docs docs(ops): reload PHP-FPM after release swaps on aaPanel; link the runbook 2026-09-27 00:55:46 +02:00
lang/en feat(feeds): match, publish and reconcile feed runs end to end 2026-09-25 16:07:07 +02:00
public chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
resources feat: resolve backlog findings F-05..F-07, F-11, F-15, F-16 2026-09-26 20:33:28 +02:00
routes fix(phase-3): resolve search review-council findings 2026-09-26 18:30:58 +02:00
screenshots chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
storage chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
tests test(matching): order rejected decisions by id before comparing 2026-09-27 01:08:46 +02:00
tools style(staging): format smoke test (vp check) 2026-09-27 00:00:21 +02:00
uploads chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
.editorconfig chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
.env.example docs: sync status with Phase 4 wave 1, CI/Meilisearch facts, A-39 and audit backlog 2026-09-26 23:43:02 +02:00
.env.staging.example feat(ops): define the staging environment and add staging tooling (A-39) 2026-09-26 23:25:15 +02:00
.gitattributes chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
.gitignore chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
.npmrc chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
.thumbnail chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
ACCESSIBILITY.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
addons.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
AFFILIATE-SALES.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
AFFILIATE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
AI-SEARCH.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
ANALYTICS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
API-ENDPOINTS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
API-MONETIZATION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
API.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
ARCHITECTURE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
artisan chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
ATTRIBUTION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
AUDIT.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
AUTOMATIONS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
BACKEND-MIGRATION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
BACKEND-READINESS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
BILLING.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
boost.json chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
CAMPAIGN-MARKETPLACE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
CLAUDE.md docs(phase-2): record Gate C results and hand over to Phase 3 2026-09-25 18:43:37 +02:00
COMMERCIAL-ANALYTICS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
COMMERCIAL-OS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
COMMERCIAL-TRANSPARENCY.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
commercial.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
COMMUNITY.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
Comparo Performance.dc.html chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
COMPARORANK.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
COMPLIANCE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
components.json chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
compose.yaml chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
composer.json chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
composer.lock chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
CONTENT-ENGINE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
CONTRIBUTIONS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
CREATORS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
DATA-QUALITY.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
DATABASE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
DELIVERY-GUARANTEE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
DELIVERY-MARKETS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
DEMAND-SIGNALS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
DESIGN-SYSTEM.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
DOSING.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
FRAUD-DETECTION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
gamify.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
GEO.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
governance.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
GOVERNANCE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
GROWTH-ANALYTICS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
GROWTH-OS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
growth.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
INDEXING.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
intel.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
INTERNATIONAL-SEO.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
INVOICING.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
KNOWLEDGE-GRAPH.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
labels.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
LABELS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
LIVE-ROOMS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
live.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
llms.txt chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
MARKET-EXPANSION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
MARKET-INTELLIGENCE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
MATCHING-ENGINE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
MERCHANT-ACQUISITION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
MERCHANT-FEEDS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
MERCHANT-SAAS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
MODERATION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
NEWSLETTER.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
ORDERS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
package-lock.json chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
package.json chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PAID-ADDONS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PARTNER-NETWORK.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PERFORMANCE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PERSONALIZATION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
phpstan.neon chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
phpunit.xml ci: fix the first GitHub Actions run 2026-09-26 20:39:40 +02:00
pint.json chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PLANS-ENTITLEMENTS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
pnpm-workspace.yaml chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PRICE-INTELLIGENCE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PROGRAMMATIC-SEO.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PROMOTION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
PROTOTYPE-LIMITATIONS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
QA.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
README.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
RECOMMENDATIONS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
REFERRALS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
RENEWALS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
REPUTATION.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
RESEARCH-PR.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
RESPONSIVE.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
REVENUE-FORECAST.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
REVIEWS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
robots.txt chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
RoomPanel.dc.html chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
SALES-CRM.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
SEARCH.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-addons.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-commercial.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-community.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-dose.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-gamify.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-geo.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-governance.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-growth.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-intel.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-labels.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-live.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-network.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-orders.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-seo.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed-visibility.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
seed.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
SEO.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
sitemap-content.xml chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
sitemap.xml chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
SPONSORED-PLACEMENTS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
STATE-MANAGEMENT.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
STRUCTURED-DATA.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
SUBSCRIPTIONS.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
support.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
TRUST-SCORING.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
tsconfig.json chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
visibility.js chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
VISIBILITY.md chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00
vite.config.ts chore: establish verified Laravel migration baseline 2026-09-25 12:14:19 +02:00

Comparo Performance

Independent price and trust comparison for sports nutrition across 12 European markets. Comparo ranks offers by total landed price — product + shipping + the best applicable coupon — and publishes the method behind every score.

This repository is a complete, working browser prototype. Every score, rule and flow is implemented and interactive. It is the specification for the Laravel backend, not a mockup of one.


What this is

A comparison and trust platform, not a shop. Comparo never sells products, holds stock or processes orders. Revenue comes from affiliate commission, merchant subscriptions, labelled sponsored placements and data products — none of which influence organic ranking.

The product answers questions a price table cannot:

  • Where is this cheapest after shipping to my country?
  • Is this actually a good price, against its own 12-month history?
  • Has this coupon been working for other people?
  • Which shop is most reliable, and how do you know?
  • Is this discount real, or computed against an inflated reference price?
  • Should I buy everything from one shop, or split the order?
  • Why is this offer ranked first?

Running it

Open Comparo Performance.dc.html in a browser. No build, no server, no dependencies. State persists in localStorage; reset it from /design-system → Reset demo data.

Demo accounts

Role Sign-in Sees
Shopper demo@comparo.example saves, alerts, reviews, For you
Merchant merchant@comparo.example feed, matching, offers, deals, analytics, billing
Staff admin@comparo.example Admin, Intelligence, SEO, Growth OS, Commercial OS

The five sides

Consumer — search, compare products and shops, total-price offer tables, price history with a hover readout, deals and verified coupons, reviews split by product and shop, community, forum, guides, basket optimiser, price alerts, Ask Comparo.

Merchant — feed health and import history, Feed Match Center with confidence and explanation, offers, deals and campaigns, review replies, competitiveness benchmarks against anonymised category medians, plan, usage and invoices, API keys.

Staff — moderation (including the purchase-proof queue), merchant approval, compliance matrix, risk and integrity, price anomalies, product merging, affiliate link health, audit log.

Growth OS — 33 live opportunities generated from real data, merchant acquisition pipeline, affiliate CRM, creators, referrals, content engine with a publication quality gate, newsletter, campaigns, PR and research, market expansion, experiments, growth analytics, briefs.

Commercial OS — plans and entitlements, subscriptions, billing and invoices, sponsored placement marketplace, campaign approval, sales pipeline, renewals, API and data products, revenue analytics and forecast.


Proprietary scoring

Every score is explainable in the UI — each one has a control that shows its component points.

Score Range Drives
ComparoRank 0–100 organic offer ordering. Commission is not an input
Trust Score 0–100 merchant reliability, from verification, complaints, feed uptime, price accuracy
Deal Score 0–100 discount against real history, not against a claimed reference
Match confidence 0–100 feed listing → canonical product
Price confidence 0–1 whether a price is trustworthy enough to publish
Review credibility weight how much a review counts in the public average
Opportunity score 0–100 which growth action to take next

Purchase verification

Shops do not give us order data, so verification rests on evidence we can check ourselves:

  1. Click match — our own affiliate redirect log. First-party, automatic, and data no competitor holds.
  2. Forwarded confirmation — sent to a personal address; we read sender domain, order date and total, check them against what that shop actually charged that week, and discard the message.
  3. Uploaded receipt — pre-checked, then moderated.

Reviews publish either way. Only the label and the weight change — an unverified review stays visible and counts less, and is never silently deleted.


Architecture

Comparo Performance.dc.html   the application
seed.js                       catalogue, merchants, offers, reviews, price history
seed-seo.js                   page registry, metadata, entity graph
seed-community.js             threads, replies, guides, users
seed-intel.js                 fraud patterns, anomalies, feed conflicts
seed-growth.js                prospects, creators, campaigns, content, research
seed-commercial.js            plans, subscriptions, invoices, campaigns, pipeline
intel.js                      scoring engine — rank, trust, fraud, matching, pricing
growth.js                     opportunity and insight engine
commercial.js                 revenue, billing, forecast

intel.js, growth.js and commercial.js are pure deterministic functions over the seed graph. They port to Laravel services with no logic change — see BACKEND-MIGRATION.md.


Backend handoff

Document Contents
BACKEND-MIGRATION.md stack, domain model, services, queues, events, caching, build order
API-ENDPOINTS.md every endpoint mapped to the prototype function it replaces
AUDIT.md what is missing, unconnected or worth improving — including corrections to itself
PROTOTYPE-LIMITATIONS.md what this prototype does not do, stated plainly

Machine-readable: robots.txt, llms.txt, sitemap.xml + per-entity sitemaps.

Three things to get right early

  1. The canonical product graph. One product, many merchant offers, resolved by EAN/brand/title/ variant. Without it there is no cross-shop price history and no comparison — it is the moat.
  2. Record every offer's price daily from day one. Price history cannot be backfilled, and fake-discount detection, deal scoring and price confidence all depend on it.
  3. Commission must never reach the ranking service. Enforce with a test that fails if the ranking context grows a commercial property.

Documentation

Method — COMPARORANK · TRUST-SCORING · FRAUD-DETECTION · MATCHING-ENGINE · PRICE-INTELLIGENCE · RECOMMENDATIONS · PERSONALIZATION · AUTOMATIONS · ATTRIBUTION · MARKET-INTELLIGENCE

Discovery — SEO · INDEXING · PROGRAMMATIC-SEO · INTERNATIONAL-SEO · STRUCTURED-DATA · KNOWLEDGE-GRAPH · SEARCH · GEO · AI-SEARCH

Growth — GROWTH-OS · MERCHANT-ACQUISITION · AFFILIATE-SALES · CREATORS · REFERRALS · CONTENT-ENGINE · NEWSLETTER · RESEARCH-PR · GROWTH-ANALYTICS · MARKET-EXPANSION

Commercial — COMMERCIAL-OS · MERCHANT-SAAS · PLANS-ENTITLEMENTS · SUBSCRIPTIONS · BILLING · INVOICING · SPONSORED-PLACEMENTS · CAMPAIGN-MARKETPLACE · SALES-CRM · RENEWALS · API-MONETIZATION · COMMERCIAL-ANALYTICS · REVENUE-FORECAST · COMMERCIAL-TRANSPARENCY

Platform — ARCHITECTURE · DATABASE · API · DESIGN-SYSTEM · RESPONSIVE · ACCESSIBILITY · PERFORMANCE · STATE-MANAGEMENT · QA · COMPLIANCE · MODERATION · REVIEWS · REPUTATION · COMMUNITY · AFFILIATE · MERCHANT-FEEDS · DATA-QUALITY · ANALYTICS


Principles

Transparency is the product. Every user-facing score has a published method and an explanation control. Sponsored placements are labelled and excluded from organic positions. Payment buys tools, analytics, campaign inventory and data access — never a better ranking, a higher trust score or a removed review.

No dark patterns. No fake urgency, no invented scarcity, no hidden sponsorship, no pre-checked consent, no misleading countdowns.

Compliance is not optional. A product that cannot lawfully be sold in a market is not priced there. We say so explicitly rather than hiding the product.

Say what is not known. Where data is incomplete, the interface says so. Estimates are labelled estimates. Nothing deterministic is presented as AI.