chore: release v1.0.1 with CLAUDE.md documentation

Update release artifact to 1.0.1 and add Claude Code guidance file.
This commit is contained in:
Paweł Orzech 2026-01-18 03:05:16 +00:00
parent 87e5c34fe3
commit 3d710b8eeb
No known key found for this signature in database
9 changed files with 82 additions and 4 deletions

65
CLAUDE.md Normal file
View file

@ -0,0 +1,65 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Build & Development
This is a native macOS SwiftUI app. Open `FastMemos.xcodeproj` in Xcode and build with `⌘B`.
From the command line:
```bash
xcodebuild -project FastMemos.xcodeproj -scheme FastMemos -configuration Debug build
```
To run:
```bash
xcodebuild -project FastMemos.xcodeproj -scheme FastMemos -configuration Debug build
open ./build/Debug/FastMemos.app
```
**Requirements:** macOS 13.0+ (Ventura), Xcode 15+
## Architecture
FastMemos is a menubar-only macOS app for quickly capturing notes to a self-hosted [Memos](https://github.com/usememos/memos) server.
### Key Components
**Entry Point (`FastMemosApp.swift`):**
- `AppDelegate` sets up the menubar status item and popover
- App runs as `.accessory` (no dock icon)
- Global hotkey (⌘⇧M) triggers `showNoteWindow()`
- `NotePanel` is a floating `NSPanel` for the note capture UI
**State Management:**
- `AppState` (in `ViewModels/`) is the single source of truth, passed to all views
- Publishes: `isLoggedIn`, `serverURL`, `defaultVisibility`, `isLoading`, `lastError`, `launchAtLogin`
- Handles authentication flow and memo creation
**Services (in `Services/`):**
- `MemosAPIService` - Communicates with Memos v1 API (`/api/v1/memos`, `/api/v1/auth/status`)
- `KeychainService` - Stores access tokens securely in macOS Keychain (service: `me.orzech.FastMemos`)
- `ShortcutService` - Registers global hotkey using Carbon Events API
**Views (in `Views/`):**
- `MenuBarView` - Main popover shown from menubar icon
- `NoteWindowView` - Floating note capture panel with visibility picker
- `LoginView` - Access token authentication flow
- `SettingsView` - App preferences (visibility, launch at login)
**Models (in `Models/`):**
- `Memo`, `CreateMemoRequest` - API request/response structures
- `MemoVisibility` - Enum: `.private`, `.protected`, `.public`
### Data Flow
1. User triggers hotkey → `AppDelegate.showNoteWindow()``NotePanel` appears
2. User writes note, selects visibility, presses ⌘Enter
3. `NoteWindowView.submitMemo()``AppState.createMemo()``MemosAPIService.createMemo()`
4. Token from `KeychainService` is used for Bearer auth
### Settings Storage
- `UserDefaults`: `serverURL`, `defaultVisibility`, `shortcutKeyCode`, `shortcutModifiers`
- Keychain: `accessToken`, `username`
- `SMAppService.mainApp` for launch at login

Binary file not shown.

BIN
FastMemos-1.0.1.zip Normal file

Binary file not shown.

View file

@ -10,6 +10,8 @@
<string>FastMemos</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
<key>CFBundleIconName</key>
<string>AppIcon</string>
<key>CFBundleIdentifier</key>
<string>me.orzech.FastMemos</string>
<key>CFBundleInfoDictionaryVersion</key>
@ -19,7 +21,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<string>1.0.1</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>

Binary file not shown.

View file

@ -4,18 +4,29 @@
<dict>
<key>files</key>
<dict>
<key>Resources/AppIcon.icns</key>
<data>
ORGbkp1S899rWbEjZ/tNkVVLdro=
</data>
<key>Resources/Assets.car</key>
<data>
CsD7XkAT/ARWQWJ99BetayOzLlE=
cksUAC98EafZIfKsBaoS+aP805o=
</data>
</dict>
<key>files2</key>
<dict>
<key>Resources/AppIcon.icns</key>
<dict>
<key>hash2</key>
<data>
ME58VQGz3AD9X5q7Xj654HeiGHgQ4D2k8mSLplwLvc4=
</data>
</dict>
<key>Resources/Assets.car</key>
<dict>
<key>hash2</key>
<data>
k+rxT6Xd2FCQLfhgNlPCgS1IiDV1Klw0FQfNaCX1A3s=
m3hT/zd8OdcdoapvIxDo+aPRvDvSej90Wfiy+aU6GlE=
</data>
</dict>
</dict>

View file

@ -17,7 +17,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<string>1.0.1</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSApplicationCategoryType</key>