Skip to content

Customizable tag roles — per-vault settings for capture / pinned / archived / etc. #23

@unforced

Description

@unforced

Why

Several v0.3 features need to apply a specific tag: "pin this note" → #pinned, "archive" → #archived, "voice capture default" → #captured, "text capture default" → #quick. Hardcoding tag names forces Aaron's (or anyone's) vault conventions on other users, and conflicts with tags they already use.

Aaron's feedback: "If the notes frontend does use specific tags though it does need to support customizing them."

Proposal

Introduce per-vault "tag role" settings. Stored per-vault in localStorage (same pattern as scribe settings and vault tokens). One JSON object keyed by role:

type TagRoles = {
  pinned: string;       // default: "pinned"
  archived: string;     // default: "archived"
  captureVoice: string; // default: "voice"  (replace current hardcoded "captured")
  captureText: string;  // default: "quick"
};

UX

  • First connection to a vault: if vault has zero notes, use defaults. If vault already has notes, scan existing tags and suggest sane mappings (e.g., if #pinned already exists, map the pinned role to it; same for #archived, #todo, etc.). Let user accept or override.
  • Settings page: a "Tag roles" section lists each role, shows the current tag, has an edit affordance that autocompletes against the vault's existing tags.
  • When a role is remapped: existing notes aren't retagged. Role just points at the new tag going forward. Document this explicitly in the settings UI.

Dependencies

Everything else in the v0.3 arc that uses a specific tag:

Scope

  • New TagRolesStore (per-vault, analogous to ScribeStore)
  • New settings section rendering the role table
  • Refactor /capture (both voice and text) to use captureVoice / captureText role from settings instead of hardcoded "captured" / "quick"
  • Document the pattern in CLAUDE.md so future role-bearing features land on this primitive

Out of scope

  • Role-bearing features (pinned/archived) — separate issues
  • Automatic retagging on role change — explicit non-goal; costly and user-destructive

Priority

Keystone. Land before pinned/archived views.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions