Daniel Baker

Project Portfolio

Software, automation & design — a technical overview

A selection of projects spanning AI-driven marketing automation, generative-AI pipelines, automated intelligence pipelines, web and desktop applications, custom WordPress development, and front-end design systems. Each card summarizes what the project does and how it is built.

Expand any “Technical deep dive” for architecture, engineering highlights, and scale. Use the filters to jump between categories.

17 featured projects 6 categories Python · TypeScript · PHP · Rust · JS · Docker AI pipelines, agents, apps & design systems

DKB Media · daniel@dkbmedia.com

Marketing & Agent Automation 3 projects

Multi-agent platformIn production

Marketing Superskiller

A self-hosted platform that runs a library of AI “skills” as tracked jobs and turns their output into branded client deliverables.

  • Next.js 15
  • React 19
  • TypeScript
  • SQLite
  • Claude Code CLI
  • Python
  • Puppeteer
  • MCP

Marketing Superskiller (internally branded “DKB Labs”) is an agency operating system that pairs a Next.js/SQLite dashboard with a catalog of roughly 135 self-contained Claude “skills” (about 38 first-party, the rest curated third-party imports), 10 specialized sub-agents, and Python automation — all organized per client and brand. An operator parameterizes a skill from the dashboard and runs it as a tracked job; a Node runner shells out to the Claude Code CLI, streams a typed event log, and renders the result as paired HTML + PDF artifacts on branded templates. Every brand carries its own marketing-context, brand-guidelines, and ICP “memory” files that each run reads, plus its own integration credentials. It currently spans seven clients across roughly twenty brands.

Technical deep dive

Skills are declared as structured contracts — a YAML manifest plus a Markdown prompt — that specify typed inputs and outputs, which per-brand memory files they read, which integrations they require, and whether they write to a live system. Skills chain into multi-step “playbooks” (onboarding, SEO deep-dive, CRO sweep, paid-acquisition audit, and others) that can pause for a client questionnaire and produce review-ready output for the operator to apply, rather than writing to live systems unattended. Output is deliverable-first: a draft-to-final lifecycle, inline editing with live re-render, an “unbrand” white-label toggle, and a report generator that consolidates a date range of completed jobs into a one-page executive summary.

Technical highlights

  • Per-job runner spawns the Claude Code CLI as a subprocess, parses its stream-json output into a typed event log (with per-run cost and turn counts), enforces timeouts, and tree-kills orphaned child processes on shutdown.
  • Pluggable LLM-provider layer with adapters for Claude, Gemini, OpenAI, DeepSeek, and a local Ollama route, configured from a single providers.yaml consumed by both the TypeScript runner and the Python scripts.
  • Live-data integrations over the Model Context Protocol — Google Ads, GA4, Search Console, Sheets, Drive, Ahrefs, and LinkedIn Ads via Composio, plus first-party Python MCP servers.
  • Strict per-tenant isolation: every database query is scoped to (client, brand), filesystem paths are validated against traversal, and a “cross-brand read guard” warns if a skill session touches another brand’s files.
  • Self-updating “brand memory”: a meta-skill reconciles each strategic run’s findings against six canonical per-brand Markdown files and demotes contradicted claims so each engagement informs the next.
  • Deliverable pipeline renders branded PDFs via Puppeteer, exports fillable questionnaire PDFs (pdf-lib) and Word documents (docx), and includes a PSD-to-template editor (psd-tools + Pillow) that turns design files into branded report templates; recurring runs are scheduled in-app with node-cron and catch up on boot.

How it works

Four layers: a Next.js 15 / React 19 dashboard (App Router, routes under /c/[client]/[brand]/… plus roughly 50 API route groups); a catalog of self-contained skills and ten reusable sub-agents; a library layer holding the runner, provider adapters, MCP registry, scheduler, brand-memory hooks, and document renderers; and persistence split between a single SQLite database (jobs, events, schedules, playbook-runs, scans) and a per-brand filesystem tree (context, guidelines, assets, outputs, deliverables, credentials). A “job” is the unit of work, and an “include in scope” flag marks the jobs the report generator may consolidate.

Scale
~90,500 lines of application code; dashboard ~54,200 LOC across 353 TypeScript/TSX files, plus ~31,100 Python. ~135 skills (~38 first-party, ~97 third-party), 10 sub-agents, 9 playbooks. 7 clients / 21 brands.
Integrations
Google Ads, GA4, Search Console, Sheets, Drive, Ahrefs, LinkedIn Ads (via Composio MCP); first-party GA/GSC/Sheets MCP servers; optional ScrapingBee, Tavily, and image-generation MCP.
Deployment
Local Windows production build (port 3838); remote access via an auth-gated Cloudflare Tunnel; in-app scheduling with node-cron.
Provenance
The platform itself — dashboard, runner, playbooks, and brand-memory loop — is original work, as are ~38 first-party skills; the remaining ~97 skills are curated third-party imports under MIT / per-author licenses.
Programmatic SEODeployed

“Modes” Programmatic-SEO Network

A self-built publishing platform that mass-produces clinical “case-file” encyclopedia sites — now ~70+ live WordPress sites across ~18 thematic families — from LLM-generated dossiers.

  • Python
  • WordPress (CPT + REST API)
  • PHP
  • LLM agent fan-out
  • cPanel / Softaculous API
  • Playwright
  • FTPS

What began as four sister WordPress “case study” sites has grown into a programmatic-publishing platform of roughly seventy-plus live WordPress sites across about eighteen thematic families — clinical, encyclopedia-style databases of real-world business and failure case studies. Content is produced by a pipeline that fans out parallel LLM agents to draft reference-checked dossiers, converts the markdown into a structured WordPress meta schema, and bakes it into per-site themes via an idempotent importer. A companion Python provisioning toolkit stands up and migrates the whole fleet on shared hosting (see the Provisioning Toolkit below), and a separate pipeline renders per-entry OpenGraph social cards.

Technical deep dive

Each site exposes a filterable index of case studies built on a fixed ten-section structure (metadata, summary, timeline, narrative, root-cause analysis, five contributing factors, aftermath, lessons, and references), organized under a per-site Custom Post Type with four taxonomies that drive client-side filter chips. Each thematic family carries its own visual skin over a shared clinical “case-file” system, and sites cross-link through a generated related-index.

Technical highlights

  • Two-phase Python content expansion embeds LLM-authored structured prose directly into a per-site entries.json, merged by entry ID.
  • Idempotent PHP importer upserts posts by a unique ID meta key and encodes JSON fields with JSON_UNESCAPED_UNICODE to survive WordPress’s slash-stripping.
  • Adding a whole new four-site family is a single manifest-driven run rather than bespoke setup — a scaffolder clones the canonical template (CPT slug, prefix, taxonomies, hero copy) via ordered string substitution.
  • OG-card pipeline renders a 1200×630 HTML card per entry via Playwright headless Chromium, then uploads PNGs over FTPS with TLS.
  • A cross-site related-index script queries each site’s WordPress REST API, normalizes taxonomy tags, and fuzzy-matches titles to live slugs for “see also” recommendations.
  • Per-site deploy.sh pushes theme files over explicit FTPS (curl --ssl-reqd) with single-file, multi-file, and full-sync modes.

How it works

Hand-written seed entries per niche are expanded in two Python batch passes into full structured content, uploaded into the theme’s seed directory, and upserted idempotently via an admin-gated importer. The WordPress theme (one per site, generated from a canonical template) registers the Custom Post Type, taxonomies, and meta fields and renders each section in fixed order; the OG-card and related-index scripts run separately against the live sites.

Scale
~70+ live WordPress sites across ~18 thematic families; ~1,140 published case-study entries (each ~1,900–3,200 words) from ~955 source dossiers; an OG social card per entry.
Deployment
HostGator shared hosting + Cloudflare DNS; provisioned and migrated by a custom Python toolkit, including a verified subdomain-to-path relocation of 72 sites.
Provenance
Original platform — themes, the markdown→WordPress build pipeline, the provisioner/migrator, and the content orchestration; dossier prose is drafted by parallel LLM agents. WordPress and the hosting platform are third-party.
AI skills libraryIn use

Marketing AI Skills Library

A library of packaged, model-invokable marketing-automation skills for Claude Code agents.

  • Claude Code skills
  • SKILL.md
  • Composio MCP
  • Ahrefs / Google Ads / GA4 / GSC
  • ScrapingBee
  • Exa

A curated collection of 15 reusable Claude Code “skills” — self-contained capability packages an agent loads and invokes on demand to automate marketing workflows. Each skill is defined by a SKILL.md file: a YAML front-matter block (name, description, trigger conditions, integration requirements) followed by natural-language instructions the agent follows at runtime. The set spans SEO analytics, paid search, competitive intelligence, market research, web scraping, conversion optimization, sales outreach, and an orchestration “router” skill.

Technical deep dive

Skills activate automatically when the agent detects a matching intent, then orchestrate API calls, MCP tools, and data synthesis without manual intervention. Integrations are routed through the Composio MCP layer so the skills stay declarative — they specify what to do, not how to authenticate or paginate. A marketing-operations-orchestration skill acts as a dispatcher, routing compound requests across specialist skills in sequence.

Technical highlights

  • 15 skill packages across SEO (Ahrefs, GSC, JavaScript-SEO auditing), paid search/analytics (Google Ads, GA4), competitive intelligence, research, scraping, CRO, and outreach.
  • API access via MCP (Ahrefs, Google Ads, GA4, Search Console, ScrapingBee) plus Exa neural search and Firecrawl for research synthesis.
  • A competitive-ads extractor pulls and analyzes ads from public ad libraries; a deep-research skill returns cited, multi-source reports.
  • Structured YAML front-matter (trigger conditions, integration requirements) drives reliable agent dispatch.
  • Provenance metadata distinguishes owner-authored skills from curated community/third-party imports.
Scale
15 distinct skill packages; two are symlinked aliases. Several carry explicit third-party attribution (author + license).
Provenance
Owner-authored and curated. Separately leverages the third-party open-source “superpowers” framework (by obra / Jesse Vincent, MIT) as a methodology layer — used, not authored.

AI & Generative Systems 2 projects

AI pipeline / generativeWorking tool

PartForge — AI 3D-Print Generator

A browser tool that turns a text description or photo into a print-ready, multi-color 3D model — validating every result before it’s served.

  • Node.js / Express
  • React + three.js
  • Python (build123d, trimesh)
  • Docker Compose
  • FastAPI GPU sidecars
  • SQLite
  • Claude Code
  • CUDA

PartForge orchestrates a Claude Code CAD agent together with several integrated open-source generative-3D engines to turn a text prompt or reference photo into a validated, Bambu-printer-ready multi-color model — all running locally on a GPU with no per-generation API cost. It pairs a React/three.js browser front end with a Node server and Python CAD workers, and crucially never trusts a model’s output on faith: an independent validation gate re-checks every mesh for printability before it is offered for download. A deterministic parametric-rebuild path then lets users tune dimensions and colors with sliders, with no further LLM or GPU calls.

Technical deep dive

A generation request is routed to the most appropriate engine, run on a warm GPU worker, and converted to a watertight, multi-body mesh; the result passes through a printability gate before it ever reaches the user. Beyond raw generation, a reusable CAD “skills” library produces parts that are watertight by construction (Gridfinity bins, threads, hinges, heat-set bosses), and a JSON parameter schema backs a slider-driven rebuild path so iteration costs nothing in tokens or GPU time.

Technical highlights

  • Orchestrates a Claude Code CAD agent plus five integrated open-source generative engines (TripoSG, Hunyuan3D, PartCrafter, Zero123++, and FLUX.1-dev for image input) into validated, print-ready files — running entirely locally.
  • An independent printability validation gate re-checks every generated mesh — watertightness, consistent winding, positive volume, triangle budget, build-plate fit, and connected-body count — so model output is never trusted on self-report.
  • Deterministic parametric-rebuild path (a generator script plus a JSON parameter schema) lets users tune and recolor models via sliders with zero LLM or GPU calls, cutting edit latency from minutes to seconds.
  • Reusable CAD “skills” library of watertight-by-construction generators, plus a content-safety screen and a cost-aware model router, hardened by a golden-set regression harness that also measures agent honesty.
  • Containerized with Docker Compose and a privileged engine-supervisor that swaps warm GPU engines per lane within a fixed VRAM budget, keeping the untrusted prompt-driven app isolated from the Docker control plane.
Scale
~3,000 LOC JavaScript (Node server + React UI); ~7,100 LOC Python across ~86 files; 5 integrated generative engines; 9 CAD skill generators; print mesh capped ~500k triangles, 2–8 AMS colors.
Runs on
A local NVIDIA RTX 5090; per-engine FastAPI GPU sidecars; SQLite generation history.
Provenance
Original work — the orchestration pipeline, web app + history, the CAD-agent prompt and skills library, and the fidelity / safety / eval / supervisor harnesses. Integrated third-party — the generative-3D models (TripoSG, Hunyuan3D, PartCrafter, Zero123++) and FLUX.1-dev image generation are open-source/vendor components run locally; the CAD libraries (build123d, trimesh, lib3mf) are open source.
AI video (customization)Customization

HyperFrames Video — Brand Template Pack

Custom brand-template and production work on top of an open-source AI short-video pipeline.

  • HTML / GSAP
  • Claude Code
  • edge-tts
  • Whisper.cpp
  • ffmpeg
  • Node.js

HyperFrames is an open-source pipeline (by Cole Medin) that turns a topic prompt into a narrated, GSAP-animated vertical YouTube Short. This entry is honest about scope: the core pipeline and its Python scripts are upstream open-source code — the owner’s contribution is a set of four custom HTML/GSAP brand templates and the work to run the system reliably in a Windows production environment.

Technical deep dive

The upstream pipeline derives animation timing from word-level Whisper.cpp transcripts so motion stays locked to narration. The owner authored four brand-specific video templates that conform to the pipeline’s phase-contract (for defense-industry and higher-ed contexts), and adapted the toolchain for Windows — invoking Claude Code directly and swapping the speech stack to edge-tts + Whisper.cpp — to resolve silent-render and dependency-install failures.

Technical highlights

  • Authored four custom HTML/GSAP brand video templates conforming to the pipeline’s phase-contract and timing-anchor protocol.
  • Adapted the open-source pipeline for Windows production (direct Claude Code invocation; edge-tts + Whisper.cpp), fixing upstream silent-render and install failure modes.
  • Produces narrated 1080×1920 vertical Shorts (~24–30s) end-to-end, from topic prompt through browser preview.
Provenance
Customization of an open-source project (HyperFrames AI video generation, by Cole Medin). Original contribution: four brand templates and a Windows production adaptation. The core pipeline and Python scripts are upstream open-source code — not authored here.
Scale
4 custom brand templates; ~16 sample Shorts generated during development.

Intelligence & Data Pipelines 4 projects

Intelligence pipelineIn production

Defense Industry Digest

A daily pipeline that aggregates 11 defense publications, summarizes and scores each article with an LLM, and serves a “Newsroom Terminal” briefing.

  • Python
  • Flask
  • Playwright
  • Claude CLI (Haiku)
  • feedparser
  • BeautifulSoup
  • Task Scheduler
  • Cloudflare Tunnel

A locally hosted intelligence pipeline built for a defense-sector business-development context. Each morning it scrapes 11 defense and national-security publications — using RSS, HTML scraping with Playwright, and Wayback Machine fallback for paywalled sources — then summarizes every article and scores it for relevance to a specific company’s capabilities and capture priorities. Results are written as a self-contained Markdown briefing and rendered through a custom Flask “Newsroom Terminal” with single-day, weekly, and custom date-range views, shared with colleagues over an auth-gated Cloudflare Tunnel.

Technical deep dive

The pipeline runs a fixed sequence: fetch, deduplicate against a seen-articles file, hydrate thin article bodies through a four-tier escalation chain, summarize with a two-prompt strategy, score each article for business-development fit, synthesize a snapshot and an opportunities roundup, and write the briefing. An /authors page aggregates recurring bylines and pre-generates a tailored outreach pitch for each.

Technical highlights

  • Four-tier body hydration — direct GET, AMP variant, archive lookup, then Playwright with 19 stealth evasions for JavaScript-heavy or bot-walled sources.
  • LLM summarization and scoring run via the Claude Code CLI (no API key); batched JSON-output scoring cuts token usage roughly tenfold versus per-article calls.
  • A Wayback “Save Page Now” queue handles paywalled sources — articles are submitted on first failure and the historical briefing is rewritten in place once a snapshot appears.
  • Per-author outreach generator drafts a pitch angle, proof anchors, and a ready email, cached by a hash of the author’s flagged articles and the brand-context documents.
  • Entirely file-based state with content-hash cache keys, so editing the brand-context document automatically invalidates affected summaries and scores.
  • A file-based dual-transport layer switches the pipeline’s LLM calls between a headless subprocess and an interactive Claude Code session, with stale-response detection and an abandonment circuit breaker.
  • A thumbs-up/down feedback queue folds committed ratings back into later opportunity-scoring calls; a context-aware ad-hoc prompt box and an Azure Neural TTS voice readout round out the dashboard.
  • Launcher sweeps only orphaned LLM worker processes (by checking for dead parent PIDs), preserving live interactive sessions.
Scale
~17,000 LOC across pipeline scripts, the Flask web app, and static assets; 11 sources; 33 daily briefings on disk; a 213-term defense glossary wired as hover tooltips; five dashboard pages plus an ad-hoc LLM prompt modal.
Deployment
Windows Task Scheduler at 07:00 daily (wake-to-run); Flask served over a named Cloudflare Tunnel (read-only for remote viewers, admin endpoints localhost-only).
Cost
~$0.30 per run (~$9/month) against a Claude Max subscription.
Intelligence pipelineIn production

Financial Independence Digest

A daily personal-finance intelligence pipeline that aggregates FIRE-community sources and scores each article against a personal financial profile.

  • Python
  • Flask
  • Playwright
  • Claude CLI (Haiku)
  • feedparser
  • BeautifulSoup4
  • Task Scheduler

Built on the same scaffold as the Defense Industry Digest, this pipeline swaps defense sources for the financial-independence (FIRE) community. Each morning it fetches RSS from a dozen blogs and newsletters plus a Reddit community, summarizes each article with an LLM, and scores it for relevance against a plain-text personal profile that encodes income, net worth, and a prioritized set of tax-optimization levers (no specific figures are surfaced in the UI). The scored output — tagged action recommendations, a synthesis, and a text-to-speech script — is served through a Flask dashboard behind an auth-gated Cloudflare Tunnel.

Technical deep dive

The dashboard goes well beyond a reading list: an action queue with deadline-driven urgency coloring, a Q&A page over the briefing corpus with inline citations, an LLM-clustered “recurring themes” page, a tax-year planner that buckets tax-flagged articles across 14 lanes against the IRS deadline calendar, a Networthify-style FI projection with live sliders, a savings-waterfall contribution calculator, and a curated FI glossary.

Technical highlights

  • Four-tier article hydration with a Reddit-specific JSON path that captures selftext and top comments, bypassing the single-page-app.
  • A 38-pattern refusal detector evicts any summary where the model produced a polite non-answer and re-summarizes on the next run.
  • Personalization is driven by a single profile file; the dashboard’s “patterns” page writes committed or excluded strategies back to managed sections of it, and the scorer’s cache key hashes the file so edits auto-invalidate.
  • Batched actionability scoring (10 articles per call) tags each item with one of eight action categories (tactic, tax move, allocation, monitor, skip, and others).
  • A separate TTS pass spells out numbers and phoneticizes finance acronyms (e.g. “H-S-A”) for a clean spoken readout.
  • Snapshot protection: if a re-run yields fewer articles than the existing day’s file, the original is preserved to avoid regressions.
Scale
12 sources; 9 dashboard pages + 20 API endpoints; 31 daily briefings to date; three CSS themes and a curated TTS voice picker.
Deployment
Windows Task Scheduler at 06:00 daily (wake-to-run, start-when-available); Flask over a Cloudflare Tunnel with HTTP Basic Auth and enforced HTTPS.
Provenance
Original work; shares the Defense Digest’s hydration, caching, and CLI-summarization scaffold, with FIRE-specific scoring, tax planner, Reddit hydration, and projection pages added.
Intelligence pipelineIn production

Premium-Retail Opportunity Aggregator

A daily market-intelligence aggregator for a premium massage-chair retailer, surfacing actionable marketing and executive signals.

  • Python
  • Flask
  • Claude CLI (Haiku)
  • Playwright
  • BeautifulSoup4
  • feedparser

Built for a retailer of ultra-premium massage chairs, this pipeline monitors 16 sources across the massage-chair industry and adjacent wellness/longevity media. It uses an LLM to summarize each article and score it for actionable marketing or executive intelligence against a detailed brand-context document, then surfaces “opportunities” (competitor moves, market trends, content angles, buyer-psychology signals, and regulatory events) through a custom Flask “Newsroom Terminal” dashboard with date-range filtering and cross-day synthesis.

