Back to portfolio

3D content release platform

Scalable workflows for map assets — not one-off folder chaos.

Role
Product & UX design
Problem
No shared release path at scale
Impact
4 environments · multi-team daily

Decision

Web app + cloud storage + Jira — not Git LFS, not a walled PM tool.

3D building model review page with map preview
Model review: building in map context with the same preview stack we use for production-shaped assets.

Context

When the team is small and you iterate quickly with engineers, lightweight sharing is enough: corporate drives, Dropbox-style tools, whatever gets GLBs from A to B. A purpose-built 3D content system sounds right on paper, but it implies IT integration, dedicated support, and industry-grade ops before you even know whether the product bet pays off.

We did not start there. We started with S3 and a direction everyone could agree on: iterations had to stay artist-friendly, we had to see models in context, and uploads had to fit the same processing path the map actually uses - not a random preview mesh.

Early browser preview of a 3D building on the map
One of the first 3D building renders in the web preview - long before the pipeline had releases, QA lanes, and the rest of the manager surface.

First wedge: upload, validate, ship to the map

The first version was intentionally simple: a web UI to upload a model and preview it in map context. Early on, review and validation were mostly manual. As the pipeline matured, we added automated checks so only assets that pass the bar move into processing and onto the live map — a real publishing path, not a parallel “fake” preview.

Early success meant “upload, inspect, pull back if needed.” As model count and headcount grew (the 3D org moved toward dozens of people), it was obvious we needed a product at scale — not a bigger spreadsheet.

Table of 3D building models with metadata in the internal tool
One list for the fleet: model metadata and status without opening drive folders.

Inventory

The web surface became the system of record for what exists, what passed checks, and what belongs to which release - before anyone opens Blender or a ticket.

Constraints we owned deliberately

The company has patterns like Git LFS for large binaries. We did not put this pipeline on that stack. We stayed on cloud storage and grew the web product around it — checks, versioning, Jira, production paths — without asking artists to treat publishing like a software repo.

We also chose not to build a full-blown internal project-management product for every model status. Roadmap already lived in company channels; a walled garden would isolate artists from the org. The bet: plug into Jira for release-scoped work, and own only map integration, validation, and deploy mechanics.

Hardening the core

We invested in validation that tightened over time - from manual gates to automated server-side checks - plus versioning, how models attach to the map, and ways to verify them end to end. Those foundations mattered long before the UI looked “enterprise.”

Web uploader showing automated validation results and errors for a 3D model
Auto-validation in the web tool: structured checks and clear failures before an asset enters processing or tilesets.

General availability and production releases

As the program approached general availability, “it works in a demo” stopped being enough. We needed a release workflow for production tilesets: dependencies, sign-offs, and coordination with other teams - so pushing buildings live stayed predictable and safe, not a heroic manual transfer.

After the bureaucratic and technical prerequisites were in place, we designed the release path from staging-style environments into production tilesets. That turned an ad-hoc upload tool into something operators could trust.

Figma prototype of the main map view screen with navigation, 3D model controls, and style selectors
Figma prototype of the main screen once the foundation was solid: map view, color controls, style selectors, and dev tools. We adopted an existing component library to keep development fast and the interface consistent.

Blender: fewer handoffs, fewer surprises

Manual export-and-upload loops lose information. We extended an existing Blender validation add-on that already encoded our slightly non-standard pipeline rules, then layered direct upload into cloud storage so artists could send approved work straight into the same funnel the web tool consumed.

Checks run in the add-on and again on the receiving service - defense in depth for a pipeline where a silent mismatch is expensive.

QA and Jira at release scale

Automation catches a lot; it does not catch everything. As throughput grew, we brought in QA reviewers who could apply a checklist and a second pair of eyes - especially for issues our detectors still miss.

We shipped a QA-facing interface: move between models in a release, upload and download where needed, and open work for artists when something fails review.

Releases in Jira sync with releases in the tooling, so we always see which models belong to which train, whether content is ahead or behind the release, and what still blocks ship. That visibility replaced tribal knowledge in chat threads.

What the platform became

What began as “upload and validate” grew into a coordinated building-tools surface - a few major capabilities working together:

  • Placement and intake. Lists of candidate locations (from internal ranking and data work) flow into locations in the tool. Work ties to Jira so tasks land with the right 3D teams and leads can balance load across two artist groups.
  • Preview and upload. Models pass through local preprocessing so previews match what the map will render - both in Mapbox GL JS and native clients we care about.
  • Icons. Pipelines generate snapshots from 3D so artists can tune icons and priorities; a building can carry the right iconography for its zoom and importance tier.
  • Release management. Review what is in a release and promote assets across environments - development, staging, pre-production, production - so demos and hardening happen without mixing unrelated states.
  • Debug. Shared style foundations let us inspect locations, compare sources, and forward findings into Jira when something breaks in the wild.
UX flow diagram showing the full 3D model lifecycle: upload, review, QA, staging, and production deployment across user roles
UX flow for the 3D model lifecycle: from upload through review, QA, and role-based staging to production deployment - the map of decisions and handoffs the tool had to support.
Landmark icon review editor with 3D building snapshots
Landmark icons: review and tune snapshots so map icons match building priority and zoom behavior.

Review modes

Beyond static preview, we added ways to stress-test readability: lighting presets, color overrides for materials and logical parts, split view with Jira context while orbiting a landmark, fast model-to-model review, and compare mode after search - so QA and art can stay in one surface end to end.

Who uses it

Today the stack is not “just for 3D.” Alongside artists, leads, managers, and QA, rendering engineers, map designers tuning styles, motion designers, and other designers contributing to the product use the same previews and workflows - one place to reason about how 3D reads on the map.

Outcome

Chaotic folders became a scalable publishing workflow for interactive map content: one system of record, Jira-aligned releases across four environments (development through production), and automated checks where we used to rely on manual review alone. Artists, QA, rendering engineers, map designers, and motion designers use it daily — not only the 3D content org. Broken uploads dropped; everyone shares a clear picture of what ships when.