The problem
“Add a new one” covers everything from typing a label and hitting enter to configuring a multi-section object with relationships, validation, and its own reporting once it exists. A platform that answers “how do I create something” with one fixed surface is wrong at both ends: a full-page form for a tag is ceremony nobody asked for, and a two-field modal for a campaign starves an object that’s about to have a long life in the product of the room it needs. Invoca’s own product spans that whole range already — a Tag, a saved filter, a Campaign, an integration’s setup — and each one has creation needs shaped by what kind of object it is, not by whichever surface a given team reached for first. This page is the tree that decides the surface. Layout inside that surface is a separate, later decision.Choosing a surface
Walk the same four axes CRUD overview defines, in order. Each is answered about the object being created, not the feature building it.1
Permanence — does it outlive this moment?
A Tag is created, gets used, and never has a page of its own — it’s a supporting detail
of whatever it’s attached to. A Campaign is created once and then lived in: it gets its
own reporting, its own settings, its own URL, for months. That difference alone moves the
floor from “modal” to “full page” before density is even asked.
2
Density — how much has to be true before it's valid?
A saved filter might need a name and the filter state that’s already selected — a handful
of fields, even though it’s reasonably permanent. That’s the case for a Modal with an
escape hatch: default to the fast path, and hand off to the full surface — never
discarding what’s already been entered — the moment someone needs more than the modal
offers. See TITAN-CREATE-04.
3
Continuity — does losing the parent cost more than the interruption saves?
Creating a Tag while filling out a Campaign form is the case for a Drawer or an
inline control: covering the campaign form to go create a tag is a worse interruption
than the tag creation itself. Titan’s own Dialog
and Drawer pages already state this
exact split — Dialog’s “choose something else when” table names Drawer for precisely this
case, and Drawer’s own page states the same thing from the other side. This page is citing
that answer, not deciding a new one.
4
Sequence — does order matter, and is there enough of it to show?
Setting up a new integration might require a connection step before a mapping step before a
review step, each depending on the last. That’s Full page — Wizard, with a step
indicator — see TITAN-GAP-26.
A single-section object never reaches this branch at all.
“Modal” is this page’s word for what Titan’s design language calls Dialog. Two of the
three names in play point at the same thing; the third is a trap. “Modal” (this page) and
“Dialog” (the design term, and the docs page this page links to) both mean the styled,
themed surface — imported from the package as
Modal, per
TITAN-DIALOG-01. The
package also exports something literally named Dialog — a raw, unstyled primitive with
none of Modal’s sizing presets, footer contract, or divider tokens. That export is not a
fourth name for the same thing; it’s a different component that happens to share a word with
the design term. See TITAN-DIV-27
for the full case. Every link on this page to “Dialog” goes to the design-language page, and
every actual import belongs on Modal — never on the package’s raw Dialog export.When this applies
- A new object is being added to the product, by a person, as a deliberate action.
- The object has at least one required field or choice — if there’s nothing to configure, there’s nothing to decide a surface for.
When it doesn’t
Structure
Behavior
Constraints
Content
Accessibility
- Opening a Modal or Drawer moves focus to the surface’s first field; closing it — by commit, cancel, or Escape — returns focus to the trigger that opened it.
- A full-page create’s navigation is announced the way any page navigation is; no additional live region is needed beyond what routing already provides.
- The “More options” escape hatch is a real control with an accessible name stating what it does — “Show more options,” not an icon alone.
- A Wizard’s step indicator states the current step and total count in text, not only through visual position — “Step 2 of 4,” read by assistive technology, not inferred from which dot is filled in.
Variations
Gaps
- Bulk creation (import) is not covered by this page and has no proposal yet.
- Whether a Drawer or a full page is the default for an object type that’s genuinely borderline on Permanence (a “saved view” that some teams treat as disposable and others treat as a first-class asset) is not resolved — this page names the axes but doesn’t adjudicate every real object type against them.