Technical deep dive

Each run fetches articles published in the prior 24 hours from all sources in parallel, hydrates thin bodies through a four-step escalation chain, summarizes via the Claude CLI, and batch-scores articles against the brand’s “super memory.” The scorer returns structured JSON: an industry-relevance gate, an actionability fit, a tagged recommendation, a geo-weighted relevance score, and an audience route (marketing, executive, or both).

Technical highlights

  • Four-step hydration (direct GET → AMP → Wayback archive → Playwright) with a “Save Page Now” fallback queue for stubborn sources.
  • Batched LLM scoring (10 articles per call) with strict JSON-schema validation, tag-prefix enforcement, and per-article fallback on failure.
  • Geo-weighted relevance — bonus points for active gallery markets and a planned location — keyed to the brand-context document.
  • Three-layer local caching (summary, opportunity, range-roundup), each invalidated by content/profile hashes.
  • A dual-prompt summarizer adapts to rich vs. thin article bodies, with a refusal-detection safety net.
  • Custom Flask “Newsroom Terminal” dashboard (which replaced an earlier Streamlit prototype) with multi-day roundup synthesis, a flash-bulletin marquee, filter chips, glossary tooltips, and a Cloudflare-Tunnel auth gate.
Scale
16 monitored sources across three verticals; ~21 Python source files; ~18 daily briefings to date; rolling 24-hour window (configurable up to a week); 30-day log retention.
Deployment
Windows Task Scheduler daily at 07:00 (wake-to-run); Cloudflare Tunnel bundled for optional remote dashboard access.
Provenance
Original work; shares the recognizable “digest” scaffold used across client projects (CLI summarization, brand-grounded scoring, file-based state).
Data pipelineWorking tool

IPEDS Campaign Generator

A Python pipeline that turns U.S. higher-ed contact data into batched Salesforce Apex scripts for bulk CRM imports and campaign enrollments.

  • Python
  • openpyxl
  • Salesforce Anonymous Apex
  • CSV

IPEDS — the U.S. Department of Education’s database of every accredited college and university — is used here as a source of institutional identifiers and role-coded administrator contacts. The pipeline ingests IPEDS-sourced spreadsheets segmented by role, then generates ready-to-run Anonymous Apex scripts that upsert those contacts into Salesforce accounts matched by IPEDS Unit ID. A companion script handles campaign enrollment, adding contacts as campaign members with a lead-fallback path when an account lacks a contact for a required role.

Technical deep dive

The batch generator filters by role code, groups records by institution (keeping multi-contact institutions atomic so they’re never split across batches), and packs them into ~100-row Apex scripts that resolve accounts, deactivate stale contacts, and upsert each contact as an update, insert, or lead conversion. The campaign script chunks account IDs into batches and enrolls qualifying contacts, falling back to the most-recently-updated matching lead for accounts with role gaps.

Technical highlights

  • Greedy bin-packing keeps every contact from one institution in the same batch, preventing partial-institution imports.
  • Three integrity assertions run before any file is written — row-count invariant, no institution split across batches, and no duplicate emails — aborting the run on violation.
  • Generates Anonymous Apex (not metadata), runnable verbatim in the Salesforce Developer Console without a deployment.
  • Partial-success DML (Database.insert(..., false)) so individual record failures don’t roll back a batch; duplicate-member errors are caught for safe re-runs.
  • Every run emits an audit manifest mapping each record to its batch file, plus a skipped-rows file.
  • Pure standard library plus openpyxl — no heavy dependencies; handles both XLSX and CSV input.
Scale
~11,050 contacts across ~3,323 institutions; 122 Apex batch files produced across 14 runs; 736 lines of Python across two scripts.
Notable
IPEDS Unit IDs serve as the authoritative institution key (a custom Account field); the pipeline is a pure file generator — Salesforce execution happens after generation.

Web & Desktop Applications 3 projects

Shopify appDeployed / listed

SimplyCompare — Shopify Product Comparison App

A Shopify embedded app that builds storefront product-comparison tables from a merchant’s existing metafields — no code required.

  • Remix
  • TypeScript
  • App Bridge
  • Polaris
  • Prisma
  • PostgreSQL
  • Liquid (Theme App Extension)
  • Docker

SimplyCompare lets merchants create configurable product-comparison tables without writing code. They sync their store’s existing product metafield definitions, select products and specs, and receive a Table ID to paste into the Shopify Theme Editor. The storefront block fetches live data through a Shopify App Proxy, so tables update automatically when metafields change. The app is hosted on Render, uses Shopify’s native billing API for a three-tier freemium model, and ships with App Store listing assets.

Technical deep dive

Inside the embedded admin UI (rendered in the Shopify admin iframe via App Bridge), merchants sync metafield definitions through a paginated Admin GraphQL query — no data re-entry, because values live in Shopify. Each definition becomes a spec record (with optional units and value-to-icon mappings); charts snapshot resolved product data into a JSON column for fast reads. On the storefront, a Theme App Extension injects a Liquid block whose bundled JavaScript calls back through the App Proxy, which validates the signed request and scopes the lookup to the requesting shop.

