Nick Bryant

Software.
Systems.
Worlds.

I build things from the first idea to the working product.
Explore the work ↘

Conceptual terrain study of an imagined generative world

01 / An engineering atlas

02Interactive work

Generative worlds

Games, authoring systems, and small experiments where procedural structure meets deliberate worldbuilding.

Conceptual landscape cross-section from desert mesas to alpine peaks
Concept study / Terrain, rules, inhabitation
The Lower Worlds project screenshot

01 / Field study

The Lower Worlds

Generative authoring · TypeScript / React / Three.js

An experimental generative-authoring system in TypeScript, React, and Three.js. Models and people define the world, schemas validate and version it, and deterministic rules run the game while player progress stays private.

Explore the architecture

The authoring stack separates intent, validated schema, versioned world definitions, and deterministic runtime state so generated content can remain inspectable.

System plate / 04

The Lower Worlds · architecture study

Illustrative assembly

An exploded isometric illustration of software architecture showing the intent, schema, world, and runtime layers of The Lower Worlds software architecture.

World. Versioned, reusable definitions preserve a coherent world across play.

Blind Magus project screenshot

03 / Field study

Blind Magus

Released action game · Independent

A released action game built around combining spells into new effects.

The Lower Worlds: Awakening project screenshot

06 / Field study

The Lower Worlds: Awakening

Creator and engineer · Playable prototype

A third-person dungeon adventure in Godot 4.7: prepare at Highbridge, explore the ruins below, and choose when to return to defend the garrison. Typed GDScript, physical puzzles, persistent progression, and rendered gameplay verification.

Chapter 02 / Applied intelligence

Agents &
systems

Local-first tools that make model work inspectable, bounded, and useful in the physical or commercial world.

Conceptual study of a speculative workshop machine
Conceptual study / Not actual hardware
AI Robot Workshop project screenshot

01 / Working system

AI Robot Workshop

Open source · Local-first agent workflow

Turns agent conversations into inspectable plans, firmware, parts records, bounded models, and bench observations. The documented hardware routes remain unbuilt.

Treasure Hunter project screenshot

02 / Working system

Treasure Hunter

Creator and engineer · Local agent system

A local, chat-operated marketplace agent that values every collected item, persists evidence and checkpoints, and explains its ranked results in a live dashboard.

Chapter 03 / Field notes

Writing from the work

Conceptual editorial study of embossed terrain and printing plates
Concept study / Ideas made durable
  1. Give Agents Lives, Not Just Jobs

    A1

    Give Agents Lives, Not Just Jobs

    Why I think ongoing pursuits, embodied experience, and a limited point of view can give agents something more interesting to say.

  2. A Small Model With a World Around It

    A2

    A Small Model With a World Around It

    What my local-model companion experiments taught me about structured output, useful conversation, and the architecture around a model.

  3. Human–Agent Interaction Is More Than Chat

    A3

    Human–Agent Interaction Is More Than Chat

    Presence, silence, interruption, and selective memory are part of the interface when an agent has a continuing life.

  4. Digital Twins Need More Than Your Chat History

    A4

    Digital Twins Need More Than Your Chat History

    A useful twin needs a history of changing views, explicit authority, and a distinction between representing someone and becoming its own agent.

  5. Marketing Is a World Agents Can Work In

    A5

    Marketing Is a World Agents Can Work In

    Lessons from SFV and SMBIN: content, audiences, campaigns, and feedback form an environment an agent can understand.

  6. Treasure Hunter

    01

    Treasure Hunter

    Building an agent that values every item and exposes its evidence, uncertainty, and resumable state.

  7. AI Robot Workshop

    02

    AI Robot Workshop

    From a plausible agent answer to persistent project files, explicit evidence, and a buildable path.

  8. Fractal Authoring

    03

    Fractal Authoring

    Building The Lower Worlds Online, and a world that can keep becoming more specific.

  9. Building procedural environments in Valenfeld

    04

    Building procedural environments in Valenfeld

    A practical look at shaping generated terrain into a world with authored intent.

  10. The Transformer Is the Transistor

    05

    The Transformer Is the Transistor

    A thesis on AI as a building block, and the verification and coordination infrastructure models need around them.

  11. The Lower Worlds: Awakening

    06

    The Lower Worlds: Awakening

    Building a home worth returning to: a playable Godot adventure, with in-engine screenshots and source.

Chapter 04 / About

Builder,
end to end.

Portrait of Nick Bryant

I’ve spent most of my career taking an idea and building the whole thing: the prototype, the product, and the team. Web, mobile, games, AR/VR, AI—I like learning what a hard problem needs and getting it working.

Right now I’m deep into agentic programming and generative worlds, trying to build things that weren’t practical a few years ago.

Denver / Boulder

Selected work

ARCOS / VN.AI

IP workflows · Next.js / Supabase / MongoDB / Redis / AWS

I led product engineering for IP management, permitted-use workflows, and content analysis. We connected roughly twenty model integrations and supported product pilots across the application and cloud stack.

Selected work

Procurement Sciences

B2B software · MERN / Python / FastAPI

I rebuilt an early Rails prototype as a MERN and Python/FastAPI product. I implemented the application, managed the engineering team, and hired the incoming CTO before the handoff.

Current · advisory

Investing systems

Investing / syndication · Co-founder, now advisory

I built investing and syndication software, AI-assisted underwriting workflows, investor reporting, and marketing automation for SMB Investor Network and Search Fund Ventures. My current role is passive advisory work.

2015–2020

Interesting Inventions

Consumer apps & games · Technical co-founder

Built and launched 5+ consumer applications through a holding-company portfolio, reaching nine-figure revenue scale.

Full career on the resume ↗
Building Procedural Environments
Building Procedural Environments project screenshot

Nick Bryant · October 21, 2026

Building Procedural Environments in Valenfeld

Valenfeld prototype campaign map showing generated terrain, coasts and regional labels
Valenfeld prototype capture · August 2026

A landscape can be technically generated and still feel like nothing belongs there. The terrain exists. Trees have positions. A building has a mesh. But the doorway is buried, the rocks repeat, and every clearing looks like the same collection of props.

Working on Valenfeld has pushed me toward a different question: what relationships make an environment feel like a place?

The interesting engineering has been at the boundaries between systems: where a biome supplies a vocabulary, a placement rule chooses a location, a structure meets the ground, and a collection of objects becomes a readable scene. Valenfeld is an evolving Godot project. This is a look at those mechanisms in its code, including the constraints and compromises they expose.

A biome should answer the same questions everywhere

One of the problems documented in the terrain system was fragmented biome data. Flora definitions, asset packs, recipes, and hardcoded rock mappings lived in different places. That makes every placement pass responsible for knowing what makes each biome special.

I want the opposite dependency. A placement algorithm should ask a profile for its canopy, undergrowth, rocks, and bank vegetation. The profile provides the differences; the algorithm stays general.

Valenfeld's biome work moves toward that shared vocabulary. It also distinguishes climate from local landform. A crag describes topography. Combine it with a forest climate and you may get a wooded mountain trail; combine it with an arid climate and you get a different kind of rocky place. The design derives that character from traits and ordered rules instead of requiring an authored entry for every possible pair.

That distinction matters when expanding the world. Adding another profile should give the existing systems more material to work with, rather than require another family of special cases.

Compose scenes from data

The same idea appears at the scale of a camp, a roadside encounter, or a room.

Valenfeld's PackComposer takes a pack: an ordered list of parts with placement instructions. A part can name an anchor, specify a count, vary its position or orientation, carry a tint, or reserve a footprint. The composer resolves those parts through a shared kit system. It does not need a bespoke function for every arrangement of tents, supplies, or furniture.

