Direct contractAffiliate product sync · 2025 · Lead engineerwish2share.com
Wish2Share
Affiliate product feeds synced into one catalogue, processing files well beyond the platform’s 300-second execution limit.
Wish2Share is a direct Upwork contract, now four repeat contracts: syncing several affiliate networks into one catalogue via delta-hash deduplication and a resumable pipeline that clears a hard 300-second serverless execution limit. It began as prototype sync code, the same jump from prototype to production infrastructure The SyncFlow's Vibe Code to Production service now formalizes.
- Direct
- Attribution
- 4 repeat contracts
- Scope
- 5.0
- Status
4 repeat contracts from $700 fixed price, 5.0 rating, public on Upwork, Apr–May 2025.
The problem
Affiliate networks publish enormous product feeds on their own schedules and in their own shapes. Wish2Share needed them all in one searchable catalogue, kept current, without rewriting every record on every sync.
The initial sync logic arrived as prototype code that worked against small test feeds. Real feed volume exposed two problems at once: the deployment platform’s hard 300-second cap on a single function, and the cost of naively rewriting unchanged products on every run.
Constraints
The conditions the solution had to survive, not a wish list.
- Serverless time limit
- A hard 300-second ceiling per invocation on Vercel.
- Heterogeneous feeds
- Awin, TradeTracker, Daisycon and Adtraction each publish different formats on different cadences.
- Write cost
- Naively re-writing unchanged products on every sync is slow and expensive at feed scale.
- Operational visibility
- The client needed to see what synced, when, and what failed, without reading logs.
The approach
In plain English, before the architecture.
Taking the sync from prototype to something that could run unattended meant rebuilding it around two ideas. First, hash each product record and compare against the stored hash, so only genuinely changed rows are written. Second, treat a sync as resumable work rather than a single run.
Each invocation processes for a fixed time box, records a cursor at the point it stops, and exits cleanly. The next invocation resumes from that cursor. A feed that needs twenty minutes completes across several invocations with nothing lost and nothing duplicated.
Architecture
The decisions that mattered, and why they were made that way.
- 01
Delta-hash deduplication
Every product record is hashed and compared with the stored hash, eliminating redundant writes and making the cost of a sync proportional to what actually changed.
- 02
Time-box and cursor-resume
Work runs until a time budget is reached, persists a cursor, and exits. The following invocation resumes there, letting arbitrarily large feeds finish within a hard per-invocation limit.
- 03
Per-network adapters
Each network has its own adapter normalising its format into a shared product shape, so adding another network does not mean touching the ones already live.
- 04
Admin control panel
Per-network sync controls, real-time status tracking and a unified product search, so the client can operate the system without a developer.
Outcome
The sync pipeline now completes arbitrarily large feeds across resumed invocations, with nothing lost and nothing duplicated: the production version of what started as prototype code.
The client has returned across four repeat contracts since, at a 5.0 rating: “works fast, clean and knows a lot.”
Stack
- Next.js
- TypeScript
- Node.js
- Firestore
- Vercel
Timeline
April to May 2025, plus follow-on contracts
Contract value
$700 fixed price, 4 repeat contracts
Tell us what you can’t staff.
Twenty minutes. No deck, no discovery sequence. If we are the wrong fit we will say so on the call and point you somewhere better.