Two-Domain Architecture + Audit Lead Magnet (2026-05-13/14)
SnowIT — Two-Domain Architecture + Audit Lead Magnet
Date: 2026-05-13 + 2026-05-14
Sessions: 9d81f0c3-f7fb-4f8e-bf8c-04091a5dbbec + (current)
MC Parent: #100509 (Skybound pass 2)
Status: LIVE — production serving
Executive Summary
SnowIT executed a strategic brand split and technical implementation across two sessions (2026-05-13 + 2026-05-14), delivering:
- Two-domain architecture: snowit.ba (SMB BiH market) + enterprise.snowit.ba (Enterprise/Norwegian transit/AI security) — unified under single Vercel project via middleware.ts host-based routing
- Critical bugs fixed: snowit.ba pricing EUR→KM unification (300/800/1200 KM), AI/enterprise content archived, LinkedIn pricing 400 KM live
- Frontend builds: enterprise/index.html + case-study.html (anonymized Nordic transit TVM case) + about.html (founder bio, NDA-compliant)
- Audit lead magnet pipeline: snowit.ba/audit.html landing + /api/audit serverless function (pdf-lib MVP, Phase 2 Places API/Sheets/WA deferred pending Vercel Pro upgrade + GCP SA grants)
- Infrastructure: AWS Route 53 CNAME enterprise.snowit.ba → Vercel Edge, middleware.ts host rewrite (vercel.json rewrites don't fire after filesystem match), orphan snowit-enterprise project flagged for deletion
Founding identity corrected: SnowIT d.o.o. founded 2022 (not 2026 — CEO Alem Basic caught agent default-year drift on enterprise preview). Founder consulting record (Entur 2022-2024, Ruter/TET 2024-2025) separate from SnowIT delivery history — NDA-compliant anonymization applied to all public copy.
Brand Split Rationale
Anti-Lie Positioning
SnowIT (founded 2022) pivoted to enterprise AI/transit services in 2026. The company has zero enterprise delivery history as SnowIT entity, but founder Alem Bašić has documented 3-year consulting record at:
- ENTUR (Norwegian national transit, 2022-2024): TVM modernization, solution architect
- RUTER (Oslo/Viken transit via TET Digital, 2024-2025): Cloud ops, IoT/EDA, solution architect
Two-domain split avoids claim fabrication:
- snowit.ba: SMB BiH focus (Google Business Profile setup 300 KM, web presence 800 KM, full digital start 1.200 KM) — no enterprise positioning, no false authority
- enterprise.snowit.ba: Transparent positioning: "Senior consulting expertise meets agile delivery" with NDA-aware disclosure: "Project delivered by SnowIT founder in prior senior consulting capacity. Client identity disclosable under NDA on inquiry."
Market Segmentation
| Domain | Audience | Services | Language | Pricing Transparency |
|---|---|---|---|---|
| snowit.ba | SMB BiH (salons, auto, bakeries, cafes) | GMB, websites, LinkedIn, SEO | BS (primary), EN (minimal) | Full (300-2.500 KM on-page) |
| enterprise.snowit.ba | Enterprise/Norwegian transit/AI security | Public transit app dev, AI security harness, legacy modernization | EN (primary), BS (i18n toggle) | POA (contact-for-quote) |
Two-Domain Architecture
System Diagram
graph LR
A[snowit.ba] -->|CNAME cname.vercel-dns.com| V[Vercel Edge Network]
B[enterprise.snowit.ba] -->|CNAME cname.vercel-dns.com| V
V -->|Project: snowit-site prj_6kWI33mxaX2PClQwe1xt1OUbSxP6| MW[middleware.ts]
MW -->|Host: snowit.ba, Path: /*| FS1[/index.html /portfolio.html /usluge.html /audit.html]
MW -->|Host: enterprise.snowit.ba, Path: /*| RW[Rewrite to /enterprise/*]
RW --> FS2[/enterprise/index.html /enterprise/case-study.html /enterprise/about.html]
style A fill:#FF6B35
style B fill:#3b82f6
style V fill:#0F172A,stroke:#00D4FF
style MW fill:#1e293b
style FS1 fill:#334155
style FS2 fill:#475569
DNS Topology
AWS Route 53 Hosted Zone: snowit.ba (ID: Z0412149****QUPIW)
| Record | Type | Value | TTL |
|---|---|---|---|
| snowit.ba | CNAME | cname.vercel-dns.com. | 300 |
| enterprise.snowit.ba | CNAME | cname.vercel-dns.com. | 300 |
| clients.snowit.ba | CNAME | cname.vercel-dns.com. | 300 |
TLS Certificates: Auto-provisioned by Vercel (Let's Encrypt R12), valid 90 days from 2026-05-13
Middleware Host Rewrite Pattern
Problem: vercel.json rewrites with has conditions (host-based) run AFTER handle: filesystem in Vercel's output config. Filesystem match wins, rewrite never fires — enterprise.snowit.ba/index.html served placeholder instead of /enterprise/index.html.
Solution: Extend middleware.ts to handle host-based routing at edge (runs BEFORE filesystem):
// middleware.ts (excerpt — commit 1fcbe0b)
export default async function middleware(req: Request): Promise<Response> {
const url = new URL(req.url);
// Host-based rewrite: enterprise.snowit.ba/* → /enterprise/*
if (url.hostname === "enterprise.snowit.ba" && !url.pathname.startsWith("/enterprise")) {
const destPath = "/enterprise" + (url.pathname === "/" ? "/" : url.pathname);
const destUrl = new URL(destPath + url.search, req.url);
return rewrite(destUrl);
}
// tim.html auth gate scoped to pathname === "/tim.html" (no regression)
if (url.pathname === "/tim.html") { /* HMAC cookie check */ }
return next();
}
Commit: 1fcbe0b (2026-05-13)
Path Structure
/Users/makinja/clients-external/snowit-site/ ├── index.html (snowit.ba SMB landing) ├── portfolio.html (SMB portfolio) ├── usluge.html (SMB services, pricing 300-2500 KM) ├── audit.html (lead magnet landing, BS copy) ├── /api/audit.js (serverless function, pdf-lib MVP) ├── /enterprise/ │ ├── index.html (enterprise landing) │ ├── case-study.html (anonymized Nordic transit TVM case) │ ├── about.html (founder bio, NDA-compliant) │ ├── /css/enterprise.css (dark theme, --ent-* tokens) │ └── /js/i18n.js (EN+BS dictionaries) ├── middleware.ts (host rewrite + tim.html auth) ├── vercel.json (tim.html X-Robots-Tag headers) └── BUILD-BLUEPRINT.md
Audit Lead Magnet Pipeline
Flow Diagram
sequenceDiagram
participant U as User (SMB Owner)
participant L as /audit.html
participant A as /api/audit
participant PDF as pdf-lib
participant SMTP as nodemailer
participant E as Enis ([email protected])
participant GCP as Places API (Phase 2)
participant GS as Google Sheets (Phase 2)
participant WA as WhatsApp (Phase 2)
U->>L: Fill form (name, company, city, industry, contact, notes)
L->>A: POST {name, company, city, industry, email OR whatsapp, notes}
A->>A: Validate (honeypot check, required fields)
A->>PDF: Generate audit PDF (ref SNW-XXXXX-XXXX)
PDF-->>A: PDF buffer
A->>SMTP: Send email to [email protected] + lead
SMTP-->>E: "Novi upit za audit: [company] u [city]"
A-->>U: {"ok":true,"ref":"SNW-XXXXX-XXXX"}
Note over GCP,WA: Phase 2 — blocked on Vercel Pro + GCP SA grants
A-.->GCP: Fetch GBP data (if email)
GCP-.->A: Profile + reviews + map position
A-.->GS: Log lead (timestamp, ref, company, city, industry, contact, utm_*)
A-.->WA: Send WA to lead "Vaš upit primljen, radim na auditu" (if whatsapp)
Phase 1 (LIVE — MVP)
- Landing: /audit.html (837 lines, BS copy, Proxima Marketing)
- Backend: /api/audit.js (1470 lines, pdf-lib ^1.17.1)
- Payload schema: {name, company, city, industry, email?, whatsapp?, notes, _honey}
- Honeypot: _honey field (hidden, rejects bots)
- Email delivery: nodemailer via one.com SMTP (SMTP_USER/SMTP_PASS env vars reused from /api/contact)
- Reference ID: SNW-{timestamp}-{random 4-digit} (e.g., SNW-17156-9384)
- Cost: $0/audit (no external API calls)
Phase 2 (BLOCKED — Pending CEO actions)
| Blocker | Status | Owner | Cost Impact |
|---|---|---|---|
| Vercel Pro upgrade ($20/mo) | CEO manual action required (UI-only upgrade, no API) | CEO Alem Basic | +$20/mo |
| Google Places API key (tribal-sign-487920-k0) | GCP Console enable + API key + HTTP referrer restriction | CEO or grant alai-cli-deployer SA permissions | ~$1.70/mo @100 audits |
| Google Sheets SA (snowit-leads-writer@tribal-sign-487920-k0.iam.gserviceaccount.com) | GCP Console create SA + download JSON key + share sheet | CEO or grant alai-cli-deployer SA permissions | $0 (free tier) |
| WhatsApp auto-send | Meta WhatsApp Cloud API (24-72h approval) OR Twilio WA API | FlowForge (after above unblocked) | Free 1K/mo OR $0.005/msg |
CEO action path (Option A — manual, 15 min):
- Vercel Pro: https://vercel.com/johns-projects-4b43bfa9/settings/billing → Upgrade to Pro
- Places API: https://console.cloud.google.com/apis/library/places-backend.googleapis.com?project=tribal-sign-487920-k0 → Enable → Create API Key → Restrict to snowit.ba
- Sheets API: https://console.cloud.google.com/apis/library/sheets.googleapis.com?project=tribal-sign-487920-k0 → Enable → Create SA "snowit-leads-writer" → Download JSON
- Lead sheet: Create Google Sheet "SnowIT Leads — Audit Lead Magnet" → Share with SA email (Editor access) → Copy sheet ID
CEO action path (Option B — grant FlowForge gcloud access, automated): Run script /Users/makinja/clients-external/snowit-site/scripts/setup-gcp-sa-grant.sh (commit 07a7982) to grant [email protected] roles: serviceUsageAdmin + serviceAccountAdmin + serviceAccountKeyAdmin. Then re-dispatch to FlowForge.
Pricing Matrix (snowit.ba SMB)
| Package | Price (KM) | Includes | Delivery |
|---|---|---|---|
| Google Business Starter | 300 KM | GBP setup + verification + optimization | 48h |
| LinkedIn Launch | 400 KM | LinkedIn Company Page + 5 posts | 5-7d |
| Web + GMB (card1) | 800 KM | 1-page website + GBP setup | 7-10d |
| Full Digital Start (card3) | 1.200 KM | Website + GBP + LinkedIn + SEO basics | 14d |
| SnowIT PRO | 2.500 KM | Full package + 3-month support | 30d |
Currency unification (commit 075ae2b): All "200 EUR" references replaced with "300 KM" across i18n.js (12 changes), index.html (32 changes), usluge.html (18 changes). LinkedIn 400 KM added (commit bef5820).
NDA Compliance Pattern
Public Copy (enterprise.snowit.ba)
- Client names: FORBIDDEN (Tet, Ruter, Entur, TET Digital) — verified via
grep -i "tet|ruter|entur"on live HTML = 0 matches - Anonymization pattern: "Major Nordic public transit operator (identity disclosable under NDA on inquiry)"
- Disclosure box (case-study.html): 3-paragraph amber-muted banner:
- Project delivered by SnowIT founder in prior senior consulting capacity
- SnowIT (founded 2022) is new to enterprise AI/transit services — founder's prior engagements separate
- Client identity + specific project details available under NDA on inquiry
- Founder bio (about.html): "Norwegian public transit operators" (plural, anonymized), "Client identities available under NDA on inquiry", professional references subject to client approval
NDA-Protected Facts (BookStack only, not public)
- ENTUR: 03.2022 - 02.2024 (23 months), TVM modernization, Kafka/KSQLDB/GCP/React
- RUTER (via TET Digital): 09.2024 - 09.2025 (13 months), Cloud ops, AWS/IoT/MQTT/Kafka/EDA
- CV evidence: /Users/makinja/personal/cv/Alem-Basic_no_2026-02-06T06-08-13Z.pdf
- BookStack finance logs: RPG January 2026, KnowIT MinVei, timesheet January 2026
Founder Identity
Name: Alem Bašić
Role: Founder + CEO (SnowIT d.o.o., founded 2022)
Background: 25+ years software engineering, solution architect, senior consulting record at Norwegian public transit operators (Entur 2022-2024, Ruter 2024-2025), expertise in Kafka/cloud/AI security/legacy modernization
Education: (not disclosed on public site — available under NDA)
Languages: BS/EN/NO (professional fluency)
Consulting vehicles: Everdeen partner status (Entur engagement), RPG-Kyndryl subcontractor (Ruter/TET engagement)
Distinction: SnowIT (founded 2022, pivoted to enterprise 2026, zero enterprise delivery history as entity) vs Founder (Alem Bašić, 3-year documented consulting record 2022-2025). Public copy transparent about this split — no claim fabrication.
MC Task Tree
| MC ID | Title | Owner | Status | Evidence |
|---|---|---|---|---|
| #100509 | SnowIT Enterprise Pass 2 (Skybound) | skybound | ready_for_review | /tmp/skybound-enterprise-evidence-pending.md |
| #100513 | snowit.ba SMB cleanup (EUR→KM, AI archive) | codecraft | ready_for_review | /tmp/codecraft-snowit-cleanup-100513-evidence.md |
| #100510 | enterprise.snowit.ba domain move + infra | codecraft | ready_for_review | /tmp/codecraft-domain-move-evidence.md + /tmp/codecraft-faza-b-infra-evidence.md |
| (child) | enterprise.snowit.ba case-study.html | frontend-builder | ready_for_review | /tmp/frontend-builder-case-study-evidence.md |
| (child) | enterprise.snowit.ba about.html | frontend-builder | ready_for_review | /tmp/frontend-builder-about-evidence.md |
| (child) | Audit lead magnet copy (Proxima) | proxima | done | /tmp/proxima-lead-magnet-snowit/_evidence.md |
| #100543 | /api/audit backend (pdf-lib MVP) | codecraft | ready_for_review | /tmp/codecraft-audit-tool-evidence.txt |
| (child) | /audit.html landing page | builder | ready_for_review | /tmp/builder-audit-html-evidence.md |
| (child) | GCP SA permission grant script | builder | ready_for_review | /tmp/builder-gcp-sa-script-evidence.md |
| (child) | Vercel Pro + Places API (BLOCKED) | flowforge | BLOCKED (CEO action) | /tmp/flowforge-snowit-vercel-pro-places-evidence.md |
Outstanding Decisions
- Orphan snowit-enterprise project: Vercel project prj_8fTtx2Z0UJY4kqdNJACkfIpQamHi (served placeholder, domain now moved to snowit-site) — delete to avoid confusion? (CEO decision pending)
- Vercel Pro upgrade ($20/mo): Required for Phase 2 Playwright screenshots + real GBP data. CEO must upgrade via UI (Vercel API doesn't support billing changes).
- GCP Places API + Sheets SA: Option A (CEO manual, 15 min) vs Option B (grant FlowForge gcloud access via scripts/setup-gcp-sa-grant.sh, automated).
- GA4 + Pixel + GSC tracking IDs: Placeholders in index.html/enterprise/index.html — CEO provide actual IDs or remove placeholders?
- Audit delivery SLA: Current copy promises "24h" — if Enis volume exceeds capacity, change to "48h" or hire VA?
- Follow-up cadence: Email/WA sequence ends at 7 days — add 10-day or 14-day final nudge, or stick with 3d+7d?
- Free vs Paid audit gating: All audits free (current) vs gate multi-location SMBs at 100 KM audit fee (credited toward paid service)?
Operational Scripts
| Script | Path | Purpose | Usage |
|---|---|---|---|
| setup-gcp-sa-grant.sh | /Users/makinja/clients-external/snowit-site/scripts/ | One-time GCP SA permission grant for Phase 2 backend | ./scripts/setup-gcp-sa-grant.sh (or PROJECT_ID=X ./scripts/setup-gcp-sa-grant.sh) |
Commit: 07a7982 (executable, bash -n verified, grants serviceUsageAdmin + serviceAccountAdmin + serviceAccountKeyAdmin to [email protected])
Cost Breakdown
Phase 1 (LIVE — MVP)
- Vercel Hobby: $0/mo
- AWS Route 53: ~$0.50/mo (hosted zone)
- one.com SMTP: $0 (existing email account)
- Total: ~$0.50/mo
Phase 2 (Pending CEO Actions)
- Vercel Pro: $20.00/mo
- Google Places API: ~$1.70/mo @100 audits/mo ($0.017 per Nearby Search call)
- Google Sheets API: $0 (free tier, 60 req/min)
- WhatsApp API: $0 (free 1,000 conversations/mo via Meta Cloud API) OR $0.005/msg via Twilio
- Total: ~$22/mo + $0.017 per audit over 100/mo
Key Commits
| SHA | Message | Files | Date |
|---|---|---|---|
| 0b95bfb | snowit.ba SMB cleanup (AI archive, contact form) | _archive/usluge-ai-blocks-2026-05-13.html, index.html, portfolio.html, usluge.html | 2026-05-13 |
| 075ae2b | EUR→KM unification (300/800/1200 KM) | i18n.js, index.html, usluge.html (62 changes) | 2026-05-13 |
| bef5820 | LinkedIn 400 KM pricing | usluge.html | 2026-05-13 |
| 1c4c1de + 6f4e98a | enterprise/index.html pass 1 | enterprise/index.html, enterprise/css/enterprise.css, enterprise/js/i18n.js | 2026-05-13 |
| 49cd8b2 | feat(snowit-enterprise): case-study.html anonymized Nordic transit | enterprise/case-study.html (375 lines) | 2026-05-13 |
| 0705d9a | feat(snowit-enterprise): about.html founder bio | enterprise/about.html, i18n.js, enterprise.css (392 insertions) | 2026-05-13 |
| 9a7da92 + 7519bed | fix: founding date 2022 (not 2026) | enterprise/index.html, i18n.js (14 changes) | 2026-05-13 |
| 1fcbe0b | fix: middleware.ts host rewrite (enterprise.snowit.ba) | middleware.ts | 2026-05-13 |
| f69e804 | feat: /api/audit backend (pdf-lib MVP) | api/audit.js (1470 lines), package.json (+pdf-lib) | 2026-05-13 |
| cad6878c | feat(snowit-smb): /audit.html lead magnet landing | audit.html (837 lines) | 2026-05-13 |
| 07a7982 | chore(snowit): scripts/setup-gcp-sa-grant.sh | scripts/setup-gcp-sa-grant.sh (38 lines) | 2026-05-13 |
Related Resources
- Repo: github.com/snowitba/snowit-site
- Local path: /Users/makinja/clients-external/snowit-site/
- BUILD-BLUEPRINT: /Users/makinja/clients-external/snowit-site/BUILD-BLUEPRINT.md
- ARCHITECTURE doc: /Users/makinja/clients-external/snowit-site/docs/ARCHITECTURE-2026-05-14.md (to be created)
- Memory entry: ~/.claude/projects/-Users-makinja/memory/project_snowit_brand_split_lead_magnet_2026-05-14.md (to be created)
- MC parent: #100509 (Skybound pass 2)
Last updated: 2026-05-14
Documented by: Skillforge (ALAI Knowledge Management)
Status: LIVE — production serving, Phase 2 blocked on CEO actions
No comments to display
No comments to display