- Nav link: added
Tools & Calculatorsto index.html Insights dropdown with mint accent + NEW badge. ChangelogNEWbadge moved to Tools (more recent ship). - IndexNow ping for v1.7.x: 7 URLs submitted (HTTP 200).
Changelog
Live release notes — every shipped version
public /tools.html hub page
- NEW:
/tools.html(591 lines, 38 KB) — public hub page listing all 18 calculators + tools across 4 categories: - Cost & Capacity Calculators (7): PUE, CAPEX, OPEX, ROI, TCO, CX, Carbon Footprint
- Compliance & Standards Tools (4): TIA-942 Checklist, Tier Advisor, RFS Readiness, Standards LTC Lab
- Market & Grid Monitors (2): DC Market Tracker, PLN Java-Bali Grid Monitor
- Operator-Grade Simulations (2): Datahall AI BMS, DC Conventional Sim
- Design: aurora mesh hero, gradient-shift "Tools & Calculators" H1, per-card accent color via
--tool-accentCSS variable + shine-sweep on hover + 3-layer glow shadow. - SEO: full meta + Open Graph + Twitter Cards +
CollectionPageJSON-LD with 18-itemItemList+BreadcrumbList. - Navigation: linked from
articles.htmlInsights dropdown (between Changelog and All Insights). - Sitemap regen: 102 → 103 URLs (added tools.html).
- llms.txt regen: 98 pages now indexable to AI search engines.
Remotion v3 — landscape + portrait + auto-detect, plus title polish
Remotion video v3 — orientation-aware
- NEW:
assets/resistancezero-intro-portrait.mp4— 60s 1080×1920 portrait composition (ResistanceZeroIntroPortrait). For mobile users where landscape would letterbox awkwardly. - UPDATED:
assets/resistancezero-intro.mp4— landscape (1920×1080) re-rendered with deeper VFX (higher glow strength, vignette, color grading, 12→16 frame transitions, more electricity callouts in Scene 3 SLD: ANSI relays 50/51 + 87T + 25 + 27/59 + 32 + 67, transformer Z=8% impedance, ΔT=5°C cooling annotation). - NEW posters:
resistancezero-intro-poster.webp+resistancezero-intro-portrait-poster.webp. - JS auto-detect:
openIntroVideo()now readswindow.matchMedia('(max-width: 768px) and (orientation: portrait)')and swapsaccordingly. Modal aspect-ratio also flips between 16:9 and 9:16. - Source elements:
tags as a CSS-only fallback if JS fails. - File sizes: 10.6 MB landscape + 10.3 MB portrait — both within hard cap.
SEO title polish
- TIA-942 checklist: 69 → 47 chars (was the persistent SEO title-length WARN).
- TCO calculator: 64 → 53 chars (in SEO sweet spot 30-60 now).
Bump 1.6.4 → 1.7.0 (MINOR — adds responsive video tier).
small polish: humans.txt + TIA-942 title + author links
- NEW:
/humans.txt— web-tradition file at site root listing owner / certifications / tech stack / tooling / inspirations. Linked from index, articles, datacenter-solutions, changelog viaon those 4 pages. - Fix:
tia-942-checklist.htmltitle shortened from 66 → 56 chars (now in SEO sweet spot 30-60). Was the last audit-seo title-length WARN. - Polish:
rel="author"discoverable from search engines + curious humans inspecting source.
video modal X close button + styles-index.css fix
User: "saat video remotionnya kasi tombol x close button" (give the video an X close button).
Root cause: same class as the v1.4.1 share-button bug — the .video-modal-close CSS was in styles.css but index.html loads styles-index.min.css. The X close button rendered as a default browser button, easy to miss against the dark video.
Fix:
- Copied the video-modal + overlay + close button rules into
styles-index.css. - Enhanced the close button: 44×44 mint-bordered floating button positioned ABOVE the video frame (not overlapping native video controls), with backdrop blur, glow on hover, 90° rotate animation on hover.
- Tap target: 48×48 on mobile (≤560 px width).
- Portrait orientation modal: when device is portrait + ≤768 px wide, modal flips to 9:16 aspect ratio (420 px max width) — sets up for the upcoming portrait Remotion video.
- Cache-bust:
?v=.2026050-modal-fix
articles.html hub Awwwards uplift
- Aurora mesh hero on
.articles-hero(blue/mint/violet/gold/pink radial gradients drifting) - Gradient-shift H1 on "Operations Engineering Journal" (slate→blue→mint→slate sweep, 12s)
- Article-card dark-mode override: was
background: #fff(hardcoded white) — nowrgba(30,41,59,0.6)+ 1px white-mix border + 8px backdrop blur. Cards finally render properly in dark mode. - Article-card shine sweep on hover + 3-layer mint-glow shadow (matches index + datacenter-solutions pattern).
- Philosophy-card dark-mode override (was hardcoded white).
- Honours
prefers-reduced-motion.
- Sitemap regenerated: 102 indexable URLs (was 101) —
/changelog.htmlnow included. - llms.txt regenerated: 140 lines / 97 pages —
/changelog.htmlnow listed for AI search engines. - 3-audit pass: audit-script-tags + audit-version-stamp + audit-seo all CLEAN post v1.6.0.
public-facing /changelog.html + ai-content-declaration sweep
Public changelog page (Linear/Vercel pattern)
- NEW:
/changelog.html— auto-generated fromCHANGELOG.mdsource. 22 release entries rendered as backdrop-blur cards with mint-pill version badges. - Filter chips:
All / MAJOR / MINOR / PATCHat the hero — JS toggles[data-version-tier]visibility. - Aurora mesh hero + gradient-shift "Changelog" headline (matches v1.4.0 pattern).
- Current-version badge on the latest entry (mint pill in top-right).
- GitHub commit hashes auto-linked to GitHub commit URLs (e.g.,
→ live link).5a0235c - Nav links added:
index.html+articles.htmlInsights dropdown gain aChangelogitem. - SEO meta complete: title, description, canonical, OG card (uses
assets/og/index.webp), Twitter, JSON-LDWebPage+BreadcrumbList, ai-content-declaration. - Generator preserved at
tools/build-changelog-html.py— re-run on every CHANGELOG.md update.
ai-content-declaration sweep on tool pages
Patched 6 more pages that audit-seo flagged: tia-942-checklist.html, tier-advisor.html, water-system.html, fire-system.html, fuel-system.html, ict.html. chiller-plant.html already had it (idempotent skip). Total tagged pages: 39 → 45.
Bump 1.5.3 → 1.6.0 (MINOR — adds new public-facing page + sweep).
View Transitions API + brand-mark continuity
- Added: View Transitions API opt-in (
@view-transition { navigation: auto; }) — supported browsers (Chrome 126+, Safari 18+, Edge) get smooth fade+slide transitions when navigating between pages on the site. Older browsers no-op gracefully. - Continuity: declared
view-transition-name: rz-brand-markon.nav-logo,.nav-avatar,.footer-logo,#rzVersionStamp imgso the brand mark visually persists across navigation (one of the signature 2026 web feels — Apple, Vercel, Linear all use this). - Honours
prefers-reduced-motion.
FAQ + HowTo schema for AI search ranking
- Added FAQPage schema (
@type: FAQPage) to 5 calculator pages: pue / capex / opex / roi / tco. Each block has 3-4 Q&A pairs covering: how the metric is calculated, typical industry ranges, country/climate sensitivity, biggest input drivers. Surfaces in Google rich-results, Google AI Overview, ChatGPT Search, Perplexity. - Added HowTo schema (
@type: HowTo) totia-942-checklist.html(5-step audit workflow).tier-advisor.html+cx-calculator.htmlalready had HowTo blocks (idempotent skip). - Each calc page now signals 4 schema types: WebApplication + HowTo + BreadcrumbList + FAQPage — a rich signal stack for AI search engine ranking.
- 29 JSON-LD blocks across 8 files validated cleanly (no syntax errors).
- New tool:
tools/inject-schema-faq-howto.py(idempotent, marker-gated).
per-page Open Graph images + IndexNow batch ping
- Added: 12 unique 1200×630 WebP Open Graph cards at
assets/og/(~52 KB each, 656 KB total). Pages: index, datacenter-solutions, articles, pue-calc, capex-calc, opex-calc, roi-calc, tco-calc, cx-calc, carbon-footprint, dc-market-tracker, pln-java-grid..webp - Card design: dark slate gradient bg + accent radial blob (per-page brand colour) + RZ wordmark top-left + 64px Ubuntu-Bold title + 26px subtitle + 22px JetBrains-Mono brand strip + 4% noise overlay + bottom 4px gold→emerald→blue gradient strip.
- Patched 12 HTML pages: replaced
og:image+twitter:imageto point at the new per-page WebP. Addedog:image:width=1200+og:image:height=630where missing. dc-market-tracker.html gained its first-evertwitter:image. - Tooling: new
tools/build-og-images.py— idempotent generator (--apply,--force,--update-htmlflags). Deterministic noise (seed=42). - IndexNow ping: 36 URLs from v1.5.0 commits submitted to Bing/Yandex/Seznam (HTTP 200). Re-crawl in minutes-to-hours.
Awwwards uplift rolled out + global polish + article typography
User: "keep working to make keep website improved, i need you to work autonomously".
Three parallel work streams shipped:
1. v1.4.0 uplift rolled out to datacenter-solutions.html
- Aurora mesh hero (emerald/blue/amber radial gradients drifting on 22s + 28s alternating animations)
- Film grain noise overlay (sitewide via body::before, dark mode only)
- Gradient-shift H1 (4-stop blue→emerald→gold→white sweep)
.ds-strat-cardshine sweep on hover + 3-layer mint glow shadow (scoped to:not(.is-soon)so disabled cards aren't affected)- 24-span DC-engineering keyword marquee strip (Hyperscale / Edge Computing / AI Factory / Liquid Cooling / PUE 1.15 / Tier IV / OCP Compatible / ASHRAE TC 9.9 / TIA-942-C / 30 MW Cap / N+2 / Mission-Critical) at 60s loop with edge fade-out masks
- Scroll-reveal IntersectionObserver applied to all 10
.ds-strat-cardelements - Reduced-motion guards throughout
2. Article typography uplift across 34 article-class pages
Patched article-1.html … article-26.html + article-27.html + FF-1/FF-2/FF-3 + geopolitics/-1/-2/-3. Skipped article-9-paper.html (print variant).
Per page: gradient drop-cap on first paragraph (4.5rem, gold→emerald→blue 3-stop), inline-link gradient underline (resend.com style with hover thicken), section-header h2::before gold-emerald accent stripe on hover, .rz-reveal scroll fade-up class. Helper script preserved at tools/applytypographyuplift.py (idempotent; marker-gated).
3. Global polish (sitewide via styles.css)
:root { color-scheme: dark light; }— proper UA scrollbar theming- Selection color: mint
rgba(125,221,180,0.32)on dark, emerald-tint on light - Sitewide custom scrollbar — gradient mint→blue thumb on dark, emerald-tint on light, Firefox
scrollbar-colorvariants :focus-visibleenhanced (border-radius 4px for rounded outlines)
4. Search-engine verification scaffolding (index.html)
- Added comment-template tags for
google-site-verification,msvalidate.01,yandex-verification(manual user step to populate after registering) - IndexNow key already verified (existing
)7686834...txt - RSS feed alternate link (sitemap.xml as feed source)
Bump 1.4.2 → 1.5.0 (MINOR — feature-class uplift across many pages + global polish).
- Proactive sweep: ran a comprehensive
regexaudit across all 7 calc pages for any class with hardcoded white/light backgrounds lacking a[data-theme="dark"]override. ONE remaining gap surfaced:.scenario-cardonopex-calculator.html(line 947,background: white). - Fix: added 5 dark-mode rules covering
.scenario-cardbase +.currentactive state + scenario-name / scenario-total / scenario-diff text colours. Active scenario card now shows a soft mint gradient instead of solid white. - Audit clean: all 7 calc pages now report CLEAN on the regex audit (every class with light bg has a corresponding dark override).
- Inline
style="background:#fffbeb"PDF-template callouts (10 in capex, 1-2 each in other pages) are intentional cream-accent info boxes used inside print-window templates — not user-visible in dark mode and correctly left alone. - The capex legacy
#loginModal(hiddendisplay:none, replaced by auth.js widget) intentionally untouched.
- Fix:
.input-fieldselects + inputs were rendering with white backgrounds in dark mode on opex/capex/roi/pue/carbon-footprint. Root cause: class-mismatch — HTML usesbut the dark-mode CSS targeted page-prefixed classes (.opex-input/.capex-inputetc.) that don't exist in the markup. Effectively the entire input dark-mode coverage was a no-op on 5 calc pages. - Pages affected: opex / capex / roi / pue / carbon-footprint. tco + cx were already correct (they use prefixed
.tco-input-field+.cx-input-fieldconsistently in HTML + CSS). - Fix scope: added
[data-theme="dark"] .input-field+.country-select+ option overrides + focus state to all 5 affected pages. Fields now render with slate (#1e293b) background, light text (#f1f5f9), and emerald focus glow.
Awwwards uplift — adopt linear.app + vercel.com + resend.com patterns
User: "enhance more agar tidak terlihat default claude standard theme, tapi yg keren. Cari website yg keren di website dan adopt".
Reference sites adopted:
- linear.app — animated aurora mesh hero, gradient-shift display text
- vercel.com — marquee logo/keyword strip with edge fade-out masks
- resend.com — card shine sweep on hover, animated conic-gradient borders
- All effects honour
prefers-reduced-motion. NO cursor-tracking effects (those were previously rejected).
Changes:
- Aurora mesh hero:
.hero::before+.hero::aftercarry multi-stop radial gradients (mint/gold/violet/blue/pink) drifting via 22s + 28s alternating animations. GPU-accelerated transforms only. - Film grain noise overlay:
body::before(dark mode) carries an SVG fractal-noise texture at 3.5% opacity withmix-blend-mode: overlay. Adds analog/cinematic depth. - Gradient-shift H1:
.bento-name("Bagus Dwi Permana") now usesbackground-clip:textwith a 4-stop linear-gradient (slate→mint→gold→slate) and 12s sweep animation. - Card shine sweep:
.bento-card::aftercarries a diagonal light streak that translates across on hover (0.9s cubic-bezier). - Card hover glow: replaces solid border with a 3-layer shadow (mint outline + dark depth + emerald aura).
- Engineering keyword marquee: new strip below the identity row, scrolls 12 keywords (Hyperscale Operations, PUE 1.25, Tier III, N+1, SAP HV/LV, SCADA·BMS, CDFOM, Ahli K3 Listrik, ISO 50001, TIA-942, 99.999%, Mission-Critical) at 60s linear loop with edge fade-out gradient masks.
- Scroll-reveal helper:
.rz-revealclass + IntersectionObserver in inline— fade-up on 10% viewport entry. Available for retroactive application on any element.- Cache bust:
styles-index.min.css?v=.2026050-uplift-v1.4Result: index.html now feels like a 2026 dev portfolio (linear/vercel/resend territory) instead of a generic dark theme.
- Fix:
chiller-plant.html— was missing canonical, all OG tags, all Twitter cards (audit-seo flagged as REQUIRED-tag errors). Added full meta-tag block + ai-content-declaration. Title bumped from 24 to 60 chars to fit SEO range. - Fix:
cx-calculator.html— added missingog:image+twitter:image(using canonical fallbackassets/profile-photo.jpg). - Tooling:
tools/audit-seo.pynow correctly skipspages (LTC labs, redirects). Strict mode no longer false-positives on intentionally-internal pages. - IndexNow: synced
.indexnow-keystore to use the existing 2026-03 verification key () — Bing already verified this key, no need to register a new one.7686834.txt - audit-seo strict mode: 0 errors, clean pages 9 → 20.
Plan v14 — SEO + AI search sweep
- Added:
/llms.txt— canonical LLM content map per llmstxt.org spec, listing all calculators / articles / tools / simulations. - Added:
/llms-full.txt— full-content variant for one-shot LLM context (Markdown extraction of all main pages). - Added: explicit AI-bot allows in
robots.txtfor GPTBot, ClaudeBot, anthropic-ai, PerplexityBot, OAI-SearchBot, Google-Extended, cohere-ai, ChatGPT-User, Diffbot, Bingbot. Signals consent + improves crawl priority. - Added:
to 39 key pages (all articles + calc pages + landing pages). - Added:
BingSiteAuth.xmlplaceholder + IndexNow key file (Bing/Yandex/Seznam push indexing). - Added:
tools/audit-seo.py(per-page SEO health check, strict-mode CI gate). - Added:
tools/build-sitemap.py(regenerates sitemap.xml from filesystem; covers all 101 indexable pages, was 100). - Added:
tools/build-llms-txt.py+tools/build-llms-full.py(regenerate AI files on demand). - Added:
tools/indexnow-submit.py(push changed URLs to Bing IndexNow API). - Updated:
sitemap.xmlregenerated via build-sitemap.py — 101 indexable URLs, normalised lastmod ISO 8601, proper priority/changefreq by page type; 11 noindex pages correctly excluded. - Updated:
standarization/SEOOPTIMIZATIONSTANDARD.md— major new "AI Search Optimisation" section. - Version:
js/rz-version.jsbumped 1.2.3 → 1.3.0 (MINOR — adds discoverability tier).
- Fix: dark-mode regression on
opex-calculator.html— staffing-model cards (.model-cardfor In-House / Hybrid Mix / 100% Outsource) had hardcodedbackground: white(line 592) with no dark override. Unselected cards rendered as bright white blocks against the dark page. Added 8[data-theme="dark"] .model-card*rules covering base, hover, active, name, desc, icon states. Audited other calc pages — only opex uses the.model-cardpattern.
- Fix: dark-mode regression on
opex-calculator.html+capex-calculator.html— the.brief-cardhero intro block (the "OPEX is what actually kills the margin..." paragraph + stats row) was rendered with a transparent gradientrgba(16,185,129,0.04)over a dark page, making the entire intro card invisible on dark mode. The Plan v13 dark-mode agent missed the.brief-class family because tco uses prefixed.tco-brief-while opex/capex use unprefixed.brief-*. Added 9 dark-mode rules per page covering.brief-card,.brief-lead,.brief-body,.brief-stats,.brief-stat,.brief-stat-icon,.brief-disclaimer,.brief-hero-img. The card now has a visible accent-coloured gradient + border in dark mode.
- Fix: gridline pattern (linear-gradient 1px @ 50×50 px) was still present on
datacenter-solutions.html— same noise that was killed onindex.htmlin v1.1.1 had a sibling instance on the second-most-prominent landing page. Both[data-theme="dark"] .page-background(line 141) and base.page-background(line 256) now have only the soft radial washes, no grid. - Cross-page audit confirms 5 major landing pages are gridline-free:
index.html,datacenter-solutions.html,articles.html,dc-market-tracker.html,future-forward.html.
Plan v13 — Calc dark-mode audit
- Fixed:
opex-calculator.html— "Detailed Cost Breakdown" card (.breakdown-table) and "Category Comparison" chart card (.chart-card) showed WHITE backgrounds in dark mode. Added 35+[data-theme="dark"]rules covering.breakdown-table th/td/hover,.chart-card,.results-card,.results-panel,.input-section,.breakdown-card,.kpi-card,.narrative-card,.calc-disclaimer, and mode-bar elements. - Fixed:
capex-calculator.html— added 28+ dark-mode rules for.results-card,.chart-card,.breakdown-card,.breakdown-table(th/td/hover),.input-field,.calc-disclaimer,.kpi-card,.results-panel,.narrative-card. - Fixed:
roi-calculator.html— added 28+ dark-mode rules for.results-card,.chart-card,.input-field,.roi-mode-bar,.roi-btn-reset,.cashflow-table,.breakdown-table,.calc-disclaimer,.kpi-card,.pro-panel,.narrative-card. - Fixed:
pue-calculator.html— added 28+ dark-mode rules for.results-card,.chart-card,.input-field,.pue-mode-bar,.breakdown-table,.calc-disclaimer,.kpi-card,.pro-panel,.narrative-card. - Added:
carbon-footprint.html— had ZERO dark-mode rules. Added complete[data-theme="dark"]block (65+ rules) covering CSS variable overrides, body, navbar, input panel, results, charts, tab-bar, mode-bar, breakdown table, disclaimer, cookie banner. Added theme-init inline script andtoggleCalcTheme()JS function. Added theme toggle button to navbar. - Added:
cx-calculator.html— had ZERO dark-mode rules (was dark-only, no toggle). Added 45+[data-theme="dark"]reinforcement rules + theme-init script + nav toggle button +toggleCalcTheme()function, making it consistent with other calc pages. - Standard:
standarization/UIFEATURESSTANDARD.md— appended Plan v13 dark-mode coverage mandate with pre-merge checklist. - Version:
js/rz-version.jsbumped1.1.0→1.2.0.
- Fix: hero gridline pattern was still visible after Plan v12 ship — agent had patched only
.hero-background::beforebut the base.hero-backgroundrule (and dark-mode override) carried the actual grid via crossed linear-gradients @ 60×60 px. Now both light + dark hero backgrounds are fully transparent; only the::beforesoft radial wash remains.
Plan v12 shipped, commits 22548ba + c1667a4
- Landing: removed rotated side tabs, replaced "↓ SCROLL TO EXPLORE" with Pixel Rise soft animation, added floating 5-icon share column (LinkedIn/X/WhatsApp/Instagram/Facebook), Get Started + Contact Us CTA pair in hero, navbar Contact link scroll-aware (hidden at top, fades in past hero), navbar transparent → frosted-glass on scroll.
- Visual: removed dot-grid pattern from hero (clean ambient gradient now), pastel mint user pill replacing default purple, calm pastel bento card palette (mint/lavender/peach/pink/cream), GitHub label/URL removed from Contact and footer (kept in schema.org metadata).
- Video: new Remotion intro composition
ResistanceZeroIntro(30 s, 1920×1080), rendered toassets/resistancezero-intro.mp4. Plays in inline modal triggered by Get Started. - Site-wide: introduced
js/rz-version.jsas single-source-of-truth for version,RZ.injectVersionStamp()injects "Latest version: vX.Y.Z" stamp at every page footer. - Tooling: new
tools/insert-version-script.py+tools/audit-version-stamp.py. Newstandarization/VERSIONING_STANDARD.md.
semver baseline
First semver-tagged release. This entry consolidates prior shipped work and establishes the versioning regime. From this point forward, every meaningful change MUST bump
js/rz-version.jsand append a CHANGELOG entry perstandarization/VERSIONING_STANDARD.md.Major shipped milestones (pre-baseline, abridged):
- 18 calculator pages (PUE, CAPEX, OPEX, ROI, TCO, CX, Carbon Footprint, …)
- 22+ articles (Future Forward series, Geopolitics series, Article 1–26)
- DC market tracker + 11 city detail pages
- PLN Java-Bali grid monitor (5 pages, OSM-backed dataset)
- Datahall AI BMS simulation + DC conventional sibling
- Engineering audits, security/SEO audit, navbar canonicalisation work
- rz-engine.js (calc engine + auth + format + PDF), auth.js (auth widget)
## [2026-04-29] — PLN regional monitors split off landing page; shared
js/rz-map.jsengineAdded
pln-java-grid.html— new dedicated detail page for the PLN Java-Bali (Jamali) transmission system. Geographic Map view (Leaflet/CARTO dark, Java + Bali fitBounds) and Single-Line Diagram view (inline SVG, IEC 60617 symbols, ~100 nodes target with "Show all 150 kV" toggle for the long tail). Province tabs (Jakarta+Banten / Jabar / Jateng+DIY / Jatim) with deep-link support (#prov=jabar). Substation slide-in side panel on click.js/rz-map.js— new shared Leaflet wrapper engine. Public APIwindow.RZMap.init(containerId, opts)returning{ map, addMarker, addLine, setMarkerVisible, setLineVisible, fitBounds, setView, refresh, destroy }. Stations ascircleMarker(color by voltage 500/275/150, radius√(MVA)*0.35). Plants asdivIconwith FontAwesome glyph per fuel type. Polylines per voltage tier withrzm-line-{500|275|150}className for CSS dash-flow. Optional layer control on voltage/fuel toggles.prefers-reduced-motionguard. Resilient: no-ops if Leaflet isn't loaded.js/pln-java-grid-data.js— data module forwindow.PLNJAVAGRIDexposing{ version, nodes[], edges[], national }. Topology source: PLN P2B 2016 single-line diagram. Coordinate confidence flag per node (highfrom Wikipedia infobox / OSM Nominatim,lowfrom province-centroid fallback — none invented).
Changed
datacenter-solutions.html#pln-monitor section reverted to a 6-card grid (.ds-strat-card). Java-Bali card is active and links topln-java-grid.html. Sumatera, Kalimantan, Sulawesi, Maluku-Papua, Nusa Tenggara cards render as dimmedis-soonplaceholders (not,pointer-events:none, "Coming soon" pill instead of CTA — not crawlable as dead links).dc-market-tracker.htmlrefactored to consumeRZMap.init()instead of its inlineinitLeafletMap()IIFE. Visual output identical.standarization/UIFEATURESSTANDARD.md: replaced the earlier "SLD Inline-SVG Animation Pattern" section with the broader "Card → detail-page hub + sharedjs/rz-map.jsengine" pattern.Removed
- All
.pln-*CSS rules fromdatacenter-solutions.html(~280 lines of SLD-only styling). Verified bygrep -rln 'pln-grid-card\|pln-mini-stat\|pln-list-title' /home/baguspermana7/rz-work/returning only the post-revert file itself.
Rationale
- User feedback: SLD did not belong on the landing page; the hand-drawn SVG was inaccurate; the existing Leaflet/CARTO map from
dc-market-tracker.htmlwas the correct base; SLD detail target was "very detailed" (~100 nodes, not the prior ~25).
2026-05-01-v8 — Inference widening + audit dashboard
inferedgesby_proximitywidened: radius 30 → 50 km, max 1 → 2 nearest neighbours per station. Builds rings instead of chains in dense regions; bridges sparse outliers without sacrificing tier-safety. Edges grew 495 → 698 (+203, mostly 150 kV: 410 → 608).- NEW
tools/audit-dataset.py— quality dashboard. Runs 8 structural + semantic checks: - required fields, duplicate IDs, geographic outliers (Java-Bali bbox)
- orphan stations (transmission tier ≥70 kV — distribution 20 kV expected isolated)
- confidence distribution per voltage tier (flags >50% low)
- province coverage (≥10 nodes per province)
- Bali isolation (must have ≥1 edge crossing the strait)
- cross-tier jumps (500↔20 without 150 kV intermediate)
- Output as human-readable report or
--json.--strictexits 1 on CRITICAL findings (CI-gate ready). - Current state: 0 CRITICAL, 38 HIGH (32 remote orphans, 1 statistical confidence skew, 5 cross-tier jumps from OSM lazy line tagging — all candidates for future YAML-overlay corrections).
2026-04-30-v7 — datahallAI auth gate hotfix + Java-Bali submarine fix + second-brain refresh
- Fixed the
datahallAI.html"Root Access Required" modal that blocked logged-in PRO/root users. Root cause: race condition — gate IIFE ran beforewindow.rzAuthwas defined byauth.js. Patched the gate to fall back to a directlocalStorage.rzpremium_sessionread with the same email-allowlist (admin@,bagus@), so the page works whether or not auth.js has loaded yet. Also added astorageevent listener for cross-tab logout sync. - Fixed Java-Bali submarine topology in
tools/pln-java-grid-overlay.yaml: provoverride: balionCable Head Gilimanuk(osmway339796954) andGI Gilimanuk(osmway_192989828) — both were OSM-taggedjatimdespite being on the Bali side of the strait.- Replaced the wrong
paiton → banyuwangi @ 275 kVcurated edge with the actual physical reality: 4×150 kV submarine cables (~340 MW total, commissioned 1989-1996). The 275 kV submarine is planned but not commissioned. - Added curated Bali internal 150 kV ring (Gilimanuk → Negara → Antosari → Pemecutan → Pesanggaran → Pecatu, plus Sanur → Gianyar → Amlapura → Kubu → Celukan Bawang → back to Gilimanuk). 14 new edges fully connect the 40 Bali nodes (up from 38 — two were correctly retagged from jatim to bali).
- Updated
Apps/second brain/index.htmlknowledge graph: added 5 new nodes (pjg,pjg-jkb,pjg-jb,pjg-jt,pjg-jm) and 11 edges connecting them to existing reports / DC Solutions / DC Markets hubs. Second-brain visualization now reflects the full Java-Bali grid family. - Edge total stable at 495 (52×500 / 0×275 / 418×150 / 25×70). 275 kV edge correctly dropped to reflect physical reality of the submarine link.
2026-04-30-v5 — Full province coverage + datahallAI cleanup + scheduled OSM refresh
- Added
pln-java-grid-jateng.html(Jawa Tengah + DIY) andpln-java-grid-jatim.html(Jawa Timur). Pages mirror the v4-fixed Jakarta+Banten / Jabar template: default labels OFF, tier-graded thin lines, animation only ≥150 kV, hover tooltips, 5-tier voltage toggles. Java-Bali sub-page family is now 4/4 complete. - Added
js/pln-java-grid-data-jateng.jsandjs/pln-java-grid-data-jatim.js— curated 20 kV DC + industrial overlays for each province. - Promoted Jawa Tengah + DIY and Jawa Timur cards on the overview page from
is-soonplaceholders to active links. All 4 province cards onpln-java-grid.htmlnow click through to working sub-pages. - Removed the
with 10 academic-style references (NVIDIA, Uptime, Equinix, ASHRAE, OCP, Schneider, SemiAnalysis, IEA, Berkeley Lab, Lawrence Berkeley) fromdatahallAI.html. The page is a DC simulation tool, not a research article — citations were a category mismatch.datahall.html(DC conventional sibling) was already clean. - Sitemap: 2 new entries for the province pages, priority 0.85, monthly changefreq.
- Scheduled quarterly OSM dataset refresh routine —
python3 tools/build-osm-dataset.py --forceruns on the 1st of each quarter; opens a PR if the dataset diff is non-trivial.
2026-04-30-v4.2 — Topology inference + plant evacuation + visual confidence
- inferedgesby_proximity in
tools/build-osm-dataset.pyconnects any 500/275/150/70 kV station not already in an OSM or curated edge to its nearest same-voltage neighbour within 30 km (20 km for 70 kV). Source:inferred-nn. - inferplantevacuation connects each unattached plant to its nearest 500/275/150 kV substation within 5 km. Source:
inferred-evacuation. Solves "plants float as isolated dots" issue. - Visual confidence: inferred edges render with
opacity:0.35+ tighter dash + no animation (CSS[data-source^="inferred"]rule on all 3 pages). Curated/OSM edges remain bright with full laser-flow. Users can see at a glance which edges are factual vs. heuristic. - Edge totals across iterations: 34 (v1) → 80 (v4.0 curated) → 363 (v4.1 inference) → 488 (v4.2 with plant evacuation + 70 kV).
- 500 kV 52, 275 kV 1, 150 kV 410, 70 kV 25.
- Curated edges added to
tools/pln-java-grid-overlay.yamledges:block: 28 backbone 500 kV (Suralaya → Cilegon → Balaraja → Gandul → Bekasi → Cibatu → Cirata → Pemalang → Ungaran → Tanjung Jati / Pedan → Cilacap / Kediri → Krian → Gresik / Ngimbang → Grati → Paiton plus radials), 1×275 kV Java-Bali submarine, 12 key 150 kV corridors.
2026-04-30-v4 — SLD readability fix (labels off, tier-graded thin lines, curated backbone edges)
- Labels default OFF on the SLD across all 3 pln-java-grid pages. With 744 nodes, drawing every name produced massive overlap. Names now appear only via hover tooltip. Labels toggle is preserved for users who want them.
- Tier-graded stroke-widths: 500 kV
1.6 px, 275 kV1.4 px, 150 kV1.0 px, 70 kV0.7 px, 20 kV0.6 px. Visual hierarchy now matches electrical hierarchy. - Laser-flow animation locked to ≥150 kV only. 70 kV and 20 kV lines are static thin dashes (no
animationproperty). Confirmed via CSS rule audit. - OSM line-endpoint matching threshold relaxed in
tools/build-osm-dataset.pyfrom0.5 kmto1.5 km(bbox prefilter0.01°→0.03°). - Curated edges block added to
tools/pln-java-grid-overlay.yaml— 28×500 kV backbone (Suralaya → Cilegon → Balaraja → Gandul → Bekasi → Cibatu → Cirata → … → Paiton plus radials + 275 kV Java-Bali submarine + key 150 kV corridors). Merged into the JS data file by the crawler with dedup against OSM. Edge total: 51 → 80 (28×500 / 1×275 / 47×150 / 4×70). - Crawler enhancement:
loadoverlayedges(nodes)readsedges:block from YAML, fuzzy-matchesfrom/toslugs against node names. Logs unresolved-endpoint warnings. - First-paint flicker prevented: SLD root group renders with
class="*-svg-root no-labels"baked into the HTML (no JS race). - Why: user feedback after v3 deployment — "tulisan nama gardu sudah saya bilang jangan disini, tapi di tooltip" + "garis koneknnya kurang lengkap dan perlu yang tipis" + "arah flow laser itu hanya >=150kv saja" + "enhance banyak collision".
2026-04-29-v3 — Data accuracy expansion (OSM crawl + tooltip system + multi-tier toggles)
- Added
tools/build-osm-dataset.py— Python OSM Overpass crawler for Java+Bali. Queriespower=substationandpower=plant/generatorfeatures, parses voltage tags, writesjs/pln-java-grid-data.jswith provenance fields per node (source,osm_id,wikidata,confidence). - Added
tools/pln-java-grid-overlay.yaml— hand-curated overlay (~60 entries) carryingmva,year,served_areas,notesfor known substations and plants. Merged into the JS data file at build time. - Added
js/pln-tooltip.js(471 LOC) — shared rich-tooltip module for SVG nodes + Leaflet markers. Lifecycle: shared singleton DOM, debounced show/hide, auto-position with viewport flipping, keyboard accessible (focus + Esc), mobile bottom-sheet variant. - Modified
js/rz-map.js(303 → 317 LOC) — now accepts per-markertooltipDataopt; auto-wiresPLNTooltip.attachif module is loaded. Backward-compatible (existing dc-market-tracker.html consumer unaffected). - Modified
pln-java-grid.html,pln-java-grid-jakarta-banten.html,pln-java-grid-jabar.html— added 5-tier voltage layer toggles (500/275/150 default ON; 70/20 default OFF on overview, 20 default ON on province pages). Per-fuel plant toggles. Display master toggles (Labels / Capacity / kV badges). Wired tooltips on every node + edge midpoint. SLD viewBox bumped to 1800×900 (overview) and 1400×900 (province) to absorb the larger dataset. Collision-nudge increased from 6 to 10 iterations with ±20 px search radius. - Schema additions per node:
source,confidence(high/medium/low),osmid,osmtype,wikidata,servedareas[],notes,secondaryvoltages[],last_verified. Visible in tooltip header (kV + confidence badges) and footer (OSM/Wikidata/Map links). - Dataset growth: from 118 nodes hand-curated → 744 nodes OSM-sourced (563 stations + 181 plants), 6.3× expansion. Voltage breakdown: 33×500 kV / 1×275 kV / 442×150 kV / 55×70 kV / 213×20 kV. Province breakdown: jakarta-banten 213, jabar 196, jatim 185, jateng 112, bali 38. Confidence: 503 high / 224 medium / 17 low. User's specific concern resolved:
GIS Summareconnow in dataset (osmway966209499, 150 kV, jakarta-banten, confidence:high) — alongside GIS Bekasi II, GISTET Tambun II, GI Tambun, GI Cikarang, GI Cikarang Lippo, KCIC Karawang, etc. - Why: user feedback on accuracy ("very accurate, very precise") and request that all voltage tiers be selectable. The user's specific complaint about GI Bekasi vs GI Summarecon is addressed via the
served_areasannotation (Summarecon Bekasi, Harapan Indah, Logos Bekasi listed as served areas of GI Cibitung 150/20 kV). - Cards-on-landing → detail-page-on-click model matches the existing
.ds-strat-cardpattern used elsewhere in the section (TCO, ROI, DMT cards).
## [Unreleased]
Planned
- Extract
calc-auth.jsshared engine (Phase 1 of calculator consolidation roadmap, seestandarization/CALCENGINEPLAN.md). - Phase S2.5 — expand
RZEngine.models.{opex,capex,tco}API to support utilization-aware power, climate/cooling adjustments, multi-factor CAPEX build-up, and multi-stream TCO. Required before tco-/capex-/opex-calculator math can migrate to engine. - Hero images for articles 1–19 (currently missing
assets/article-N-hero.webp). - References sections for articles 2, 4, 5, 6, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20 — older articles still missing canonical
references-sectionmarkup; some have legacyand could be migrated to canonical pattern in a separate sweep (articles 21, 22 done 2026-04-30). - Tighten Independence Disclaimer placement in articles 19–27 (currently inserted before
; older convention is before References — cosmetic only). - Reconcile
auth.jsvsrz-engine.jsVALID_USERSrole strings (auth.js: demo='pro', bagus/admin='root'; rz-engine.js: demo='demo', bagus/admin='admin'). Email-based gate makes drift safe but harmonization remains hygiene work.
## [2026-04-30] — Backlog sweep + root-only gates + login button bug fixes
Added
article-16.html— bottom-of-articleblock (Previous →article-15.html, Next →article-17.html), inline-SVG arrow style matching article-15.article-22.htmlReferences section — 15 cited sources in canonicalreferences-sectionmarkup (cyan#0891b2accent matched to article palette). NVIDIA Spectrum-X / Quantum-X Photonics, NCCL, Lumentum, Coherent, Open Compute Project, Optica/OFC, IEEE Spectrum, DCD, SemiAnalysis, Lightmatter, Ayar Labs, Wikipedia (silicon photonics).article-21.htmlReferences section — 15 cited sources, emerald#059669accent. NRC, DOE Office of Nuclear Energy, IAEA ARIS, FERC (Dec 2025 co-location ruling), World Nuclear Association, NEI, IEEE Spectrum, all 5 SMR vendors profiled in §5 (NuScale, Oklo, X-Energy, TerraPower, Kairos Power), Constellation Energy (Microsoft / TMI deal), OPG Darlington BWRX-300, Wikipedia.- Articles 19, 20, 21, 22, 23, 24, 25, 26, 27 — Tier-1 legal compliance components per
standarization/LEGALCOMPLIANCESTANDARD.md§3 + §7: Independence Disclaimer (before) + Cookie Consent Banner with JS (before
- Scroll-reveal helper: