Skip to content
This repository was archived by the owner on Oct 10, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,18 @@ <h3>PatchHive</h3><p>Tools for analyzing, designing, documenting, and sharing mo
</article>
<article class="product-card">
<div class="product-index">04</div>
<div class="product-meta">Tactical cyberpunk RPG</div>
<h3>HexWire</h3><p>A tactical cyberpunk hex-grid RPG for iPhone and iPad built around a pressure loop where every action trades power for exposure: Signal → Power → Trace → Escalation → Lay Low → Tempo Tradeoff.</p>
<a href="products/hexwire.html">View product <span aria-hidden="true">↗</span></a>
</article>
<article class="product-card">
<div class="product-index">05</div>
<div class="product-meta">Satirical survivor roguelite</div>
<h3>Surveillance Survivor</h3><p>An iPhone-first satirical survivor roguelite about dodging privatized cameras, weaponizing suspicion, and extracting through temporary Blind Spots across a ten-city American campaign.</p>
<a href="products/surveillance-survivor.html">View product <span aria-hidden="true">↗</span></a>
</article>
<article class="product-card">
<div class="product-index">05</div>
<div class="product-index">06</div>
<div class="product-meta">Interactive systems</div>
<h3>Experiments</h3><p>Games, audio systems, and creative tools that test the philosophy against different constraints.</p>
<a href="products/experiments.html">View product <span aria-hidden="true">↗</span></a>
Expand Down
58 changes: 58 additions & 0 deletions products/hexwire.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="HexWire is a tactical cyberpunk hex-grid RPG for iPhone and iPad built around a pressure-driven combat loop.">
<meta name="theme-color" content="#F4F0E8">
<title>HexWire — Zero State</title>
<link rel="icon" href="../assets/zero-state-mark.svg" type="image/svg+xml">
<link rel="stylesheet" href="../styles.css">
</head>
<body class="">
<a class="skip-link" href="#main">Skip to content</a>

<header class="site-header" data-header>
<div class="shell nav-wrap">
<a class="brand" href="../index.html" aria-label="Zero State home">
<img src="../assets/zero-state-mark.svg" alt="" width="34" height="34">
<span>ZERØ STATE</span>
</a>
<button class="menu-button" type="button" aria-expanded="false" aria-controls="site-nav" data-menu-button>
<span class="sr-only">Toggle navigation</span><span></span><span></span>
</button>
<nav id="site-nav" class="site-nav" aria-label="Primary" data-nav>
<a href="../work.html">Work</a>
<a href="../philosophy.html">Philosophy</a>
<a href="../about.html">About</a>
<a class="nav-cta" href="../contact.html">Begin here</a>
</nav>
</div>
</header>

<main id="main"><section class="page-hero shell product-hero">
<p class="eyebrow">Tactical cyberpunk hex-grid RPG</p><h1>HexWire</h1><p class="hero-lede">Every action trades power for exposure.</p>
<p class="status">Stabilized vertical slice · CI-verified · device and App Store release gates remain</p></section>
<section class="section shell product-detail">
<div class="split"><h2>What it is</h2><div><p>HexWire is a tactical cyberpunk hex-grid RPG for iPhone and iPad, built with SwiftUI and SpriteKit.</p><p>Its pressure-driven combat loop is Signal → Power → Trace → Escalation → Lay Low → Tempo Tradeoff. Four runners—street samurai, mage, decker, and face—operate across six authored multi-room missions and interstitial scene-missions.</p></div></div>
</section>
<section class="section section-accent"><div class="shell product-detail">
<div class="split"><h2>Systems and architecture</h2><div><p>The campaign includes a persistent economy with nuyen, black-market access, and cyberware; faction heat that persists between missions; seeded replay rerolls; an endless gauntlet; and New Game+ scaling.</p><p>GameState is the single gameplay authority. The UI and SpriteKit layers emit intents and render from state rather than mutating authoritative state directly.</p><p>The current repository posture is a stabilized vertical slice with deterministic tests and CI-verified iPhone and iPad builds. Owner-device touch-layer checks, disabling the development mission unlock, and App Store signing and metadata remain release blockers.</p><a class="text-link" href="https://github.com/scrimshawlife-ctrl/Hexwire">Read the canonical repository description <span aria-hidden="true">↗</span></a></div></div>
</div></section></main>

<footer class="site-footer">
<div class="shell footer-grid">
<a class="brand footer-brand" href="../index.html">
<img src="../assets/zero-state-mark-inverse.svg" alt="" width="32" height="32">
<span>ZERØ STATE</span>
</a>
<p>Software for a world that keeps changing.</p>
<div class="footer-links">
<a href="../privacy.html">Privacy</a>
<a href="../terms.html">Terms</a>
<span>© <span data-year></span> Zero State</span>
</div>
</div>
</footer>
<script src="../script.js"></script>

