diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md index a0577cc..4c8d117 100644 --- a/PROJECT_STATE.md +++ b/PROJECT_STATE.md @@ -1,3 +1,15 @@ +# PROJECT_STATE - Monitor + +## v1.1.0 - 2026-05-17 + +Current state: +- Monitor web UI is active for monitor.outsidethebox.top. +- Version badge is shown beside the main Monitor page title. +- OTB Oracle live quote panel is active. +- Billing-facing assets currently include USDC, ETH, ETHO, EGAZ, and ETI. +- Project version bumped to v1.1.0. +- Previous git version noted by user: v1.0.1. + ## Update - 2026-03-22 16:00 - Live frontend source of truth identified as /var/www/monitor. diff --git a/README.md b/README.md index f359341..4d8e6a0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ +# Monitor v1.1.0 + +Build date: 2026-05-17 + +## v1.1.0 changes + +- Bumped monitor project from v1.0.1 to v1.1.0. +- Added visible version badge beside the Monitor page heading. +- Updated docs for the current OTB Oracle / monitor state. +- Current monitor page includes live OTB Oracle quote display and payment asset pricing context. + ## v1.0.1 - 2026-03-22 - Fixed live quote calculator so the entered CAD value no longer resets to the default during timed page refreshes. diff --git a/VERSION b/VERSION index b18d465..795460f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v1.0.1 +v1.1.0 diff --git a/frontend/app.js b/frontend/app.js index 08afabe..7b60a61 100644 --- a/frontend/app.js +++ b/frontend/app.js @@ -16,12 +16,12 @@ function applyTheme(theme) { document.documentElement.setAttribute("data-theme", theme); localStorage.setItem("theme", theme); - const toggle = document.getElementById("themeToggle"); + const toggle = document.getElementById("otbThemeToggle"); if (toggle) toggle.checked = (theme === "light"); } function toggleThemeFromCheckbox() { - const toggle = document.getElementById("themeToggle"); + const toggle = document.getElementById("otbThemeToggle"); const wantsLight = !!toggle?.checked; applyTheme(wantsLight ? "light" : "dark"); } @@ -31,7 +31,7 @@ function toggleThemeFromCheckbox() { applyTheme(saved); window.addEventListener("DOMContentLoaded", () => { - const toggle = document.getElementById("themeToggle"); + const toggle = document.getElementById("otbThemeToggle"); if (toggle) { toggle.addEventListener("change", toggleThemeFromCheckbox); toggle.checked = (document.documentElement.getAttribute("data-theme") === "light"); @@ -692,3 +692,20 @@ async function refresh(keepQuote = true) { setInterval(() => refresh(true), 10000); }); })(); + +async function loadMonitorVersionBadge() { + const badge = document.getElementById("monitor-version-badge"); + if (!badge) return; + + try { + const res = await fetch(`/VERSION?ts=${Date.now()}`, { cache: "no-store" }); + if (!res.ok) throw new Error(`VERSION fetch failed: ${res.status}`); + const version = (await res.text()).trim(); + badge.textContent = version || ""; + } catch (err) { + console.warn("Monitor version badge unavailable:", err); + badge.textContent = ""; + } +} + +document.addEventListener("DOMContentLoaded", loadMonitorVersionBadge); diff --git a/frontend/brand.js b/frontend/brand.js new file mode 100644 index 0000000..9b37576 --- /dev/null +++ b/frontend/brand.js @@ -0,0 +1,44 @@ +(function () { + const STORAGE_KEY = "otb_theme"; + const root = document.documentElement; + + function getPreferredTheme() { + const saved = localStorage.getItem(STORAGE_KEY); + if (saved === "light" || saved === "dark") return saved; + return "dark"; + } + + function applyTheme(theme) { + root.setAttribute("data-theme", theme); + const toggle = document.getElementById("otbThemeToggle"); + if (toggle) { + toggle.checked = theme === "dark"; + } + } + + function saveTheme(theme) { + localStorage.setItem(STORAGE_KEY, theme); + } + + function initThemeToggle() { + const toggle = document.getElementById("otbThemeToggle"); + if (!toggle) return; + + toggle.addEventListener("change", function () { + const theme = toggle.checked ? "dark" : "light"; + applyTheme(theme); + saveTheme(theme); + }); + } + + function init() { + applyTheme(getPreferredTheme()); + initThemeToggle(); + } + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", init); + } else { + init(); + } +})(); diff --git a/frontend/favicon.png b/frontend/favicon.png new file mode 100644 index 0000000..4f0f6bf Binary files /dev/null and b/frontend/favicon.png differ diff --git a/frontend/index.html b/frontend/index.html index 7c161c8..6478dcf 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -7,32 +7,76 @@
+