01

One-tap capture

The fastest way to log a decision is also the simplest: react to any Slack message with the 📝 emoji. TrailMark picks it up instantly and saves it to the linked project — no modal, no context switching, no friction.

TrailMark is fully idempotent. React with 📝 twice and only one decision is ever created. Remove and re-add safely.

When the channel is linked to exactly one project the decision saves automatically. For multi-project channels TrailMark DMs you a private picker.

Free plan
1 linked channel
Pro plan
Unlimited channels
  • Idempotent — same reaction applied twice creates exactly one decision
  • Auto-save — zero clicks when channel maps to a single project
  • Disambiguation — private picker DM when multiple projects share the channel
  • Zero config — works as soon as a channel is linked to a project
📱 Slack — #infra-decisions
AK
Alex K 10:14 AM
Going with Postgres as primary store. Redis for caching. Final call.
📝 1
TM
TrailMark App
✅ Decision captured
Saved to Infrastructure › Database
02

@mention commands

Mention @TrailMark in any channel or DM to interact with your decisions in conversational commands. Responses appear in-thread or as ephemeral messages visible only to you.

Attach workstream tags inline at save time and filter by tag when listing. All the same access rules apply: channel member or project owner.

slack · #product
# save with inline tags @TrailMark save We ship with Stripe #billing #infra # list decisions in a project @TrailMark list Infrastructure #infra # export PDF to channel @TrailMark export Infrastructure
  • save [Title] [#tag] — capture or open full modal
  • list <project> [#tag] — paginated list, filterable by tag
  • export <project> — generate & post grouped PDF
  • create project / add channel — admin via mention
  • list deleted <project> — view audit log
  • help — full command reference (ephemeral)
📖 Command reference
💾@TrailMark saveOpen capture modal
💾@TrailMark save T #tagSave with title & tag
📋@TrailMark list <proj>List decisions
📋@TrailMark list <proj> #tFilter by tag
📄@TrailMark export <proj>Generate PDF
@TrailMark create projectNew project modal
🔗@TrailMark add channelLink this channel
🗑️@TrailMark list deletedView audit log
@TrailMark helpCommand reference
03

Message shortcut

Right-click (or long-press on mobile) any Slack message, choose More message shortcuts → Log as decision, and a rich capture modal opens pre-filled with everything TrailMark already knows.

The modal gives you full control: message text pre-filled, original author as source, thread participants added to "Decided by". Edit any field before saving.

Supports: title, decision text, project, status, rationale, alternatives, decided-by, and workstream tags. All fields except title are optional and editable later.

Pre-filled fields
Text, author, participants
Status options
proposed · approved · rejected · superseded
  • Pre-filled modal — message text, author, thread participants auto-populated
  • Full field set — title, body, project, status, rationale, alternatives, decided-by, workstreams
  • Status tracking — proposed / approved / rejected / superseded
  • Editable later — every field updatable via Edit button in list view
📝 Log as decision — modal
04

@mention commands

Every command runs through an @mention — in a channel, a thread, or a DM with the bot. Responses are ephemeral (visible only to you) unless the command produces a file upload like a PDF.

List, search, export, audit, and all admin operations are available this way. Admin commands require project owner or Slack workspace admin. Destructive commands (delete-project) cannot be undone.

Pagination is built in for list results — up to 10 decisions per page with inline Edit and Delete buttons.

  • @TrailMark list — paginated, filterable with inline Edit/Delete
  • @TrailMark search — full-text search across every accessible project
  • @TrailMark export — one command to generate and post a formatted PDF
  • @TrailMark deleted — read-only view into the soft-delete audit log
  • @TrailMark create project — guided modal for new project
  • @TrailMark delete-project — permanently removes project (irreversible)
  • @TrailMark link-channel — manage channel links per project
  • @TrailMark configure-digest — schedule a recurring digest
⌨️ Command reference
CommandWhat it does
@TrailMark list <proj>Paginated list + Edit/Delete
@TrailMark search <q>Full-text across all projects
@TrailMark export <proj>Generate & post PDF
@TrailMark deleted <proj>View audit log
@TrailMark create projectNew project modal
@TrailMark delete-project⚠️ Permanent delete
@TrailMark link-channelAdd/remove channel link
@TrailMark configure-digestSchedule digest
05

Projects & access control

Everything in TrailMark is organized around projects — named collections of decisions scoped to your workspace. Each project has a single owner and one or more linked Slack channels.

Access is channel-based: any member of a linked channel can read the project's decisions. Write access is more granular — only the author, project owner, or workspace admin can edit or delete.

Free plan
1 linked channel per project
Pro plan
Unlimited channels per project
  • Channel-based access — in the channel = can read. No roles to configure.
  • Granular write control — only author, owner, or workspace admin can modify
  • Workspace-scoped — projects never leak across Slack workspaces
🔐 Permission matrix
Action Author Owner WS Admin Member
Read decisions
Edit decision
Delete decision
Export PDF
Delete project
06

Workstreams (tags)

Workstreams let you tag decisions with meaningful labels so you can filter lists and produce organized PDF exports. Tags are lowercase, hyphenated strings — ideal for reflecting the natural workstreams your team operates in.

Assign tags at capture time via modal, @mention inline, or slash commands — or add them later through the Edit modal. Each decision supports up to 5 workstream tags, each up to 40 characters.

In PDF exports, decisions are automatically grouped by workstream section, then by status within each section.

tagging examples
# inline tag via @mention @TrailMark save Use Stripe #billing #infra # filter list by tag @TrailMark list MyProject #frontend # constraints Max tags: 5 · Max length: 40 chars Format: lowercase-hyphenated
  • Up to 5 tags per decision, each up to 40 characters
  • Inline tagging via @mention inline (@TrailMark save Title #tag)
  • Filterable lists — filter by tag with @TrailMark list <project> #tag
  • PDF grouping — exports organized by workstream section automatically
🏷️ Example workstream tags
frontend infra billing api-design security database mobile onboarding backend pricing devops growth analytics platform
07

PDF export

Generate a complete, formatted PDF of any project's decisions with a single command. The PDF is built server-side and uploaded directly to the Slack channel — no downloads, no email attachments, no manual formatting.

Decisions are grouped first by workstream, then by status within each section. Each entry shows title, source author, decided by, and the capture date. Long text is truncated for readability.

The file appears in the channel as a regular Slack file upload — anyone in the channel can view and download it immediately.

Trigger
@TrailMark export
Delivery
Uploaded to current channel
  • One command@TrailMark export <project>
  • Grouped layout — organized by workstream, then status
  • Full metadata — title, source, decided-by, date per entry
  • Long-text truncation — readability preserved on large projects
📄 PDF structure preview
Infrastructure — Decision Log
Exported 2024-11-20 · 4 decisions
frontend
✅ Use React for the dashboard UI
@alex · decided by @alex, @sam · 2024-11-14
🟡 Migrate to Vite for builds
@dana · decided by @dana · 2024-11-20
backend
✅ PostgreSQL as primary store
@alex · decided by @alex · 2024-11-01
no workstream
✅ Ship v1 by end of quarter
@sam · decided by @sam, @alex · 2024-11-10
08

Audit log

TrailMark never truly deletes a decision. When any decision is removed — by the author, project owner, or workspace admin — it is moved to a separate, append-only audit store rather than erased.

The audit record captures who deleted the decision and when, alongside the full decision payload at the time of deletion. Tamper-proof history for compliance, post-mortems, and understanding why a direction changed.

Viewing the log requires the same access as reading live decisions. The log is read-only — deleted decisions cannot be restored from the UI.

Storage
Append-only, never erased
Access
Owner or channel member
  • Soft deletes only — no decision is ever permanently erased from the audit store
  • Who & when — every audit entry records the deleting user and timestamp
  • Full payload preserved — title, body, status, tags, decided-by all retained
  • Read-only log — append-only, cannot be modified after the fact
📋 Sample audit log entry
🗑️ Deleted decision
Title
Use Redis for session caching
Deleted by
@alex
Deleted at
2024-11-18 14:32 UTC
Status was
approved
Captured
2024-11-01 by @dana
Workstreams
infra, backend