markupr 2.1.8 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/README.md +292 -15
  2. package/dist/cli/index.mjs +3593 -0
  3. package/dist/main/index.mjs +743 -220
  4. package/dist/mcp/index.mjs +4053 -0
  5. package/package.json +32 -7
  6. package/.claude/commands/review-feedback.md +0 -47
  7. package/.eslintrc.json +0 -35
  8. package/.github/CODEOWNERS +0 -16
  9. package/.github/FUNDING.yml +0 -1
  10. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -56
  11. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -54
  12. package/.github/PULL_REQUEST_TEMPLATE.md +0 -89
  13. package/.github/dependabot.yml +0 -70
  14. package/.github/workflows/ci.yml +0 -184
  15. package/.github/workflows/deploy-landing.yml +0 -134
  16. package/.github/workflows/nightly.yml +0 -288
  17. package/.github/workflows/release.yml +0 -318
  18. package/CHANGELOG.md +0 -127
  19. package/CLAUDE.md +0 -137
  20. package/CODE_OF_CONDUCT.md +0 -9
  21. package/CONTRIBUTING.md +0 -390
  22. package/PRODUCT_VISION.md +0 -277
  23. package/SECURITY.md +0 -51
  24. package/SIGNING_INSTRUCTIONS.md +0 -284
  25. package/assets/DMG_BACKGROUND_INSTRUCTIONS.md +0 -130
  26. package/assets/svg-source/dmg-background.svg +0 -70
  27. package/assets/svg-source/icon.svg +0 -20
  28. package/assets/svg-source/tray-icon-processing.svg +0 -7
  29. package/assets/svg-source/tray-icon-recording.svg +0 -7
  30. package/assets/svg-source/tray-icon.svg +0 -6
  31. package/assets/tray-complete.png +0 -0
  32. package/assets/tray-complete@2x.png +0 -0
  33. package/assets/tray-completeTemplate.png +0 -0
  34. package/assets/tray-completeTemplate@2x.png +0 -0
  35. package/assets/tray-error.png +0 -0
  36. package/assets/tray-error@2x.png +0 -0
  37. package/assets/tray-errorTemplate.png +0 -0
  38. package/assets/tray-errorTemplate@2x.png +0 -0
  39. package/assets/tray-icon-processing.png +0 -0
  40. package/assets/tray-icon-processing@2x.png +0 -0
  41. package/assets/tray-icon-processingTemplate.png +0 -0
  42. package/assets/tray-icon-processingTemplate@2x.png +0 -0
  43. package/assets/tray-icon-recording.png +0 -0
  44. package/assets/tray-icon-recording@2x.png +0 -0
  45. package/assets/tray-icon-recordingTemplate.png +0 -0
  46. package/assets/tray-icon-recordingTemplate@2x.png +0 -0
  47. package/assets/tray-icon.png +0 -0
  48. package/assets/tray-icon@2x.png +0 -0
  49. package/assets/tray-iconTemplate.png +0 -0
  50. package/assets/tray-iconTemplate@2x.png +0 -0
  51. package/assets/tray-idle.png +0 -0
  52. package/assets/tray-idle@2x.png +0 -0
  53. package/assets/tray-idleTemplate.png +0 -0
  54. package/assets/tray-idleTemplate@2x.png +0 -0
  55. package/assets/tray-processing-0.png +0 -0
  56. package/assets/tray-processing-0@2x.png +0 -0
  57. package/assets/tray-processing-0Template.png +0 -0
  58. package/assets/tray-processing-0Template@2x.png +0 -0
  59. package/assets/tray-processing-1.png +0 -0
  60. package/assets/tray-processing-1@2x.png +0 -0
  61. package/assets/tray-processing-1Template.png +0 -0
  62. package/assets/tray-processing-1Template@2x.png +0 -0
  63. package/assets/tray-processing-2.png +0 -0
  64. package/assets/tray-processing-2@2x.png +0 -0
  65. package/assets/tray-processing-2Template.png +0 -0
  66. package/assets/tray-processing-2Template@2x.png +0 -0
  67. package/assets/tray-processing-3.png +0 -0
  68. package/assets/tray-processing-3@2x.png +0 -0
  69. package/assets/tray-processing-3Template.png +0 -0
  70. package/assets/tray-processing-3Template@2x.png +0 -0
  71. package/assets/tray-processing.png +0 -0
  72. package/assets/tray-processing@2x.png +0 -0
  73. package/assets/tray-processingTemplate.png +0 -0
  74. package/assets/tray-processingTemplate@2x.png +0 -0
  75. package/assets/tray-recording.png +0 -0
  76. package/assets/tray-recording@2x.png +0 -0
  77. package/assets/tray-recordingTemplate.png +0 -0
  78. package/assets/tray-recordingTemplate@2x.png +0 -0
  79. package/build/DMG_BACKGROUND_SPEC.md +0 -50
  80. package/build/dmg-background.png +0 -0
  81. package/build/dmg-background@2x.png +0 -0
  82. package/build/entitlements.mac.inherit.plist +0 -27
  83. package/build/entitlements.mac.plist +0 -41
  84. package/build/favicon-16.png +0 -0
  85. package/build/favicon-180.png +0 -0
  86. package/build/favicon-192.png +0 -0
  87. package/build/favicon-32.png +0 -0
  88. package/build/favicon-48.png +0 -0
  89. package/build/favicon-512.png +0 -0
  90. package/build/favicon-64.png +0 -0
  91. package/build/icon-128.png +0 -0
  92. package/build/icon-16.png +0 -0
  93. package/build/icon-24.png +0 -0
  94. package/build/icon-256.png +0 -0
  95. package/build/icon-32.png +0 -0
  96. package/build/icon-48.png +0 -0
  97. package/build/icon-64.png +0 -0
  98. package/build/icon.icns +0 -0
  99. package/build/icon.ico +0 -0
  100. package/build/icon.iconset/icon_128x128.png +0 -0
  101. package/build/icon.iconset/icon_128x128@2x.png +0 -0
  102. package/build/icon.iconset/icon_16x16.png +0 -0
  103. package/build/icon.iconset/icon_16x16@2x.png +0 -0
  104. package/build/icon.iconset/icon_256x256.png +0 -0
  105. package/build/icon.iconset/icon_256x256@2x.png +0 -0
  106. package/build/icon.iconset/icon_32x32.png +0 -0
  107. package/build/icon.iconset/icon_32x32@2x.png +0 -0
  108. package/build/icon.iconset/icon_512x512.png +0 -0
  109. package/build/icon.iconset/icon_512x512@2x.png +0 -0
  110. package/build/icon.png +0 -0
  111. package/build/installer-header.bmp +0 -0
  112. package/build/installer-header.png +0 -0
  113. package/build/installer-sidebar.bmp +0 -0
  114. package/build/installer-sidebar.png +0 -0
  115. package/build/installer.nsh +0 -45
  116. package/build/overlay-processing.png +0 -0
  117. package/build/overlay-recording.png +0 -0
  118. package/build/toolbar-record.png +0 -0
  119. package/build/toolbar-screenshot.png +0 -0
  120. package/build/toolbar-settings.png +0 -0
  121. package/build/toolbar-stop.png +0 -0
  122. package/dist/preload/index.mjs +0 -907
  123. package/dist/renderer/assets/index-CCmUjl9K.js +0 -19495
  124. package/dist/renderer/assets/index-CUqz_Gs6.css +0 -2270
  125. package/dist/renderer/index.html +0 -27
  126. package/docs/AI_AGENT_QUICKSTART.md +0 -42
  127. package/docs/AI_PIPELINE_DESIGN.md +0 -595
  128. package/docs/API.md +0 -514
  129. package/docs/ARCHITECTURE.md +0 -460
  130. package/docs/CONFIGURATION.md +0 -336
  131. package/docs/DEVELOPMENT.md +0 -508
  132. package/docs/EXPORT_FORMATS.md +0 -451
  133. package/docs/GETTING_STARTED.md +0 -236
  134. package/docs/KEYBOARD_SHORTCUTS.md +0 -334
  135. package/docs/TROUBLESHOOTING.md +0 -418
  136. package/docs/landing/index.html +0 -672
  137. package/docs/landing/script.js +0 -342
  138. package/docs/landing/styles.css +0 -1543
  139. package/electron-builder.yml +0 -140
  140. package/electron.vite.config.ts +0 -63
  141. package/railway.json +0 -12
  142. package/scripts/build.mjs +0 -51
  143. package/scripts/generate-icons.mjs +0 -314
  144. package/scripts/generate-installer-images.cjs +0 -253
  145. package/scripts/generate-tray-icons.mjs +0 -258
  146. package/scripts/notarize.cjs +0 -180
  147. package/scripts/one-click-clean-test.sh +0 -147
  148. package/scripts/postinstall.mjs +0 -36
  149. package/scripts/setup-markupr.sh +0 -55
  150. package/setup +0 -17
  151. package/site/index.html +0 -1835
  152. package/site/package.json +0 -11
  153. package/site/railway.json +0 -12
  154. package/site/server.js +0 -31
  155. package/src/main/AutoUpdater.ts +0 -392
  156. package/src/main/CrashRecovery.ts +0 -655
  157. package/src/main/ErrorHandler.ts +0 -703
  158. package/src/main/HotkeyManager.ts +0 -399
  159. package/src/main/MenuManager.ts +0 -529
  160. package/src/main/PermissionManager.ts +0 -420
  161. package/src/main/SessionController.ts +0 -1465
  162. package/src/main/TrayManager.ts +0 -540
  163. package/src/main/ai/AIPipelineManager.ts +0 -199
  164. package/src/main/ai/ClaudeAnalyzer.ts +0 -339
  165. package/src/main/ai/ImageOptimizer.ts +0 -176
  166. package/src/main/ai/StructuredMarkdownBuilder.ts +0 -379
  167. package/src/main/ai/index.ts +0 -16
  168. package/src/main/ai/types.ts +0 -258
  169. package/src/main/analysis/ClarificationGenerator.ts +0 -385
  170. package/src/main/analysis/FeedbackAnalyzer.ts +0 -531
  171. package/src/main/analysis/index.ts +0 -19
  172. package/src/main/audio/AudioCapture.ts +0 -978
  173. package/src/main/audio/audioUtils.ts +0 -100
  174. package/src/main/audio/index.ts +0 -20
  175. package/src/main/capture/index.ts +0 -1
  176. package/src/main/index.ts +0 -1693
  177. package/src/main/ipc/captureHandlers.ts +0 -272
  178. package/src/main/ipc/index.ts +0 -45
  179. package/src/main/ipc/outputHandlers.ts +0 -302
  180. package/src/main/ipc/sessionHandlers.ts +0 -56
  181. package/src/main/ipc/settingsHandlers.ts +0 -471
  182. package/src/main/ipc/types.ts +0 -56
  183. package/src/main/ipc/windowHandlers.ts +0 -277
  184. package/src/main/output/ClipboardService.ts +0 -369
  185. package/src/main/output/ExportService.ts +0 -539
  186. package/src/main/output/FileManager.ts +0 -416
  187. package/src/main/output/MarkdownGenerator.ts +0 -791
  188. package/src/main/output/MarkdownPatcher.ts +0 -299
  189. package/src/main/output/index.ts +0 -186
  190. package/src/main/output/sessionAdapter.ts +0 -207
  191. package/src/main/output/templates/html-template.ts +0 -553
  192. package/src/main/pipeline/FrameExtractor.ts +0 -330
  193. package/src/main/pipeline/PostProcessor.ts +0 -399
  194. package/src/main/pipeline/TranscriptAnalyzer.ts +0 -226
  195. package/src/main/pipeline/index.ts +0 -36
  196. package/src/main/platform/WindowsTaskbar.ts +0 -600
  197. package/src/main/platform/index.ts +0 -16
  198. package/src/main/settings/SettingsManager.ts +0 -730
  199. package/src/main/settings/index.ts +0 -19
  200. package/src/main/transcription/ModelDownloadManager.ts +0 -494
  201. package/src/main/transcription/TierManager.ts +0 -219
  202. package/src/main/transcription/TranscriptionRecoveryService.ts +0 -340
  203. package/src/main/transcription/WhisperService.ts +0 -748
  204. package/src/main/transcription/index.ts +0 -56
  205. package/src/main/transcription/types.ts +0 -135
  206. package/src/main/windows/PopoverManager.ts +0 -284
  207. package/src/main/windows/TaskbarIntegration.ts +0 -452
  208. package/src/main/windows/index.ts +0 -23
  209. package/src/preload/index.ts +0 -1047
  210. package/src/renderer/App.tsx +0 -515
  211. package/src/renderer/AppWrapper.tsx +0 -28
  212. package/src/renderer/assets/logo-dark.svg +0 -7
  213. package/src/renderer/assets/logo.svg +0 -7
  214. package/src/renderer/audio/AudioCaptureRenderer.ts +0 -454
  215. package/src/renderer/capture/ScreenRecordingRenderer.ts +0 -492
  216. package/src/renderer/components/AnnotationOverlay.tsx +0 -836
  217. package/src/renderer/components/AudioWaveform.tsx +0 -811
  218. package/src/renderer/components/ClarificationQuestions.tsx +0 -656
  219. package/src/renderer/components/CountdownTimer.tsx +0 -495
  220. package/src/renderer/components/CrashRecoveryDialog.tsx +0 -632
  221. package/src/renderer/components/DonateButton.tsx +0 -127
  222. package/src/renderer/components/ErrorBoundary.tsx +0 -308
  223. package/src/renderer/components/ExportDialog.tsx +0 -872
  224. package/src/renderer/components/HotkeyHint.tsx +0 -261
  225. package/src/renderer/components/KeyboardShortcuts.tsx +0 -787
  226. package/src/renderer/components/ModelDownloadDialog.tsx +0 -844
  227. package/src/renderer/components/Onboarding.tsx +0 -1830
  228. package/src/renderer/components/ProcessingOverlay.tsx +0 -157
  229. package/src/renderer/components/RecordingOverlay.tsx +0 -423
  230. package/src/renderer/components/SessionHistory.tsx +0 -1746
  231. package/src/renderer/components/SessionReview.tsx +0 -1321
  232. package/src/renderer/components/SettingsPanel.tsx +0 -217
  233. package/src/renderer/components/Skeleton.tsx +0 -347
  234. package/src/renderer/components/StatusIndicator.tsx +0 -86
  235. package/src/renderer/components/ThemeProvider.tsx +0 -429
  236. package/src/renderer/components/Tooltip.tsx +0 -370
  237. package/src/renderer/components/TranscriptionPreview.tsx +0 -183
  238. package/src/renderer/components/TranscriptionTierSelector.tsx +0 -640
  239. package/src/renderer/components/UpdateNotification.tsx +0 -377
  240. package/src/renderer/components/WindowSelector.tsx +0 -947
  241. package/src/renderer/components/index.ts +0 -99
  242. package/src/renderer/components/primitives/ApiKeyInput.tsx +0 -98
  243. package/src/renderer/components/primitives/ColorPicker.tsx +0 -65
  244. package/src/renderer/components/primitives/DangerButton.tsx +0 -45
  245. package/src/renderer/components/primitives/DirectoryPicker.tsx +0 -41
  246. package/src/renderer/components/primitives/Dropdown.tsx +0 -34
  247. package/src/renderer/components/primitives/KeyRecorder.tsx +0 -117
  248. package/src/renderer/components/primitives/SettingsSection.tsx +0 -32
  249. package/src/renderer/components/primitives/Slider.tsx +0 -43
  250. package/src/renderer/components/primitives/Toggle.tsx +0 -36
  251. package/src/renderer/components/primitives/index.ts +0 -10
  252. package/src/renderer/components/settings/AdvancedTab.tsx +0 -174
  253. package/src/renderer/components/settings/AppearanceTab.tsx +0 -77
  254. package/src/renderer/components/settings/GeneralTab.tsx +0 -40
  255. package/src/renderer/components/settings/HotkeysTab.tsx +0 -79
  256. package/src/renderer/components/settings/RecordingTab.tsx +0 -84
  257. package/src/renderer/components/settings/index.ts +0 -9
  258. package/src/renderer/components/settings/settingsStyles.ts +0 -673
  259. package/src/renderer/components/settings/tabConfig.tsx +0 -85
  260. package/src/renderer/components/settings/useSettingsPanel.ts +0 -447
  261. package/src/renderer/contexts/ProcessingContext.tsx +0 -227
  262. package/src/renderer/contexts/RecordingContext.tsx +0 -683
  263. package/src/renderer/contexts/UIContext.tsx +0 -326
  264. package/src/renderer/contexts/index.ts +0 -24
  265. package/src/renderer/donateMessages.ts +0 -69
  266. package/src/renderer/hooks/index.ts +0 -75
  267. package/src/renderer/hooks/useAnimation.tsx +0 -544
  268. package/src/renderer/hooks/useTheme.ts +0 -313
  269. package/src/renderer/index.html +0 -26
  270. package/src/renderer/main.tsx +0 -52
  271. package/src/renderer/styles/animations.css +0 -1093
  272. package/src/renderer/styles/app-shell.css +0 -662
  273. package/src/renderer/styles/globals.css +0 -515
  274. package/src/renderer/styles/theme.ts +0 -578
  275. package/src/renderer/types/electron.d.ts +0 -385
  276. package/src/shared/hotkeys.ts +0 -283
  277. package/src/shared/types.ts +0 -809
  278. package/tests/clipboard.test.ts +0 -228
  279. package/tests/e2e/criticalPaths.test.ts +0 -594
  280. package/tests/feedbackAnalyzer.test.ts +0 -303
  281. package/tests/integration/sessionFlow.test.ts +0 -583
  282. package/tests/markdownGenerator.test.ts +0 -418
  283. package/tests/output.test.ts +0 -96
  284. package/tests/setup.ts +0 -486
  285. package/tests/unit/appIntegration.test.ts +0 -676
  286. package/tests/unit/appViewState.test.ts +0 -281
  287. package/tests/unit/audioIpcChannels.test.ts +0 -17
  288. package/tests/unit/exportService.test.ts +0 -492
  289. package/tests/unit/hotkeys.test.ts +0 -92
  290. package/tests/unit/navigationPreload.test.ts +0 -94
  291. package/tests/unit/onboardingFlow.test.ts +0 -345
  292. package/tests/unit/permissionManager.test.ts +0 -175
  293. package/tests/unit/permissionManagerExpanded.test.ts +0 -296
  294. package/tests/unit/screenRecordingRenderer.test.ts +0 -368
  295. package/tests/unit/sessionController.test.ts +0 -515
  296. package/tests/unit/tierManager.test.ts +0 -61
  297. package/tests/unit/tierManagerExpanded.test.ts +0 -142
  298. package/tests/unit/transcriptAnalyzer.test.ts +0 -64
  299. package/tsconfig.json +0 -25
  300. package/vitest.config.ts +0 -46
