Skip to content
← Projects

Case study

Business Systems, Lifestyle Home Products

Status: In production

Data platform built across two co-op terms at a family-owned retail company: a centralized OAuth broker, ten Apps Script pipelines, and a set of interactive dashboards built with Claude, feeding Salesforce reporting and daily operations.

Role
Data Analyst
Timeline
Second consecutive co-op term

Stack

  • Salesforce
  • Google Apps Script
  • Google Sheets
  • SOQL
  • Google Workspace Admin APIs
  • Claude

Problem

At Lifestyle Home Products, I built a centralized Salesforce authentication service and ten Apps Script pipelines pulling from Salesforce, Google Workspace, and a handful of outside vendor and recruiting APIs into Google Sheets warehouses. Those warehouses feed the company's day-to-day reporting: a native Salesforce dashboard, an executive scorecard, and a set of interactive dashboards I built with Claude. The token broker and the dashboard pipeline were built with another co-op; everything else, individually. I also spent part of the term documenting accounting processes that had never been written down.

LHP's operational data was scattered across Salesforce, Google Workspace, and a handful of point tools (Rilla, Regal, JazzHR, Xero) that never talked to each other. Worse, the ten-plus Apps Script pipelines that did the talking each managed their own Salesforce login independently, which broke silently under scheduled triggers and put the company's Salesforce credentials at risk if enough failed at once. Reporting had the same problem from a different angle: Tableau, which the company depended on, had been fully deprecated with nothing built to replace it. Separately, a handful of critical accounting processes existed only as tribal knowledge in one person's head, with no documentation and no plan for what happens if they're ever unavailable.

Systems built

Salesforce Token Broker

Co-built

10+ Apps Script pipelines each managed their own Salesforce OAuth connection, which broke silently under scheduled triggers and risked Salesforce rate-limiting the org when several failed at once. I built a single Apps Script web app that owns the OAuth grant instead: every pipeline calls it for a cached token (25-minute TTL), with locking against concurrent callers, retry with backoff, and fast failure on a dead refresh token rather than burning through retries.

Reduced OAuth grant volume from 25+ per incident to 1 per cache window across 10+ pipelines, turning OAuth from a per-pipeline maintenance burden into one testable, monitorable service.

User & License Warehouse

4 of 4 platforms live

LHP's identity data was scattered across four systems with no reconciliation: Salesforce, Google Workspace, Rilla, and Regal, each needing a different auth pattern (Regal has no API at all, so its sync parses a monthly CSV export from Gmail). I built a daily pipeline, authenticating through the token broker, that unifies all four into one warehouse, with each source isolated so one failure doesn't block the others.

Replaced four disconnected sources of user and license truth with one daily-refreshed warehouse, used for license reconciliation, role auditing, and cross-checking agent activity. All four platforms are fully live.

Operations Dashboard Pipeline

Co-built, in production

When Tableau was deprecated at LHP, operational reporting needed a new home. I helped build the pipeline that populates the replacement: a native Salesforce i360 dashboard fed by twelve daily reports across all product lines, with automatic file rotation as the Google Sheets warehouse approaches its cell limit and idempotent monthly snapshots so re-running mid-month doesn't duplicate data.

Directly replaced Tableau as the reporting backbone for backlog, balance-due, and install-projection metrics, now feeding the dashboard used as the company's source of truth.

Cycle Time Warehouse

In production

LHP tracks cycle time across roughly 25 project milestones, each a sparse field on the underlying Salesforce object. I built a standalone pipeline that restructures this into a long, normalized warehouse, one row per populated field, directly pivotable by milestone, product line, and region.

A confirmed live run processed 147,723 activity records. The pipeline is idempotent (safe to re-run, backfill, or rotate without manual deduplication) and backfilled historical data back to 2022.

Additional warehouses

Costco Lead Source & Appointment Tracker

Salesforce

Tracks how Costco-sourced leads convert into set and completed demo appointments, broken out by taker, market, and region, separate from the main ops reports.

Deleted Records Audit Log

Salesforce (queryAll, including soft-deleted)

Daily audit trail of what's deleted across the org and by whom, spanning 9 objects, since Salesforce's Recycle Bin only holds records for 15 days.

Executive Scorecard (v2)

Salesforce, 39 aggregate queries

Leadership-level scorecard across 10 metrics including backlog, retention, and cash. v2 exists because v1 ran all 39 queries serially and blew Apps Script's 30-minute execution cap; the rewrite fetches in parallel waves with a watchdog trigger that re-runs a failed pull automatically.

JazzHR Applicant Warehouse

JazzHR recruiting API

Centralizes recruiting pipeline data for reporting alongside Salesforce location and business-unit data, which JazzHR's own interface can't cross-reference.

Marketing Dashboard: Lead Source Performance

Salesforce

Full-funnel view from lead intake through appointment outcome through actual sale economics, broken out by market segment and region.

Xero Bank Transactions Export

Xero API

Daily flattened export of bank transactions. Xero's interface has no CSV journal-entry import, so this gives a queryable, spreadsheet-native copy for downstream reconciliation.

AI-built interactive dashboards

Alongside the pipelines, I used Claude to build a set of interactive dashboards, one per warehouse, each with year, month, product, and region filters, sortable charts, stat tiles, and target-vs-actual coloring. Two are live today: a Cycle Time dashboard and a Software Usage & License Audit dashboard, both driven entirely by Apps Script and Claude.

Institutionalizing accounting knowledge

Ran in parallel with the technical work: converted one accounting controller's undocumented process knowledge into a structured set of SOPs, written docs plus recorded video walkthroughs, built against a consistent seven-part template covering trigger, systems required, steps, exceptions, common errors, output, and escalation contact.

Documented 10+ processes end to end, including bank reconciliation, payroll, government remittances, and vendor payment cycles. While mapping three unrelated processes, I noticed they all hit the same root cause: the accounting platform can't import journal entries from a CSV. I flagged it as one consolidated recommendation instead of three separate ones.

Reduced key-person risk for finance operations that previously depended on one person's memory, and produced a reusable template that generalizes beyond accounting.

Limitations

  • These are internal systems built for a private company, so there is no public demo or repository to link to.
  • No automated test suite exists across the pipelines, beyond the Token Broker's cache-behavior test.

Results

This work was directed and reviewed at the leadership level (C-suite and various VPs) before rolling out to the teams that depend on it daily.

Ten production pipelines, a centralized OAuth service, and a set of Claude-built interactive dashboards now run LHP's operational reporting. Separately, the accounting documentation initiative reduced key-person risk across 10+ previously undocumented financial processes.