← Back to Posku

What's new

A plain-language history of how Posku has grown since launch on May 21, 2026. Click any item to see what changed. Newest weeks at the bottom — the timeline reads top-to-bottom like a project diary.

Tags feature fix ui infra
Legend feature — something new you can do fix — something broken got fixed ui — look and feel infra — under-the-hood plumbing
May 21 – 22, 2026 · Week 1

The first version

Posku started as a single-page tool: paste an email, see loads, push SKUs to the ERP. The first commits set up the dark theme, the drag-and-drop surface, and a configurable ERP target.

feature

Single capture surface

Replaced an earlier builder UI with one big paste / drag-and-drop area. You can paste an email body or drop a file (.eml, .txt) and it goes from there.

ui

Light + dark themes

Dark theme bumped for contrast, and a light off-white theme added for users who want it.

feature

Configurable ERP target

You can point pushes at different ERP environments instead of hard-coding one.

May 25, 2026 · Week 2

Wayfair parser + diagnostics

The real Wayfair flow landed: parse emails, preview SKUs, push them. Outlook .msg support, supplier-aware architecture (so other suppliers could be added later), and the first diagnostic page for debugging bad pushes.

feature

Wayfair email → SKU push

Phase 1 of the real flow: parse Wayfair load emails, preview the generated SKU, push to the ERP. FOB state, packing, condition, and manifest traits all start landing on the product.

feature

Outlook .msg files

Native .msg parser reads the full subject + body from Outlook files. .eml decoder added too, plus better detection of binary file payloads.

infra

Supplier-aware architecture

Reorganized internally as a registry pattern so each supplier is its own isolated bundle of rules. This is what later made Sam's, Harbor Freight, and Amazon possible as tabs.

feature

Diagnostic page

Full debug page for ERP push issues. Has gone through many shapes since — the current version shows the last push, what the server saved, and a known-good reference SKU for diffing.

feature

Check IDs button

Calls the ERP's dropdowns endpoint and validates that the trait IDs we send actually exist on that environment.

fix

Push errors show inline

Failed or duplicate loads now show their error under the row instead of vanishing silently.

May 26, 2026 · Week 3

Edit row, PO drafts, rules editor

More visibility per load: an expanded edit row that shows every field being pushed, an always-visible chip strip beneath each row, and a browser-local rules editor so power users can tweak Wayfair defaults without redeploying.

feature

Full payload review per load

The edit row expanded to show every field that would be pushed. Below each load row, a compact chip strip shows the same info inline.

feature

Wayfair rules editor

Tweak Wayfair-side defaults (supplier ID, store, condition mappings, etc.) directly in the browser. Saved locally so each user can override safely.

feature

Purchase Order drafts

After a SKU is pushed, you can draft a matching PO and push it in the same flow. Every "need PO" field from the official spec is supported.

May 27, 2026 · Week 4

Cloudflare + Sam's Club + Gmail inbox

Posku grew teeth this week. Moved to Cloudflare Pages so the API key lives server-side instead of in browsers. Added the Sam's Club supplier with auto-assigned SEQ numbers fetched from the ERP. And the first version of Gmail inbox fetching — no more pasting emails by hand.

infra

Cloudflare Pages proxy

The browser no longer sees the ERP API key. All /api calls go through a Cloudflare Pages Function that injects the key server-side. Same-origin, so no CORS headaches.

feature

TEST vs LIVE switch

Toggle in the sidebar lets you point the app at the test ERP (viatrading.biz) or the live one (ops.viatrading.com). Test SKUs get a "-test" suffix automatically.

feature

Sam's Club supplier

Sam's joins Wayfair as a fully wired supplier. Tabs in the sidebar let you switch between them.

feature

Auto-assigned Sam's SEQ

When a Sam's email is parsed, the app fetches the current max SKU per club from the ERP and assigns the next sequence number. No more typing them in.

feature

Gmail inbox fetcher

Instead of copy-pasting emails, point the app at a Gmail label and date range — it pulls every matching message, runs the parsers, and pre-fills the loads table.

infra

Rules in Cloudflare KV

Per-supplier rules moved out of each browser's localStorage and into Cloudflare KV — a single shared source of truth across all users.

ui

Dark mode default

Dark navy interface ships as the default look.

May 28, 2026 · Week 5

Manifests, Drive, Sheets, sidebar redesign

The "Load Center" workflow showed up this week — Sam's CSV manifests auto-attach to their loads from inbox fetches, then bulk-append to a Google Sheet. Wayfair gained a Drive-based manifest browser. And the whole app got a UI redesign: dark navy sidebar, brand-colored titles per supplier, the Vicki Intelligence badge in the footer.

feature

Sam's manifest CSV → Load Center sheet