Technical highlights

  • Shopify App Proxy secures the public chart-data endpoint: every storefront request’s signature is validated before a shop-scoped lookup, preventing cross-store data leakage.
  • Theme App Extension (Liquid + esbuild-bundled JS/CSS) exposes ~10 Theme Editor style settings so merchants can style tables without touching CSS.
  • Three-tier billing via Shopify’s native Billing API with server-side limit enforcement (tables and products per plan).
  • Webhook deduplication table guards against Shopify’s up-to-48-hour retries; products/update and metafield_definitions/update webhooks keep snapshots and labels in sync.
  • Prisma + PostgreSQL with Shopify session storage and refresh-token rotation for expiring offline tokens.
  • Admin app built with Polaris; extension assets bundled separately via esbuild, app built with Vite.
Architecture
Remix server (admin UI + webhooks) on Render; PostgreSQL via Prisma; storefront Theme App Extension calling back through the App Proxy.
Deployment
Docker (Node Alpine image, prisma migrate deploy on start) to Render at a hosted domain; six App Store listing screenshots prepared.
Provenance
Original work, scaffolded from the Shopify Remix app template.
Web appDeployed

Survivalist Calculator

A mobile-first wizard that computes emergency-supply quantities for any household and links to verified products.

  • Next.js 14
  • TypeScript
  • React 18
  • Tailwind CSS
  • Vitest
  • GitHub Actions

A statically exported Next.js app that walks a user through a three-step wizard (people, pets, and duration) and produces a personalized supply plan across seven categories — water, food, medical, power, shelter, tools, and comfort. All math lives in pure functions, with formulas grounded in FEMA/Ready.gov water standards and FDA calorie references. The full plan is reflected in the URL for easy sharing and persisted locally for return visits. It operates as an Amazon Associates affiliate, with a CSV-driven workflow that patches verified product IDs into the catalog.

Technical deep dive

The wizard collects household details with accessible card-tap inputs; a “concern type” selector reorders result categories to surface the most relevant items first. Supply tiers at 14, 30, and 100 days change both the recommended product set and the written strategy. Results show per-category metrics alongside filtered product cards, an “add full plan to cart” multi-item Amazon link, a cited deep-dive rationale, and a print stylesheet.

Technical highlights

  • Pure-function calculation core (no React, no I/O) makes every formula trivially testable — 27 Vitest tests, all green.
  • Three-tier escalation logic gates both product selection and strategy copy per category.
  • Full URL-state hydration via query string makes any plan shareable and deep-linkable.
  • Four JSON-LD schemas (SoftwareApplication, Product, FAQPage, HowTo) injected for rich-results and AI-overview surfaces.
  • GitHub Actions CI/CD: every push to main runs typecheck + tests + static build, then SFTP-deploys in ~2 minutes.
  • CSV-driven sourcing script surgically patches product IDs, images, and prices into the typed catalog via regex without disturbing surrounding code.
Scale
~4,300 LOC across 41 source files; ~17 React components; 20 verified products; ~104 KB first-load JS.
Deployment
Static export to shared hosting under dkbmedia.com/calculator (chosen to leverage existing domain authority); automated SFTP deploy via GitHub Actions.
Provenance
Original work.
Desktop appWorking prototype

Hue Controller

A cross-platform desktop app for controlling Philips Hue lights, scenes, and schedules, with tray presence and global hotkeys.

  • Tauri 2
  • Rust
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • Vite
  • Hue API (v1 + CLIP v2)

A Tauri 2 desktop app that pairs with a local Philips Hue Bridge and exposes a React UI for lights, rooms, scenes, routines, and quick actions. The Rust backend handles all bridge communication — cloud-assisted discovery, button-press pairing, and a real-time Server-Sent Events stream on modern bridges, with a polling fallback on older ones. The app minimizes to the system tray rather than closing and supports global hotkeys that fire light actions even when the window is hidden.

Technical deep dive

After a one-time setup flow (auto-discovery or manual IP, then the standard bridge-button pairing handshake), the main view shows rooms and per-light cards with on/off, brightness, and an HSV color picker that includes an eyedropper and image-palette extraction. Scenes can be recalled, created from the current state, or deleted; a Routines tab schedules per-weekday scene recalls; and a “Labs” section adds bridge-side wind-down and wake-up effects.

Technical highlights

  • Dual API mode: routes through Hue CLIP v2 on capable bridges and falls back to Hue v1 REST on older hardware.
  • Real-time light state via a persistent SSE connection; the Rust backend translates v2 fields into v1-compatible units and emits patch events to the React frontend.
  • SSE consumer runs in a Tokio task with exponential-backoff reconnect; a shared atomic flag lets the main thread stop the stream without a mutex.
  • Optimistic UI updates roll back by re-fetching from the bridge on failure.
  • Process-wide global hotkeys mapped to user-defined quick actions; the system-tray menu is rebuilt on each state refresh to mirror per-room on/off status.
  • All communication stays on the local network after pairing — no cloud dependency once configured.
Architecture
React SPA in a Tauri WebView; a single useHue hook invokes Rust commands. Rust modules cover the two Hue API generations, the SSE stream, quick actions, tray, and config persistence.
Targets
Windows, macOS (11.0+), and Linux from one Tauri build configuration.
Provenance
Original work, built with Tauri + Vite.

Web Design & WordPress 3 projects

Design systemDesign prototypes

Defense-Contractor Web Design System

Thirty-six hand-authored, single-file website prototypes across four design families, exploring distinct art directions for a federal IT-services contractor.

  • HTML / CSS / JS
  • Variable fonts
  • Tailwind (CDN)
  • WebGL2
  • Spline 3D
  • IntersectionObserver

A rapid, multi-variant web-design exploration for a U.S. federal IT and cyber-operations contractor, now spanning 36 single-file prototypes across four design families. Each variant is a fully self-contained index.html authored from scratch with no build step, systematically testing different visual languages — from editorial long-form and brutalist typography to cinematic film aesthetics, an investor pitch deck, and a Zero-Trust SOC product page.

Technical deep dive

Every file shares a common skeleton — sticky navigation, a full-viewport hero, themed sections, and a call to action — but differs radically in palette, type, density, and interaction model. The more ambitious variants introduce scroll-driven animation, a WebGL2 fragment-shader background, a canvas force-directed graph, and an embedded 3D scene, all without a component framework.

Standout variants & techniques

  • Cinematic-kinetic — scroll-linked variable-font animation: heading weight tracks scroll position via a CSS custom property bound to a scroll listener.
  • Interactive — the only variant combining a WebGL2 shader background, a canvas network graph, and a Spline 3D scene in one file.
  • Scrollytelling — a publication-grade long-form layout driven entirely by IntersectionObserver, with no external scroll library.
  • Brutalist — SVG fractal-noise grain via a data-URI background, blend modes, and a radioactive-lime accent — the strongest contrast in the set.
  • Zero-Trust SOC — a product-marketing page with a fixed chapter rail using blend-mode navigation that switches to frosted glass on scroll.
  • Editorial / Pitch — broadsheet typesetting with OpenType features, and an investor-deck aesthetic on Tailwind via CDN.
Scale
36 single-file variants across 4 design families (19 for the primary contractor; 15 newer variants across three additional families). Individual files range ~32 KB to ~198 KB.
Technique
Zero-dependency vanilla CSS/JS in most variants; Tailwind via CDN in four; WebGL2 and Spline in select variants. No component framework anywhere.
Provenance
Original work — all HTML/CSS/JS and copy hand-authored; three of the four newer families use structural layouts referenced from public competitor sites, with original code throughout.
WordPress siteDeployed

Higher-Education Consulting Site — WordPress & Pardot Integration

A custom WordPress site for a higher-ed consulting firm, anchored by a production-grade Pardot lead-submission queue.

  • WordPress
  • PHP
  • Pantheon
  • Contact Form 7
  • Pardot
  • SCSS
  • Puppeteer

A WordPress site deployed on Pantheon, built on a custom child theme with original PHP templates, ~3,600 lines of SCSS, and a JavaScript layer. The most substantial piece of engineering is a 949-line Pardot form-handler that adds a durable MySQL queue, retry logic, and admin tooling to route Contact Form 7 leads reliably to Pardot despite Pantheon’s cron restrictions and Pardot’s visitor-cookie requirements. Separately, the owner designed and coded “Spectrograph,” a named blog concept, as a standalone mockup iterated through Puppeteer screenshots.

Technical deep dive

Every form submission fires two parallel paths: a client-side fetch() from the visitor’s browser (carrying the Pardot first-party cookie for tracking continuity) and a server-side request as a retrying safety net. Submissions are stored in a custom table, with sweep-based hourly retries that work around Pantheon’s disabled WP-Cron, silent-rejection detection, and admin controls for per-row retry, diagnostic test-push, and one-click lead-data copy.

Technical highlights

  • Hybrid client/server Pardot submission architecture for cookie continuity plus delivery reliability.
  • Custom MySQL queue table managed via dbDelta with automatic column migrations and a four-state status taxonomy.
  • Sweep-based retry system that runs on Pantheon’s external cron and on queue-page load, replacing WordPress’s scheduled-event system.
  • Admin tooling: a no-code form/URL mapping screen and a queue manager under Tools, plus rate-limited email alerts on failures.
  • “Spectrograph” blog mockup hand-coded with a custom inline-SVG illustration, Bootstrap 5 grid, and a full brand-token system.
  • A Node/Puppeteer script captures full-page mockup screenshots for design review (four versioned iterations).
Scale
Custom child theme with 21 PHP templates and ~3,600 lines of SCSS; a 949-line single-file Pardot integration; a ~590-line blog mockup.
Notable
The Pardot queue ships with a detailed handoff runbook (helper reference + monitoring guide). “Spectrograph” and its column-building SVG are original design work.
Provenance
Original custom work on WordPress + Pantheon; ~20 installed plugins are third-party (none custom).
WordPress themesDeployed

Custom WordPress Themes

Three classic WordPress themes hand-built from scratch — no starter theme or page builder.

  • PHP
  • WordPress (classic)
  • CSS custom properties
  • Vanilla JS
  • FTPS deploy script

Three classic PHP WordPress themes built without a starter theme or page builder, each covering the full template set and styled entirely through a CSS custom-property design system. They span two service-business sites and one SaaS product page, sharing a consistent approach of hand-authored PHP templates, inline vanilla JavaScript for interactive components, and Google Fonts enqueued the WordPress way.

Technical deep dive
Specialty Trade Contractor

A theme for a licensed drywall contractor. The front page delivers six content blocks including a draggable infinite-scroll testimonial carousel (27 real reviews embedded in PHP), with custom Services and Gallery templates (CDN-served photos), a CSS-only mobile nav, and an American-flag logo mark drawn entirely from CSS pseudo-elements.

DKB Media

A dark-mode agency theme for DKB Media’s own site. Highlights include a Canvas-API animated node-graph hero, rotating headline words, animated stat counters, a CSS-particle workflow diagram, a custom nav walker, and a Customizer panel for editable contact info. A deploy.sh script uploads changed files to shared hosting over FTPS with credentials kept outside the project.

SimplyCompare

A light-mode marketing/landing theme for the SimplyCompare Shopify app, featuring a live HTML table demo in the hero, a CSS-only pricing grid, a FAQ accordion, and a privacy-policy template. Two versioned ZIP update packages show a manual re-upload workflow alongside the scripted one.

Common approach

  • All three are classic PHP themes (no block/FSE), rendering full markup through get_header/get_footer and named page templates.
  • Mobile navigation solved differently per site (CSS-only checkbox, JS burger, hidden links) to match each site’s complexity.
  • Interactive components — carousel, lightbox, canvas animation — written without library dependencies.
  • CSS design tokens for color, type, spacing, and shadow across all three; no preprocessor or build step.
  • Deployment by FTPS script (DKB Media) or theme-ZIP upload through the WordPress admin.
Scale
3 themes, ~5,492 lines across 26 source files (specialty-contractor theme ~2,135; DKB Media ~1,889; SimplyCompare ~1,468).
Provenance
Original custom themes, no shared parent or starter framework.

Developer Tooling & DevOps 2 projects

DevOps / automationIn production

WordPress Multisite Provisioning Toolkit

A Python toolkit that provisions, migrates, and maintains a large WordPress site network on shared hosting — one safe, resumable command at a time.

  • Python (stdlib)
  • PHP (mu-plugin templates)
  • cPanel UAPI
  • Softaculous API
  • FTPS
  • Cloudflare DNS

This is the deployment engine behind the “Modes” case-study network. It stands up complete WordPress sites end-to-end — subdomain, database, WP install, theme, and seeded content — by driving the cPanel and Softaculous APIs plus FTPS, with idempotent, step-resumable execution and a dry-run-by-default safety model. It also performed a live, zero-downtime relocation of dozens of sites from subdomains to path-based URLs. The whole fleet is described by a single JSON manifest, so adding or migrating sites is configuration rather than bespoke work.

Technical deep dive

Because shared hosting offers no SSH or WP-CLI, the toolkit executes WordPress operations through a self-deleting PHP mu-plugin dropped over FTPS and triggered by HTTP — handling theme activation, content seeding, DB migration, and URL rewriting. Each operation is token-gated and backed up so it can roll back, and the manifest carries the per-site metadata that parameterizes provisioning, migration, and seeding.

Technical highlights

  • End-to-end WordPress site provisioning via cPanel UAPI, Softaculous, and FTPS — idempotent, step-resumable, and with zero third-party Python dependencies (stdlib only).
  • Self-deleting PHP mu-plugin pattern executes WordPress operations over HTTP on shared hosting with no SSH or WP-CLI access.
  • Automated live relocation of 72 sites from subdomain to path-based URLs — patching wp-config.php, serialized DB data, theme files, and .htaccess in a token-gated transaction with rollback, verified by a 2,824-URL internal crawl returning all HTTP 200.
  • Three-phase single-install-to-multisite conversion that respects WordPress’s load-order constraints, with full file backup and rollback.
  • Manifest-driven fleet: a single JSON manifest (73 site rows) carries per-site metadata controlling all provisioning, migration, and seeding operations.
Scale
~2,700 LOC across 12 Python scripts and 4 PHP templates; 73-site manifest across ~18 thematic families; 72 subdomain-to-path relocations; 0 third-party Python dependencies.
Provenance
Original work — all Python orchestration, the PHP mu-plugin templates, and the manifest data model. WordPress, cPanel/WHM, Softaculous, and Cloudflare are third-party platforms driven via their APIs.
Browser extensionWorking tool

SF Backup Downloader

A Chrome extension that automates Salesforce weekly-export downloads with built-in rate-limit pacing.

  • JavaScript
  • Manifest V3
  • CSS
  • Chrome Extension API

Salesforce’s Classic Weekly Export page lists multiple backup archives that must each be clicked to download. This Manifest V3 extension injects a floating control panel into that page, scans for all export links, and triggers them one at a time with a 75-second delay between files to stay within Salesforce’s rate limit. It works in both Classic and the Lightning Setup iframe.

Technical deep dive

The content script scans the DOM for export download links, populates a fixed panel with a start-from picker (to resume mid-batch), and clicks each link in sequence with a live progress bar and countdown. Session state is persisted so a mid-run page reload auto-resumes; pause/resume freezes the countdown and stop resets everything.

Technical highlights

  • Content script injected into all frames to handle both the top-level Classic page and the Lightning iframe.
  • Rate-limit compliance baked in via a hardcoded 75-second interval between native anchor clicks.
  • Session-storage resume survives page reloads mid-batch without losing queue position.
  • No background service worker and no downloads API — downloads are delegated to the browser via simulated anchor clicks.
  • Self-contained injected UI with minimize/expand, an activity log, and start/pause/stop controls.
Scale
3 files, no build step; ~277 lines of JS, ~193 of CSS. No extra permissions declared — relies only on content-script host matches.
Provenance
Original work.