package/SECURITY.md DELETED
@@ -1,51 +0,0 @@
1
- # Security Policy
2
-
3
- ## Reporting a Vulnerability
4
-
5
- **DO NOT create public GitHub issues for security vulnerabilities.**
6
-
7
- Email: **security@markupr.app**
8
-
9
- Alternatively, use GitHub's private vulnerability reporting feature.
10
-
11
- ### What to Include
12
-
13
- - Description of the vulnerability
14
- - Steps to reproduce
15
- - Potential impact
16
- - Suggested fix (if any)
17
-
18
- ### Response Timeline
19
-
20
- - **Acknowledgment**: Within 48 hours
21
- - **Initial Assessment**: Within 7 days
22
- - **Fix Target**: Within 30 days for critical issues
23
- - **Public Disclosure**: 90 days after report (coordinated disclosure)
24
-
25
- ### Scope
26
-
27
- In scope:
28
- - Remote code execution
29
- - Data exfiltration (audio, screenshots, transcriptions)
30
- - Privilege escalation
31
- - Authentication bypass
32
- - API key exposure
33
- - Clipboard injection attacks
34
-
35
- Out of scope:
36
- - Social engineering attacks
37
- - Physical access attacks
38
- - Issues in dependencies (report upstream)
39
-
40
- ### Safe Harbor
41
-
42
- We will not take legal action against researchers who:
43
- - Act in good faith
44
- - Avoid privacy violations
45
- - Do not exploit vulnerabilities beyond proof-of-concept
46
- - Report vulnerabilities promptly
47
- - Allow 90 days before public disclosure
48
-
49
- ### Recognition
50
-
51
- Responsible disclosures may be credited in release notes (opt-in).
@@ -1,284 +0,0 @@
1
- # Code Signing & Notarization Guide for markupr
2
-
3
- This guide explains how to set up Apple code signing and notarization for distributing markupr.
4
-
5
- ## Why Code Signing Matters
6
-
7
- Without code signing, macOS Gatekeeper will:
8
- - Block the app from opening
9
- - Show scary "unidentified developer" warnings
10
- - Require users to go through Security settings to allow the app
11
-
12
- With code signing AND notarization:
13
- - App opens without warnings
14
- - Users feel confident installing your app
15
- - Apple has verified the app is free of malware
16
-
17
- ---
18
-
19
- ## Prerequisites
20
-
21
- 1. **Apple Developer Account** ($99/year)
22
- - Sign up at https://developer.apple.com
23
- - Required for distribution outside the Mac App Store
24
-
25
- 2. **Xcode Command Line Tools**
26
- ```bash
27
- xcode-select --install
28
- ```
29
-
30
- ---
31
-
32
- ## Step 1: Create Certificates
33
-
34
- ### Via Xcode (Recommended)
35
-
36
- 1. Open Xcode > Preferences > Accounts
37
- 2. Select your Apple ID > Manage Certificates
38
- 3. Click `+` and create:
39
- - "Developer ID Application" certificate
40
-
41
- ### Via Apple Developer Portal
42
-
43
- 1. Go to https://developer.apple.com/account/resources/certificates
44
- 2. Click `+` to create a new certificate
45
- 3. Select "Developer ID Application"
46
- 4. Follow the CSR (Certificate Signing Request) instructions
47
- 5. Download and double-click to install in Keychain
48
-
49
- ### Verify Installation
50
-
51
- ```bash
52
- security find-identity -v -p codesigning
53
- ```
54
-
55
- You should see your "Developer ID Application: Your Name (TEAM_ID)" certificate.
56
-
57
- ---
58
-
59
- ## Step 2: Create App-Specific Password
60
-
61
- Apple requires an app-specific password for notarization (not your regular Apple ID password).
62
-
63
- 1. Go to https://appleid.apple.com
64
- 2. Sign in with your Apple ID
65
- 3. Navigate to "App-Specific Passwords"
66
- 4. Click "Generate Password"
67
- 5. Name it "markupr Notarization"
68
- 6. **Save this password securely** - you'll need it for builds
69
-
70
- ---
71
-
72
- ## Step 3: Find Your Team ID
73
-
74
- Your Team ID is a 10-character alphanumeric code.
75
-
76
- ### Method 1: Xcode
77
- Open Xcode > Preferences > Accounts > Select your team > View the Team ID
78
-
79
- ### Method 2: Developer Portal
80
- Go to https://developer.apple.com/account > Membership > Team ID
81
-
82
- ### Method 3: Command Line
83
- ```bash
84
- security find-identity -v -p codesigning | grep "Developer ID"
85
- # Output: ... "Developer ID Application: Your Name (ABCD1234XY)"
86
- # Your Team ID is the part in parentheses: ABCD1234XY
87
- ```
88
-
89
- ---
90
-
91
- ## Step 4: Set Environment Variables
92
-
93
- ### For Local Development
94
-
95
- Add to your shell profile (`~/.zshrc` or `~/.bashrc`):
96
-
97
- ```bash
98
- # markupr Code Signing
99
- export APPLE_ID="your.email@example.com"
100
- export APPLE_APP_SPECIFIC_PASSWORD="xxxx-xxxx-xxxx-xxxx"
101
- export APPLE_TEAM_ID="ABCD1234XY"
102
- ```
103
-
104
- Then reload:
105
- ```bash
106
- source ~/.zshrc
107
- ```
108
-
109
- ### For CI/CD (GitHub Actions)
110
-
111
- Add these as repository secrets:
112
- - `APPLE_ID`
113
- - `APPLE_APP_SPECIFIC_PASSWORD`
114
- - `APPLE_TEAM_ID`
115
- - `CSC_LINK` (base64-encoded .p12 certificate)
116
- - `CSC_KEY_PASSWORD` (certificate password)
117
-
118
- ---
119
-
120
- ## Step 5: Export Certificate for CI
121
-
122
- To sign in CI, you need to export your certificate as a base64-encoded .p12 file.
123
-
124
- ### Export from Keychain
125
-
126
- 1. Open Keychain Access
127
- 2. Find your "Developer ID Application" certificate
128
- 3. Right-click > Export
129
- 4. Save as `.p12` format
130
- 5. Set a strong password (this becomes `CSC_KEY_PASSWORD`)
131
-
132
- ### Convert to Base64
133
-
134
- ```bash
135
- base64 -i Certificates.p12 -o certificate-base64.txt
136
- ```
137
-
138
- The contents of `certificate-base64.txt` is your `CSC_LINK` secret.
139
-
140
- ---
141
-
142
- ## Step 6: Build & Sign
143
-
144
- ### Local Build
145
-
146
- ```bash
147
- # Build the app
148
- npm run build
149
-
150
- # Package for macOS (will sign and notarize)
151
- npm run package:mac
152
- ```
153
-
154
- ### Build Without Signing (for testing)
155
-
156
- ```bash
157
- # Skip signing
158
- CSC_IDENTITY_AUTO_DISCOVERY=false npm run package:mac
159
- ```
160
-
161
- ---
162
-
163
- ## Troubleshooting
164
-
165
- ### "No identity found for signing"
166
-
167
- Your certificate isn't installed or recognized:
168
- ```bash
169
- # Check installed certificates
170
- security find-identity -v -p codesigning
171
-
172
- # If empty, reinstall your certificate from Keychain
173
- ```
174
-
175
- ### "Notarization failed: invalid credentials"
176
-
177
- 1. Regenerate your app-specific password
178
- 2. Verify APPLE_ID matches your developer account email exactly
179
- 3. Check APPLE_TEAM_ID is correct
180
-
181
- ### "The signature is invalid"
182
-
183
- The app was modified after signing:
184
- ```bash
185
- # Verify signature
186
- codesign --verify --deep --strict /path/to/markupr.app
187
-
188
- # Re-sign if needed
189
- codesign --deep --force --verify --verbose --sign "Developer ID Application: Your Name" /path/to/markupr.app
190
- ```
191
-
192
- ### "This app is damaged"
193
-
194
- Gatekeeper quarantine issue:
195
- ```bash
196
- # Remove quarantine attribute
197
- xattr -cr /Applications/markupr.app
198
- ```
199
-
200
- ### Notarization timeout
201
-
202
- Apple's servers can be slow. The process typically takes 2-10 minutes but can take longer. The script will wait automatically.
203
-
204
- ---
205
-
206
- ## GitHub Actions CI Setup
207
-
208
- Add this to your workflow:
209
-
210
- ```yaml
211
- jobs:
212
- build-mac:
213
- runs-on: macos-latest
214
- steps:
215
- - uses: actions/checkout@v4
216
-
217
- - name: Setup Node.js
218
- uses: actions/setup-node@v4
219
- with:
220
- node-version: '20'
221
-
222
- - name: Install dependencies
223
- run: npm ci
224
-
225
- - name: Build
226
- run: npm run build
227
-
228
- - name: Package & Sign
229
- env:
230
- APPLE_ID: ${{ secrets.APPLE_ID }}
231
- APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
232
- APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
233
- CSC_LINK: ${{ secrets.CSC_LINK }}
234
- CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
235
- run: npm run package:mac
236
-
237
- - name: Upload Artifact
238
- uses: actions/upload-artifact@v4
239
- with:
240
- name: markupr-mac
241
- path: release/*.dmg
242
- ```
243
-
244
- ---
245
-
246
- ## Environment Variables Reference
247
-
248
- | Variable | Description | Example |
249
- |----------|-------------|---------|
250
- | `APPLE_ID` | Apple Developer account email | `dev@example.com` |
251
- | `APPLE_APP_SPECIFIC_PASSWORD` | App-specific password from appleid.apple.com | `xxxx-xxxx-xxxx-xxxx` |
252
- | `APPLE_TEAM_ID` | 10-char Apple Team ID | `ABCD1234XY` |
253
- | `CSC_LINK` | Base64-encoded .p12 certificate | (long string) |
254
- | `CSC_KEY_PASSWORD` | Password for .p12 certificate | (your password) |
255
-
256
- ---
257
-
258
- ## Quick Reference Commands
259
-
260
- ```bash
261
- # Build and package
262
- npm run build && npm run package:mac
263
-
264
- # Release (builds, signs, notarizes, publishes to GitHub)
265
- npm run release
266
-
267
- # Check what will be included in the package
268
- npx electron-builder --mac --dir
269
-
270
- # Verify signature
271
- codesign --verify --deep --strict "release/mac/markupr.app"
272
-
273
- # Check notarization status
274
- xcrun stapler validate "release/markupr-0.2.0.dmg"
275
- ```
276
-
277
- ---
278
-
279
- ## Security Notes
280
-
281
- - **Never commit** certificates, passwords, or keys to git
282
- - Use environment variables or CI secrets only
283
- - Rotate app-specific passwords periodically
284
- - Keep your .p12 certificate file secure and backed up
@@ -1,130 +0,0 @@
1
- # DMG Background Image Instructions
2
-
3
- Create a professional DMG background for markupr installation.
4
-
5
- ## Specifications
6
-
7
- | Property | Value |
8
- |----------|-------|
9
- | **Dimensions** | 540 x 400 pixels |
10
- | **Format** | PNG |
11
- | **Filename** | `dmg-background.png` |
12
- | **Location** | `assets/dmg-background.png` |
13
-
14
- ## Design Guidelines
15
-
16
- ### Background
17
- - Use a gradient matching the app theme
18
- - Primary color: `#0f172a` (slate-900)
19
- - Secondary color: `#1e293b` (slate-800)
20
- - Gradient direction: top-left to bottom-right
21
-
22
- ### Layout
23
- The DMG window has two drop zones:
24
- - **App icon** at position (130, 220) - left side
25
- - **Applications folder** at position (410, 220) - right side
26
-
27
- ### Visual Elements
28
-
29
- 1. **Arrow Indicator**
30
- - Subtle arrow pointing from left (app) to right (Applications)
31
- - Color: `#38bdf8` (sky-400) with 50% opacity
32
- - Positioned between the two icons at y=220
33
-
34
- 2. **Install Text** (optional)
35
- - "Drag to Applications to install"
36
- - Font: SF Pro Display or system font
37
- - Color: `#94a3b8` (slate-400)
38
- - Position: centered, below the arrow (y~280)
39
-
40
- 3. **App Branding** (optional)
41
- - Small markupr logo in top-left corner
42
- - Very subtle, ~40px height
43
-
44
- ### Color Palette
45
-
46
- ```
47
- Background gradient:
48
- Start: #0f172a (slate-900)
49
- End: #1e293b (slate-800)
50
-
51
- Accent:
52
- Primary: #38bdf8 (sky-400)
53
-
54
- Text:
55
- Muted: #94a3b8 (slate-400)
56
- Light: #e2e8f0 (slate-200)
57
- ```
58
-
59
- ## Creating the Background
60
-
61
- ### Option 1: Figma/Sketch
62
- 1. Create a 540x400 artboard
63
- 2. Apply background gradient
64
- 3. Add arrow and optional text
65
- 4. Export as PNG
66
-
67
- ### Option 2: Command Line (Simple Gradient Only)
68
- ```bash
69
- # Using ImageMagick
70
- convert -size 540x400 gradient:'#0f172a'-'#1e293b' assets/dmg-background.png
71
- ```
72
-
73
- ### Option 3: Online Tools
74
- - Canva (free tier works)
75
- - Figma (free tier works)
76
- - Photopea (free Photoshop alternative)
77
-
78
- ## Icon Requirements
79
-
80
- ### Application Icon (`icon.icns`)
81
- - Required sizes: 16, 32, 64, 128, 256, 512, 1024 pixels
82
- - Format: .icns (macOS icon format)
83
- - Location: `assets/icon.icns`
84
-
85
- To create from PNG:
86
- ```bash
87
- # Create iconset directory
88
- mkdir icon.iconset
89
-
90
- # Create all required sizes (starting from 1024x1024 source)
91
- sips -z 16 16 icon-1024.png --out icon.iconset/icon_16x16.png
92
- sips -z 32 32 icon-1024.png --out icon.iconset/icon_16x16@2x.png
93
- sips -z 32 32 icon-1024.png --out icon.iconset/icon_32x32.png
94
- sips -z 64 64 icon-1024.png --out icon.iconset/icon_32x32@2x.png
95
- sips -z 128 128 icon-1024.png --out icon.iconset/icon_128x128.png
96
- sips -z 256 256 icon-1024.png --out icon.iconset/icon_128x128@2x.png
97
- sips -z 256 256 icon-1024.png --out icon.iconset/icon_256x256.png
98
- sips -z 512 512 icon-1024.png --out icon.iconset/icon_256x256@2x.png
99
- sips -z 512 512 icon-1024.png --out icon.iconset/icon_512x512.png
100
- sips -z 1024 1024 icon-1024.png --out icon.iconset/icon_512x512@2x.png
101
-
102
- # Convert to icns
103
- iconutil -c icns icon.iconset -o assets/icon.icns
104
- ```
105
-
106
- ### DMG Icon (`dmg-icon.icns`)
107
- - Same process as above
108
- - Can be the same as app icon or a variation
109
- - Location: `assets/dmg-icon.icns`
110
-
111
- ## File Checklist
112
-
113
- Before building, ensure these files exist:
114
-
115
- ```
116
- assets/
117
- ├── dmg-background.png (540x400 PNG)
118
- ├── icon.icns (macOS app icon)
119
- └── dmg-icon.icns (DMG volume icon)
120
- ```
121
-
122
- ## Quick Placeholder
123
-
124
- For testing, create a simple placeholder:
125
- ```bash
126
- # Solid color placeholder (just for testing builds)
127
- convert -size 540x400 xc:'#0f172a' assets/dmg-background.png
128
- ```
129
-
130
- The build will work with a simple background - polish it before release.
@@ -1,70 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="660" height="400" viewBox="0 0 660 400" fill="none" xmlns="http://www.w3.org/2000/svg">
3
- <defs>
4
- <!-- Background gradient -->
5
- <linearGradient id="dmgBgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
6
- <stop offset="0%" style="stop-color:#1E1E2E"/>
7
- <stop offset="50%" style="stop-color:#2D2D44"/>
8
- <stop offset="100%" style="stop-color:#1E1E2E"/>
9
- </linearGradient>
10
-
11
- <!-- Accent gradient -->
12
- <linearGradient id="dmgAccent" x1="0%" y1="0%" x2="100%" y2="0%">
13
- <stop offset="0%" style="stop-color:#6366F1" stop-opacity="0.3"/>
14
- <stop offset="50%" style="stop-color:#8B5CF6" stop-opacity="0.5"/>
15
- <stop offset="100%" style="stop-color:#EC4899" stop-opacity="0.3"/>
16
- </linearGradient>
17
-
18
- <!-- Glow filter -->
19
- <filter id="dmgGlow" x="-50%" y="-50%" width="200%" height="200%">
20
- <feGaussianBlur stdDeviation="20" result="blur"/>
21
- <feComposite in="SourceGraphic" in2="blur" operator="over"/>
22
- </filter>
23
- </defs>
24
-
25
- <!-- Background -->
26
- <rect width="660" height="400" fill="url(#dmgBgGrad)"/>
27
-
28
- <!-- Subtle grid pattern -->
29
- <g opacity="0.05">
30
- <pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
31
- <path d="M 40 0 L 0 0 0 40" fill="none" stroke="white" stroke-width="1"/>
32
- </pattern>
33
- <rect width="660" height="400" fill="url(#grid)"/>
34
- </g>
35
-
36
- <!-- Accent glow orbs -->
37
- <circle cx="165" cy="180" r="120" fill="url(#dmgAccent)" filter="url(#dmgGlow)" opacity="0.4"/>
38
- <circle cx="495" cy="180" r="120" fill="url(#dmgAccent)" filter="url(#dmgGlow)" opacity="0.4"/>
39
-
40
- <!-- App icon placeholder area (left side) -->
41
- <g transform="translate(105, 110)">
42
- <rect width="120" height="120" rx="27" fill="#6366F1" opacity="0.2" stroke="#6366F1" stroke-width="2" stroke-dasharray="8 4"/>
43
- <text x="60" y="150" text-anchor="middle" font-family="system-ui, sans-serif" font-size="14" fill="#94A3B8">markupr</text>
44
- </g>
45
-
46
- <!-- Arrow indicating drag direction -->
47
- <g transform="translate(280, 155)">
48
- <!-- Arrow body -->
49
- <rect x="0" y="20" width="100" height="10" rx="5" fill="white" opacity="0.3"/>
50
- <!-- Arrow head -->
51
- <polygon points="100,25 130,25 115,5" fill="white" opacity="0.4"/>
52
- <polygon points="100,25 130,25 115,45" fill="white" opacity="0.4"/>
53
- </g>
54
-
55
- <!-- Applications folder placeholder (right side) -->
56
- <g transform="translate(435, 110)">
57
- <rect width="120" height="120" rx="27" fill="#64748B" opacity="0.2" stroke="#64748B" stroke-width="2" stroke-dasharray="8 4"/>
58
- <!-- Folder icon hint -->
59
- <path d="M45 50 L45 90 L95 90 L95 55 L70 55 L65 50 Z" fill="#64748B" opacity="0.3"/>
60
- <text x="60" y="150" text-anchor="middle" font-family="system-ui, sans-serif" font-size="14" fill="#94A3B8">Applications</text>
61
- </g>
62
-
63
- <!-- Install instruction text -->
64
- <text x="330" y="320" text-anchor="middle" font-family="system-ui, sans-serif" font-size="18" font-weight="600" fill="#F8FAFC" opacity="0.8">
65
- Drag to install
66
- </text>
67
-
68
- <!-- Subtle brand line -->
69
- <rect x="200" y="360" width="260" height="3" rx="1.5" fill="url(#dmgAccent)" opacity="0.6"/>
70
- </svg>
@@ -1,20 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
3
- <defs>
4
- <linearGradient id="bg" x1="128" y1="96" x2="896" y2="928" gradientUnits="userSpaceOnUse">
5
- <stop offset="0" stop-color="#FFFFFF"/>
6
- <stop offset="1" stop-color="#EEF1F4"/>
7
- </linearGradient>
8
- <linearGradient id="glass" x1="512" y1="128" x2="512" y2="896" gradientUnits="userSpaceOnUse">
9
- <stop offset="0" stop-color="#FFFFFF" stop-opacity="0.68"/>
10
- <stop offset="1" stop-color="#FFFFFF" stop-opacity="0"/>
11
- </linearGradient>
12
- </defs>
13
-
14
- <rect x="96" y="96" width="832" height="832" rx="220" fill="url(#bg)"/>
15
- <rect x="96" y="96" width="832" height="832" rx="220" stroke="#D7DCE2" stroke-width="18"/>
16
- <rect x="132" y="132" width="760" height="360" rx="184" fill="url(#glass)"/>
17
-
18
- <path d="M292 714V314L512 524L732 314V714" stroke="#111827" stroke-width="74" stroke-linecap="round" stroke-linejoin="round"/>
19
- <circle cx="732" cy="714" r="36" fill="#111827"/>
20
- </svg>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
3
- <rect x="3" y="3" width="16" height="16" rx="4" stroke="black" stroke-width="1.6" fill="none"/>
4
- <path d="M7 15V8L11 12L15 8V15" stroke="black" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
5
- <circle cx="15" cy="15" r="1.2" fill="black"/>
6
- <circle cx="18" cy="4" r="2.5" stroke="black" stroke-width="1.3" fill="none" stroke-dasharray="7 5" stroke-linecap="round"/>
7
- </svg>
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
3
- <rect x="3" y="3" width="16" height="16" rx="4" stroke="black" stroke-width="1.6" fill="none"/>
4
- <path d="M7 15V8L11 12L15 8V15" stroke="black" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
5
- <circle cx="15" cy="15" r="1.2" fill="black"/>
6
- <circle cx="18" cy="4" r="2.5" fill="#FF3B30"/>
7
- </svg>
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
3
- <rect x="3" y="3" width="16" height="16" rx="4" stroke="black" stroke-width="1.6" fill="none"/>
4
- <path d="M7 15V8L11 12L15 8V15" stroke="black" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
5
- <circle cx="15" cy="15" r="1.2" fill="black"/>
6
- </svg>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file