Release: Wombat

Version Wombat is actively laying the foundation for ecosystems Documentation.

Read the Roadmap

Cards & Markdown

This page describes the archived SnapBoard alpha implementation. SnapBoard is not currently developed or integrated with SnapDock.

Creating a Card

Each rendered column ended with a + Add Card button. It opened a modal containing:

An empty title was saved as Untitled Card. Double-click-to-create and quick-add workflows claimed by older documentation were not implemented.

Markdown Editing

The renderer used Marked to convert the card body to HTML. The preview was refreshed as the body changed, although it was visible only after selecting Preview. Saved card bodies were also rendered directly on the board.

The final code included an allow-list sanitizer. It retained common headings, paragraphs, emphasis, lists, block quotes, code, tables, links, and images; removed unapproved elements and attributes; restricted link/image URL protocols; and added noopener noreferrer to links. This superseded older claims that sanitization had not been implemented.

The application did not define its own Markdown extensions or CoffeeMD integration.

Editing and Deleting

The editor supported Ctrl/Cmd + S to save and Esc to close. State functions existed to retrieve and update a card, and a double-click handler was intended to reopen an existing card.

In the final markup, cards used .sb-card, but the open/edit handler listened for .card. Existing-card editing was therefore partial and not reachable through that final handler. Card deletion did use the correct rendered selector and removed the card after confirmation. No card archive existed.

File References

The editor accepted the first file from a desktop drag operation and stored only:

{
  "path": "/absolute/path/to/file.md",
  "name": "file.md"
}

The path validator required an absolute local path, rejected traversal segments and null bytes, and blocked several system, public-user, and network-share locations. The filename was stripped of line breaks and angle brackets.

This was a single filesystem reference, not an uploaded or embedded attachment. The final card displayed the saved name, but had no command to open the file, verify that it still existed, copy it, or repair a moved reference. Dropping a file directly onto an existing card was prototyped but shared the obsolete .card selector and was not functional against the final markup.

No file-type allow list was applied. One card could store at most one reference.

Card Record

Each normalized card record contained id, title, body, file, createdAt, and updatedAt. Its order within the containing cards array represented its position; board and column IDs were structural context rather than fields stored on the card itself.

The loader included limited migration logic for older cards: text could supply the title/body, and top-level path and name values could be converted into the newer file object.