Skip to content

Domain — index ​

The project's business source of truth. Every idea, rule or business decision is recorded here and kept up to date.

Vision ​

Four tools built on the same editor library, from geometry to business use:

ToolUserDoesDoes not
Symbol Editorsymbol designerdraws the shapes of a symbol with strict, numeric tools; places ports; declares the animatable partsbusiness meaning, business rules
Configuratorbusiness configuratorbuilds configuration trees: interfaces, property groups, default values, rules driving the symbol's animations; defines business types and business symbol librarieschange a symbol's geometry
View Editorbusiness user (synoptic view designer)places business symbols (quarter turns), overrides default values with a live preview, chooses which configured properties show in pop-ups, draws pipesadd a property that the configuration does not define; change a symbol's geometry
Drawing tools (in the View Editor)business userdraws static drawings with more freedom; saves them into a drawing library shared between projectsparameters, animations

From one project to another, the same symbols can be used by different business libraries: the library gives the symbol its business meaning for that project.

Purpose ​

  • A product, not a demo: a library and editors that teams drawing synoptic views can adopt with confidence, doing better for this work than general vector editors.
  • Trust through quality: every behavior specified, sourced, tested and documented; summary documents let a reader understand the project without reading everything.
  • Portable mathematics: the library computes its own geometry (never through the SVG or DOM APIs), runs in any JavaScript engine — browser or server — and can be transcribed into another language if speed requires it (ADR-0025).
  • A finished free V1, then a paid pro edition (ADR-0030): new features after V1 go to the pro edition, kept in editions.
  • Built by an agent: Claude Code writes every change, the Product Owner reviews; outside input comes through issues (ADR-0026).

Principles ​

  • Schematic: a synoptic view must stay readable.
  • Logical: every symbol shape is described by numbers (corners, sizes, radii, angles), not by a hand gesture.
  • Orthogonal: pipes are horizontal and vertical.
  • Integer: every input value is an integer; derived geometry and animation values may not be.
  • Configured, not hand-made: a view only uses what the configuration defines.

Files ​

FileContent
shapes.mdshape model, rotation, corner radius, shape tools, booleans, strokes, text, static drawings
symbols-and-views.mdsymbols, ports, animations, views, pipes
configuration.mdconfigurator, configuration trees, interfaces, property groups, business types, libraries
interaction.mdtools, selection, node editing, snapping, alignment, colors, tree
editions.mdfree V1 and pro edition: where the project stops, pro ideas kept out of V1 (ADR-0030)

Glossary ​

The French term is kept: it is the working vocabulary of the target users.

