features/: open the one you need.
Run the decision tree on the feature (same four questions), then jump to its page below. The rules (R0 no-hacks, one<VeltWireframe>, the interactivity rule,shadowDom/injectCustomCss) hold everywhere.
Deep per-feature guides
| Feature | Customization depth | Guide |
|---|---|---|
| Notifications | Full wireframe + rich config props (panel mode, settings layout, tabs) + hooks | Notifications |
| Reactions | Wireframed (tool/panel/pin/tooltip/inline) + custom emoji sets + hooks | Reactions |
| Recorder & Transcription | Deepest wireframe tree (control panel/player/tools/dialogs/subtitles/transcript) + hooks | Recorder and transcription |
| @Mentions & Autocomplete | Custom mention data (contacts/groups/custom) + option/chip wireframes | Mentions and autocomplete |
| Presence & Live Cursors | Per-item wireframes (avatar list / cursor pointer) + hooks; flat-config | Presence and cursors |
| Activity Log | Full wireframe + data hooks | Activity Log |
| Text / Inline / Multi-thread comments | Comment variants: wireframed, reuse comment hooks | Comment surfaces |
| Tags / Arrows / Areas | Thin: CSS + props (+ Tag hooks); no wireframe slots | Annotations, tags, arrows, and areas |
Two things to remember for non-comment features
- Flat-config variables. Cursor, Presence, Huddle, Recording, Transcription, Reactions, Autocomplete, View, Area, Arrow, Tag read wireframe tokens as
{componentConfig.<name>}(not the short aliases used by comments). SeeWireframe tokens. - Some features are config/hooks-only. Tags/Arrows/Areas have no wireframe slots; Transcription/Subtitles are surfaced through the recorder player’s slots; Reactions actions live on the comment element. Each feature page calls out its exact limits.
Cross-cutting concerns.