</body></html>
9 changes: 8 additions & 1 deletion scripts/validate-site.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ const root = path.resolve(__dirname, '..');
const requiredPages = [
'index.html', 'work.html', 'philosophy.html', 'about.html', 'contact.html',
'privacy.html', 'terms.html', 'products/abraxas.html', 'products/waykin.html',
'products/patchhive.html', 'products/surveillance-survivor.html', 'products/experiments.html'
'products/patchhive.html', 'products/hexwire.html', 'products/surveillance-survivor.html',
'products/experiments.html'
];
const failures = [];
const fail = (file, message) => failures.push(`${file}: ${message}`);
Expand Down Expand Up @@ -38,6 +39,7 @@ for (const file of htmlFiles) {
const index = fs.readFileSync(path.join(root, 'index.html'), 'utf8');
const work = fs.readFileSync(path.join(root, 'work.html'), 'utf8');
const surveillance = fs.readFileSync(path.join(root, 'products/surveillance-survivor.html'), 'utf8');
const hexwire = fs.readFileSync(path.join(root, 'products/hexwire.html'), 'utf8');
const css = fs.readFileSync(path.join(root, 'styles.css'), 'utf8');

if ((index.match(/identity-motion/g) || []).length < 1) fail('index.html', 'identity motion element is missing');
Expand All @@ -56,6 +58,11 @@ if ((index.match(/class=["']zero-ring-arc["']/g) || []).length !== 2) fail('inde
if (!/stroke-dasharray:\s*150\s+150/.test(css)) fail('styles.css', 'highway dash and gap are not equal');
if (!/@media \(prefers-reduced-motion: reduce\)[\s\S]*?\.highway-line\s*\{\s*display:\s*none/.test(css)) fail('styles.css', 'reduced-motion does not hide the highway');
if (!/\.highway-line\.is-ready\s*\{\s*animation:\s*highway\s+4\.8s\s+linear\s+1\s+both/.test(css)) fail('styles.css', 'highway animation must be linear and one-pass');
if (!/HexWire/.test(index)) fail('index.html', 'HexWire is missing from selected work');
if (!/Stabilized vertical slice · CI-verified · device and App Store release gates remain/.test(work)) fail('work.html', 'HexWire readiness posture is missing or overstated');
if (!/tactical cyberpunk hex-grid RPG/.test(hexwire)) fail('products/hexwire.html', 'canonical HexWire README description is missing');
if (!/Signal → Power → Trace → Escalation → Lay Low → Tempo Tradeoff/.test(hexwire)) fail('products/hexwire.html', 'canonical HexWire pressure loop is missing');
if (!/scrimshawlife-ctrl\/Hexwire/.test(hexwire)) fail('products/hexwire.html', 'canonical HexWire repository link is missing');
if (!/Surveillance Survivor/.test(index)) fail('index.html', 'Surveillance Survivor is missing from selected work');
if (!/Active pre-alpha · simulator-ready vertical slice · not release-ready/.test(work)) fail('work.html', 'Surveillance Survivor readiness posture is missing or overstated');
if (!/iPhone-first satirical survivor roguelite/.test(surveillance)) fail('products/surveillance-survivor.html', 'canonical README description is missing');
Expand Down
4 changes: 4 additions & 0 deletions work.html
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@
<div><p>PatchHive applies structured analysis and thoughtful interface design to the creative complexity of modular synthesis.</p><p class="status">Active development</p><a class="text-link" href="products/patchhive.html">Open product page</a></div>
</article>
<article class="work-row">
<div><span class="product-meta">Tactical cyberpunk RPG</span><h2>HexWire</h2></div>
<div><p>HexWire is a tactical cyberpunk hex-grid RPG for iPhone and iPad built in SwiftUI and SpriteKit. Its pressure-driven combat loop makes every action trade power for exposure: Signal → Power → Trace → Escalation → Lay Low → Tempo Tradeoff.</p><p>Four runners—street samurai, mage, decker, and face—move through six authored multi-room missions and interstitial scenes, supported by a persistent economy, faction heat, seeded replay rerolls, an endless gauntlet, and New Game+ scaling. GameState remains the single gameplay authority while UI and SpriteKit layers emit intents and render from state.</p><p class="status">Stabilized vertical slice · CI-verified · device and App Store release gates remain</p><a class="text-link" href="products/hexwire.html">Open product page</a></div>
</article>
<article class="work-row">
<div><span class="product-meta">Satirical survivor roguelite</span><h2>Surveillance Survivor</h2></div>
<div><p>Surveillance Survivor is an iPhone-first satirical survivor roguelite about dodging privatized cameras, weaponizing suspicion, and extracting through temporary Blind Spots across a ten-city American campaign.</p><p>Its deterministic Swift core is authoritative while SpriteKit projects the gameplay state through a SwiftUI application shell. The current vertical slice includes escalating Suspicion, destructible LPR poles, upgrades, district authorities, campaign unlocks, and Blind Spot extraction.</p><p class="status">Active pre-alpha · simulator-ready vertical slice · not release-ready</p><a class="text-link" href="products/surveillance-survivor.html">Open product page</a></div>
</article>
Expand Down
Loading