Collect the offers
The data team gathered retailer offers and passed them to content. I estimate this took 2–3 hours for a regional update.
Self-initiated · AI product engineering · 2026
I built an internal tool that turns retail offers into promo banners, taking repeated Figma work out of the update cycle.

This began as my own initiative. I built a prototype over a weekend and presented it to my manager and senior managers, who responded positively. I then carried the tool end to end myself: product design, interface, frontend, backend, and the rules that turn offer data into regional banners. I used AI-assisted coding to build it, while owning the decisions and checking how the system behaved.
The data team gathered retailer offers and passed them to content. I estimate this took 2–3 hours for a regional update.
Content handed the data to design. Manually updating the banners in Figma took another 1–2 hours.
Content checked the offers again for about 30 minutes, then uploaded the finished assets to the CMS. The work repeated across roughly 7–8 regions.
The opportunity was to give the teams their production time back. OneHub connects collection, banner creation, and draft curation in one place, so design does not need to remake the same assets for every offer change.
Upload the team's spreadsheet or fetch a supported public source.
Offer values select the wording and regional template, without another copywriting or Figma production pass.
Inspect the result, move or replace entries, and handle exceptions in the live editor.
Download the assets. Content uses the existing CMS publishing workflow.
7–8 regional updates × 3.5–5.5 team-hours for the earlier collection, design, and verification workflow.
Estimate based on my reported workflow and one update per region per week. This is the manual workload the tool addresses; net savings require subtracting review and handling time in the new workflow. CMS upload is excluded.
Median local import time until rows and images were ready, across five warm runs.
Median local export time across five warm test runs.
Observed regional refresh times across India, France, and Germany.
The import test used a synthetic 100-banner CSV, not the pictured tracker workbook. A ten-banner ZIP took 1.18 seconds locally (median, five warm runs). Website refreshes are single observations from 31 October 2026; timing varies by source. These measure separate steps, not an entire campaign update.
Data can upload the numeric tracker or fetch a supported public source. The rules produce banner wording and layouts, taking repeated production out of design. Content receives assets for the CMS, with previews and draft controls available for checks and exceptions. The opportunity spans 7–8 weekly regional updates, rather than a single banner.
The weekly tracker contains prices, gift-card amounts, trade-in values, and availability. I built the interpretation into the importer: it reads those fields, follows the device and retailer rules, and selects the headline, supporting wording, and regional layout.

| What the data contains | What the tool decides |
|---|---|
| No qualifying offer | Use the device's feature-led headline instead of inventing a discount. |
| Gift card only | Use gift-card wording, without suggesting a trade-in is required. |
| Enhanced trade-in only | Describe the qualifying trade-in benefit and its conditions. |
| Enhanced trade-in + gift card | Include both benefits in the appropriate headline or supporting offer copy. |
The exact wording varies by device and offer priority. A Base trade-in value is not advertised as an enhanced saving; missing and zero-value fields are handled by the applicable rule. The source importer and its tests cover these branches.
That was the product decision: ask the team for the structured data they already receive, rather than asking them to write banner copy or rebuild the design. Fixed rules make those repeated decisions reusable and testable.
I encoded the copy decisions alongside regional layouts, offer groups, capacity limits, and device-image rules. A spreadsheet supplies the values; the tool supplies the appropriate message and composition.
Region-specific controls keep savings, installment payments, eligibility, and bundles distinct. The importer can combine a qualifying trade-in with a gift card, or choose a different message when that benefit is absent. I backed these cases with tests rather than relying on one good-looking example.
The tradeoff. More regional rules mean more cases to maintain. The value is taking repetitive production out of design while leaving room for exceptions.
Uploads and website refreshes open as sources. A deliberate move puts a selected banner into the regional Main Draft.
If that device and retailer already exist, the tool offers a replacement and shows the current and incoming values. That gives the operator a clear point to check what will become the working campaign content.
The tradeoff. Confirmation adds a step, but avoids treating every fetched offer as ready to use. Website extraction still needs checks when source content changes.
Browser-style tabs hold uploads, website results, manual banners, and drafts in the same workspace. Each source keeps its filters and edits while the operator switches.
Pinned previews and a live editor keep the banner close to its data. The operator can inspect the output without reopening a design file or losing the source they were reviewing.
The tradeoff. Tabs retain context within the session; they are not a promise that unsaved work survives a browser reload.
Actual product screens from the local walkthrough. Source offers include live retrievals from 31 October 2026; draft and editing flows use synthetic data and a test backend. Prices are illustrative, not current offers.

The operator supplies the supported numeric tracker. The importer reads the values and offer conditions, chooses the applicable wording, and fills the regional banner template. There is no need to manually translate every row into banner copy and a Figma layout.

Refresh a retailer or a supported region directly. This India walkthrough returned 24 banners across three retailers. Operators can inspect the offers and import warnings before curating the result.

A spreadsheet, public refresh, manual banner, and Main Draft can sit in separate tabs. Filters and edits stay with their source while the operator switches tasks.

The move action names the region, device, and retailer before adding the banner. An existing entry gets a replace confirmation rather than another duplicate.

For an existing device and retailer, the confirmation compares the current draft with the incoming price. The operator chooses whether to replace it, keeping one curated entry rather than creating another copy.

The properties panel and live banner share one view. Wording, offers, and price formatting can be adjusted in context; the operator sees the result before downloading it.

The imported weekly workbook holds 27 banners for review. Download an individual PNG or a batch ZIP, then use the company's existing CMS process to publish the assets.
I did not wait for a brief to automate work I could see repeating. The weekend prototype made the opportunity tangible for my managers; taking it through the frontend and backend made me responsible for the whole outcome.
AI-assisted coding let me work beyond the design file. I still had to define the workflow, model regional differences, validate the rules, and follow the behavior through to the exported asset.
I treated access and data handling as part of the product. Role boundaries and explicit draft updates matter, but the local walkthrough does not establish production security or concurrent-user reliability. Those need separate verification.
The business opportunity is team capacity: less extraction, less repeated Figma production, and fewer handoffs. A timed regional update, including review, corrections, and CMS upload, is the next step to quantify the net hours saved.
The earlier workflow and effort estimates come from my own account. Performance figures are local test observations; net team-hours saved and a universal accuracy rate have not been established.