SnowIT.ba SaaS Funnel MVP
SnowIT.ba SaaS Funnel MVP — Production Runbook
1. Overview
What was delivered:
- Vercel Web Analytics + Speed Insights instrumentation on production site (snowit.ba)
- CTA consolidation: mailto links reduced to 1 per page (footer only), hero CTA now anchors to #contact form with smooth scroll
- Lead form notification pipeline: Contact form → api/contact.js → SMTP relay via [email protected] → [email protected] → improvmx forwarder → [email protected]
- Custom event tracking: Form Submit + CTA Click events wired in code (2 custom events)
- i18n expansion: BS + EN locales for CTA labels and form placeholders
Why: CEO directive 2026-05-10 parallel to Bilko HR landing improvement session. snowit.ba was 108-line brochure with zero tracking, zero lead capture mechanism. MVP scope = establish funnel visibility (analytics) + lead capture (form + notification).
Context:
- MC: #100302 (M priority, SnowIT project)
- Commits live on main:
d17cc95FlowForge — Vercel Web Analytics + Speed Insights scripts, custom events, UTM convention in BUILD-BLUEPRINT.md, dashboard URL in DEPLOY-MAP.mdb6cf4a6Vizu — mailto consolidation (1 per page footer), hero CTA #contact anchor, i18n keys, smooth scroll pre-existing
- Vercel auto-deploy: Both commits deployed to production automatically (Vercel GitHub integration active)
- Proveo verdict: PARTIAL — code correct, manual dashboard step required (see section 3)
2. Architecture
Hosting & Deployment
- Platform: Vercel (team: johns-projects-4b43bfa9, project ID: prj_6kWI33mxaX2PClQwe1xt1OUbSxP6)
- Domain: snowit.ba (NS: AWS Route 53, CDN: Vercel Edge Network)
- Branch mapping: main → production (auto-deploy on push)
- Pages: index.html, portfolio.html, careers.html (all instrumented with analytics scripts)
Analytics Stack
- Platform: Vercel Web Analytics (FREE tier) + Speed Insights
- Instrumentation: Both scripts injected in
<head>of all 3 pages:<script defer src="/_vercel/insights/script.js"></script> <script defer src="/_vercel/speed-insights/script.js"></script> - Status (as of 2026-05-10): Scripts return HTTP 404 until Analytics feature enabled in Vercel dashboard (see section 3)
Lead Form Pipeline
┌──────────────┐
│ Visitor │
│ snowit.ba │
└──────┬───────┘
│ Fills form (name, email, message)
│ index.html#contactForm
▼
┌─────────────────────────┐
│ api/contact.js │
│ (Vercel Serverless) │
│ • Honeypot validation │
│ • Email regex check │
│ • SMTP relay via │
│ send.one.com │
└──────┬──────────────────┘
│ SMTP auth: [email protected]
│ To: [email protected]
▼
┌───────────────────────┐
│ improvmx.com │
│ MX forwarder │
│ mx1/mx2.improvmx.com │
└──────┬────────────────┘
│ Forward to
▼
┌──────────────────┐
│ [email protected] │
│ (Lead recipient)│
└──────────────────┘
Parallel path (when Analytics enabled):
┌──────────────┐
│ Form submit │──▶ window.va('event', {name: 'Form Submit'})
└──────────────┘ │
▼
┌────────────────────┐
│ Vercel Analytics │
│ Dashboard ingestion│
└────────────────────┘
Custom Events
| Event Name | Trigger | Payload | Location |
|---|---|---|---|
Form Submit |
Contact form successful submission | None (simple event) | index.html line ~1773 (success callback) |
CTA Click |
Click on .btn-primary, .btn-ghost, .nav-cta | { label: string, href: string } |
index.html line ~1869 (global listener) |
Code gating: Both event fire calls wrapped in if (window.va) check — events will queue and fire once Analytics enabled, no code change needed.
UTM Convention
Vercel Analytics auto-captures UTM params from URL query string. Recommended convention (documented in BUILD-BLUEPRINT.md):
| Parameter | Purpose | Example Values |
|---|---|---|
utm_source |
Channel | linkedin, email, direct, referral, instagram, facebook |
utm_medium |
Format | social, email, organic, cpc, paid |
utm_campaign |
Campaign identifier | frizerski-landing-launch, bhtechlab-demo (kebab-case) |
utm_content |
Variant/placement | hero-a, footer-b, cta-variant-1 |
Example campaign URL:
https://snowit.ba/?utm_source=linkedin&utm_medium=social&utm_campaign=bhtechlab-demo&utm_content=hero-cta
3. Post-Deploy: Enable Vercel Web Analytics (MANUAL STEP — ONE-CLICK)
⚠️ CRITICAL MANUAL STEP REQUIRED
Analytics scripts return HTTP 404 until feature enabled in Vercel dashboard. This is a one-time, one-click operation (no payment required, FREE tier).
Step-by-Step Procedure
Troubleshooting
| Symptom | Diagnosis | Fix |
|---|---|---|
| Script still 404 after enable | CDN propagation delay | Wait 5 min, hard-refresh browser (Cmd+Shift+R / Ctrl+Shift+F5) |
| Events not appearing in dashboard | Ingestion delay or ad blocker | Wait 10 min. Test in incognito without extensions. Check browser console for errors. |
| "Enable Analytics" button missing | Already enabled by another team member | Check if dashboard shows "Analytics enabled" status. Verify script HTTP 200. |
4. Operations
Dashboard Access
- URL: https://vercel.com/johns-projects-4b43bfa9/snowit-site/analytics
- Team: johns-projects-4b43bfa9
- Current access:
- [email protected] (Owner role)
- Pending access:
- [email protected] (Viewer role — requires Vercel team invite, not yet sent)
Lead Notification Flow
- Destination: [email protected] (CEO of SnowIT)
- Relay chain: api/contact.js → [email protected] (SMTP) → [email protected] → improvmx → [email protected]
- Expected latency: <5 seconds from form submit to inbox delivery
- Format: Plain text email with subject "Nova poruka sa snowit.ba" (BS) or "New message from snowit.ba" (EN), body contains name, email, message
Auto-Reply to Submitter
Status: NOT IMPLEMENTED in v1 (MVP scope excluded this feature)
Lead submitter receives NO auto-reply confirmation email. Follow-on task opened to implement:
- Auto-reply template (BS + EN locales)
- Send via api/contact.js after successful SMTP relay
- Lexicon linguistic validation for Bosnian copy (per ZAKON)
Note: Follow-on MC not yet created as of this runbook publication. Will be added when MC created.
5. Custom Events Reference
Adding New Custom Events
Custom events use Vercel Analytics window.va() API. Standard pattern:
if (window.va) {
window.va('event', {
name: 'Event Name Here' // Required — string, max 50 chars
// Optional properties (max 5 total):
// label: 'button-text',
// value: 42,
// category: 'engagement'
});
}
Current Events Implementation
Form Submit event (index.html line ~1773):
// Inside contactForm submit success callback:
if (window.va) {
window.va('event', { name: 'Form Submit' });
}
CTA Click event (index.html line ~1869):
// Global event listener on DOMContentLoaded:
document.querySelectorAll('.btn-primary, .btn-ghost, .nav-cta').forEach(btn => {
btn.addEventListener('click', function() {
if (window.va) {
const label = this.textContent.trim();
const href = this.getAttribute('href') || this.getAttribute('data-href') || '';
window.va('event', {
name: 'CTA Click',
label: label,
href: href
});
}
});
});
Viewing Events in Dashboard
6. Verification Checklist
Production Health Check
1. Scripts deployed to all pages:
# Analytics script present in source
curl -s https://snowit.ba | grep -c "_vercel/insights" # Expected: >= 1
curl -s https://snowit.ba/portfolio.html | grep -c "_vercel/insights" # Expected: >= 1
curl -s https://snowit.ba/careers.html | grep -c "_vercel/insights" # Expected: >= 1
2. CTAs consolidated (1 mailto per page, in footer only):
curl -s https://snowit.ba | grep -c "mailto:" # Expected: 1
curl -s https://snowit.ba/portfolio.html | grep -c "mailto:" # Expected: 1
3. Analytics enabled (after manual step in section 3):
curl -sI https://snowit.ba/_vercel/insights/script.js | head -1 # Expected: HTTP/2 200
4. Contact form functional:
- Visit https://snowit.ba
- Click hero CTA "Pošaljite upit" (BS) or "Send enquiry" (EN)
- Confirm smooth scroll to #contact (scrollY increases from 0 to ~3391px on desktop)
- Fill form: name, email, message
- Submit → expect success message in UI
- Check [email protected] inbox within 5 sec → expect notification email
5. Custom events firing (after Analytics enabled):
- Open browser DevTools → Console
- Visit https://snowit.ba
- Click hero CTA → confirm no console errors
- Submit contact form → confirm no console errors
- Wait 5-10 min → check Analytics dashboard → confirm "Form Submit" and "CTA Click" events appear with count ≥ 1
7. Known Gaps
| Gap | Impact | Status | MC ID |
|---|---|---|---|
| Auto-reply email to form submitter | User receives no confirmation after submitting form (UX gap) | Deferred to follow-on task | TBD (not yet created) |
| Vercel Web Analytics dashboard ingestion | Events fire in code but 404 on script load until manually enabled | BLOCKED on manual one-click enable (section 3) | MC #100302 (same task) |
| Vercel team access for [email protected] | SnowIT CEO cannot view analytics dashboard without team invite | Pending — requires manual Vercel invite from [email protected] | Not tracked (ops task, 2 min) |
| 7-day data review | Need data to decide if Vercel FREE tier sufficient or upgrade to Plausible (€9/mo) needed for richer attribution | Scheduled revisit 2026-05-17 (7 days post-launch) | TBD (calendar task, not MC) |
8. Next Steps & Roadmap
Immediate (0-7 days)
- Enable Vercel Web Analytics (manual step, section 3) — BLOCKER
- Invite [email protected] to Vercel team as Viewer (2 min task)
- Monitor lead volume in [email protected] inbox (improvmx chain latency check)
- Collect 7 days of analytics data (page views, custom events, referrers, Web Vitals)
Week 2 (2026-05-17 onwards)
- Data review session with CEO Alem + Enis:
- Analyze traffic sources (UTM attribution)
- Form conversion rate (page views → form submits)
- CTA Click patterns (which CTAs drive most engagement)
- Decision point: Keep Vercel FREE tier (2,500 events/mo, 7-day retention) OR upgrade to:
- Vercel Pro ($20/mo) — unlimited events, 30-day retention, advanced filtering
- Plausible.io (€9/mo) — GDPR-friendly, no cookie banner, full event stream export, unlimited retention
- Implement auto-reply email (if prioritized):
- Template design (BS + EN locales)
- Lexicon linguistic validation (Bosnian copy per ZAKON)
- SMTP integration in api/contact.js
Deferred (post-funding or high lead volume)
- Nurture email sequence (drip campaign for leads who don't convert immediately)
- A/B testing framework (hero CTA variants, form placement)
- Retargeting pixels (LinkedIn, Facebook) — requires cookie banner + GDPR consent flow
- CRM integration (HubSpot, Pipedrive) — auto-sync leads from form to sales pipeline
9. References
- MC: #100302 (M priority, SnowIT project)
- Commits:
d17cc95FlowForge — Vercel Web Analytics + Speed Insights scripts, custom events Form Submit + CTA Click, UTM convention in BUILD-BLUEPRINT.md, dashboard URL in DEPLOY-MAP.mdb6cf4a6Vizu — mailto consolidation (1 per page footer only), hero CTA #contact anchor on index.html, i18n keys grew bs+en, scroll-behavior smooth pre-existing
- Mehanik gate: /tmp/mehanik-cleared-100302
- Proveo evidence: /tmp/proveo-snowit-100302/proveo-evidence-100302.json
- Project files:
- DEPLOY-MAP: /Users/makinja/clients-external/snowit-site/DEPLOY-MAP.md
- BUILD-BLUEPRINT: /Users/makinja/clients-external/snowit-site/BUILD-BLUEPRINT.md
- CEO genesis: 2026-05-10 directive parallel to Bilko HR landing improvement session
- Site repository: github.com/snowitba/snowit-site (client-owned repo)
Document Status: LIVE — Production Ready
Last Updated: 2026-05-10
Maintained By: Skillforge (ALAI Holding AS)
Contact: [email protected]