diff --git a/CHANGELOG.md b/CHANGELOG.md
index 15e2ae2..48cd5c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to Void 2.0 are documented here.
Format: [Keep a Changelog](https://keepachangelog.com).
+## 2.0.0-alpha.27
+- feat: Timelapse + AI Usage folded into the left rail as an "Apps" section,
+ embedded as cross-origin HTTPS iframes; each stays chromeless at its own URL.
+- feat: phuryn usage dashboard now reachable at aiusage.hynesy.com behind CF Access.
+- feat: Sacred Valley AI Usage card opens the in-Void #/ai-usage route.
+
## 2.0.0-alpha.23 — Local/remote-aware service tiles
- **Optional `external` URL per service** (`migration 022`, `config/services.json`, repo + `/api/health/services` payload + `svcBody`): Little Blue health-band tiles previously linked to the single LAN `url`, so they opened dead private IPs when browsing remotely (e.g. Gramps `http://192.168.1.99`). Migration adds the column and **backfills** curated domains by id (the live instance is already seeded, so a column-add alone wouldn't populate them); also normalises `jellyfin`/`chaptarr` (which stored a domain in `url`) to LAN `url` + `external`.
- **Context-based tile target + one-click alt** (`public/views/service_url.js`, `public/components/service_tile.js`, `public/views/health_band.js`): the tile picks its primary URL from `location.hostname` — public host (e.g. `void.hynesy.com`) opens the domain, private IP/localhost/.local opens the LAN address — and always offers a `⇄` alt to the *other* URL (a reliable manual fallback; an auto-probe can't work because an HTTPS dashboard is blocked from probing `http://` LAN IPs by mixed-content). Services with no `external` are dimmed with a "LAN-only" badge when remote. Tile root is now a `div` with a stretched primary `` + sibling alt `` (no nested anchors). Health checker unchanged (still probes LAN `url` from CT 311).
diff --git a/package.json b/package.json
index 0894ddf..15551c2 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "void-server",
- "version": "2.0.0-alpha.23",
+ "version": "2.0.0-alpha.27",
"type": "module",
"private": true,
"scripts": {
diff --git a/server.js b/server.js
index 547def8..1168654 100644
--- a/server.js
+++ b/server.js
@@ -13,7 +13,7 @@ import { mcpAuth } from './lib/api/middleware/mcp_auth.js';
import { handleMcp } from './lib/mcp/http.js';
import httpProxy from 'http-proxy';
-const VERSION = '2.0.0-alpha.23';
+const VERSION = '2.0.0-alpha.27';
// Proxy /terminal (+ its WebSocket) to ttyd on CT 300, so the embedded terminal
// works whether the Void is reached via Traefik (void2-app.hynesy.com) OR the