TermFrenchDefinition
ShapeFormeclosed contour of vertices with a radius per vertex, rendered as a <path>
Vertex / NodeSommet / Nœudpoint of the contour: integer when typed, fractional when derived (ADR-0003) or kept by a free shape from a converted polygon (ADR-0033)
Free shapeForme librea contour stored as its corners (a point and its radius) in a box of their own, with a width and a height that stretch it without loss; the rectangle tool makes one (ADR-0032); a regular polygon becomes one by a button, unmoved (ADR-0033)
Corner radiusRayon de coin, arrondiradius of the arc rounding a vertex, one per vertex (ADR-0029)
FilletCongéarc tangent to both edges of a vertex
SetbackReculdistance from the vertex to the fillet's tangent point, r / tan(θ/2)
Tangent pointPoint de tangencepoint where a fillet touches an edge, at the setback from the vertex
Effective radiusRayon effectifradius actually drawn after clamping (ADR-0007); derived at every evaluation, never stored (Q8)
Requested radiusRayon demandéradius typed by the user and stored in the model; the effective radius derives from it (Q8)
SpikePointevertex where the contour turns back on itself (turning angle ±π); its fillet consumes it (Q16)
StrokeContourband of fixed width along the outline
Stroke alignmentAlignement du contourinner, center, outer
Boolean operationOpération booléenneunion, difference, intersection, exclusion, division, cut path
Shape builderShape buildertool building regions from the edges and intersections of selected shapes
SymbolSymbolegroup (<g>) of shapes + ports + animatable parts, without business meaning
AnimationAnimationchange of a symbol part driven by a property value: color, blinking, opacity, visibility, partial fill, rotation
PortPoint de connexionpoint of a symbol where a pipe connects
Configuration treeArbre de configurationtree of configuration nodes carrying interfaces and property groups
InterfaceInterfacenamed set of properties with rules driving a symbol's animations (e.g. isRunning → a zone changes color)
PropertyPropriététyped value with a default value, member of an interface or a property group
Property groupGroupe de propriétésnamed list of properties used together (e.g. the pop-up group)
Business typeType métiernode of a configuration tree, e.g. Pump → Positive displacement pump → Gear pump
Business symbolSymbole métiersymbol + selected configuration sub-trees + business name, e.g. "gear pump"
Business libraryBibliothèque métierset of business symbols used by a project
InstanceInstanceoccurrence of a business symbol in a view
ViewVue synoptiqueassembly of instances, pipes and static drawings
PipeTuyauorthogonal connector between two ports
WaypointPoint de passagebend of a pipe
Static drawingDessinstatic, non-parameterized drawing made in the View Editor, reusable through the drawing library
Drawing libraryBibliothèque de dessinsdrawings shared between projects
SnappingMagnétismeautomatic attachment to a remarkable position
Bounding boxBoîte englobantesmallest axis-aligned rectangle containing an object
PositionPositiontop-left of a shape's box before it turns, stored with its angle; shown and typed as the top-left of its straight box (F04, ADR-0035)
Straight boxBoîte droitebounding box of a drawn shape, rounded corners included, as a browser's getBBox; its top-left is shown and typed as the shape's position (F04)
Turned boxBoîte tournéea shape's box turned with it by its angle, shown as its selection (F04)
Stretched polygonPolygone étiréa regular polygon with its "stretched" option on: it touches the four sides of its box, its sides as even as possible (F06, research request 0011)
AnchorAncreplace of a shape in its box, one of 9: a horizontal (left, center, right) and a vertical (top, center, bottom) alignment, min / mid / max in the model (F07); not the stroke alignment, the text anchor (start, middle, end), the Align command nor the snapping alignment guides

Settled questions ​

