Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
3747197
chore(sweep): record deferred-work decisions
pbean Jun 17, 2026
058e363
sweep dw-decision-dw-90: DW-90 via bmad-auto
pbean Jun 17, 2026
e038779
Merge automator/20260616-223323-397a/dw-decision-dw-90 into main (bma…
pbean Jun 17, 2026
a8a951b
sweep dw-decision-dw-95: DW-95 via bmad-auto
pbean Jun 17, 2026
516cebb
Merge automator/20260616-223323-397a/dw-decision-dw-95 into main (bma…
pbean Jun 17, 2026
d5a65b6
chore(sweep): drop consumed deferred-work pre-answers
pbean Jun 17, 2026
76c67ce
story 8-1-first-run-detection-onboarding-overlay: implemented and rev…
pbean Jun 17, 2026
a722759
Merge automator/20260617-001415-5c3b/8-1-first-run-detection-onboardi…
pbean Jun 17, 2026
e1bef81
story 8-2-macos-accessibility-permission-guidance: implemented and re…
pbean Jun 17, 2026
89e39fc
Merge automator/20260617-001415-5c3b/8-2-macos-accessibility-permissi…
pbean Jun 17, 2026
935a0bd
story 8-3-hotkey-customization-during-onboarding: implemented and rev…
pbean Jun 17, 2026
7260382
Merge automator/20260617-001415-5c3b/8-3-hotkey-customization-during-…
pbean Jun 17, 2026
be3f787
story 8-4-auto-start-on-login: implemented and reviewed via bmad-auto
pbean Jun 17, 2026
9572e56
Merge automator/20260617-001415-5c3b/8-4-auto-start-on-login into mai…
pbean Jun 17, 2026
ca32305
story 8-5-per-user-data-isolation: implemented and reviewed via bmad-…
pbean Jun 17, 2026
1b17166
Merge automator/20260617-001415-5c3b/8-5-per-user-data-isolation into…
pbean Jun 17, 2026
679e594
story 8-6-cross-platform-verification-wayland-fallback: implemented a…
pbean Jun 17, 2026
d1665d9
Merge automator/20260617-001415-5c3b/8-6-cross-platform-verification-…
pbean Jun 17, 2026
46ea161
chore(sweep): record deferred-work decisions
pbean Jun 17, 2026
c78ce68
sweep dw-release-pipeline-multi-target: DW-98 via bmad-auto
pbean Jun 17, 2026
c8fcb55
Merge automator/20260617-091607-04e0/dw-release-pipeline-multi-target…
pbean Jun 17, 2026
e00de1a
sweep dw-hotkey-unavailable-user-notification: DW-99 via bmad-auto
pbean Jun 17, 2026
135168c
Merge automator/20260617-091607-04e0/dw-hotkey-unavailable-user-notif…
pbean Jun 17, 2026
735c4a1
sweep dw-decision-dw-97: DW-97 via bmad-auto
pbean Jun 17, 2026
5a014e1
Merge automator/20260617-091607-04e0/dw-decision-dw-97 into main (bma…
pbean Jun 17, 2026
069603e
docs: add comprehensive OSS documentation, screenshots, and rename bi…
pbean Jun 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions .automator/decisions.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,5 @@
"key": "1",
"label": "Keep monitoring specta",
"resolution": ""
},
"DW-85": {
"answered_at": "2026-06-13",
"bundle_name": "",
"effect": "keep-open",
"intent": "Keep tracking until a cross-platform timeout + worker-budget design (covering the Windows named-pipe no-timeout constraint) is decided.",
"key": "1",
"label": "Defer until cross-platform design agreed",
"resolution": ""
}
}
3 changes: 3 additions & 0 deletions .automator/policy.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,6 @@ auto = "per-epic" # never | per-epic | run-end (auto-triggered swe
max_bundles = 5 # bundles executed per sweep; triage excess is truncated
max_triage_attempts = 2 # triage validation retries before escalating
repeat = true

[scm]
isolation = "worktree"
61 changes: 61 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Bug report
description: Report something that isn't working as expected in Notey.
title: "[Bug]: "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to file a bug report! Please fill out the
sections below so we can reproduce and fix the issue.
- type: textarea
id: what-happened
attributes:
label: What happened?
description: A clear and concise description of the bug.
placeholder: When I do X, Y happens instead of Z.
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
description: How can we reproduce the behavior?
placeholder: |
1. Open Notey with the global hotkey
2. Press Ctrl+P and run '...'
3. See the error
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What did you expect to happen?
validations:
required: true
- type: dropdown
id: os
attributes:
label: Operating system
options:
- Linux
- macOS
- Windows
validations:
required: true
- type: input
id: version
attributes:
label: Notey version
description: See the About/Settings, or the release you installed.
placeholder: 0.1.0
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs or screenshots
description: Paste any relevant logs or attach screenshots. (Logs live in the platform state/log directory.)
validations:
required: false
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Security vulnerability
url: https://github.com/pbean/notey/security/advisories/new
about: Please report security issues privately — do not open a public issue. See SECURITY.md.
- name: Question or discussion
url: https://github.com/pbean/notey/discussions
about: Ask questions and discuss ideas with the community.
31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Feature request
description: Suggest an idea or improvement for Notey.
title: "[Feature]: "
labels: ["enhancement"]
body:
- type: markdown
attributes:
value: |
Thanks for the suggestion! Notey aims to stay a fast, focused capture tool —
please describe the problem you're trying to solve, not just the solution.
- type: textarea
id: problem
attributes:
label: What problem does this solve?
description: What are you trying to do that Notey makes hard or impossible today?
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
description: Describe what you'd like to happen.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Any alternative approaches or workarounds you've thought about.
validations:
required: false
28 changes: 28 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<!-- Thanks for contributing to Notey! Please fill out the sections below. -->

## Summary

<!-- What does this PR do and why? Link any related issue, e.g. "Closes #123". -->

## Changes

<!-- Bullet the key changes. -->

-

## Testing

<!-- How did you verify this works? Check all that apply. -->

- [ ] `npm test` passes
- [ ] `cargo test` passes (in `src-tauri/`)
- [ ] `npm run build` is clean
- [ ] `node e2e/run.mjs` passes (if behavior is user-facing)
- [ ] Verified manually in the running app

## Checklist

- [ ] My changes follow the conventions of the surrounding code
- [ ] I updated `CHANGELOG.md` under **Unreleased**
- [ ] I updated relevant documentation (README/`docs/`)
- [ ] I regenerated `src/generated/bindings.ts` if I changed a Tauri command/event
97 changes: 97 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Release

# Builds and uploads Notey bundles for all five targets required by AC4 of
# story 8.6 — Windows x64, macOS x64, macOS ARM64, Linux x64, Linux ARM64 —
# to a draft GitHub Release from a release tag.
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
releaseTag:
description: 'Existing release tag to build, e.g. v1.2.3'
required: true
type: string

env:
CARGO_TERM_COLOR: always

jobs:
release:
permissions:
contents: write # required to create the GitHub Release and upload assets
strategy:
fail-fast: false # one target failing must not cancel the others
matrix:
include:
- platform: macos-latest # macOS ARM64 (Apple Silicon)
args: '--target aarch64-apple-darwin'
- platform: macos-15-intel # macOS x64 (Intel)
args: '--target x86_64-apple-darwin'
- platform: ubuntu-22.04 # Linux x64
args: ''
- platform: ubuntu-22.04-arm # Linux ARM64 (native GitHub-hosted ARM runner)
args: ''
- platform: windows-latest # Windows x64
args: ''

name: ${{ matrix.platform }} ${{ matrix.args }}
runs-on: ${{ matrix.platform }}

steps:
- name: Validate manual release tag
if: github.event_name == 'workflow_dispatch'
shell: bash
env:
RELEASE_TAG: ${{ inputs.releaseTag }}
run: |
if [[ ! "$RELEASE_TAG" =~ ^v.+ ]]; then
echo "releaseTag must match the release tag pattern v*"
exit 1
fi

- uses: actions/checkout@v6
with:
ref: ${{ github.event_name == 'workflow_dispatch' && inputs.releaseTag || github.ref }}

- name: Install system dependencies (Linux)
if: startsWith(matrix.platform, 'ubuntu-')
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libxdo-dev

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
cache: npm

- name: Install Rust toolchain
# Pinned nightly required by specta =2.0.0-rc.24 (see rust-toolchain.toml).
# On macOS, install both apple-darwin targets so each matrix job can
# cross-build its single architecture via the --target arg.
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly-2026-04-03
targets: ${{ startsWith(matrix.platform, 'macos-') && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}

- name: Cache Cargo
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'

- name: Install npm dependencies
run: npm ci

- name: Build and release Notey
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: ${{ github.event_name == 'workflow_dispatch' && inputs.releaseTag || github.ref_name }}
releaseName: Notey ${{ github.event_name == 'workflow_dispatch' && inputs.releaseTag || github.ref_name }}
releaseBody: 'See the assets below to download and install this version.'
releaseDraft: true # artifacts are unsigned (v1) — a human publishes after review
prerelease: false
args: ${{ matrix.args }}
69 changes: 69 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Changelog

All notable changes to Notey are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

_Nothing yet._

## [0.1.0] - 2026-06-17

The first release of Notey — a fast, keyboard-driven, workspace-aware note-capture
desktop app built on Tauri 2, React 19, and Rust with a local SQLite store.

### Added

#### Capture & editing
- Always-on-top capture window (720×480) that launches hidden and is summoned from
the system tray or a global hotkey.
- Global capture hotkey (default `Ctrl+Shift+N`, `Cmd+Shift+N` on macOS) that
shows/focuses the window and toggles it away again.
- CodeMirror 6 editor with Markdown and plain-text formats and a per-note format
toggle.
- Debounced auto-save with a live save-status indicator (idle / saving / saved /
failed) and flush-on-dismiss.
- Multi-tab editing: open several notes at once, reorder tabs, and navigate with
`Ctrl+Tab` / `Ctrl+Shift+Tab` / `Ctrl+1…9`.
- Session persistence — open tabs, cursor, and scroll position survive restarts.

#### Organization & discovery
- Workspaces tied to filesystem paths, with auto-detection and a status-bar
workspace selector.
- Note list panel filtered to the active workspace or "All Workspaces".
- Full-text search (SQLite FTS5 with BM25 ranking) with match snippets, scoped to a
workspace or global.
- Command palette (`Ctrl+P`) exposing every action with fuzzy search.

#### Lifecycle & data
- Soft-delete to trash with restore and permanent-delete, plus a configurable
retention window (default 30 days) that auto-purges on startup.
- Export all notes to Markdown files or a single JSON document.

#### CLI integration
- A standalone `notey` CLI (`add`, `list`, `search`) that talks to the running app
over a local IPC socket, with live desktop sync when notes are added.

#### Personalization & accessibility
- Light / dark / follow-system themes applied at boot (no flash).
- Configurable font size and family, and floating / half-screen / full-screen
layout modes.
- Rebindable in-app shortcuts with conflict detection; settings persisted to
`config.toml`.
- Keyboard-first navigation throughout, focus traps in overlays, and screen-reader
announcements.

#### Platform integration
- System tray with open/quit, opt-in auto-start on login, and first-run onboarding
(including macOS accessibility-permission guidance).
- Cross-platform builds for macOS (arm64/x64), Linux (x64/arm64), and Windows (x64).

### Known issues
- On pure Wayland sessions without XWayland, the OS-level global capture hotkey may
be unavailable; the window remains summonable from the tray and a notice is shown.
A native Wayland global-shortcut portal is planned (see [ROADMAP.md](ROADMAP.md)).

[Unreleased]: https://github.com/pbean/notey/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/pbean/notey/releases/tag/v0.1.0
46 changes: 46 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Code of Conduct

## Our pledge

We want participation in the Notey project to be a welcoming, respectful, and
harassment-free experience for everyone, regardless of background or identity.

## Our standards

Examples of behavior that helps build a positive community:

- Being kind, patient, and respectful to others.
- Welcoming differing viewpoints and giving constructive feedback gracefully.
- Focusing on what is best for the community and the project.
- Showing empathy toward other community members.

Examples of unacceptable behavior:

- Personal attacks, insults, or derogatory comments.
- Public or private harassment of any kind.
- Publishing others' private information without explicit permission.
- Other conduct that would reasonably be considered inappropriate in a
professional setting.

## Our standards in practice

This project adopts the [Contributor Covenant](https://www.contributor-covenant.org),
version 2.1, as the basis for expected behavior. The full text is available at
<https://www.contributor-covenant.org/version/2/1/code_of_conduct/>.

## Scope

This Code of Conduct applies within all project spaces — the repository, issues,
pull requests, and discussions — and in public spaces when an individual is
representing the project.

## Enforcement

Instances of unacceptable behavior may be reported to the project maintainer at
**pinkyd@luckytick.net**. All reports will be reviewed and investigated promptly
and fairly, and the maintainer will respect the privacy and security of the
reporter of any incident.

Maintainers are responsible for clarifying standards and may take appropriate and
fair corrective action in response to behavior they deem inappropriate, up to and
including removing contributions or banning contributors.
Loading