Skip to content

feat: persistent scratchpad for zero-friction capture #34

@jamubc

Description

@jamubc

Why

InstantNotes is capture-first, but even creating a quick note has friction: you click +, you get an empty note in the list, you start typing. If you just want to jot something down -- a thought, a rough list, a half-formed idea -- you still end up with an untitled note cluttering your library. There is no dedicated space for raw, unstructured capture that stays out of the way until the content is ready to be organized.

A scratchpad solves this: one persistent writing surface, always one click away, where you write without thinking about titles, tags, or structure. It is the entry point for future smart features (AI-driven tag suggestions, content extraction, auto-formatting) but is immediately useful on its own as a frictionless capture zone.

What Changes

  • Add a dedicated Scratchpad button in the sidebar, visually distinct from the note list (always visible, not a note entry)
  • Clicking the button opens a single persistent note in the main content area, replacing the current note view
  • The scratchpad is stored as a regular note row in the existing SQLite database, distinguished by a flag or reserved attribute (not a separate table)
  • Content persists across app restarts via the existing autosave mechanism
  • The scratchpad resets to its empty starting state after a graduation action is taken on its content (the graduation system itself -- AI tagging, content extraction, suggested edits -- is out of scope for this issue and will be designed separately)
  • No changes to the existing note creation flow, tag system, or search behavior

ADDED Requirements

Requirement: Sidebar entry point

The sidebar SHALL display a dedicated Scratchpad button that is always visible regardless of the current tag filter or note selection.
Clicking the Scratchpad button MUST open the scratchpad content in the main editor area.
The Scratchpad button MUST be visually distinguishable from regular note list entries.

Requirement: Persistent single note

The scratchpad SHALL be backed by exactly one note row in the existing SQLite database, distinguished by a reserved flag or attribute (e.g. is_scratchpad column or a reserved tag).
The scratchpad note MUST persist its content across app restarts using the existing autosave and database mechanisms.
There SHALL be exactly one scratchpad per database (singleton).

Requirement: Zero-friction editing

Opening the scratchpad MUST present an immediately editable surface with no title prompt, no tag picker, and no organizational UI.
The editor behavior (autosave, markdown support, keyboard shortcuts) MUST match the existing note editor.

Requirement: Graduation and reset

The scratchpad SHALL support a "graduation" action that clears the scratchpad content back to its empty starting state.
The graduation mechanism (what triggers the clear, where the content goes) is deferred to a follow-up issue; this issue requires only that the scratchpad CAN be reset programmatically or via a manual clear button.
Graduated content SHOULD be preserved as a new regular note (not deleted) before the scratchpad is cleared.

Requirement: Isolation from note list

The scratchpad note MUST NOT appear in the regular note list, search results, or tag-filtered views.
The scratchpad MUST NOT interfere with existing note CRUD operations, FTS indexing, or tag queries.

Scenario

GIVEN the user opens InstantNotes
WHEN the user clicks the Scratchpad button in the sidebar
THEN the main content area displays the scratchpad editor with any previously written content preserved
AND the editor is immediately focused and ready for input

GIVEN the scratchpad contains content from a previous session
WHEN the user reopens InstantNotes after quitting
THEN the scratchpad content is fully preserved and visible when the Scratchpad button is clicked

GIVEN the scratchpad contains content
WHEN a graduation action is triggered (manual clear or future automated system)
THEN the scratchpad content is saved as a new regular note in the library
AND the scratchpad resets to its empty starting state

GIVEN the user has notes in the library and content in the scratchpad
WHEN the user searches or filters notes by tag
THEN the scratchpad note does NOT appear in results
AND the Scratchpad sidebar button remains accessible

Verification

  1. Sidebar entry
    1.1 Open InstantNotes and verify the Scratchpad button is visible in the sidebar
    1.2 Click a tag filter; verify the Scratchpad button remains visible
    1.3 Click the Scratchpad button; verify the main content area switches to the scratchpad editor
  2. Persistence
    2.1 Type content into the scratchpad, then select a different note from the list
    2.2 Click the Scratchpad button again; verify the content is preserved
    2.3 Quit and reopen InstantNotes; verify the scratchpad content survived the restart
  3. Isolation
    3.1 With content in the scratchpad, use the search bar to search for a word in the scratchpad text
    3.2 Verify the scratchpad does NOT appear in search results
    3.3 Verify the scratchpad does not appear in any tag-filtered note list
  4. Graduation (manual clear)
    4.1 With content in the scratchpad, trigger the clear/graduate action
    4.2 Verify a new regular note was created with the scratchpad's content
    4.3 Verify the scratchpad is now empty and ready for new input
  5. Editor behavior
    5.1 Verify autosave works (type, wait, quit, reopen)
    5.2 Verify markdown formatting and keyboard shortcuts match the regular note editor

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions