Tupelo Honey Spa Tupelo Honey Spa
Website development and Square integration for a spa and wellness collective, connecting service browsing with appointment booking.
I build web applications and marketing systems—from campaign pages and conversion events to customer workflows and reporting.
Tupelo Honey Spa Website development and Square integration for a spa and wellness collective, connecting service browsing with appointment booking.
Full website design and development for a travel publication, including analytics integration and technical SEO.
Inspect · Demo workspace A website QA workflow for scanning pages, reviewing evidence, and tracking findings across scans. Built as a portfolio project with local demo data.
Commerce, measurement, publishing, planning, and operations. Built as local demos with fictional data; explore the actual interfaces and the engineering behind them.
Steward
A workspace for reviewing diligence evidence, comparing cash-flow scenarios, and keeping ownership decisions traceable.
TypeScript · Node.js · SQLite
Local demo with fictional businesses and planning figures. No bank connection.
Forme
A product-first lighting store with interactive finish selection, checkout, inventory, and order management connected behind the scenes.
TypeScript · Node.js · SQLite
Local commerce demo. Products are fictional; payments are simulated and no money moves.
Signalroom
A measurement workbench following campaign activity from consent and event validation through CRM mapping and delivery recovery.
TypeScript · Node.js · SQLite · Python
Local demo with fictional campaign data. CRM delivery uses a simulator.
Folio Press
An independent magazine with a story-led front page, focused article reader, and editorial studio for review, scheduling, and audience workflows.
TypeScript · Node.js · SQLite · Server-rendered HTML
Local publication demo with fictional articles and subscribers. Email previews stay in a local outbox.
Shiftline
A planning workspace that turns campaign demand into staffing scenarios, with clear coverage gaps and an inspectable workload model.
TypeScript · Node.js · SQLite · Python
Local demo with fictional people and demand. No workforce or payroll service is connected.
A campaign needs a destination. A conversion needs context. A customer record needs to reach the right team.
I work across those connections—from the application and its tracking to the workflows and reporting behind it.
8 capability areas
Web applications, reusable campaign pages, content workflows, and lead-generation forms that marketing teams can manage and build on.
Next.js · TypeScript · Python · PostgreSQL · CMS integrations
Connect advertising clicks to website actions and lead sources. Preserve campaign context through forms, redirects, domains, and CRM handoffs.
Google Ads · Meta Ads · GA4 · Google Tag Manager · UTMs
Instrument product actions, investigate drop-off, implement A/B tests, and improve signup, checkout, and lead-generation flows.
Mixpanel · Amplitude · GA4 · A/B testing · Funnel analysis
Connect website activity with CRM and email workflows. Map fields, capture lead sources, route leads, prevent duplicates, and synchronize records.
Salesforce · HubSpot · Klaviyo · Lead routing · Record sync
Bring analytics and CRM data together. Investigate discrepancies, build useful dashboards, clean datasets, and automate repeatable reporting.
BigQuery · Looker Studio · PostgreSQL · SQL · Python
Make sites easier to find and faster to use. Implement metadata and structured data, resolve indexing issues, and handle SEO during migrations.
Structured data · Sitemaps · Canonicals · Redirects · Page speed
Connect marketing platforms and the work between them: imports, exports, notifications, record synchronization, and handoffs between teams.
APIs · Webhooks · Zapier · Make · Python
Implement browser and server-side measurement. Validate events, debug missing or duplicate conversions, respect consent, and keep sensitive form content out of analytics.
Server-side tagging · Conversion APIs · Data layers · Consent
See one of those connections in action.
Explore the signal labA campaign visit becomes an event, then a useful CRM record. Try the decisions in between.
Fictional sample · Browser-only simulation. No GA4 tags, Salesforce connection, or real visitor tracking.
Choose a source, then try sending with consent off and on.
No sample event yet.
No sample record yet.
Use SQL to connect sources with downstream outcomes; use Python to validate, normalize, and automate the handoff. These are illustrative examples, not services running on this page.
-- PostgreSQL: aggregate consented sample events
SELECT utm_source, COUNT(*) AS leads
FROM lead_events
WHERE analytics_consent = TRUE
GROUP BY utm_source;# Python: allowlist fields before a handoff
allowed = ("event_id", "utm_source", "utm_campaign")
payload = {key: event[key] for key in allowed}
# Never forward form contents to analytics.A website to build. A tracking gap to untangle. A marketing workflow that needs to connect.
Or connect on LinkedIn