Can I vibecode DataFast?
price $9/moyou'd save $108/yrbuild time weekend for the dashboard, multi-day to trust the numberscategory analyticsreplaced by 0 people
KINDA
MOATintegrationsscale infraexecution polish
Web analytics that ties revenue back to the marketing channel that produced it
The Build Prompt
copy it and go buildready to paste · 1,850 chars
Build me a revenue attribution dashboard for one site, to replace DataFast. Requirements: - Node + Express + better-sqlite3, one process behind Caddy on my own VPS. Server-rendered pages, no frontend framework, no build step. - A tracker snippet under 2 KB: navigator.sendBeacon sends path, referrer and any utm_* params, keyed to a first-party visitor id in localStorage. No third-party cookies. - Attribution is the whole point. Per visitor store first-touch and last-touch channel, from utm_source/utm_medium/utm_campaign, else by parsing the referrer host into google / x / reddit / hn / direct. Never overwrite first-touch. - An /identify endpoint I call after signup with the user's email, which binds the anonymous visitor id to a customer row. - A Stripe webhook for checkout.session.completed, invoice.paid and customer.subscription.deleted: verify the signature, match on email, write revenue against that visitor. Webhook secret and API key from .env. - Dashboard on localhost behind one bearer token from .env: a channel table with visitors, signups, customers, MRR and revenue per visitor over 7/30/90 days. Tables and one inline SVG bar chart, nothing else. - Drop known bots against a user-agent blocklist before anything is counted. No accounts, no telemetry, one SQLite file I can copy off the box. - Out of scope: cross-device identity stitching, multi-touch models, the live visitor feed, purchase-likelihood scoring, team seats and an MCP server. One domain, single-touch, single-device. - README: the script tag, the /identify call, `stripe listen` for testing webhooks locally, and an honest paragraph on where the numbers lie · a phone-to-laptop journey counts as two visitors, cleared localStorage counts as a new one, and a customer who pays from a different address never matches at all.
What you lose
- ✕identity stitching across devices, browsers and cleared storage
- ✕bot and AI-crawler filtering that stays current without you
- ✕one-click installs for Shopify, Webflow, WordPress and 20 other platforms
- ✕the live visitor feed and purchase-likelihood scoring
- ✕the hosted MCP server and CLI for querying the data in plain English
Prior art / alternatives
Why it still works
payment-processor connectors, platform installs, and identity resolution