# Tobi Moccagatta — Developer resources

> Machine-readable tobis.vision: llms.txt, the OpenAPI spec, the read-only content API, and the markdown representation of every page.

- Site: https://tobis.vision — Tobi Moccagatta, Creative Developer at basement.studio
- Canonical: https://tobis.vision/developers
- Contact: contact@tobis.vision

Everything on https://tobis.vision that is meant to be read by a program rather than a person is listed below. All of it is public, read-only and needs no key.

## Machine-readable files

- [/llms.txt](https://tobis.vision/llms.txt) — the site in one plain-text file: pages, work, experiments, contact.
- [/openapi.json](https://tobis.vision/openapi.json) — OpenAPI 3.1 description of the read-only content API.
- [/sitemap.xml](https://tobis.vision/sitemap.xml) — every published URL.
- [/robots.txt](https://tobis.vision/robots.txt) — crawler policy. Retrieval and training crawlers are both allowed.

## Markdown representations

Every page answers `Accept: text/markdown` with markdown at its own URL, per [acceptmarkdown.com](https://acceptmarkdown.com). Those responses carry `Vary: Accept, Accept-Encoding`, and an `Accept` that rules out both HTML and markdown gets a `406`.

```
curl -H "Accept: text/markdown" https://tobis.vision/about
```

The same documents are addressable directly, for clients that cannot set headers:

- [/index.md](https://tobis.vision/index.md)
- [/experiments.md](https://tobis.vision/experiments.md)
- [/works.md](https://tobis.vision/works.md)
- [/about.md](https://tobis.vision/about.md)
- [/contact.md](https://tobis.vision/contact.md)
- [/privacy.md](https://tobis.vision/privacy.md)
- [/developers.md](https://tobis.vision/developers.md)
- [/notes.md](https://tobis.vision/notes.md)
- [/experiments/grass.md](https://tobis.vision/experiments/grass.md)
- [/experiments/critters.md](https://tobis.vision/experiments/critters.md)
- [/experiments/lpv.md](https://tobis.vision/experiments/lpv.md)
- [/experiments/bip.md](https://tobis.vision/experiments/bip.md)
- [/experiments/fluid.md](https://tobis.vision/experiments/fluid.md)
- [/notes/alpha-to-coverage-foliage-atlases.md](https://tobis.vision/notes/alpha-to-coverage-foliage-atlases.md)
- [/notes/real-time-gi-that-just-brightened-the-walls.md](https://tobis.vision/notes/real-time-gi-that-just-brightened-the-walls.md)
- [/notes/mcp-server-that-writes-webgpu-shaders.md](https://tobis.vision/notes/mcp-server-that-writes-webgpu-shaders.md)
- [/notes/msaa-breaks-gtao-on-webgpu.md](https://tobis.vision/notes/msaa-breaks-gtao-on-webgpu.md)
- [/notes/three-js-bloom-jimenez-dual-filter.md](https://tobis.vision/notes/three-js-bloom-jimenez-dual-filter.md)

## Content API

The CMS behind the site exposes its published documents over REST. Read access is open; nothing else is.

- [/api/v1/site](https://tobis.vision/api/v1/site) — identity, contact, availability, every page and every endpoint below. One call, no parameters.
- [/api/v1/works](https://tobis.vision/api/v1/works) — published work, paginated.
- [/api/v1/notes](https://tobis.vision/api/v1/notes) — the write-ups, newest first. Add a slug for the prose.
- [/api/v1/experiments](https://tobis.vision/api/v1/experiments) — the live WebGPU scenes, with the stack behind each.
- [/api/v1/globals/home](https://tobis.vision/api/v1/globals/home) — home page copy.
- [/api/v1/globals/about](https://tobis.vision/api/v1/globals/about) — the bio, as Lexical rich text.
- [/api/v1/media](https://tobis.vision/api/v1/media) — images and video, with alt text and dimensions.
- [/api/v1/graphql](https://tobis.vision/api/v1/graphql) — the same content with field selection. A GET returns the SDL and the limits; a POST takes queries.

The full request and response shapes are in [openapi.json](https://tobis.vision/openapi.json).

## Contact

contact@tobis.vision — Tobi Moccagatta, Creative Developer at basement.studio, Buenos Aires (UTC-3).

---

## Other pages

- [Creative Developer](https://tobis.vision) — hey, I'm tobi. creative developer at basement.studio, working on shaders and 3D on the web. peek into my vision. Markdown: https://tobis.vision/index.md
- [Experiments](https://tobis.vision/experiments) — A growing list of experiments across shaders, sound, scenes, and interaction. Markdown: https://tobis.vision/experiments.md
- [Works](https://tobis.vision/works) — Shaders and real-time 3D for Coinbase, Modal, Baseten, E2B and Rox at basement.studio, plus Shader Lab and Annex. Markdown: https://tobis.vision/works.md
- [About](https://tobis.vision/about) — Creative developer at basement.studio working on shaders, WebGL and WebGPU. Self-taught, in Buenos Aires, open to freelance. Markdown: https://tobis.vision/about.md
- [Contact](https://tobis.vision/contact) — How to reach Tobi Moccagatta: one email address, what to put in it, what he takes on, and current availability from Buenos Aires (UTC-3). Markdown: https://tobis.vision/contact.md
- [Privacy](https://tobis.vision/privacy) — What this site collects and what it does not: cookieless analytics, no forms, no trackers, and an in-memory rate-limit counter that expires with its window. Markdown: https://tobis.vision/privacy.md
- [Notes](https://tobis.vision/notes) — Write-ups from building shaders and real-time 3D on the web: WebGPU, TSL and three.js, mostly the parts that went wrong. Markdown: https://tobis.vision/notes.md
- [Grass (2026)](https://tobis.vision/experiments/grass) — A walkable Val d'Orcia field: 790,000 instanced grass cards on a procedurally baked atlas, backlit through a translucency map, bent by a travelling wind field and parted by a displacement trail you leave behind you. Markdown: https://tobis.vision/experiments/grass.md
- [Critters](https://tobis.vision/experiments/critters) — Soft vinyl creatures raymarched from signed distance fields, morphing between forms as one continuous surface and reacting to your cursor. Markdown: https://tobis.vision/experiments/critters.md
- [LPV](https://tobis.vision/experiments/lpv) — Real-time global illumination via light propagation volumes, hand-written in TSL on WebGPU compute. Markdown: https://tobis.vision/experiments/lpv.md
- [BIP](https://tobis.vision/experiments/bip) — A holoprojector experiment with BIP, the robot influencer. Markdown: https://tobis.vision/experiments/bip.md
- [Fluid](https://tobis.vision/experiments/fluid) — A WebGPU fluid simulation ported from Pavel Dobryakov's classic to three.js TSL. Markdown: https://tobis.vision/experiments/fluid.md
- [Alpha-to-coverage, and the black edges it doesn't fix](https://tobis.vision/notes/alpha-to-coverage-foliage-atlases) — 790,000 grass cards you can walk inside cannot be depth-sorted. Alpha-to-coverage solves the ordering, a contrast curve solves mip alpha collapse, and neither touches the dark outlines. Markdown: https://tobis.vision/notes/alpha-to-coverage-foliage-atlases.md
- [Real-time GI that just brightened the walls](https://tobis.vision/notes/real-time-gi-that-just-brightened-the-walls) — A light propagation volume can solve live and still read as a brightness slider: the missing sun-patch bounce, the dynamic range propagation destroys, and the read-side falloff that gives it back. Markdown: https://tobis.vision/notes/real-time-gi-that-just-brightened-the-walls.md
- [An MCP server that lets an agent write WebGPU shaders](https://tobis.vision/notes/mcp-server-that-writes-webgpu-shaders) — You cannot render WebGPU in a Node process, so the server owns nothing and relays into a live editor tab. The compile feedback loop is what makes an agent able to write shaders at all. Markdown: https://tobis.vision/notes/mcp-server-that-writes-webgpu-shaders.md
- [MSAA on a RenderTarget breaks GTAO on WebGPU](https://tobis.vision/notes/msaa-breaks-gtao-on-webgpu) — Why three.js GTAO fails with `Invalid ShaderModule "fragment_GTAO"` the moment a RenderTarget asks for samples, and what to do instead. Markdown: https://tobis.vision/notes/msaa-breaks-gtao-on-webgpu.md
- [Making three.js bloom 9x faster with the Call of Duty blur](https://tobis.vision/notes/three-js-bloom-jimenez-dual-filter) — three.js renders a fixed 5-mip chain of separable Gaussians every frame and ignores your radius. The Advanced Warfare downsample/upsample took bloom from 8.2ms to 0.9ms. Markdown: https://tobis.vision/notes/three-js-bloom-jimenez-dual-filter.md

## Machine-readable

- [llms.txt](https://tobis.vision/llms.txt)
- [sitemap.xml](https://tobis.vision/sitemap.xml)
- [robots.txt](https://tobis.vision/robots.txt)
- [openapi.json](https://tobis.vision/openapi.json)
- [developer resources](https://tobis.vision/developers)
