Static, interactive artifacts embedded by the RaidGuild Portal.
Create a stable directory beneath public with an index.html file:
public/
artifact-slug/
index.html
artifact-social-v1.png
After a change is merged to main, Railway deploys it at:
https://<artifact-domain>/artifact-slug/
Published paths are durable. Do not rename or remove them. Use a versioned path when an existing article must retain the original artifact.
Every new artifact must include a cover image and static link-preview metadata so sharing its URL produces a useful unfurl. Include this work in the artifact's PR, alongside its editable source and published build.
Create a cover that matches the artifact's visual style and remains readable at
thumbnail size. Use image generation for illustrated cover art, or a deliberately
composed screenshot when that represents the artifact better. Aim for a wide
image around 1.91:1 (for example, 1200 × 630), leave crop-safe margins, and keep
the file reasonably small. Use PNG or JPEG. For generated artwork, preserve the
tool name and exact prompt in the study's art/ directory, and identify concept
art as such rather than describing it as a gameplay screenshot.
Save the image in the artifact's published directory. For build-based studies,
also keep it in the source public-assets directory so rebuilding preserves it.
Use a versioned filename such as artifact-social-v1.png; update the metadata
when replacing it with a new version.
Put the following tags in the initial HTML <head>, not in client-side
JavaScript. Replace the example slug, title, description, image name, dimensions,
and alt text with the artifact's actual values. Canonical, og:url, and image
URLs must be absolute production URLs, never localhost or filesystem paths.
<title>Artifact title</title>
<meta name="description" content="A short description of the experience.">
<link rel="canonical" href="https://portal-artifacts-production.up.railway.app/artifact-slug/">
<meta property="og:type" content="website">
<meta property="og:site_name" content="RaidGuild Artifacts">
<meta property="og:title" content="Artifact title">
<meta property="og:description" content="A short description of the experience.">
<meta property="og:url" content="https://portal-artifacts-production.up.railway.app/artifact-slug/">
<meta property="og:image" content="https://portal-artifacts-production.up.railway.app/artifact-slug/artifact-social-v1.png">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Describe the cover's subject and scene.">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Artifact title">
<meta name="twitter:description" content="A short description of the experience.">
<meta name="twitter:image" content="https://portal-artifacts-production.up.railway.app/artifact-slug/artifact-social-v1.png">
<meta name="twitter:image:alt" content="Describe the cover's subject and scene.">Before opening the PR, inspect the cover and verify that the built HTML contains these tags, the image is included in the published output, and its format and dimensions match the metadata. Commit both source and rebuilt output. After deployment, check that the public page and image URLs load without authentication and inspect a shared-link preview; existing previews may remain cached.
See Puddle's source HTML and image-generation record for a complete example.
Artifacts run on a separate origin from Portal and must be embedded in a sandboxed iframe. They must not contain Portal credentials, depend on Portal cookies, or call private Portal APIs.
The service applies a restrictive Content Security Policy. Inline JavaScript
and styles are permitted for self-contained workshop exports. The only external
script origin currently permitted is cdnjs.cloudflare.com; prefer checked-in
dependencies for durable published work. Same-origin WebAssembly compilation is
allowed (wasm-unsafe-eval) so checked-in engines such as Havok can start.
docker build -t portal-artifacts .
docker run --rm -p 8080:8080 -e PORT=8080 portal-artifactsOpen http://localhost:8080.
public/puddle-study/ is a six-level game at /puddle-study/. Guide a living
particle puddle down a floating tower, gather flesh, collect gold and gems,
cast tendrils, shed weight onto switches, and navigate low gaps and gripping or
slippery surfaces. The start screen offers level selection, local progress,
the Level Workshop with playable saved levels, and the Soft Signal music study.
The editor supports raised terraces, ramps, paintable surfaces, basins, and
solid cutters. Recent work keeps the growing blob fluid while reducing costly
collision searches and moving surface generation off the render thread.
Editable source, tests, build instructions, and bundled dependency licenses
are in studies/puddle-study/.
public/housefly-study/ contains a standalone Three.js housefly flight study at
/housefly-study/. Editable source, simulation tests, local fonts, bundled
dependency licenses, and rebuild instructions are in
studies/housefly-study/.
public/portal-motion/ contains the built portal animation. Editable source is in
studies/portal-motion/. To rebuild with Node 22.13 or newer:
cd studies/portal-motion
npm ci
npm run build:railway
cp -R dist-railway/. ../../public/portal-motion/Editable Three.js source and the Blender asset library are in
studies/sirocco-oasis/; the published build is in public/sirocco-oasis/.
See the study README for rebuild instructions. All runtime assets are served
from this origin under the existing Content Security Policy.
public/jelly-garden/ contains the published Three.js soft-body playground:
a bendable RaidGuild mark and three garden creatures with translucent surfaces,
weighted landings, orbitable camera, and an optional Keep them up challenge.
Editable source, physics and round tests, local fonts, and subpath rebuild
instructions are in studies/jelly-garden/.
public/field/ is the standalone FIELD demo. Editable Blender assets, scripts and regression checks are in studies/field/; its dist symlink points to the published source. See the study README for controls and local development.
public/lunar-republic/ contains the standalone Three.js lunar catapult game.
Editable Blender assets and campaign tests are in studies/lunar-republic/,
whose dist symlink points to the canonical public source. See its README for
local play, tests, and asset regeneration.
public/cosmic-carnival/ contains the production build of the pastel alien
lane shooter. Editable Three.js/TypeScript source, focused simulation tests,
the supplied GLB models, and build instructions are in
studies/cosmic-carnival/.
public/rg-tlm-game/ contains the pinned production build of the four-chapter
point-and-click adventure. The canonical editable source remains in
raid-guild/rg-tlm-game; build
provenance and the reproducible subpath build command are recorded in
studies/rg-tlm-game/README.md.
public/brewers-rendezvous/ contains One Taster in Salida, an interactive
miniature of Riverside Park with animal hosts, six tasting booths, local-history
conversations and user-started looping music. Editable Blender assets, source
notes and interaction tests are in studies/brewers-rendezvous/; its dist
symlink points to the canonical public source. See the study README for controls
and local preview instructions. No build step or external runtime services are
required.
public/ragdoll-lab/ is the buildless Three.js ragdoll study, including the FIELD
Goatman rig, a long-slide bowling scene, and the original drop/stairs experiments.
Tests, editable Blender source, and regeneration instructions live in
studies/ragdoll-lab/; its dist symlink points to the canonical public source.
public/powder-study/ is a standalone Three.js falling-sand study with
reactive materials and branching plant growth. The studies/powder-study/dist
symlink points to the canonical published source; its README covers local
preview, controls, source provenance, and simulation tests.
-
housefly-study/— A procedural housefly flies through a 3D volume over a scrollable page, with adjustable depth, turns, speed, cursor response, and draggable attraction spots. -
puddle-study/— Six floating garden levels, collectible gems and gold, tendrils, shedding and grip puzzles, local level editing and play, plus Soft Signal background music. -
powder-study/— Interactive particle world with paintable sand, water, fire, acid, seeds, and four experiment presets. -
jelly-garden/— A squishy RaidGuild mark and three jelly creatures with liquid-like ripples, weighted landings, draggable camera, physics controls, and an optional Keep them up challenge. -
ragdoll-lab/— Ragdoll bowling with a long slide, ten targets, draggable characters, adjustable grip, and a rigged Goatman/Mannequin comparison. -
raidguild-launch-film/— Prepared, 85-second RaidGuild website launch film player with native video controls, chapter navigation, and optional lyric captions. Its stable same-origin media path is./media/film.mp4; production routing through the existing S3-backed render-outputs proxy still needs deployment verification. The MP4 is intentionally not checked into this repository. -
brewers-rendezvous/— A personal, playable recap of the 2026 Colorado Brewers Rendezvous, with a miniature park, animal characters, tasting journal and riverside synth music. -
raidguild-radio/— Ambient desert-walker cockpit with a looping six-song playlist, crossfades, weather, and day/night controls. Opens at night; click Start listening to enable audio. All media is served locally. -
rg-tlm-game/— RaidGuild: The Last Mile, a four-chapter point-and-click adventure through a desert waystation, transit crossing, shared Workshop, and Cypherpunk Archive signal room. -
jev-maze/— Live Jev maze and semantic-navigation experiment, with visitor-owned keys and three algorithmic baselines. -
jev-memory-lab/— Offline JEV classification demo: all 85 recorded memory candidates stream through an 18-second batch visualizer, with accumulating classifications, abstentions, and ownership relationships. No live key or API calls. Seestudies/jev-memory-lab/README.md. -
cosmic-carnival/— Twelve-lane arcade shooter using the supplied Crescent, Prism, Ribbon, and Jester models, with deterministic waves and a psychedelic title reveal. -
raid-credits/— Public, unauthenticated rework of the 2020 Raid Credits audiovisual showcase, with a complete static Portal member roster and explicitly inactive historical Rainbow Warrior NFT context. -
lunar-republic/— Toon-shaded lunar revolution game with freight, allied cities, resource upgrades, enemy operations, and persistent district destruction. -
field/— CAD tutorial that descends into a procedural office maze, with spatial changes, wall music and fleeting seated shadows. -
sirocco-oasis/— Stylized interactive desert vista with reflective rippleable water, a traveling airship, wind-driven palms, dust, and optional ambient audio. -
portal-motion/— Interactive spark portal with palette mixing, size controls, and a blurred mountain destination that reveals on hover. -
desert-walker/— Interactive Three.js vignette featuring a textured dieselpunk survey walker in a procedural desert, with orbit controls and optional ambient motion. -
bd-thread-journeys/— RaidGuild BD thread journeys across phases. This is a concept demonstration; its middle-phase crossings are explicitly marked as synthetic in the artifact. -
veydrift-alliance-map/— Live, read-only tactical map for Veydrift alliance 29 (RaidGuild), with a clearly labeled fixture fallback. Its CSS/SVG planet visuals are placeholders; no Veydrift artwork is included. Other public alliances can be loaded with the in-map ID switcher or the shareable?alliance=<id>query parameter. -
veydrift-mission-explorer/— Live, read-only explorer for public Veydrift missions, including flight path, fleet, cargo, combat results, and contextual links to the alliance map. Deep links use/mission/<id>beneath this path. -
module-gallery-study/— Switchable editorial and restrained Three.js module gallery with responsive, keyboard-accessible detail views. -
web-presence-map/— Interactive RaidGuild constellation showing the public front door, community world, Portal capabilities, knowledge routes, and outward-facing specialist offerings.
The service exposes a narrow, read-only subset of the public Veydrift API below
/veydrift-api/. Only explicitly allowlisted GET and HEAD routes are
forwarded. Keep this allowlist limited to routes consumed by the artifact; do
not turn it into a general API proxy or forward browser credentials.
public/jev-maze/ is the separate, publishable navigation experiment at
/jev-maze/. It compares Jev with fixed, random, and keyword DFS, with maze
editing, symbol learning, and semantic room descriptions. Visitors bring their
own TypeSafe API keys, held only in tab memory. Live inference uses the narrow
POST /jev-api/systemone proxy; no server API key is deployed.
Editable source and local Node-server support remain in studies/jev-maze/.
Rebuild the artifact with cd studies/jev-maze && npm run build:artifact.
The existing Caddy/Railway deployment serves the built artifact after merge to
main. The local .env is Git-ignored and outside the Docker build's copied assets.
public/raid-survivor/ is the published build. Editable source, art provenance,
game and music tests, and build instructions are in studies/raid-survivor/.
The game works as a guest with local scores; Portal launch enables ranked runs.
services/leaderboards/ deploys independently beside the shared game Postgres. Cosmic Carnival and Raid Survivor remain playable without it; Portal signed launch enables ranked submissions. See setup, API, tests, and rollback. Set LEADERBOARD_UPSTREAM on this static service to proxy its narrowly scoped API.