process-designer is a web application for building business process diagrams in the class of Signavio and Visio. It gives a Process Designer a canvas on which to model a process using groups/lanes, actions, messages, sequence arrows, or/and operators, and sub-processes, and it gives a Process Reviewer a read-only way to open and inspect an existing diagram.
The product intent is a precision instrument, not a general drawing toy: a dense, keyboard-first modeling surface where every element snaps to a rule, every diagram element has a defined shape and meaning, and the modeled process is saved durably so it can be reopened and continued across sessions. The audience is operations analysts, enterprise architects, and process owners who work inside the tool for long stretches and expect the canvas to behave like a drafting table.
Signavio and Visio are used only as a style and feature reference for this class of tool. They are not a requirement to replicate either product, and no Signavio or Visio branding, copy, or proprietary capability is part of this product.
process-designer is a first-party web application with an application-owned identity boundary and a custom modeling UI. It consists of:
Actors. The accepted active human personas are exactly two: Process Designer (the primary builder) and Process Reviewer (the read-only inspector). No other human persona is in scope.
Accepted behavior. The product supports the six explicitly requested modeling capabilities (groups/lanes, actions, messages, sequence arrows, or/and operators, sub-processes) plus the durable save/reopen lifecycle and the identity continuity that makes that lifecycle usable.
Ownership. All six pages are application-owned custom pages. Identity is application-owned. There is no provider-owned or external-only surface in the current scope, and no headless delivery mode.
Narrow exclusions. This document does not add diagram export, import, sharing, commenting, versioning, real-time collaboration, process execution/simulation engines, BPMN certification or conformance claims, template libraries, or any account-management capability beyond self-service enrollment and returning verification. Where a capability is not listed in Section 3, it is not in current scope.
Delivery. process-designer is delivered as a browser-based web application with a first-party backend that persists process diagrams. The modeling canvas, the element palette, the inspector, and the diagram list are all first-party custom UI. Nothing in the accepted requirements is delegated to a third-party modeling provider, and no part of the product is delivered headlessly.
Access ownership. Identity is application-owned. A visitor can read the Landing surface anonymously. Creating and saving process diagrams requires an application-owned identity, so a self-starting Process Designer establishes one through self-service enrollment on Sign Up; a returning Process Designer or Process Reviewer verifies identity on Login. The protected surfaces — Diagrams, Designer, and Diagram Viewer — are reachable only after identity is established. The interaction that establishes access to a protected surface never lives on that protected surface itself; enrollment and verification are their own anonymous entry boundaries.
Current vs. future. Everything in Section 3 is current. Section 3.9 records future ideas that are explicitly not part of current pages or acceptance.
Not applicable. No reference directive in this project declares content_source; the Signavio/Visio directive is declared inspiration_only for feature and visual reference and supplies no product names, copy, facts, or capabilities.
12 actions · 4 messages · 3 operators · 2 sub-processes) that updates as the diagram is edited.FR-1 — Create a process diagram. As a Process Designer, I should create a new process diagram so that I have a canvas to model a process on.
required_inference (durable state required by the accepted modeling capability).FR-2 — Save a process diagram. As a Process Designer, I should save my process diagram so that my modeled process persists across sessions.
required_inference (durable state required by the accepted modeling capability).FR-3 — Reopen a saved diagram. As a Process Designer, I should reopen a saved process diagram so that I can continue editing it later.
required_inference.FR-4 — Rename a process diagram. As a Process Designer, I should rename a saved process diagram so that its name reflects its content.
required_inference.FR-5 — Delete a process diagram. As a Process Designer, I should delete a process diagram I no longer need so that my diagram list stays meaningful.
required_inference.FR-6 — Create a group/lane. As a Process Designer, I should create a group/lane on the canvas so that I can partition the process by participant or responsibility.
explicit.FR-7 — Name a group/lane. As a Process Designer, I should name a group/lane so that its responsibility is readable.
explicit.FR-8 — Assign an element to a group/lane. As a Process Designer, I should assign an element to a group/lane so that the process shows who performs each step.
explicit.FR-9 — Place an action. As a Process Designer, I should place an action on the canvas so that I can model a task in the process.
explicit.A or palette selection); an action node with a rounded-rect body (8px radius) is placed and snaps to the 8-pt grid with a 100ms scale-in from 0.96; observable result is the new action node on the canvas and an incremented action count in the top-bar readout; failure is a rejected placement with no diagram change; continuation is naming the action and connecting it.FR-10 — Name an action. As a Process Designer, I should name an action so that the modeled task is understandable.
explicit.FR-11 — Place a message. As a Process Designer, I should place a message on the canvas so that I can model a communication between process participants.
explicit.M or palette selection); a message node with an envelope-corner shape is placed and snaps to the 8-pt grid; observable result is the new message node rendered in the desaturated slate message treatment and an incremented message count in the top-bar readout; failure is a rejected placement with no diagram change; continuation is naming the message and connecting it.FR-12 — Name a message. As a Process Designer, I should name a message so that the communication it represents is understandable.
explicit.FR-13 — Draw a sequence arrow. As a Process Designer, I should draw a sequence arrow between two elements so that the order of the process is defined.
explicit.FR-14 — Select a sequence arrow. As a Process Designer, I should select a sequence arrow so that I can see and change its properties.
explicit.FR-15 — Delete a sequence arrow. As a Process Designer, I should delete a sequence arrow so that I can correct the modeled flow.
required_inference (indispensable correction mechanic for the accepted connection capability).FR-16 — Place an or/and operator. As a Process Designer, I should place an or/and operator on the canvas so that I can express branching and combining logic in the flow.
explicit.O or palette selection); an operator node rendered as a true 45° rotated square with a 12% tangerine wash is placed and snaps to the 8-pt grid; observable result is the new operator node on the canvas and an incremented operator count in the top-bar readout; failure is a rejected placement with no diagram change; continuation is setting its logic and connecting it.FR-17 — Set operator logic. As a Process Designer, I should set an operator's logic to OR, AND, or XOR so that the branching rule is unambiguous.
explicit (the source names "or/and operators"; XOR is the third standard member of the same operator set and is set inside the same rotated-square node).FR-18 — Place an operator on a sequence path. As a Process Designer, I should place an operator on a sequence arrow so that the branch or join sits on the wire it governs.
explicit.FR-19 — Place a sub-process. As a Process Designer, I should place a sub-process on the canvas so that I can model a nested process step.
explicit.S or palette selection); a sub-process node with a dashed border and a small + badge is placed and snaps to the 8-pt grid; observable result is the new sub-process node on the canvas and an incremented sub-process count in the top-bar readout; failure is a rejected placement with no diagram change; continuation is naming it and connecting it.FR-20 — Name a sub-process. As a Process Designer, I should name a sub-process so that the nested step is understandable.
explicit.FR-21 — Expand a sub-process. As a Process Designer, I should expand a sub-process so that I can model the elements it contains.
required_inference (indispensable mechanic for the accepted sub-process capability: a sub-process that cannot contain a modeled flow is not a sub-process).+ badge; the sub-process opens to reveal its contained element set on the canvas; observable result is the expanded sub-process showing its own actions, messages, operators, and sequence arrows; failure leaves the sub-process collapsed with no diagram change; continuation is placing elements inside it and collapsing it again.FR-22 — Collapse a sub-process. As a Process Designer, I should collapse a sub-process so that the parent diagram stays readable.
required_inference (indispensable counterpart to expansion).+ badge; observable result is the collapsed node on the parent canvas with its contained elements preserved; failure leaves the sub-process expanded; continuation is continuing to edit the parent diagram.FR-23 — Self-service enrollment. As a Process Designer, I should complete self-service enrollment so that I can create and save process diagrams under my own identity.
required_inference (application-owned identity is required for durable, owner-bound diagrams).FR-24 — Returning verification. As a Process Designer or Process Reviewer, I should verify my identity on return so that I can reopen the diagrams I am entitled to see.
required_inference.FR-25 — Browse saved diagrams. As a Process Designer, I should browse my saved process diagrams so that I can find the one I want to work on.
required_inference.FR-26 — Inspect a diagram read-only. As a Process Reviewer, I should open an existing process diagram read-only so that I can understand the modeled process without altering the design.
required_inference (the accepted second participant's successful outcome is understanding the modeled process without altering it).FR-27 — Read-only guarantee. As a Process Reviewer, I should be unable to modify a diagram from the viewer so that my inspection cannot damage the design.
required_inference (the accepted outcome is explicitly "without altering the design").The following are explicitly not in current scope and must not appear on any current page or in current acceptance: diagram export or import; diagram sharing, commenting, or review workflows; diagram versioning or history; real-time multi-user collaboration; process execution, simulation, or analytics; BPMN conformance or certification claims; template or starter-diagram libraries; and any account-management capability beyond self-service enrollment and returning verification.
Product context. The Process Designer is the primary user and the reason the product exists. They arrive either as a self-starting user with no invitation or provisioning boundary, or as a returning user with saved diagrams. They work in the tool for long stretches on dense canvases and expect keyboard-first, precise behavior.
Primary goal. Produce a complete, readable process model — lanes, actions, messages, sub-processes, operators, and sequence arrows — and have it saved so it survives the session.
Distinct accepted responsibilities. The Process Designer is the only persona that creates diagrams (FR-1), saves them (FR-2), reopens them (FR-3), renames them (FR-4), and deletes them (FR-5). They are the only persona that creates and names groups/lanes (FR-6, FR-7) and assigns elements to lanes (FR-8). They place and name actions (FR-9, FR-10), messages (FR-11, FR-12), sub-processes (FR-19, FR-20), and operators (FR-16), set operator logic (FR-17), place operators on sequence paths (FR-18), draw, select, and delete sequence arrows (FR-13, FR-14, FR-15), and expand and collapse sub-processes (FR-21, FR-22). They enroll (FR-23), verify on return (FR-24), and browse their diagrams (FR-25).
Relevant inputs and decisions. Which lanes the process needs and what each represents; which steps are actions versus messages versus sub-processes; where the flow branches or joins and whether that point is OR, AND, or XOR; which lane each element belongs to; when the model is complete enough to save.
Interactions with other accepted participants. The Process Designer produces the artifact the Process Reviewer inspects. The Designer's save (FR-2) is what makes the diagram available for read-only inspection (FR-26), and the Designer's read-only guarantee obligation is the counterpart of the Reviewer's protection (FR-27).
Observable success. A saved diagram that reopens with every lane, element, connection, and operator logic intact, and whose top-bar readout matches the diagram's actual contents.
Product context. The Process Reviewer is a second participant who opens an existing process diagram to read and inspect it. They do not build models; they consume them. They arrive through the same application-owned identity boundary as the Designer and verify identity on return.
Primary goal. Understand the modeled process — its lanes, actions, messages, sub-processes, and operator logic — without altering the design.
Distinct accepted responsibilities. The Process Reviewer verifies identity on return (FR-24), opens an existing diagram read-only (FR-26), and relies on the read-only guarantee (FR-27). They do not create, save, rename, delete, place, connect, or edit anything.
Relevant inputs and decisions. Which diagram to open; which elements to select in order to read their name, type, lane assignment, and operator logic; how to interpret the operator diamonds on the sequence paths.
Interactions with other accepted participants. The Reviewer depends entirely on the Designer's saved artifact. Their inspection is non-destructive by construction, so the Designer's model is never changed by a review.
Observable success. The diagram renders fully, every element's properties are readable on selection, and nothing in the diagram has changed after the inspection.
A or palette selection). Observable result: a rounded-rect action node snaps to the 8-pt grid with a 100ms scale-in, and the top-bar action count increments.M). Observable result: an envelope-corner message node appears in the desaturated slate treatment and the message count increments.S). Observable result: a dashed-border node with a + badge appears and the sub-process count increments.+ badge and places the elements it contains, then collapses it. Observable result: the sub-process returns to its collapsed node with its contained elements preserved.O) on a sequence path. Observable result: a true 45° rotated square with a 12% tangerine wash sits on the wire, and the operator count increments.Muse and headline. Rasmus Andersson — Systematic product craft with an opinion: a process canvas that reads like a precision instrument. The register is focused, exacting, and quietly confident: a well-built professional instrument where every pixel is on a scale and every diagram element snaps to a rule.
Mode. Light mode is the specified mode.
Color tokens (exact hex, by role).
| Role | Token | Value |
|---|---|---|
| Background (app shell, warm paper) | --bg | #F6F3EE |
| Surface (canvas, cards) | --surface | #FFFFFF |
| Text / primary UI (ink) | --text | #141517 |
| Primary (buttons, active tab, selected node outline) | --primary | #141517 |
| Accent (single hot accent) | --accent | #E8590C |
| Muted (labels, grid dots, secondary metadata) | --muted | #8A8578 |
| Message envelope (desaturated slate) | --message | #5C6670 |
| Hairline border | --hairline | #141517 at 12% opacity |
| Lane background | --lane-wash | #141517 at 4% opacity |
| Operator diamond wash | --operator-wash | #E8590C at 12% opacity |
Accent discipline. Tangerine #E8590C is used only for: the active tool in the toolbar, selected sequence arrows, the running-signal dot on the canvas, and the primary CTA. No blue or indigo appears anywhere in the UI chrome — no #2563EB, #4F46E5, or #6366F1 in buttons, links, selection, or focus rings.
Typography. Headings and body: Inter Tight. Headings at semi-bold 600 with -0.02em tracking; the wordmark and section titles at 700 with -0.03em tracking. UI labels, lane names, and node titles at 500–600 at small sizes. Tabular numerals enabled throughout for element IDs, lane counts, diagram stats, and coordinates. No all-caps except 11px micro-labels with +0.08em tracking. Inter, Roboto, Arial, Helvetica, and system-ui are not used as the heading or body family; Space Grotesk is the permitted second voice if one is needed.
Type scale. 1.25 modular: 56 / 44 / 28 / 20 / 16 / 14 / 12. Display 56px mobile → 96px desktop (clamp). H1 44 → 72. H2 28 → 40. Body 16 / 1.55. UI 14 / 1.4. Micro-label 11 uppercase with +0.08em tracking.
Shape language. Hairline borders (1px, #141517 at 12% opacity) do the structural work. Radii are compact and deliberate: 6px on buttons and inputs, 8px on cards and node bodies, 2px on lane edges. Operator diamonds are true 45° rotated squares. No soft 16px+ radii, no pill buttons except status chips. Node shapes: rounded-rect action (8px), envelope-corner message, dashed-border sub-process with a small + badge, and a rotated-square operator with OR / AND / XOR set inside. Every edge is either a hairline or a 2px accent stroke — nothing in between. Elevation is a hairline, not a shadow.
Layout. A 12-column, 8-pt-based shell. Desktop: 56px left icon rail for tools, collapsible 240px element palette, full-bleed dotted-grid canvas filling the remaining width, 320px right inspector. Top bar is 48px with the diagram name, save state, zoom control, and a monospace element-count readout. Lane headers are 40px sticky left columns with rotated 11px uppercase labels. Below 768px the palette and inspector become bottom sheets and the canvas stays the hero, panning and pinching. The Landing page uses the same grid: an oversized headline spanning 9 of 12 columns, a live mini-canvas on the right, and a hairline-ruled feature row — never a grid of identical hover-lift cards.
Imagery. The interface itself is the imagery. Landing and marketing surfaces show a real, dense process diagram — lanes, actions, envelopes, operator diamonds, a sub-process — rendered as the hero artefact, not a screenshot in browser chrome. Supporting graphics are schematic: grid dots, ruler ticks, connector geometry, tabular numeral readouts. No stock photography, no 3D blobs, no abstract gradients.
Readable-text integrity. Headlines, wordmarks, labels, numbers, card text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit, and no other element covers any part of them. Imagery, decoration, and motion may be cropped, bled off an edge, rotated, overlapped, or cut as the direction asks, as long as they cover no readable text or control.
The drafting table. The public entry is a two-part asymmetric composition on the warm paper ground (#F6F3EE), built from the same 12-column, 8-pt grid as the application shell.
-0.03em tracking) set flush-left and ragged-right, reading "Model the process. Not the software." A single tangerine CTA (#E8590C) is pinned beneath it. A hairline rule separates the headline block from a row of tabular stats (lanes, elements, exports) set in tabular numerals.The concept recomposes only accepted content, states, and controls: the hero diagram shows the accepted element types (lanes, actions, messages, operators, sub-processes, sequence arrows), and the CTA leads to the accepted identity boundary. It introduces no new behavior, page, or destination.
Interaction Model: Static (direction) Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief.
No user-requested 3D/WebGL hero exists for this project, and the direction's hero dimensionality is flat, so no Canvas/R3F/Drei scene is required.
NFR-1 — Durable diagram persistence. Process diagrams must persist across sessions in application-owned storage so that a saved diagram reopens with its lanes, elements, connections, and operator logic intact. Provenance: required_inference from the accepted save/reopen lifecycle. Rationale: the accepted modeling capability is only useful if the model survives the session.
NFR-2 — Owner-bound diagram access. A saved diagram must remain bound to the identity that created it, and protected surfaces must be reachable only after identity is established. Provenance: required_inference from the application-owned identity boundary. Rationale: durable, resumable, owner-specific state requires continuity of the correct participant.
NFR-3 — Read-only inspection integrity. The Diagram Viewer must expose no mutation path to a diagram. Provenance: required_inference from the accepted outcome "without altering the design." Rationale: the Reviewer's inspection must be non-destructive by construction, not by convention.
NFR-4 — Grid-snapped geometry. Every placed element must snap to the 8-pt grid, and every connector must render as either a hairline or a 2px accent stroke. Provenance: explicit (creative direction). Rationale: the product's precision register depends on consistent geometry.
NFR-5 — Responsive readable integrity. Headlines, labels, numbers, and controls must remain whole and uncovered at 375px, 768px, and 1280px. Provenance: explicit (creative direction). Rationale: the dense canvas and the landing composition must both remain usable at every supported viewport.
NFR-6 — Reduced-motion support. Under prefers-reduced-motion, all reveals become instant and the running signal becomes a static accent dot at the path start. Provenance: explicit (creative direction). Rationale: the motion vocabulary is functional, not decorative, and must degrade without loss of meaning.
NFR-7 — Keyboard-first element placement. Each element type must have a visible shortcut key (A action, M message, S sub-process, O operator) shown in tabular type beside its palette icon. Provenance: explicit (creative direction). Rationale: the audience is a power-user audience working in the tool for hours.
NFR-8 — No blue in UI chrome. No blue or indigo may appear in buttons, links, selection, or focus rings. Provenance: explicit (creative direction). Rationale: the tangerine accent is the single hot accent and the product must not read as a generic SaaS template.
docker-compose.yml as the inventory of runnable services — the frontend and the shared backend. Kubernetes is not required for the current scope.No source-specified technology is replaced by a default. Where the source is silent, the choices above are the practical minimum for the accepted workflows.
Assumptions.
required_inference.required_inference.required_inference.required_inference.required_inference.Constraints.
#E8590C.system-ui are not used as the heading or body family.#5C6670).+ badge; it can be expanded to model its contained elements and collapsed to keep the parent diagram readable.No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No completed page designs yet.
Completed design pages will appear here when they are ready to preview.
No comments yet. Be the first!