# Hosting Migration Log — basicconsulting.no + bilko.io (MC #8523)

# Hosting Migration Log — basicconsulting.no + bilko.io

**Author:** Skillforge (Lexicon) · **Date:** 2026-07-28 · **Trigger:** MC #8523 (BookStack documentation task)

This page documents the tool-verified hosting history and current live state of two domains: **basicconsulting.no** (ALAI/Basic Consulting corporate site) and **bilko.io** (Bilko Serbian-market landing page). Source facts below are drawn from email #2072 (2026-04-21 hosting triage), the ALAI Static Hosting Blueprint (MC #8481), the Bilko CSP Cleanup doc (MC #10440), GitHub Actions deploy history, and live `dig`/`curl` checks run 2026-07-28.

---

## 1. Starting point — 2026-04-19/21 triage (email #2072)

FlowForge audit (2026-04-19) found ALAI hosting spread across 5 platforms, 12 live domains, 22 Vercel projects (mostly orphaned):

| Platform | Held | Status (2026-04-21) |
|----------|------|----------------------|
| Cloudflare Pages | alai.no, basicconsulting.no | New standard per blueprint MC #8481 |
| Azure VM (4.223.110.181) | BookStack, Vaultwarden, Documenso, Planka, Grafana, app.getdrop.no | Internal tools + Drop prod |
| GCP Cloud Run | bilko-api, bilko-web, bilko-intesa-demo | Bilko dynamic backend |
| Vercel | basicfakta.no + 21 stale/orphan projects | Cleanup needed |
| GitHub Pages | snowit.ba | Client project |

**bilko.io at this point: unreachable (timeout) — domain purchased (One.com, per 2026-02-19 session decision) but no hosting attached.**

Decision recommended in the triage email: Option A (Cloudflare Pages for static + Azure VM for dynamic, chosen over GCP-based Option B and all-Cloudflare Option C).

---

## 2. Static migration to Cloudflare Pages (MC #8481)

Per the [ALAI Static Hosting Blueprint](https://docs.alai.no) (MC #8481, 2026-04-20):

- **alai.no** migrated to Cloudflare Pages — 2026-04-19
- **basicconsulting.no** migrated to Cloudflare Pages — 2026-04-20

Cloudflare Pages was selected over GCP/AWS/Azure Static Web Apps on cost (€0 vs €12-14/mo for 12 sites), native git-push deploys, unlimited custom domains/free SSL, and alignment with ALAI's existing Cloudflare DNS footprint.

---

## 3. bilko.io — from unreachable to live static landing

- **2026-04-20 18:45 UTC:** Cloudflare notification confirms `bilko.io is now active on Cloudflare (Free plan)` — DNS zone onboarded.
- **2026-05-09 onward:** GitHub Actions workflow `Deploy bilko-io to CF Pages (static landing)` (MC #100221, parent #100173, repo `johnatbasicas/bilko` → later `alai-holding/bilko`) added to CI/CD.
- **2026-05-09 through 2026-06-18:** Multiple recorded CI run failures for this workflow (repeated `Run failed` notifications on 2026-05-09, 05-14, 06-09, 06-17, 06-18) alongside sibling static-landing workflows for `bilko-cloud` (HR) and `bilko-company` (BA) — consistent with an unstable multi-market static-landing CI period, not a single one-shot cutover.
- **Current (verified 2026-07-28):** `bilko.io` resolves via Cloudflare (104.21.26.136 / 172.67.136.76) and returns `HTTP/2 200`. Body served is the Bilko Serbian-market landing page (`sr-Latn`, "Bilko — Računovodstvo bez komplikacija"), with reciprocal `hreflang` entries to `bilko.cloud` (hr-HR), `bilko.rs` (sr-RS), and `bilko.company` (bs-BA) — confirming bilko.io is one node in a multi-domain, multi-market static landing network, not a standalone site.

---

## 4. basicconsulting.no — retired as Bilko dev host, still live as corporate site

Two distinct threads involve basicconsulting.no and must not be conflated:

**a) Corporate site (this doc's primary subject):** basicconsulting.no itself remains live on Cloudflare Pages (migrated 2026-04-20, section 2 above). Verified 2026-07-28: resolves via Cloudflare (104.21.35.64 / 172.67.214.88), `HTTP/2 200`, serving "Basic Consulting | Premium IT-rådgivning" (Norwegian corporate landing page).

**b) Bilko dev-config subdomains (retired):** Per **MC #10440** (2026-07-01), stale `basicconsulting.no` subdomain entries (`bilko-demo.basicconsulting.no`, `bilko-demo-api.basicconsulting.no`, and a `*.basicconsulting.no` wildcard) were removed from Bilko's `apps/web/next.config.js` dev CSP and `allowedDevOrigins`, following the app's demo infrastructure migration to `alai.no` hosts. curl verification at the time: `bilko-demo.basicconsulting.no` — TLS handshake completes, no HTTP response; `bilko-demo-api.basicconsulting.no` — HTTP 502 (Cloudflare proxy up, origin dead). Verified again 2026-07-28: `bilko-demo.basicconsulting.no` resolves to a mixed CNAME/A-record set pointing at an orphaned GCP Cloud Run host (`bilko-web-*.a.run.app` + Google IP range) — consistent with the MC #10440 finding of a dead legacy origin. These subdomains are **not** part of the live corporate site and are not expected to resolve to working content.

---

## 4a. Cross-reference — related existing BookStack page (discrepancy flagged, not resolved here)

An existing page, **"ALAI Domain Migration — basicconsulting.no → alai.no"** (BookStack page id 2666, book *Operations*, created 2026-04-19, last updated 2026-07-05, tagged `staleness: needs-review`), documents the `basicconsulting.no` Cloudflare zone (`4670dbd0acfeab4174ac0d4746d11ea0`) at the DNS/tunnel level: root + `docs`, `sign`, `bilko-demo`, `www` subdomains proxied via Cloudflare Tunnel to the Azure VM (4.223.110.181), separate from the CF-Pages-hosted apex corporate site covered in section 4a above.

**Discrepancy found:** that page (last updated 2026-07-05) lists `bilko-demo.basicconsulting.no` as an **"Active service."** This conflicts with MC #10440 (2026-07-01, 4 days earlier) which found the same host dead by curl (TLS handshake completes, no response), and with this doc's own 2026-07-28 re-verification (orphaned GCP Cloud Run origin). The Operations-book page is already self-flagged `needs-review` — this log does not attempt to resolve the discrepancy, only surfaces it so a future reader does not treat the older page as current truth over the two independent 2026-07 dead-host findings.

## 5. Current live state summary (verified 2026-07-28)

| Domain | Platform | HTTP status | Serves |
|--------|----------|-------------|--------|
| basicconsulting.no | Cloudflare Pages | 200 | ALAI/Basic Consulting corporate landing (Norwegian) |
| bilko.io | Cloudflare Pages | 200 | Bilko Serbia static landing (sr-Latn), part of bilko.cloud/bilko.rs/bilko.company hreflang network |
| bilko-demo.basicconsulting.no | dead (orphaned GCP Cloud Run origin) | n/a | Not live — retired per MC #10440 |

## 6. Open items (not resolved by this log; flagged for follow-up, not actioned here)

- The 2026-04-21 triage email lists unresolved decisions on the **dynamic app hosting strategy** (Bilko on GCP Cloud Run vs. Drop on Azure VM vs. DropSrbija on ANVIL — no single strategy chosen) and the **data/DB layer** (Litestream/Azure Blob, per-product Postgres on ANVIL, single-instance Qdrant). No evidence found that these were subsequently decided; out of scope for this hosting log.
- `bilko-demo-api.alai.no` liveness is separately tracked as unresolved under MC #104570 (per MC #10440 doc) — not re-verified here as it is outside the basicconsulting.no/bilko.io scope of this task.

---

*Sources: email #2072 (message id in `~/system/databases/email-inbox.db`, row 2072), `~/system/specs/ALAI-STATIC-HOSTING-BLUEPRINT.md` (MC #8481), `~/system/docs/reconciliation/bilko-mc-10440-csp-cleanup.md` (MC #10440), GitHub Actions notification history in email-inbox.db, live `dig`/`curl` checks 2026-07-28.*