Placing & connecting
- Drag from the palette, or click a palette item to drop it in the middle of the view.
- Drag from a port dot to another port to create a stream. Works in either direction.
- While dragging, ports that cannot legally accept the stream are dimmed and refuse the drop.
- Recycle streams (RAS, internal nitrate recycle) are allowed and drawn dashed.
Routing the streams
- Lines run orthogonally with filleted corners, the way a P&ID is drafted.
- Hover a stream and its movable runs show a small square handle —
drag a run sideways to move it. Vertical runs slide left/right,
horizontal runs slide up/down.
- A dead-straight stream has one handle in the middle: drag it to bend the line into a detour.
- Where a horizontal run crosses a vertical one, a line hop is drawn
automatically. Tees — a line meeting another at its end — get no hop.
- Parallel runs that would land on top of each other are fanned apart.
- Double-click a stream to drop hand routing and return it to automatic.
Auto-arrange resets every stream.
Navigation
- Drag empty canvas — pan · Wheel — zoom at cursor
- Shift+drag empty canvas — rubber-band select
- F fit to view · Ctrl+0 reset zoom · T mass balance table
- B fold the block palette away · P fold the properties panel away.
Click the rail that is left behind to bring it back.
- Drag the inner edge of either side panel to resize it —
double-click that edge to return it to the default width.
Widths and folded state are remembered.
Editing
- Del delete selection · Ctrl+D duplicate
- Ctrl+Z / Ctrl+Shift+Z undo · redo
- Ctrl+A select all · Esc clear selection
- Double-click a block header to rename it. Right-click a block for more actions.
Projects
- Projects lists everything saved in this browser — open, rename,
duplicate, export or delete any of them, and start new ones.
- Work is written back to the open project as you go.
Ctrl+S saves it now,
Ctrl+Shift+S downloads it as
.json,
Ctrl+O opens the browser.
- Rename in the title bar at the top left, or from the browser — either way it
is the same project.
- Export writes a sealed
.eaqua or a PDF drawing;
Import takes either back, and still reads a plain
.json flowsheet exported by an older build.
Exporting
- Sealed · .eaqua — encrypted to the accounts you tick.
AES-256-GCM content, the key wrapped to each recipient with ECDH-ES on P-256,
the whole file signed. Somebody who is not a named recipient cannot read it,
and running this application does not help them: the decryption key lives on
the recipient's device, not in the app.
- Drawing · .pdf — a process flow diagram with a title block, an
equipment schedule and, once the sheet is solved, a full stream table. Its
equipment symbols are constructed with ISO 10628 as a reference; not every
symbol appears in that standard. A train too long for the sheet is drawn
smaller so the whole process still reads left to right on one line, and is
only cut into bands with match lines when shrinking further would stop the
symbols being legible.
- There is no plain-text export. Anything you cannot afford to lose should be
sealed to a second account as well, so there is more than one way in.
Accounts, companies and seats
- The app is sold per seat per month, per company. A company has
a hex ID like
A3F1-9C02-7B4E and a number of purchased seats.
- Anyone with that ID can create an account; they confirm their
address with a six-digit code. That gives them an account, not a seat.
- The company's administrator assigns seats under
Team & seats, up to the number purchased. A seat is what
lets someone activate a device and get a working licence.
- The developer account creates companies, appoints their
administrators, and can remove any account or company.
- Every one of those rules is applied by the server, not by
this page. With no server configured the app runs against a local backend that
enforces nothing and sends no mail — it exists so the flow works before the
backend does. The sign-in screen says which one is answering.
The landing page
- The app opens on a hub: Projects, Profile,
Licence & sharing and Settings. The
house button in the toolbar goes back to it at any time.
- Your profile — name, position, company, email — is carried
inside the signature on your licence. The application can display it but has
no way to change it; only the issuer can, by re-issuing. Your account
is your email address.
- Settings keeps the grid snap, stream numbers and whether the
app skips this page on startup.
Licences and recipients
- The padlock button opens Licensing. Sealing needs a licence;
reading a sealed file needs to be one of its recipients.
- Device certificates are issued automatically when sealing arrives; there is
nothing to request by hand.
- To seal a file to a colleague, import their
.eaqua-lic
— the app sees it names somebody else and files it as a recipient.
A certificate is public and can go by email.
- The private keys live in this browser profile. Clearing
site data destroys them, and any sealed file addressed only to this device
becomes permanently unreadable.
Calculating
- Calculate or Ctrl+Enter solves the whole flowsheet.
Recycle loops are torn automatically and iterated to convergence.
- Bioreactors use ASM3 (13 components, 12 processes) solved as
steady-state CSTRs. Stoichiometry is derived from COD, nitrogen and charge
conservation, so mass balances close exactly.
- RO and NF march element by element using solution–diffusion transport with
film-theory concentration polarisation. Each ion is tracked separately, so
divalents, boron and silica behave differently — which is why the feed
ion analysis matters.
- Membrane blocks draw the array or the skids under Array diagram /
Skid diagram. The panel copy is a thumbnail — click it, or the
corner button, to open it full size with the labels, the legend and the
stage-by-stage breakdown.
- Results appear on the stream labels, in the inspector for whatever is selected,
and any problem found lands in Design checks.
- Results grey out as soon as an input changes. Re-run to refresh.
Port rules
Every block declares how many streams each port accepts and which
phases it will take — see unit-library.js. A port that still needs a
connection is ringed, and every unmet requirement is listed under Design checks.