# SnowIT

IT consulting company — Sarajevo operations, contracts, clients.

# Overview

# SnowIT Overview

IT consulting company — Sarajevo operations, contracts, clients.

**Owner:** John
**Last Verified:** 2026-02-17

## Contents
To be populated from SnowIT company documentation

# Active Tasks

> Last Verified: 2026-02-17 | Owner: John

# SnowIT — Active Tasks

## Open Tasks

### Medium Priority
- **#1213** — Follow up: Has Asmir posted content on LinkedIn?
- **#1267** — DNS and email setup for snowit.ba (MX records)

## Recently Completed
- **Website services page** — /usluge page live with full service catalog
- **OG image fix** — Text rendering problem resolved
- **LinkedIn company page** — Created and ready for content
- **Sales playbook** — Detailed sales strategy by AI agent (nicksaraev)
- **Content calendar** — 30-day content plan by AI agent (marketer)
- **Financial model** — 6-month projections by AI agent (finance)
- **Market research** — B&H market analysis completed

## Planned Work
- **Outreach campaign** — 5 clients in 30 days (delivery delayed)
- **Email setup** — Complete DNS configuration
- **Content execution** — Post first batch from content calendar
- **Lead generation** — Start executing sales playbook

# Key Decisions

> Last Verified: 2026-02-17 | Owner: John

# SnowIT — Key Decisions

## Strategic Decisions

### Market Focus: Bosnia & Herzegovina (2026-02)
**Decision:** SnowIT targets B&H market exclusively (snowit.ba domain).
**Rationale:** Local market knowledge, language advantage, untapped AI services market.
**Implementation:** Website in Bosnian/Serbian/Croatian, local pricing, B&H payment methods.

### Service Packaging (2026-02)
**Decision:** Offer 3-tier packages (Digital Presence 800 KM, 2-4h response)
**Rationale:** Predictable pricing, easier sales, scalable delivery.
**Source:** Financial model from AI agent (finance).

### Content Marketing Strategy (2026-02)
**Decision:** 3 posts per week on LinkedIn (12-13 posts/month)
**Rationale:** Consistent presence, thought leadership, organic reach.
**Source:** Content calendar from AI agent (marketer).

### Partnership Model (2026-02)
**Decision:** Collaborate with Asmir as partner/sales contact.
**Status:** Active, awaiting LinkedIn activity confirmation.

## Technical Decisions

### Website Stack
- Modern web framework (details in repo)
- Hosted on vercel/railway/fly.io (pending deploy strategy task #271)
- snowit.ba domain with email (@snowit.ba addresses)

### Sales Process
- Sales playbook created by AI agent (nicksaraev)
- CRM integration planned
- Lead tracking via Mission Control

## Operational Decisions

### Pricing Strategy
- **Digital Presence package:** 800 KM (2-4h response time)
- Additional tiers defined in financial model
- Competitive with local market, premium positioning

# Project Overview

> Last Verified: 2026-02-17 | Owner: John

# SnowIT — Project Overview

## What is SnowIT?
SnowIT (snowit.ba) is an AI-driven agency focused on the Bosnia & Herzegovina market. It provides software development, design, security, data, infrastructure, and marketing services under one roof.

## Current Status
- **Phase:** Active development
- **Website:** snowit.ba (live)
- **Market:** Bosnia & Herzegovina (B&H)
- **Business Model:** Full-service digital agency

## Recent Work
- Website launch with services pages (/usluge)
- LinkedIn company page creation
- OG image optimization (text rendering fix)
- Sales playbook development
- 30-day content calendar for LinkedIn
- Financial model for first 6 months
- Market research for B&H market

## Services Offered
1. **Software Development** — Web, mobile, custom applications
2. **Design** — UI/UX, branding, visual design
3. **Security** — Infrastructure security, compliance
4. **Data** — Analytics, business intelligence
5. **Infrastructure** — Cloud hosting, deployment
6. **Marketing** — Digital marketing, content, campaigns

## Tech Stack
- **Website:** Modern web stack (details in project repo)
- **Hosting:** TBD (see Deploy & Hosting Strategy task #271)
- **Email:** snowit.ba domain (DNS/MX setup in progress)

## Contacts
- **Partner:** Asmir (asmirmc@gmail.com)
- **Status:** Active collaboration, LinkedIn outreach campaign planned

## Key Documents
- **Sales Playbook** — Agent-generated detailed sales strategy
- **Content Calendar** — 30-day LinkedIn posting schedule (3 posts/week)
- **Financial Model** — 6-month revenue projections
- **Service Catalog** — Full service offerings at snowit.ba/usluge

# Specifications Index

> Last Verified: 2026-02-17 | Owner: John

# SnowIT — Specifications Index

## Business Documents

### Sales & Marketing
- **Sales Playbook** — Detailed sales strategy (AI-generated by nicksaraev agent)
- **Content Calendar** — 30-day LinkedIn content plan (AI-generated by marketer agent)
- **Financial Model** — 6-month revenue/cost projections (AI-generated by finance agent)
- **Market Research** — B&H market analysis

### Service Catalog
Located at snowit.ba/usluge:
1. Software Development
2. Design Services
3. Security Consulting
4. Data Analytics
5. Infrastructure Management
6. Digital Marketing

## Technical Documents

### Website
- **Stack:** Modern web framework
- **Hosting:** TBD (Deploy & Hosting Strategy task #271)
- **Domain:** snowit.ba
- **Email:** MX records setup (task #1267)

### Infrastructure
- DNS configuration (in progress)
- Email setup (in progress)
- Deployment pipeline (pending)

## Planning Documents
- **30-Day Outreach Plan** — 5 clients target (delivery delayed)
- **LinkedIn Strategy** — Content themes, posting schedule
- **Pricing Strategy** — Package definitions, competitive analysis

# SnowIT Tenant Tree (2026-05-15 migration)

# SnowIT Tenant Tree (2026-05-15 migration)

## Legal Boundary

**SnowIT BA is an independent legal entity.** ALAI Holding AS provides technology and operations support under service agreement. ALAI has ZERO financial share/equity in SnowIT BA.

*CEO directive 2026-05-15:* "SnowIT BA = independent legal entity. ALAI = tech-only ZERO financial share."

## New Canonical Layout

As of 2026-05-15, SnowIT BA operates under dedicated tenant tree:

```
~/tenants/SnowIT-BA/
├── company/           # Corporate operations
│   ├── state/         # System state, sessions (was ~/clients-external/snowit-state)
│   ├── finances/
│   ├── contracts/
│   └── reports/
├── legal/             # Legal documents, compliance
├── contacts/          # CRM, stakeholder data
├── calendar/          # Events, deadlines
├── mail/              # Email archives, campaigns
├── forms/             # Templates, intake forms
├── templates/         # Document templates
├── web/               # Web properties
│   └── snowit-site/   # Main repo (was ~/clients-external/snowit-site)
└── clients/           # SnowIT client projects

```

## Migration Summary

### What Moved

- `~/clients-external/snowit-site` → `~/tenants/SnowIT-BA/web/snowit-site`
- `~/clients-external/snowit-state` → `~/tenants/SnowIT-BA/company/state`
- Client reference symlink: `~/business/ALAI-Holding-AS/clients/SnowIT` → `~/tenants/SnowIT-BA/_external-tenant-snowit-reference`

### What Stayed in ALAI Tree

- `~/business/ALAI-Holding-AS/products/SnowIT/linkedin-cadence/` — ALAI internal tool (CEO directive: stays in ALAI tree)

### Hard Cutover Confirmed

Both old directories removed:

- `~/clients-external/snowit-site` → *No such file or directory*
- `~/clients-external/snowit-state` → *No such file or directory*

## Validation Evidence

**Status: PASS (9/9 criteria)**

<table id="bkmrk-idcriterionstatusevi"><thead><tr><th>ID</th><th>Criterion</th><th>Status</th><th>Evidence</th></tr></thead><tbody><tr><td>V1</td><td>snowit.ba serves HTTP/2 200</td><td>✓ PASS</td><td>/tmp/proveo-100723/curl-snowit.txt</td></tr><tr><td>V2</td><td>enterprise.snowit.ba serves HTTP/2 200</td><td>✓ PASS</td><td>/tmp/proveo-100723/curl-enterprise.txt</td></tr><tr><td>V3</td><td>Playwright screenshot rendered</td><td>✓ PASS</td><td>/tmp/proveo-100723/snowit-landing.png (124KB)</td></tr><tr><td>V4</td><td>Vercel projectId intact</td><td>✓ PASS</td><td>/tmp/proveo-100723/vercel-project.json</td></tr><tr><td>V5</td><td>LaunchAgents operational</td><td>✓ PASS</td><td>3 daemons loaded, path-independent</td></tr><tr><td>V6</td><td>Git remote correct</td><td>✓ PASS</td><td>git@github.com:snowitba/snowit-site.git</td></tr><tr><td>V7</td><td>Repo-local \[user\] config removed</td><td>✓ PASS</td><td>Global ~/.gitconfig inherits correctly</td></tr><tr><td>V8</td><td>No live functional refs to old path</td><td>✓ PASS</td><td>20 mentions are historical/spec/memory only</td></tr><tr><td>V9</td><td>Hard cutover confirmed</td><td>✓ PASS</td><td>Both old directories removed</td></tr></tbody></table>

## Open Items

### Non-Blocking

- **DEPLOY-MAP.md schema upgrade** — Line 32 has stale path `~/projects/snowit-site`. Kelsey-hightower blocked by `blueprint-schema-validator` pre-hook. Requires DEPLOY-BLUEPRINT v2 compliance upgrade. Separate MC opened for schema migration.

## References

- **MC:** #100723
- **ADR:** [ADR-026 SnowIT Tenant Tree](https://docs.alai.no/books/system-architecture/page/adr-026-snowit-tenant-tree)
- **Spec:** ~/system/specs/snowit-tenant-migration-2026-05-15.md
- **Executor:** kelsey-hightower (FlowForge)
- **Validator:** angie-jones (Proveo)
- **Supersedes:** anvil-fs-d2 (Phase D restructure now complete for SnowIT)
- **Canonical Registry:** ~/system/specs/canonical-registry.md

# SEO Readiness Portal Cloud Migration — 2026-06-01

# SEO Readiness Portal Cloud Migration — 2026-06-01

Date: 2026-06-01
Owner: john
Verdict: DONE

## Live state verified (2026-06-01 05:31 UTC)

- `curl -sI https://seo-tools.alai.no/api/health` → HTTP 302 to `alai-no.cloudflareaccess.com/cdn-cgi/access/login/...` (CF Access enforced, no anonymous access)
- `curl -sI https://seo-readiness-alai.azurewebsites.net/api/health` → HTTP 403 `x-ms-forbidden-ip: 46.46.245.169` (Azure origin lock to Cloudflare IPs)

No traffic to John local host: cloudflared route for `seo-tools.alai.no` and `seo-tools.snowit.ba` set to `http_status:503`.

## Architecture (now)

Browser → Cloudflare Access (`seo-tools.alai.no`, alai-no team) → Cloudflare proxied DNS → Azure App Service Linux container `seo-readiness-alai` (Sweden Central, rg `rg-seo-readiness-prod`, asp `asp-seo-readiness-prod` B1) → Next.js standalone in `alairegistry.azurecr.io/seo-readiness-portal:20260531-cloud` (digest `sha256:16c8a40a...`) → persistent `/home/data/workspace.json`

App access mode: `SEO_PORTAL_ACCESS_MODE=cf-access`, trusted header `CF-Access-Authenticated-User-Email`, allowed domains `snowit.ba,alai.no`, extra allowed `alembasic@gmail.com`.

## Evidence

- Deploy summary: `/tmp/alai/seo-readiness-cloud-migration-20260531/cloud-deploy-summary.md`
- Local-disabled proof: `/tmp/alai/seo-readiness-cloud-migration-20260531/local-disabled-evidence.txt`
- Azure build + deploy: `azure-build.log`, `azure-webapp-deploy.log`, `azure-hostname-corrected.log`, `azure-role-settings.log`
- Origin lock: `azure-access-restrict-cloudflare.log`, `azure-access-restrict-smoke.log`
- DNS upsert: `cf-dns-upsert.log`
- Public smoke: `public-cloud-smoke.log`
- Origin smoke: `azure-smoke.log`
- Authenticated UAT (alem@alai.no, end-to-end: partners → add client → intake → audit → report → markdown export): `uat-alem/seo-cloud-uat-result.json` + 8 PNG screenshots `uat-alem/01-cf-login.png` … `08-export.png`
- Lesson memo: `lesson-seo-cloud-origin-lock-20260531.md`

## Docs corrected (no localhost as final target)

- `DEPLOYMENT-CLOUD.md` L7 — explicit "must not be served from John/local localhost"
- `DEPLOYMENT-INTERNAL.md` L7, L26, L102 — Docker steps marked local-dev only; cloud origin required for production; explicit "Do not route `seo-tools.*` to `http://127.0.0.1:*` or any localhost address"
- `README.md` L130 — "Azure App Service Linux container origin, not John/local localhost"
- `BUILD-BLUEPRINT.md` L54, L70 — Azure runbook section + CEO correction recorded

## Rollback

If Azure origin needs rollback:
1. Revert Web App container image: `az webapp config container set -g rg-seo-readiness-prod -n seo-readiness-alai --container-image-name alairegistry.azurecr.io/seo-readiness-portal:<previous-tag>`
2. CF Access policy and DNS remain unchanged; no public bypass introduced.
3. Do NOT re-enable cloudflared local route — that violates the CEO correction.

## Open follow-ups (separate MCs, not blockers)

- Postgres swap for `/home/data/workspace.json` (durable multi-user storage) — pre-req for external product use.
- `seo-tools.snowit.ba` DNS/zone provisioning (currently 503).
- Bind Azure custom hostname TLS managed cert (currently CF terminates).

## CEO scope check

- "Move off John/local host to real cloud" → DONE (Azure App Service)
- "Cloudflare Access trusted-header preserved" → DONE (`SEO_PORTAL_ACCESS_MODE=cf-access`)
- "No public unauthenticated access" → DONE (302 to CF Access login on unauth)
- "Custom domain toward seo-tools.alai.no" → DONE (CNAME + asuid TXT + Azure binding)
- "Concrete deploy URL/origin" → DONE (`seo-readiness-alai.azurewebsites.net` behind `seo-tools.alai.no`)
- "UAT evidence" → DONE (alem-authenticated screen-recorded flow)
- "Rollback" → documented above
- "Fix docs that recommend local host" → DONE (4 docs updated)


## MC / evidence references

- MC task: #102653
- Local closure artifact: `/tmp/alai/seo-readiness-cloud-migration-20260531/CLOSURE-102653.md`
- Cloud deploy summary: `/tmp/alai/seo-readiness-cloud-migration-20260531/cloud-deploy-summary.md`
- Authenticated UAT result: `/tmp/alai/seo-readiness-cloud-migration-20260531/uat-alem/seo-cloud-uat-result.json`
- Origin restriction smoke: `/tmp/alai/seo-readiness-cloud-migration-20260531/azure-access-restrict-smoke.log`
- P2P verifier PASS: `mesh-thr-50503688-7de8-489c-96ca-3d7d1a165dc2`

---

## See Also — Agent Runbook

The canonical end-to-end workflow runbook (intake to John deep-report, anti-pitfalls, trigger checklist):

- [SEO Pipeline — Portal Intake to John Deep-Report (agent runbook)](https://docs.alai.no/books/seo-readiness-portal/page/seo-pipeline-portal-intake-john-deep-report-agent-runbook)