The CSV attached to each Sam's email gets parsed, the items get transformed into Load Center rows, and one click appends them to the shared Sheet. Per-load button or bulk send-all.

feature

Wayfair "Fetch manifests from Drive"

New panel that searches Google Drive for Wayfair manifest spreadsheets by upload date and derives a SKU per filename.

feature

Reset sheet headers

Button that rewrites the Load Center sheet's header row — fixes the recurring "columns got out of sync" issue.

ui

Sidebar + app-shell redesign

Dark navy sidebar, cleaner main area, brand color tinting the page title per supplier (Wayfair purple, Sam's blue), favicon + Via Trading mark up top, Vicki Intelligence credit at the bottom.

fix

Inbox date semantics

The Gmail before:date filter is exclusive — the picker now shows inclusive labels and uses the right boundary so "today through today" actually returns today.

May 29 – 30, 2026 · Week 6 (this week)

Push reliability, deeper diagnostics, UX polish

A huge debug push. We learned that the ERP was silently dropping several fields because we were sending the wrong key names — and we fixed every one of them. Drive fetches got smarter, the sidebar got a collapse toggle and zoom buttons, and the diagnostic page can now reveal exactly why an inbox fetch missed an attachment.

fix

Sam's push: 6 silently-dropped fields fixed

The ERP was accepting our pushes with HTTP 201 but quietly ignoring several keys because they were named wrong. Corrected: store_id → store, qty → unit_qty, price_per_unit → unit_price, packing now takes the real trait id, productType matches the dropdowns id, and 56 (Load Center) moved out of categories into the new groups array. PRODUCTS_API.md in the repo root captures all of this for future-us.

fix

Gmail inbox: 50-subrequest cap dropping attachments

When fetching ~30 emails, Cloudflare Workers' hard 50-subrequest cap was silently killing about 20 of the CSV downloads. Split the attachment fetch into a separate endpoint and now each request stays well under the cap. All manifests come through.

feature

Drive manifests: "In loads?" + "In ERP?" columns

Each Drive-fetched manifest now shows whether its SKU is already in the detected-loads table (so you can tell if email + Drive view the same load) and whether the SKU already exists in the ERP database (so duplicates don't get pushed).

feature

Type your own SKU for unrecognized rows

For Drive manifest filenames the parser couldn't decode, you can now type a SKU in line. It's validated against the ERP — only SKUs that already exist are accepted, so you can't accidentally create a typo product.

fix

Drive fetch by upload date

The picker is labelled "Upload date" but was actually filtering on Drive's modified-time. Fixed to use createdTime so a freshly uploaded file shows up where you'd expect it.

fix

"PerrisSmallParcel" no longer Unknown Location

Filenames like "Liquidation Load 50653 PerrisSmallParcel.xlsx" used to flag as unknown because the location parser only did exact matches. Now strips warehouse-type suffixes (SmallParcel, LargeParcel, SP, LP, DC) and falls back to a prefix match — so the warehouse variants all map to the right city code.

feature

Drive fetch: empty-result reasons

When "no manifests found" comes back empty, the message now tells you WHY: did Drive see no files at all (access issue), did it see files but the filter dropped them (filename mismatch), or did it see the right files but none matched a known tree (parser blind spot).

fix

Sam's manifest: skip Tax / Linked-Fees pseudo-rows

Some Sam's CSVs include a "Taxes and Linked Fees" line item that isn't real inventory. It's now filtered out of the sheet output, the load totals, and the SKU push.

ui

Collapsible sidebar + button press feedback

Tiny toggle in the sidebar top-left shrinks the menu to a 64-pixel icon strip. Every button now visibly responds to taps with a press animation and a brief ring flash — no more "did that click register?" moments on async actions.

fix

Sidebar stays put on horizontal scroll

When tables got wide enough to scroll horizontally, the whole sidebar used to scroll off-screen with the content. It's now position-fixed to the left edge.

feature

One-tap zoom controls

Three buttons in the sidebar — −, percentage, + — zoom the whole page in 10 steps from 60% to 200%. Persists across reloads. Ctrl/Cmd + and Cmd + 0 also work.

feature

Hide Push for duplicates; louder duplicate badge

If a load's SKU already exists in the ERP, the row now shows a red "✗ duplicate in ERP" chip and no Push button. You can still Edit or remove it.

ui

Modernized card headings + collapsible paste card

Card titles switched to Inter with a left-side gradient accent bar. The "Paste or drop email" card is now collapsible and starts collapsed each session, since most workflows use Inbox or Drive fetch instead.

feature

Diagnostic page: deeper signals

The diagnostic now shows the last push request/response, a follow-up GET of the saved product, a known-good reference SKU for diffing, the ERP dropdown lists, AND the last inbox-fetch summary (which loads got their CSV auto-attached and why the others didn't).