#QuestionDecisionTrace
Q1Regular polygon inside w×huniform, stays regular, flat baseDERIV-regular-polygon-fit
Q2Booleansnon-destructiveADR-0006
Q3Radius conflictlocal proportional reductionADR-0007
Q5Storage and exchangelocal only in the free V1: the user opens a working folder on their computer and saves files one by one; no server, not even a local one, and no online service — servers belong to the pro edition (Product Owner, 2026-10-11, replacing the local server of 2026-10-08; ADR-0030)configuration.md §6, editions.md §1
Q6Instance rotationquarter turns, pivot = originADR-0008
Q8Radius entered too largerequested value stored, effective value derivedshapes.md §2
Q10Output precision and toleranceSVG_DECIMALS = 5; EPSILON = 1e-9shapes.md §1
Q11Contour orientation and starting vertexclockwise on screen (SVG frame, y down), starting at the top-left vertex (a regular polygon at the right end of its base, Q18); a contour is cyclic: the last vertex joins the first, and every per-vertex computation wraps aroundshapes.md §1
Q12Pen of the drawing toolsFigma-like pen with Bézier handles, in static drawings onlyADR-0018
Q13Rotation animationproperty range remapped to the animation range (e.g. 0–100 → 0–90°, 0–180°, 0–360°)symbols-and-views.md §3
Q14Configuration tree scopea selected node brings its own and its ancestors' options; sub-trees of other trees can be addedconfiguration.md §2
Q15Shape of size 0 or negativenegative forbidden; 0 allowed (degenerate shape, useful in animations); asked for the rectangle, applied to the regular polygon in the F02 refinementshapes.md §3
Q16Rounding of a spike (a vertex where the contour turns back on itself, turning angle ±π)the fillet consumes the spike, as today: rounding is allowed to eat length (Product Owner, 2026-10-09; Figma's behavior assumed alike, not verified)shapes.md §2
Q17Effective radius where no corner can be rounded (size 0, aligned vertex)keep it as is: the requested radius is kept on the vertex and shown "as requested"; it applies as soon as the shape grows (Product Owner, 2026-10-09)shapes.md §2
Q18Starting vertex of a contour without a single top-left vertex (a triangle pointing up)no strict rule at creation: the topmost vertex, the leftmost on a tie (the top-left of a rectangle, Q11), clockwise (Product Owner, 2026-10-09); a regular polygon starts at the right end of its flat base, then its left end, so that the base keeps its numbers when the number of corners changes (Product Owner, 2026-10-11, F08)shapes.md §1
Q19Largest number of corners of a regular polygon12 (Product Owner, 2026-10-09): symbols use up to 8 sides (research 0004), and beyond 12 a polygon is hardly told from a circle; 12 is also unchanged by a quarter turn (ADR-0008); raising it later invalidates nothingshapes.md §3
Q20Largest size of a shapeno upper limit in the model nor the calculations, only 0 below; EPSILON stays absolute (errors about 1e-16 × the size: under it up to a few million units); good practice: one user unit is one screen pixel, views drawn at the screen's size and the SVG scaled for a far screen; the interface caps sizes at 100 000 (Product Owner, 2026-10-09)shapes.md §1
Q21Layout boxyes: a rectangular box placing its children by a 3 × 3 anchor or stacking them; full rules in shapes.md §3; its own epic E13, before booleans; name still to choose (Product Owner, 2026-10-10)shapes.md §3
Q22Epics of the free V1every epic of the backlog table (Product Owner, 2026-10-11): E11 keeps saving and reloading files in the working folder, without any server; E07 publishes libraries locally, never online; an epic for a design system may be added later, once the Product Owner can describe iteditions.md §1
Q27Points of a free shape after F09fractions allowed until edited: a converted polygon keeps its exact points and size and does not move; a point typed lands on integers (on a turned shape, in the drawing: ADR-0035); the x and y typed are the coordinates of the shape in its SVG, neither the screen's nor those of its inner box; each point is kept with its radius, a corner (Product Owner, 2026-10-11)shapes.md §3, F08
Q28Free shapes after editing (F08)a coordinate typed is an integer (on a turned shape, in the drawing: ADR-0035), the other keeps its value; points and size keep their fractions through a stretch, a point added or a deletion, nothing rounded, so that editing is never destructive; a deleted point's neighbours are joined by a straight edge (Product Owner, VAL-005, 2026-10-11, ADR-0034)interaction.md §3, F08
Q29Degenerate free shapes (F08)not refused, never changed on their own: points on one slanted line allowed; two points at the same place flagged in the list of points, asking whether to delete one; edges crossing allowed and flagged — the flags come with the editor applications; typed coordinates not capped, the area of a symbol being its own question (Q30) (Product Owner, VAL-005, 2026-10-11)interaction.md §3

Open questions ​

#QuestionFile
Q4Ellipses and curves with handles: needed in symbols, yes (Product Owner, 2026-10-12: a round shape in a long box is an ellipse, a propeller symbol needs Bézier curves with two handles); how they are drawn, stroked and combined, outside the ADR-0001 scope, is decided at E14's first spikeshapes.md
Q7Undo / redo: command-based history, confirmed?interaction.md
Q9Corner radius on vertices created by a booleanshapes.md
Q23Application shell of V1: a web view in a desktop app (Electron, or a Rust-based one), with all computation in the web view and native code only to save files?editions.md §1
Q24A foreignObject tool (e.g. an iframe) inside a given frame: in the free V1 or pro? The Product Owner inclines to V1, the tool being basic rather than advanced. It contradicts ADR-0002 and the allowed SVG primitives; a new ADR either waysymbols-and-views.md
Q25Corner radii of a layout box (E13): one radius for the whole box, or one per corner as any rectangle since F03 (ADR-0029)?shapes.md §3
Q26Memory of the radii of removed corners: a polygon of 12 corners with different radii becomes a triangle, then 12 again — do the 9 corners get their radii back (a wish of the Product Owner at VAL-004)? Today they come back sharp, as decided at the refinement of F03 (F03.AC3). In which feature, and is it kept when the file is saved?shapes.md §2
Q30When a symbol is saved, are its shapes moved so that the top-left of their bounding box is at (0, 0), giving positive coordinates, or its center at (0, 0), or left where they are? (Product Owner, VAL-005 of F08: no preference among the three; to settle with saving, E11)symbols-and-views.md §1
Q31Text (E15): native SVG <text> and its own features, or HTML text in a foreignObject (related to Q24), and the drawbacks of each; which fonts and how a missing one is handled; how the size of a text is measured without the DOM (ADR-0025)shapes.md