diff --git a/index.html b/index.html index 9d337c1..e22bb60 100644 --- a/index.html +++ b/index.html @@ -85,12 +85,18 @@

PatchHive

Tools for analyzing, designing, documenting, and sharing mo

04
+
Tactical cyberpunk RPG
+

HexWire

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.

+View product +
+
+
05
Satirical survivor roguelite

Surveillance Survivor

An iPhone-first satirical survivor roguelite about dodging privatized cameras, weaponizing suspicion, and extracting through temporary Blind Spots across a ten-city American campaign.

View product
-
05
+
06
Interactive systems

Experiments

Games, audio systems, and creative tools that test the philosophy against different constraints.

View product diff --git a/products/hexwire.html b/products/hexwire.html new file mode 100644 index 0000000..64a3116 --- /dev/null +++ b/products/hexwire.html @@ -0,0 +1,58 @@ + + + + + + +HexWire — Zero State + + + + + + + + +
+

Tactical cyberpunk hex-grid RPG

HexWire

Every action trades power for exposure.

+

Stabilized vertical slice · CI-verified · device and App Store release gates remain

+
+

What it is

HexWire is a tactical cyberpunk hex-grid RPG for iPhone and iPad, built with SwiftUI and SpriteKit.

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.

+
+
+

Systems and architecture

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.

GameState is the single gameplay authority. The UI and SpriteKit layers emit intents and render from state rather than mutating authoritative state directly.

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.

Read the canonical repository description
+
+ + + + + \ No newline at end of file diff --git a/scripts/validate-site.js b/scripts/validate-site.js index 32493ab..a4df13c 100644 --- a/scripts/validate-site.js +++ b/scripts/validate-site.js @@ -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}`); @@ -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'); @@ -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'); diff --git a/work.html b/work.html index 8e6c72c..c98f84a 100644 --- a/work.html +++ b/work.html @@ -43,6 +43,10 @@

PatchHive applies structured analysis and thoughtful interface design to the creative complexity of modular synthesis.

Active development

Open product page
+
Tactical cyberpunk RPG

HexWire

+

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.

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.

Stabilized vertical slice · CI-verified · device and App Store release gates remain

Open product page
+
+
Satirical survivor roguelite

Surveillance Survivor

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.

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.

Active pre-alpha · simulator-ready vertical slice · not release-ready

Open product page