I’ve been modeling a 20-foot restroom trailer, working from photographs, tape measurements, and a growing collection of corrections. The project started with folding stairs and grew into an interior remodel: stalls, tanks, framing, ducts, lighting, and finishes.
The useful part is being able to inspect the design while changing it. Here is that working model, with the controls included.
Open the full-window trailer app ↗
The model is about 42 MB before transfer compression. Opening it in a separate window gives the controls more room, especially on a phone. Drag to orbit, right-drag to pan, and scroll to zoom.
A few things to try:
- Choose Inside · front room or Inside · rear room to look around with the warm lantern lighting. Switch to Work light to inspect details.
- Change the wall bamboo, cork flooring, countertop top, sides/cabinet faces, and trim. Choose clean or lightly aged copper for the sinks and counter angles.
- Choose Exterior finish to see the brown/black EVA wall wrap. Its 6 mm thickness and recessed grooves are modeled as solids. Exterior metal trim has an independent satin-black option.
- Choose Wall framing to expose the steel channels, or EPS infill to inspect the foam that fits between them.
- Use the stair playback and timeline to inspect the folding sequence. The door controls also let you open and close the individual doors.
- Click a part to identify it, measure between surfaces, or use Edit layout to move and rotate assemblies. You can also add pinned notes and connected lines.
The public app saves layouts and notes in your browser, not on my server. Edits, form inputs, and unfinished note text recover automatically when you reopen the same model revision. Use Download local backup and Restore local backup for a separate JSON copy, including your controls and drafts. Notes stay on your device; they are not sent to me. Download GLB with finishes exports the selected materials and the original animation; custom layout placements and the viewer’s lantern lighting are not baked into that download.
The geometry is built with clj-manifold3d solids and Boolean operations, with
imported meshes where useful. Three.js displays the exported GLB. The thin
floor trim, for example, is fitted to the actual wall sheets at floor level,
cut around adjoining parts and conservative door-sweep envelopes, and attached
to the wall or cabinet face that owns it. That last detail matters: moving a
wall should move its trim exactly once.
The interior framing uses 1½-inch channels with foam edges relieved to fit inside them. The intended construction is a bonded composite wall, with face material laminated over the framing and foam. The browser model makes it easy to separate those layers and see how they meet.
This is still a design study. Geometric fit and a working folding animation do not establish structural capacity, installation clearance in every pose, or build readiness. Moving an assembly in the layout editor also does not resize its neighbors or reconnect plumbing and ducts. Those are useful boundaries to keep visible while exploring alternatives.
The whole public viewer is static: model, JavaScript, textures, and a little browser storage. It can sit beside this post on S3 without a running CAD process or an application server.