mirror of
https://github.com/pawelorzech/FastMemos.git
synced 2026-01-29 19:54:29 +00:00
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:
parent
87e5c34fe3
commit
3d710b8eeb
9 changed files with 82 additions and 4 deletions
65
CLAUDE.md
Normal file
65
CLAUDE.md
Normal 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
BIN
FastMemos-1.0.1.zip
Normal file
Binary file not shown.
|
|
@ -10,6 +10,8 @@
|
||||||
<string>FastMemos</string>
|
<string>FastMemos</string>
|
||||||
<key>CFBundleIconFile</key>
|
<key>CFBundleIconFile</key>
|
||||||
<string>AppIcon</string>
|
<string>AppIcon</string>
|
||||||
|
<key>CFBundleIconName</key>
|
||||||
|
<string>AppIcon</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>me.orzech.FastMemos</string>
|
<string>me.orzech.FastMemos</string>
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
|
@ -19,7 +21,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0.0</string>
|
<string>1.0.1</string>
|
||||||
<key>CFBundleSupportedPlatforms</key>
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
<array>
|
<array>
|
||||||
<string>MacOSX</string>
|
<string>MacOSX</string>
|
||||||
|
|
|
||||||
Binary file not shown.
BIN
FastMemos.app/Contents/Resources/AppIcon.icns
Normal file
BIN
FastMemos.app/Contents/Resources/AppIcon.icns
Normal file
Binary file not shown.
Binary file not shown.
|
|
@ -4,18 +4,29 @@
|
||||||
<dict>
|
<dict>
|
||||||
<key>files</key>
|
<key>files</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>Resources/AppIcon.icns</key>
|
||||||
|
<data>
|
||||||
|
ORGbkp1S899rWbEjZ/tNkVVLdro=
|
||||||
|
</data>
|
||||||
<key>Resources/Assets.car</key>
|
<key>Resources/Assets.car</key>
|
||||||
<data>
|
<data>
|
||||||
CsD7XkAT/ARWQWJ99BetayOzLlE=
|
cksUAC98EafZIfKsBaoS+aP805o=
|
||||||
</data>
|
</data>
|
||||||
</dict>
|
</dict>
|
||||||
<key>files2</key>
|
<key>files2</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>Resources/AppIcon.icns</key>
|
||||||
|
<dict>
|
||||||
|
<key>hash2</key>
|
||||||
|
<data>
|
||||||
|
ME58VQGz3AD9X5q7Xj654HeiGHgQ4D2k8mSLplwLvc4=
|
||||||
|
</data>
|
||||||
|
</dict>
|
||||||
<key>Resources/Assets.car</key>
|
<key>Resources/Assets.car</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>hash2</key>
|
<key>hash2</key>
|
||||||
<data>
|
<data>
|
||||||
k+rxT6Xd2FCQLfhgNlPCgS1IiDV1Klw0FQfNaCX1A3s=
|
m3hT/zd8OdcdoapvIxDo+aPRvDvSej90Wfiy+aU6GlE=
|
||||||
</data>
|
</data>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.0.0</string>
|
<string>1.0.1</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>LSApplicationCategoryType</key>
|
<key>LSApplicationCategoryType</key>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue