Peishan Grace Li

I turn messy human processes into automated systems.

Marketing, automation, and CX operations. I sit at the point where support tickets, order data, ad spend, and APIs meet, and I make them talk to each other so people don't have to.

Selected work

retellai: deploy T+14 days → phones answered

An AI voice agent, live in two weeks

Aroma Housewares · Crisis deployment & conversation design · 2026

Problem

Phone support was suddenly left unstaffed. Customers were calling a national housewares brand and reaching nothing.

Build

Scoped, scripted, and deployed an AI voice agent on RetellAI in two weeks, partnering daily with an external developer who built the integration while I owned everything that makes it safe to put in front of customers: the conversation design, intent routing, escalation paths, the domain knowledge it runs on, and the adversarial testing and guardrails that stop it from confidently stating anything untrue about products, orders, or policy.

Outcome

The phones never went dark. In its first three months the agent answered 2,300+ calls with a near-100% pickup rate, handled roughly four in ten end to end, and routed the rest to the rebuilt three-person team with intent labels attached. Negative caller sentiment: under 6%.

The sleeper benefit: every call is classified against a 19-intent taxonomy and logged by product model, so the phone line now doubles as structured product-quality intelligence, surfacing issue patterns by SKU that never existed when humans took messages.

RetellAI · conversation design · prompt engineering · vendor coordination

trigger: cancel_refund_intent → verify: shipstation → refund

Rebuilding a support macro library into a system

Aroma Housewares · Zendesk administration & AI automation · 2026

Problem

The support inbox I inherited ran on roughly 20 macros, pure reply text with no tags, no status routing, no taxonomy, and no documentation. Agents guessed. Cancel and refund requests, the most time-sensitive ticket type, waited in the general queue.

Build

Rebuilt the library from the ground up into 76 standardized macros, each with descriptions, tags, and status routing under a documented taxonomy, then wrote the SOPs and agent guide so the system serves both the three-person human team and the AI layer on top of it.

Then automated the highest-stakes flow: an AI-intent trigger that detects cancel and refund requests, with keyword fallback for tickets the classifier misses, duplicate-fire prevention, and instant escalation. Designed the safe automation boundary deliberately: refunds only execute after ShipStation confirms the order hasn't shipped, keeping a human check exactly where it belongs.

Outcome

Median full resolution time fell from roughly ten days in 2025 to two days in 2026, an 80% reduction, and structured form intake with automated triage cut first response from a median of nearly eight days to instant. Underneath the numbers: a macro library agents can trust and a taxonomy that survives turnover.

Zendesk API · AI intent classification · ShipStation · WooCommerce · Zapier

hook: woocommerce_thankyou → status: on_hold

The bug the dev team couldn't crack

Aroma Housewares · Production e-commerce debugging · 2026

Problem

Completed orders on aromaco.com were spontaneously reverting to On Hold, silently corrupting inventory counts with every phantom transition. The external dev team investigated and reached no conclusion.

Trace

Over two days I pulled server logs, cross-referenced Stripe payment and webhook records, and matched timestamps to the second across three affected orders. That ruled out delayed webhooks and race conditions and isolated the culprit: a custom address-mismatch check firing on the woocommerce_thankyou hook with no order-status guard, so it re-triggered on every page reload of the order confirmation screen.

Fix

Presented the evidence chain to the developers, who confirmed the diagnosis. The custom checkout code was retired in favor of Stripe Radar for fraud screening, eliminating the failure mode instead of patching around it.

Outcome

Reversions stopped, inventory drift ended, and a class of untraceable support tickets disappeared.

WooCommerce · Stripe · server logs · webhook forensics

ss: on_hand → woo: stock_quantity · diff-only

One source of truth for inventory

Aroma Housewares · ShipStation to WooCommerce sync · 2026

Problem

The native ShipStation to WooCommerce inventory sync broke, and each vendor insisted the other should fix it. Two months into the tech-support ping-pong, with the dev team limited to version updates, warehouse and storefront counts were drifting daily and operations was paying for it in oversells and manual corrections.

Build

Rather than wait for two vendors to agree whose bug it was, a Node.js sync that routes around the deadlock and makes the warehouse the source of truth: it pulls the full ShipStation inventory through the paginated v2 API, aggregates on-hand quantities by SKU, matches them against every WooCommerce product and variation, and writes only what actually changed. Rule-based exclusions keep legacy lines and non-product SKUs out of scope.

Built ops-grade rather than script-grade: every run logs a from-to change ledger, reports WooCommerce SKUs with no warehouse match so catalog drift surfaces instead of hiding, and translates API failures into plain-language fixes. The config is structured so a non-developer can maintain it.

Outcome

Storefront stock mirrors the warehouse again, overselling risk drops to the sync interval, and every run doubles as a catalog audit. A two-month vendor standoff, unblocked in an afternoon.

Node.js · ShipStation API v2 · WooCommerce REST API · SKU governance

audit: conversion_goal → fire_on: purchase (was: landing)

Making ad spend answer for itself

Aroma Housewares · Marketing analytics & content · ongoing

Problem

Ad reporting described what happened, not what to do next. And beneath it, the numbers themselves couldn't be trusted: Google Ads showed conversion counts an order of magnitude above actual sales.

Build

Audited the conversion instrumentation end to end and found the primary goal firing on site landings rather than purchases, inflating counts roughly tenfold and quietly mistraining Google's automated bidding. Re-scoped the goal so the algorithm optimizes toward actual revenue.

On top of clean data: a 13-week rolling analysis of ROAS, spend, and digital GMV that surfaced a high-return spend experiment worth scaling and flagged an efficiency anomaly the topline hid, a 553-campaign email program generating 3.2 million unique opens, and long-term influencer partnerships built at a fraction of typical campaign cost, a deliberate fit with the brand's relationship-first culture.

Outcome

Key-event conversions grew 33% year over year while cost per conversion fell 40%. More durable than any single number: spend decisions now run on instrumentation the team can trust.

Google Ads · Meta ads · GA4 · conversion instrumentation · Mailchimp · influencer partnerships

About

I started in marketing communications at a medical device company, moved through a UX design program, and landed where all of it converges: operations. At Aroma Housewares I run the customer experience stack (Zendesk, WooCommerce, ShipStation, Zapier), own marketing analytics and content, and increasingly build the automations and API integrations that connect them.

The through line is the same everywhere: find the process that runs on tribal knowledge and repeated manual effort, understand why it really works the way it does, then rebuild it so a system does the repetition and people do the judgment.

I work in English, Cantonese, and Mandarin. Outside work I'm usually training, reading across philosophy and finance, or somewhere outdoors with my family.

Let's talk.

Open to roles across marketing operations, CX operations, and automation. The interesting ones are usually all three.