# Truzme Project code — LLM guide > Project code is the editable JSON text behind a Truzme truss model. Paste this guide into an AI assistant together > with an existing model's Project code and ask for changes — or paste this guide alone and ask for a new design. The > reply should be one JSON object, ready to paste back into Truzme's Project code panel and Apply. Truzme (truzme.com) is a browser-based 2D truss solver. It computes member forces, displacements, material-strength utilization and Euler buckling in real time. Typical tasks: change the number and position of nodes and members so the truss meets its strength and buckling requirements, change sections and materials, or design a whole truss from a span, supports and loads. ## Format The format is specified by a JSON Schema, with a description on every field: https://www.truzme.com/schemas/project-code/v1.json Read it before you write or edit a document. **If you can't open links, ask the user to paste the contents of that URL into the chat, and wait for it** — the example at the end of this guide shows only a few of the fields, so don't guess the rest. The schema defines every allowed key and value, the units, the coordinate system, the five section types, and what Truzme does with a document when it's applied. ## Instructions 1. When you return a model, reply with only the JSON object — no commentary before or after it. If the user asks a question, answer the question; add JSON only if they asked for a model too. 2. Keep the ids of everything you keep, and give anything new the next free id in its list (highest id + 1). Truzme matches entities by id, so a kept id keeps its entity's color, selection and place in undo history. 3. Keep the document's units. If you change a unit, convert every number in that category too. 4. When the task states an overall size, such as "10 m wide, 2 m tall", add matching dimension lines — a horizontal one across the span, a vertical one across the height — so the requested numbers are visible on the drawing. 5. Make sure the structure can stand up. Every panel needs triangulation: a four-node rectangle without a diagonal is a mechanism, and so is a joint held by two members in line with each other. Counting members (m), support restraints (r) and joints (j), a plane truss needs m + r >= 2j — necessary but not sufficient, since a badly arranged truss can still be a mechanism. Truzme applies whatever the document says and then reports "This structure is unstable"; it doesn't repair it. 6. A member has to join two different nodes — Truzme rejects a member that starts and ends at the same node. Don't put two members between the same pair of nodes either: those are accepted, but they make the result meaningless. 7. A load is drawn as an arrow pointing at its node — that's the default, so leave `mode` out. For a load hanging from the truss, such as a downward load on a bottom chord node, set `"mode": "pull"`: the arrow then starts at the node and points away, instead of being drawn across the truss's members. ## How Truzme checks a design Both checks are reported as a utilization percentage, where 100% means exactly at the limit. There is no built-in safety factor — leave your own margin if the task calls for one. - **Strength.** Axial stress is the member force divided by the section area, and it is compared with the material's `fMax`. Tension and compression both count, so the check is |stress| / fMax. - **Buckling.** Euler buckling, for compression members only. The critical load is Ncr = pi^2 * E * Imin / (K * L)^2, where L is the member's length, Imin the smaller second moment of area of its section, E the material's modulus, and K the effective length factor set in the app (1 by default). The check is |force| / Ncr. - Truzme reports displacements but has no deflection limit, so nothing fails on deflection. For the four standard section types Truzme computes the area and Imin from the section's dimensions; only a `custom` section carries them directly. ## Complete example A three-node truss: a pin support and a roller, one downward load at the apex, and a dimension line showing the 4 m span. ```json { "units": { "length": "m", "sectionLength": "mm", "force": "kN", "materialStrength": "MPa", "area": "mm²", "density": "kg/m³" }, "nodes": [ { "id": 1, "x": 0, "y": 0 }, { "id": 2, "x": 4, "y": 0 }, { "id": 3, "x": 2, "y": 3 } ], "members": [ { "id": 1, "from": 1, "to": 2, "section": 1, "material": 1 }, { "id": 2, "from": 1, "to": 3, "section": 1, "material": 1 }, { "id": 3, "from": 2, "to": 3, "section": 1, "material": 1 } ], "supports": [ { "id": 1, "node": 1, "x": true, "y": true }, { "id": 2, "node": 2, "x": false, "y": true } ], "nodalLoads": [{ "id": 1, "node": 3, "x": 0, "y": -10 }], "materials": [{ "id": 1, "name": "Steel", "EModulus": 210000, "fMax": 235, "density": 7850, "color": "#1D4ED8" }], "sections": [ { "id": 1, "name": "40×40×3", "sectionType": "hollow_rectangle", "w": 40, "h": 40, "thickness": 3, "color": "#7C3AED" } ], "dimensions": [{ "id": 1, "from": 1, "to": 2, "kind": "horizontal", "anchor": { "x": 2, "y": -0.75 } }] } ```