The important input is the shared footprint: a focus, named slots, orientations, and a radius. That gives the composition a frame of reference. “Place this near the entrance” is a more useful relationship than an unexplained coordinate.

The composer also returns the positions it actually used. Other systems can use that result to decide where a character or an item belongs. Rendering and gameplay can agree on the scene without the prop-placement code owning the game rules.

This is a small form of authoring language. The reusable code supplies the grammar; the data supplies the particular scene.

Placement needs rejection rules

Randomness is easy to add. Constraints are what make it useful.

The vignette layer in Valenfeld uses seeded, spaced placement and weighted choices informed by the surrounding world. That is a different job from uniformly scattering objects. A location can be unsuitable. Two scenes can be too close together. Repetition can make a world feel smaller even as the object count grows.

I think of the placement process as a proposal followed by a series of tests. Is this surface suitable? Is there enough space? Does this scene fit the region? Does it interfere with another use of the ground?

A rejected candidate is a useful result. It means the system has preserved a constraint instead of filling the map merely because it can. It also suggests what a debugging view should show: candidate locations, accepted placements, and the reasons the others were rejected.

This is one of the principles I am isolating in the Three.js environment demo. It uses simple original geometry so the placement rules are easy to inspect without a production asset library.

A building does not stand on its center point

The most concrete lesson is in GroundMount.

Sampling the terrain once at a building's center is insufficient. A wide structure can be grounded in the middle and float at one corner. Lifting it to the highest corner can produce an enormous foundation or make the whole structure look perched above the landscape.

The current mounting code samples the footprint and beds the structure into the low contact points. It also treats an entrance as a special constraint. A doorway must remain accessible even when the rest of the structure meets sloping ground.

Those rules can compete. Lowering a building may improve contact along its body while burying the threshold. Keeping the threshold usable can leave a gap behind the facade on a severe slope. The code bounds the entrance's sinking rather than pretending one height can satisfy every condition.

That is the kind of detail I enjoy in procedural work. The problem begins as “put this mesh on the terrain” and becomes a question about what the object means. A rock and a doorway do not have the same placement contract.

Generated content still has a runtime cost

A beautifully composed scene can still be the wrong result if creating it stalls the game.

The pack composer has an explicit distinction between standalone composition and streamed composition. A standalone caller can merge the geometry after building a cluster. A live streamed caller can defer that work until its own terrain-seating and merge pass. Performing both would duplicate work at exactly the wrong time.

The documented merge contract also preserves colliders, lights, and scripted nodes. Collapsing visible geometry is useful only if the functional scene survives it.

I do not treat those rules as proof of a particular frame rate. They are evidence of the architectural problem: generation has to respect the lifecycle of the running world. Content creation, placement, collision, and streaming cannot each behave as if they are the only system involved.

The connection to fractal authoring

In The Lower Worlds Online, I am exploring how a world can gain detail without losing the identities and commitments it already established. In Valenfeld, the work discussed here concerns how environments gain physical detail while respecting terrain, spacing, entrances, and runtime constraints.

The shared idea is that more detail should inherit rules from the larger structure.

A biome constrains its vegetation. A footprint constrains its props. An entrance constrains its building. In a generative authoring system, a published entity and its relationships constrain the next proposed revision. These are different systems, but they benefit from the same discipline: make the constraints explicit and inspect the result at the boundary.

I am publishing two small, original educational implementations: generative environments and fractal authoring. They translate selected ideas into browser experiments. They are not exports of the games, and the authoring example does not require or pretend to make live model calls.

Try the environment demo or the authoring demo directly in your browser.

You can also find Valenfeld on itch.io. The game is the broader project; the demos make a few of its underlying questions small enough to investigate directly.


Implementation notes: this article draws on Valenfeld's terrain and living-world generation design documents, PackComposer.gd, VignettePlacer.gd, and GroundMount.gd. Design intent and implemented mechanisms are described separately; no performance benchmark or finished-world claim is implied.