
- Full-Stack Developer
- Personal
- Web, 2026
- Next.js, TypeScript, React, Express, PostgreSQL, Drizzle ORM, Redis, BullMQ, Turborepo, Tailwind CSS, Zod, OpenAPI
Objective
I am building Prixise so shoppers can find a product once, see every tracked retailer offer with freshness and verification rules, and leave through affiliate links to complete the purchase. The platform is deliberately not a store: no inventory, checkout, or fulfillment — commission comes from click-out attribution.
Problem
The same product shows up under different titles, SKUs, and prices across retailers. A useful comparison site has to ingest heterogeneous feeds, normalize them, match the same product reliably (GTIN/MPN/style before fuzzy names), keep offers fresh, and send shoppers to the right affiliate URL.
Tasks I have done
- Product requirements and architecture as a single-publisher catalog (not multi-tenant SaaS)
- Turborepo monorepo: public web, admin console, Express API, BullMQ worker, and scheduler
- Domain model for products, offers, retailers, brands, categories, price history, and affiliate entities
- Feed-oriented ingestion design: adapters for CSV/XML/JSON/API and affiliate-network feeds
- Product matching workflow prioritized by identifiers (GTIN → UPC/EAN → MPN → style → brand/model)
- Background job pipeline for import, normalize, match, price history, deal detection, and alerts
- Affiliate redirect path (
/go/offer/:id) with click tracking for commission attribution - Public UX scope: search, product comparison, deals, brands/stores, My List, price-drop alerts, and guides
Features
- Multi-retailer offer comparison with lowest verified price and full offer table
- Feed ingestion workers (BullMQ) — heavy parsing stays off the request path
- Identifier-first product matching across retailers
- Price timestamps, history, verified price drops, and deal surfaces
- Affiliate click-out with tracked redirect URLs
- Browse by category, brand, and retailer; product search (PostgreSQL in MVP)
- Saved products (My List) and price-drop alerts
- Editorial guides/journal plus About, Methodology, and disclosure pages
- Admin console for catalog, feeds, matching, and operator workflows
Architecture
Data pipeline: Retailer and network feeds land as jobs on Redis/BullMQ. The worker normalizes rows, runs identifier-first matching, writes products and offers to PostgreSQL, and updates price history. The Express API is the security and business boundary; web and admin are UI clients only. Shoppers compare offers on the product page and leave via tracked affiliate redirects.