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.
- package/README.md +292 -15
- package/dist/cli/index.mjs +3593 -0
- package/dist/main/index.mjs +743 -220
- package/dist/mcp/index.mjs +4053 -0
- package/package.json +32 -7
- package/.claude/commands/review-feedback.md +0 -47
- package/.eslintrc.json +0 -35
- package/.github/CODEOWNERS +0 -16
- package/.github/FUNDING.yml +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -56
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -54
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -89
- package/.github/dependabot.yml +0 -70
- package/.github/workflows/ci.yml +0 -184
- package/.github/workflows/deploy-landing.yml +0 -134
- package/.github/workflows/nightly.yml +0 -288
- package/.github/workflows/release.yml +0 -318
- package/CHANGELOG.md +0 -127
- package/CLAUDE.md +0 -137
- package/CODE_OF_CONDUCT.md +0 -9
- package/CONTRIBUTING.md +0 -390
- package/PRODUCT_VISION.md +0 -277
- package/SECURITY.md +0 -51
- package/SIGNING_INSTRUCTIONS.md +0 -284
- package/assets/DMG_BACKGROUND_INSTRUCTIONS.md +0 -130
- package/assets/svg-source/dmg-background.svg +0 -70
- package/assets/svg-source/icon.svg +0 -20
- package/assets/svg-source/tray-icon-processing.svg +0 -7
- package/assets/svg-source/tray-icon-recording.svg +0 -7
- package/assets/svg-source/tray-icon.svg +0 -6
- package/assets/tray-complete.png +0 -0
- package/assets/tray-complete@2x.png +0 -0
- package/assets/tray-completeTemplate.png +0 -0
- package/assets/tray-completeTemplate@2x.png +0 -0
- package/assets/tray-error.png +0 -0
- package/assets/tray-error@2x.png +0 -0
- package/assets/tray-errorTemplate.png +0 -0
- package/assets/tray-errorTemplate@2x.png +0 -0
- package/assets/tray-icon-processing.png +0 -0
- package/assets/tray-icon-processing@2x.png +0 -0
- package/assets/tray-icon-processingTemplate.png +0 -0
- package/assets/tray-icon-processingTemplate@2x.png +0 -0
- package/assets/tray-icon-recording.png +0 -0
- package/assets/tray-icon-recording@2x.png +0 -0
- package/assets/tray-icon-recordingTemplate.png +0 -0
- package/assets/tray-icon-recordingTemplate@2x.png +0 -0
- package/assets/tray-icon.png +0 -0
- package/assets/tray-icon@2x.png +0 -0
- package/assets/tray-iconTemplate.png +0 -0
- package/assets/tray-iconTemplate@2x.png +0 -0
- package/assets/tray-idle.png +0 -0
- package/assets/tray-idle@2x.png +0 -0
- package/assets/tray-idleTemplate.png +0 -0
- package/assets/tray-idleTemplate@2x.png +0 -0
- package/assets/tray-processing-0.png +0 -0
- package/assets/tray-processing-0@2x.png +0 -0
- package/assets/tray-processing-0Template.png +0 -0
- package/assets/tray-processing-0Template@2x.png +0 -0
- package/assets/tray-processing-1.png +0 -0
- package/assets/tray-processing-1@2x.png +0 -0
- package/assets/tray-processing-1Template.png +0 -0
- package/assets/tray-processing-1Template@2x.png +0 -0
- package/assets/tray-processing-2.png +0 -0
- package/assets/tray-processing-2@2x.png +0 -0
- package/assets/tray-processing-2Template.png +0 -0
- package/assets/tray-processing-2Template@2x.png +0 -0
- package/assets/tray-processing-3.png +0 -0
- package/assets/tray-processing-3@2x.png +0 -0
- package/assets/tray-processing-3Template.png +0 -0
- package/assets/tray-processing-3Template@2x.png +0 -0
- package/assets/tray-processing.png +0 -0
- package/assets/tray-processing@2x.png +0 -0
- package/assets/tray-processingTemplate.png +0 -0
- package/assets/tray-processingTemplate@2x.png +0 -0
- package/assets/tray-recording.png +0 -0
- package/assets/tray-recording@2x.png +0 -0
- package/assets/tray-recordingTemplate.png +0 -0
- package/assets/tray-recordingTemplate@2x.png +0 -0
- package/build/DMG_BACKGROUND_SPEC.md +0 -50
- package/build/dmg-background.png +0 -0
- package/build/dmg-background@2x.png +0 -0
- package/build/entitlements.mac.inherit.plist +0 -27
- package/build/entitlements.mac.plist +0 -41
- package/build/favicon-16.png +0 -0
- package/build/favicon-180.png +0 -0
- package/build/favicon-192.png +0 -0
- package/build/favicon-32.png +0 -0
- package/build/favicon-48.png +0 -0
- package/build/favicon-512.png +0 -0
- package/build/favicon-64.png +0 -0
- package/build/icon-128.png +0 -0
- package/build/icon-16.png +0 -0
- package/build/icon-24.png +0 -0
- package/build/icon-256.png +0 -0
- package/build/icon-32.png +0 -0
- package/build/icon-48.png +0 -0
- package/build/icon-64.png +0 -0
- package/build/icon.icns +0 -0
- package/build/icon.ico +0 -0
- package/build/icon.iconset/icon_128x128.png +0 -0
- package/build/icon.iconset/icon_128x128@2x.png +0 -0
- package/build/icon.iconset/icon_16x16.png +0 -0
- package/build/icon.iconset/icon_16x16@2x.png +0 -0
- package/build/icon.iconset/icon_256x256.png +0 -0
- package/build/icon.iconset/icon_256x256@2x.png +0 -0
- package/build/icon.iconset/icon_32x32.png +0 -0
- package/build/icon.iconset/icon_32x32@2x.png +0 -0
- package/build/icon.iconset/icon_512x512.png +0 -0
- package/build/icon.iconset/icon_512x512@2x.png +0 -0
- package/build/icon.png +0 -0
- package/build/installer-header.bmp +0 -0
- package/build/installer-header.png +0 -0
- package/build/installer-sidebar.bmp +0 -0
- package/build/installer-sidebar.png +0 -0
- package/build/installer.nsh +0 -45
- package/build/overlay-processing.png +0 -0
- package/build/overlay-recording.png +0 -0
- package/build/toolbar-record.png +0 -0
- package/build/toolbar-screenshot.png +0 -0
- package/build/toolbar-settings.png +0 -0
- package/build/toolbar-stop.png +0 -0
- package/dist/preload/index.mjs +0 -907
- package/dist/renderer/assets/index-CCmUjl9K.js +0 -19495
- package/dist/renderer/assets/index-CUqz_Gs6.css +0 -2270
- package/dist/renderer/index.html +0 -27
- package/docs/AI_AGENT_QUICKSTART.md +0 -42
- package/docs/AI_PIPELINE_DESIGN.md +0 -595
- package/docs/API.md +0 -514
- package/docs/ARCHITECTURE.md +0 -460
- package/docs/CONFIGURATION.md +0 -336
- package/docs/DEVELOPMENT.md +0 -508
- package/docs/EXPORT_FORMATS.md +0 -451
- package/docs/GETTING_STARTED.md +0 -236
- package/docs/KEYBOARD_SHORTCUTS.md +0 -334
- package/docs/TROUBLESHOOTING.md +0 -418
- package/docs/landing/index.html +0 -672
- package/docs/landing/script.js +0 -342
- package/docs/landing/styles.css +0 -1543
- package/electron-builder.yml +0 -140
- package/electron.vite.config.ts +0 -63
- package/railway.json +0 -12
- package/scripts/build.mjs +0 -51
- package/scripts/generate-icons.mjs +0 -314
- package/scripts/generate-installer-images.cjs +0 -253
- package/scripts/generate-tray-icons.mjs +0 -258
- package/scripts/notarize.cjs +0 -180
- package/scripts/one-click-clean-test.sh +0 -147
- package/scripts/postinstall.mjs +0 -36
- package/scripts/setup-markupr.sh +0 -55
- package/setup +0 -17
- package/site/index.html +0 -1835
- package/site/package.json +0 -11
- package/site/railway.json +0 -12
- package/site/server.js +0 -31
- package/src/main/AutoUpdater.ts +0 -392
- package/src/main/CrashRecovery.ts +0 -655
- package/src/main/ErrorHandler.ts +0 -703
- package/src/main/HotkeyManager.ts +0 -399
- package/src/main/MenuManager.ts +0 -529
- package/src/main/PermissionManager.ts +0 -420
- package/src/main/SessionController.ts +0 -1465
- package/src/main/TrayManager.ts +0 -540
- package/src/main/ai/AIPipelineManager.ts +0 -199
- package/src/main/ai/ClaudeAnalyzer.ts +0 -339
- package/src/main/ai/ImageOptimizer.ts +0 -176
- package/src/main/ai/StructuredMarkdownBuilder.ts +0 -379
- package/src/main/ai/index.ts +0 -16
- package/src/main/ai/types.ts +0 -258
- package/src/main/analysis/ClarificationGenerator.ts +0 -385
- package/src/main/analysis/FeedbackAnalyzer.ts +0 -531
- package/src/main/analysis/index.ts +0 -19
- package/src/main/audio/AudioCapture.ts +0 -978
- package/src/main/audio/audioUtils.ts +0 -100
- package/src/main/audio/index.ts +0 -20
- package/src/main/capture/index.ts +0 -1
- package/src/main/index.ts +0 -1693
- package/src/main/ipc/captureHandlers.ts +0 -272
- package/src/main/ipc/index.ts +0 -45
- package/src/main/ipc/outputHandlers.ts +0 -302
- package/src/main/ipc/sessionHandlers.ts +0 -56
- package/src/main/ipc/settingsHandlers.ts +0 -471
- package/src/main/ipc/types.ts +0 -56
- package/src/main/ipc/windowHandlers.ts +0 -277
- package/src/main/output/ClipboardService.ts +0 -369
- package/src/main/output/ExportService.ts +0 -539
- package/src/main/output/FileManager.ts +0 -416
- package/src/main/output/MarkdownGenerator.ts +0 -791
- package/src/main/output/MarkdownPatcher.ts +0 -299
- package/src/main/output/index.ts +0 -186
- package/src/main/output/sessionAdapter.ts +0 -207
- package/src/main/output/templates/html-template.ts +0 -553
- package/src/main/pipeline/FrameExtractor.ts +0 -330
- package/src/main/pipeline/PostProcessor.ts +0 -399
- package/src/main/pipeline/TranscriptAnalyzer.ts +0 -226
- package/src/main/pipeline/index.ts +0 -36
- package/src/main/platform/WindowsTaskbar.ts +0 -600
- package/src/main/platform/index.ts +0 -16
- package/src/main/settings/SettingsManager.ts +0 -730
- package/src/main/settings/index.ts +0 -19
- package/src/main/transcription/ModelDownloadManager.ts +0 -494
- package/src/main/transcription/TierManager.ts +0 -219
- package/src/main/transcription/TranscriptionRecoveryService.ts +0 -340
- package/src/main/transcription/WhisperService.ts +0 -748
- package/src/main/transcription/index.ts +0 -56
- package/src/main/transcription/types.ts +0 -135
- package/src/main/windows/PopoverManager.ts +0 -284
- package/src/main/windows/TaskbarIntegration.ts +0 -452
- package/src/main/windows/index.ts +0 -23
- package/src/preload/index.ts +0 -1047
- package/src/renderer/App.tsx +0 -515
- package/src/renderer/AppWrapper.tsx +0 -28
- package/src/renderer/assets/logo-dark.svg +0 -7
- package/src/renderer/assets/logo.svg +0 -7
- package/src/renderer/audio/AudioCaptureRenderer.ts +0 -454
- package/src/renderer/capture/ScreenRecordingRenderer.ts +0 -492
- package/src/renderer/components/AnnotationOverlay.tsx +0 -836
- package/src/renderer/components/AudioWaveform.tsx +0 -811
- package/src/renderer/components/ClarificationQuestions.tsx +0 -656
- package/src/renderer/components/CountdownTimer.tsx +0 -495
- package/src/renderer/components/CrashRecoveryDialog.tsx +0 -632
- package/src/renderer/components/DonateButton.tsx +0 -127
- package/src/renderer/components/ErrorBoundary.tsx +0 -308
- package/src/renderer/components/ExportDialog.tsx +0 -872
- package/src/renderer/components/HotkeyHint.tsx +0 -261
- package/src/renderer/components/KeyboardShortcuts.tsx +0 -787
- package/src/renderer/components/ModelDownloadDialog.tsx +0 -844
- package/src/renderer/components/Onboarding.tsx +0 -1830
- package/src/renderer/components/ProcessingOverlay.tsx +0 -157
- package/src/renderer/components/RecordingOverlay.tsx +0 -423
- package/src/renderer/components/SessionHistory.tsx +0 -1746
- package/src/renderer/components/SessionReview.tsx +0 -1321
- package/src/renderer/components/SettingsPanel.tsx +0 -217
- package/src/renderer/components/Skeleton.tsx +0 -347
- package/src/renderer/components/StatusIndicator.tsx +0 -86
- package/src/renderer/components/ThemeProvider.tsx +0 -429
- package/src/renderer/components/Tooltip.tsx +0 -370
- package/src/renderer/components/TranscriptionPreview.tsx +0 -183
- package/src/renderer/components/TranscriptionTierSelector.tsx +0 -640
- package/src/renderer/components/UpdateNotification.tsx +0 -377
- package/src/renderer/components/WindowSelector.tsx +0 -947
- package/src/renderer/components/index.ts +0 -99
- package/src/renderer/components/primitives/ApiKeyInput.tsx +0 -98
- package/src/renderer/components/primitives/ColorPicker.tsx +0 -65
- package/src/renderer/components/primitives/DangerButton.tsx +0 -45
- package/src/renderer/components/primitives/DirectoryPicker.tsx +0 -41
- package/src/renderer/components/primitives/Dropdown.tsx +0 -34
- package/src/renderer/components/primitives/KeyRecorder.tsx +0 -117
- package/src/renderer/components/primitives/SettingsSection.tsx +0 -32
- package/src/renderer/components/primitives/Slider.tsx +0 -43
- package/src/renderer/components/primitives/Toggle.tsx +0 -36
- package/src/renderer/components/primitives/index.ts +0 -10
- package/src/renderer/components/settings/AdvancedTab.tsx +0 -174
- package/src/renderer/components/settings/AppearanceTab.tsx +0 -77
- package/src/renderer/components/settings/GeneralTab.tsx +0 -40
- package/src/renderer/components/settings/HotkeysTab.tsx +0 -79
- package/src/renderer/components/settings/RecordingTab.tsx +0 -84
- package/src/renderer/components/settings/index.ts +0 -9
- package/src/renderer/components/settings/settingsStyles.ts +0 -673
- package/src/renderer/components/settings/tabConfig.tsx +0 -85
- package/src/renderer/components/settings/useSettingsPanel.ts +0 -447
- package/src/renderer/contexts/ProcessingContext.tsx +0 -227
- package/src/renderer/contexts/RecordingContext.tsx +0 -683
- package/src/renderer/contexts/UIContext.tsx +0 -326
- package/src/renderer/contexts/index.ts +0 -24
- package/src/renderer/donateMessages.ts +0 -69
- package/src/renderer/hooks/index.ts +0 -75
- package/src/renderer/hooks/useAnimation.tsx +0 -544
- package/src/renderer/hooks/useTheme.ts +0 -313
- package/src/renderer/index.html +0 -26
- package/src/renderer/main.tsx +0 -52
- package/src/renderer/styles/animations.css +0 -1093
- package/src/renderer/styles/app-shell.css +0 -662
- package/src/renderer/styles/globals.css +0 -515
- package/src/renderer/styles/theme.ts +0 -578
- package/src/renderer/types/electron.d.ts +0 -385
- package/src/shared/hotkeys.ts +0 -283
- package/src/shared/types.ts +0 -809
- package/tests/clipboard.test.ts +0 -228
- package/tests/e2e/criticalPaths.test.ts +0 -594
- package/tests/feedbackAnalyzer.test.ts +0 -303
- package/tests/integration/sessionFlow.test.ts +0 -583
- package/tests/markdownGenerator.test.ts +0 -418
- package/tests/output.test.ts +0 -96
- package/tests/setup.ts +0 -486
- package/tests/unit/appIntegration.test.ts +0 -676
- package/tests/unit/appViewState.test.ts +0 -281
- package/tests/unit/audioIpcChannels.test.ts +0 -17
- package/tests/unit/exportService.test.ts +0 -492
- package/tests/unit/hotkeys.test.ts +0 -92
- package/tests/unit/navigationPreload.test.ts +0 -94
- package/tests/unit/onboardingFlow.test.ts +0 -345
- package/tests/unit/permissionManager.test.ts +0 -175
- package/tests/unit/permissionManagerExpanded.test.ts +0 -296
- package/tests/unit/screenRecordingRenderer.test.ts +0 -368
- package/tests/unit/sessionController.test.ts +0 -515
- package/tests/unit/tierManager.test.ts +0 -61
- package/tests/unit/tierManagerExpanded.test.ts +0 -142
- package/tests/unit/transcriptAnalyzer.test.ts +0 -64
- package/tsconfig.json +0 -25
- package/vitest.config.ts +0 -46
package/CONTRIBUTING.md
DELETED
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
# Contributing to markupr
|
|
2
|
-
|
|
3
|
-
Thank you for your interest in contributing to markupr! This document provides guidelines and information about contributing.
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
- [Code of Conduct](#code-of-conduct)
|
|
8
|
-
- [Getting Started](#getting-started)
|
|
9
|
-
- [How to Contribute](#how-to-contribute)
|
|
10
|
-
- [Development Workflow](#development-workflow)
|
|
11
|
-
- [Pull Request Process](#pull-request-process)
|
|
12
|
-
- [Style Guide](#style-guide)
|
|
13
|
-
- [Reporting Issues](#reporting-issues)
|
|
14
|
-
|
|
15
|
-
## Code of Conduct
|
|
16
|
-
|
|
17
|
-
By participating in this project, you agree to maintain a respectful and inclusive environment. Please:
|
|
18
|
-
|
|
19
|
-
- Be respectful and considerate in all interactions
|
|
20
|
-
- Welcome newcomers and help them learn
|
|
21
|
-
- Focus on constructive feedback
|
|
22
|
-
- Accept responsibility for mistakes and learn from them
|
|
23
|
-
|
|
24
|
-
## Getting Started
|
|
25
|
-
|
|
26
|
-
### Prerequisites
|
|
27
|
-
|
|
28
|
-
- Node.js 18+
|
|
29
|
-
- npm 9+
|
|
30
|
-
- Git
|
|
31
|
-
- A code editor (VS Code recommended)
|
|
32
|
-
|
|
33
|
-
### Setup
|
|
34
|
-
|
|
35
|
-
1. **Fork the repository** on GitHub
|
|
36
|
-
|
|
37
|
-
2. **Clone your fork**:
|
|
38
|
-
```bash
|
|
39
|
-
git clone https://github.com/YOUR_USERNAME/markupr.git
|
|
40
|
-
cd markupr
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
3. **Add upstream remote**:
|
|
44
|
-
```bash
|
|
45
|
-
git remote add upstream https://github.com/eddiesanjuan/markupr.git
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
4. **Install dependencies**:
|
|
49
|
-
```bash
|
|
50
|
-
npm install
|
|
51
|
-
# or
|
|
52
|
-
bun install
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
5. **Start development**:
|
|
56
|
-
```bash
|
|
57
|
-
npm run dev
|
|
58
|
-
# or
|
|
59
|
-
bun run dev
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
See [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for detailed development instructions.
|
|
63
|
-
|
|
64
|
-
## How to Contribute
|
|
65
|
-
|
|
66
|
-
### Types of Contributions
|
|
67
|
-
|
|
68
|
-
We welcome many types of contributions:
|
|
69
|
-
|
|
70
|
-
- **Bug fixes**: Fix issues in existing code
|
|
71
|
-
- **Features**: Add new functionality
|
|
72
|
-
- **Documentation**: Improve or add documentation
|
|
73
|
-
- **Tests**: Add or improve test coverage
|
|
74
|
-
- **Performance**: Optimize existing code
|
|
75
|
-
- **Accessibility**: Improve accessibility
|
|
76
|
-
- **Translations**: Help translate the UI
|
|
77
|
-
|
|
78
|
-
### Finding Issues to Work On
|
|
79
|
-
|
|
80
|
-
- Check [issues labeled "good first issue"](https://github.com/eddiesanjuan/markupr/labels/good%20first%20issue) for beginner-friendly tasks
|
|
81
|
-
- Check [issues labeled "help wanted"](https://github.com/eddiesanjuan/markupr/labels/help%20wanted) for tasks where we need help
|
|
82
|
-
- Feel free to propose your own ideas by opening an issue first
|
|
83
|
-
|
|
84
|
-
### Before Starting Work
|
|
85
|
-
|
|
86
|
-
1. **Check existing issues** to avoid duplicate work
|
|
87
|
-
2. **Comment on the issue** to let others know you're working on it
|
|
88
|
-
3. **For significant changes**, open an issue first to discuss the approach
|
|
89
|
-
4. **For new features**, wait for approval before starting implementation
|
|
90
|
-
|
|
91
|
-
## Development Workflow
|
|
92
|
-
|
|
93
|
-
### Branch Naming
|
|
94
|
-
|
|
95
|
-
Use descriptive branch names:
|
|
96
|
-
|
|
97
|
-
- `feature/add-pdf-export`
|
|
98
|
-
- `fix/hotkey-conflict`
|
|
99
|
-
- `docs/update-readme`
|
|
100
|
-
- `refactor/settings-panel`
|
|
101
|
-
|
|
102
|
-
### Making Changes
|
|
103
|
-
|
|
104
|
-
1. **Create a branch**:
|
|
105
|
-
```bash
|
|
106
|
-
git checkout -b feature/my-feature
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
2. **Make your changes**:
|
|
110
|
-
- Follow the [style guide](#style-guide)
|
|
111
|
-
- Keep commits focused and atomic
|
|
112
|
-
- Write clear commit messages
|
|
113
|
-
|
|
114
|
-
3. **Test your changes**:
|
|
115
|
-
```bash
|
|
116
|
-
npm test
|
|
117
|
-
npm run lint
|
|
118
|
-
npm run typecheck
|
|
119
|
-
# bun equivalents:
|
|
120
|
-
# bun run test
|
|
121
|
-
# bun run lint
|
|
122
|
-
# bun run typecheck
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
4. **Update documentation** if needed
|
|
126
|
-
|
|
127
|
-
5. **Commit your changes**:
|
|
128
|
-
```bash
|
|
129
|
-
git commit -m "feat: add new export format"
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Commit Message Format
|
|
133
|
-
|
|
134
|
-
We use [Conventional Commits](https://www.conventionalcommits.org/):
|
|
135
|
-
|
|
136
|
-
```
|
|
137
|
-
<type>(<scope>): <description>
|
|
138
|
-
|
|
139
|
-
[optional body]
|
|
140
|
-
|
|
141
|
-
[optional footer]
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
**Types**:
|
|
145
|
-
- `feat`: New feature
|
|
146
|
-
- `fix`: Bug fix
|
|
147
|
-
- `docs`: Documentation only
|
|
148
|
-
- `style`: Code style (formatting, etc.)
|
|
149
|
-
- `refactor`: Code change that neither fixes nor adds
|
|
150
|
-
- `perf`: Performance improvement
|
|
151
|
-
- `test`: Adding or updating tests
|
|
152
|
-
- `chore`: Maintenance tasks
|
|
153
|
-
|
|
154
|
-
**Examples**:
|
|
155
|
-
```
|
|
156
|
-
feat(export): add PDF export format
|
|
157
|
-
fix(hotkey): resolve conflict with system shortcuts
|
|
158
|
-
docs(readme): update installation instructions
|
|
159
|
-
refactor(settings): simplify settings manager
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Keeping Your Fork Updated
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
git fetch upstream
|
|
166
|
-
git checkout main
|
|
167
|
-
git merge upstream/main
|
|
168
|
-
git push origin main
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## Pull Request Process
|
|
172
|
-
|
|
173
|
-
### Before Submitting
|
|
174
|
-
|
|
175
|
-
Ensure your PR:
|
|
176
|
-
|
|
177
|
-
1. **Follows the style guide**
|
|
178
|
-
2. **Passes all tests**: `npm test`
|
|
179
|
-
3. **Passes linting**: `npm run lint`
|
|
180
|
-
4. **Passes type checking**: `npm run typecheck`
|
|
181
|
-
5. **Has been tested manually**
|
|
182
|
-
6. **Includes documentation updates** (if applicable)
|
|
183
|
-
7. **Has a clear description**
|
|
184
|
-
|
|
185
|
-
### Submitting a PR
|
|
186
|
-
|
|
187
|
-
1. **Push your branch**:
|
|
188
|
-
```bash
|
|
189
|
-
git push origin feature/my-feature
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
2. **Open a Pull Request** on GitHub
|
|
193
|
-
|
|
194
|
-
3. **Fill out the PR template**:
|
|
195
|
-
- Describe what the PR does
|
|
196
|
-
- Link related issues
|
|
197
|
-
- List any breaking changes
|
|
198
|
-
- Include screenshots for UI changes
|
|
199
|
-
|
|
200
|
-
4. **Request review** if not automatically assigned
|
|
201
|
-
|
|
202
|
-
### PR Template
|
|
203
|
-
|
|
204
|
-
```markdown
|
|
205
|
-
## Description
|
|
206
|
-
Brief description of changes.
|
|
207
|
-
|
|
208
|
-
## Related Issues
|
|
209
|
-
Fixes #123
|
|
210
|
-
|
|
211
|
-
## Type of Change
|
|
212
|
-
- [ ] Bug fix
|
|
213
|
-
- [ ] New feature
|
|
214
|
-
- [ ] Documentation
|
|
215
|
-
- [ ] Refactoring
|
|
216
|
-
- [ ] Other (describe)
|
|
217
|
-
|
|
218
|
-
## Testing
|
|
219
|
-
Describe how you tested the changes.
|
|
220
|
-
|
|
221
|
-
## Screenshots
|
|
222
|
-
(If applicable)
|
|
223
|
-
|
|
224
|
-
## Checklist
|
|
225
|
-
- [ ] Tests pass (`npm test`)
|
|
226
|
-
- [ ] Lint passes (`npm run lint`)
|
|
227
|
-
- [ ] Types check (`npm run typecheck`)
|
|
228
|
-
- [ ] Documentation updated
|
|
229
|
-
- [ ] Manually tested
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
### Review Process
|
|
233
|
-
|
|
234
|
-
1. **Automated checks** must pass
|
|
235
|
-
2. **At least one maintainer** must approve
|
|
236
|
-
3. **All comments** must be resolved
|
|
237
|
-
4. **No merge conflicts** with main
|
|
238
|
-
|
|
239
|
-
### After Merging
|
|
240
|
-
|
|
241
|
-
- Delete your branch
|
|
242
|
-
- Pull changes to your local main
|
|
243
|
-
- Celebrate your contribution! 🎉
|
|
244
|
-
|
|
245
|
-
## Style Guide
|
|
246
|
-
|
|
247
|
-
### TypeScript
|
|
248
|
-
|
|
249
|
-
```typescript
|
|
250
|
-
// Use explicit types
|
|
251
|
-
function createSession(sourceId: string): Session {
|
|
252
|
-
// ...
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// Use interfaces for objects
|
|
256
|
-
interface SessionOptions {
|
|
257
|
-
sourceId: string;
|
|
258
|
-
sourceName?: string;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// Use const assertions for literals
|
|
262
|
-
const STATUS = {
|
|
263
|
-
IDLE: 'idle',
|
|
264
|
-
RECORDING: 'recording',
|
|
265
|
-
} as const;
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### React
|
|
269
|
-
|
|
270
|
-
```tsx
|
|
271
|
-
// Use functional components
|
|
272
|
-
export function SessionStatus({ state }: SessionStatusProps) {
|
|
273
|
-
const [isActive, setIsActive] = useState(false);
|
|
274
|
-
|
|
275
|
-
useEffect(() => {
|
|
276
|
-
// Cleanup subscriptions
|
|
277
|
-
return () => cleanup();
|
|
278
|
-
}, []);
|
|
279
|
-
|
|
280
|
-
return <div className="status">{state}</div>;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Prefer named exports
|
|
284
|
-
export { SessionStatus };
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
### CSS / Tailwind
|
|
288
|
-
|
|
289
|
-
```tsx
|
|
290
|
-
// Use Tailwind utilities
|
|
291
|
-
<div className="bg-gray-900 text-white p-4 rounded-lg shadow-md">
|
|
292
|
-
|
|
293
|
-
// For complex styles, use cn() helper
|
|
294
|
-
<div className={cn(
|
|
295
|
-
"base-styles",
|
|
296
|
-
isActive && "active-styles",
|
|
297
|
-
className
|
|
298
|
-
)}>
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
### File Organization
|
|
302
|
-
|
|
303
|
-
```
|
|
304
|
-
src/
|
|
305
|
-
├── main/
|
|
306
|
-
│ ├── services/ # Service classes
|
|
307
|
-
│ ├── utils/ # Utility functions
|
|
308
|
-
│ └── types/ # Main-specific types
|
|
309
|
-
├── renderer/
|
|
310
|
-
│ ├── components/ # React components
|
|
311
|
-
│ ├── hooks/ # Custom hooks
|
|
312
|
-
│ └── utils/ # Utility functions
|
|
313
|
-
└── shared/
|
|
314
|
-
└── types.ts # Shared types
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### Naming Conventions
|
|
318
|
-
|
|
319
|
-
| Type | Convention | Example |
|
|
320
|
-
|------|------------|---------|
|
|
321
|
-
| Components | PascalCase | `SessionReview.tsx` |
|
|
322
|
-
| Hooks | camelCase, `use` prefix | `useSessionState.ts` |
|
|
323
|
-
| Utilities | camelCase | `formatTime.ts` |
|
|
324
|
-
| Types | PascalCase | `SessionState` |
|
|
325
|
-
| Constants | UPPER_SNAKE_CASE | `MAX_RETRIES` |
|
|
326
|
-
|
|
327
|
-
## Reporting Issues
|
|
328
|
-
|
|
329
|
-
### Before Reporting
|
|
330
|
-
|
|
331
|
-
1. **Check existing issues** for duplicates
|
|
332
|
-
2. **Try latest version** - issue may be fixed
|
|
333
|
-
3. **Collect information**:
|
|
334
|
-
- OS and version
|
|
335
|
-
- markupr version
|
|
336
|
-
- Steps to reproduce
|
|
337
|
-
- Error messages/logs
|
|
338
|
-
|
|
339
|
-
### Bug Report Template
|
|
340
|
-
|
|
341
|
-
```markdown
|
|
342
|
-
## Description
|
|
343
|
-
Clear description of the bug.
|
|
344
|
-
|
|
345
|
-
## Steps to Reproduce
|
|
346
|
-
1. Go to '...'
|
|
347
|
-
2. Click on '...'
|
|
348
|
-
3. See error
|
|
349
|
-
|
|
350
|
-
## Expected Behavior
|
|
351
|
-
What should happen.
|
|
352
|
-
|
|
353
|
-
## Actual Behavior
|
|
354
|
-
What actually happens.
|
|
355
|
-
|
|
356
|
-
## Environment
|
|
357
|
-
- OS: macOS 14.0
|
|
358
|
-
- markupr: 0.4.0
|
|
359
|
-
- Node: 18.19.0
|
|
360
|
-
|
|
361
|
-
## Screenshots/Logs
|
|
362
|
-
(If applicable)
|
|
363
|
-
|
|
364
|
-
## Additional Context
|
|
365
|
-
Any other relevant information.
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
### Feature Request Template
|
|
369
|
-
|
|
370
|
-
```markdown
|
|
371
|
-
## Problem
|
|
372
|
-
Describe the problem this feature would solve.
|
|
373
|
-
|
|
374
|
-
## Proposed Solution
|
|
375
|
-
How you envision the feature working.
|
|
376
|
-
|
|
377
|
-
## Alternatives Considered
|
|
378
|
-
Other approaches you've thought about.
|
|
379
|
-
|
|
380
|
-
## Additional Context
|
|
381
|
-
Mockups, examples, or references.
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
## Questions?
|
|
385
|
-
|
|
386
|
-
- Open a [discussion](https://github.com/eddiesanjuan/markupr/discussions)
|
|
387
|
-
- Check [documentation](docs/)
|
|
388
|
-
- Review existing [issues](https://github.com/eddiesanjuan/markupr/issues)
|
|
389
|
-
|
|
390
|
-
Thank you for contributing to markupr!
|
package/PRODUCT_VISION.md
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
# markupr Product Vision
|
|
2
|
-
|
|
3
|
-
**Version 1.2** | February 2026
|
|
4
|
-
**Author**: Eddie San Juan
|
|
5
|
-
**License**: MIT (Open Source)
|
|
6
|
-
**Status**: Public Release
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## The Problem Nobody Talks About
|
|
11
|
-
|
|
12
|
-
Developers using AI coding assistants have a broken feedback loop.
|
|
13
|
-
|
|
14
|
-
You spend 30 minutes working with Claude Code or Cursor to build a feature. You deploy. You test. You find problems. Now you need to communicate what you found -- but your AI session context is gone. Re-explaining everything takes as long as the original work.
|
|
15
|
-
|
|
16
|
-
The existing tools don't solve this:
|
|
17
|
-
|
|
18
|
-
- **Loom** caps at 5 minutes and produces video files AI tools can't read.
|
|
19
|
-
- **Jam.dev** is browser-only and assumes something is broken. Development feedback isn't just bugs -- it's reasoning, preferences, and context.
|
|
20
|
-
- **Screen Studio** produces beautiful recordings with zero structured output.
|
|
21
|
-
- **Screenshots + typing** interrupts your thought process. By the time you switch apps and type, you've lost the nuance.
|
|
22
|
-
|
|
23
|
-
Bug reporting tools assume something is *broken*. Development feedback captures *reasoning*. No existing tool bridges this gap.
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## What markupr Does
|
|
28
|
-
|
|
29
|
-
markupr is a menu bar app that intelligently captures your development feedback. Press a hotkey, talk through what you see, and markupr records your screen while transcribing your voice in real time. When you stop, an intelligent post-processing pipeline correlates your transcript timestamps with the screen recording to extract the right frames at the right moments -- then stitches everything into a structured, AI-ready markdown document.
|
|
30
|
-
|
|
31
|
-
One hotkey to start. One hotkey to stop. A markdown file with your words, contextually-placed screenshots, and intelligent structure -- ready to hand to your AI coding agent, paste into a GitHub issue, or drop in a Slack thread. The output isn't a transcript with screenshots attached. It's a document that understands the relationship between what you said and what was on screen.
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## The User Journey
|
|
36
|
-
|
|
37
|
-
### Starting a Session
|
|
38
|
-
|
|
39
|
-
You're testing a feature you just deployed. Something feels off about the layout. A button is in the wrong place. The loading state is confusing.
|
|
40
|
-
|
|
41
|
-
You press `Cmd+Shift+F`.
|
|
42
|
-
|
|
43
|
-
The menu bar icon shifts from a gray outline to a pulsing red dot. Recording has started. No window pops up. No app switcher. No interruption. You stay exactly where you are.
|
|
44
|
-
|
|
45
|
-
### During a Session
|
|
46
|
-
|
|
47
|
-
You talk naturally:
|
|
48
|
-
|
|
49
|
-
*"This button is way too small on mobile. And it's competing with the header -- look, they're practically overlapping."*
|
|
50
|
-
|
|
51
|
-
You pause for a beat. markupr detects the silence -- about 1.2 seconds of quiet -- and captures a screenshot of exactly what you're looking at.
|
|
52
|
-
|
|
53
|
-
You scroll down.
|
|
54
|
-
|
|
55
|
-
*"The loading spinner here feels sluggish. It shows up but then the content pops in with no transition. Feels janky."*
|
|
56
|
-
|
|
57
|
-
Another natural pause. Another screenshot.
|
|
58
|
-
|
|
59
|
-
You click through to a different page.
|
|
60
|
-
|
|
61
|
-
*"Actually, I love how this card animation works. We should use this pattern on the dashboard too."*
|
|
62
|
-
|
|
63
|
-
Screenshot.
|
|
64
|
-
|
|
65
|
-
You don't switch apps. You don't break your train of thought. You don't reach for your phone to take a photo of your screen. You just talk and navigate like you normally would.
|
|
66
|
-
|
|
67
|
-
If you need a screenshot at a specific moment -- mid-sentence, before you pause -- hit `Cmd+Shift+S` for a manual capture.
|
|
68
|
-
|
|
69
|
-
### Ending a Session
|
|
70
|
-
|
|
71
|
-
Press `Cmd+Shift+F` again. The menu bar icon spins briefly while the session processes. A few seconds later, a notification tells you the session is complete.
|
|
72
|
-
|
|
73
|
-
### What You Get
|
|
74
|
-
|
|
75
|
-
Everything is saved to an organized folder on your machine:
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
~/markupr/sessions/2026-02-05_14-23-41/
|
|
79
|
-
feedback.md
|
|
80
|
-
screenshots/
|
|
81
|
-
fb-001.png
|
|
82
|
-
fb-002.png
|
|
83
|
-
fb-003.png
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
The markdown file is the core output. The post-processing pipeline:
|
|
87
|
-
|
|
88
|
-
1. Analyzes your transcript timestamps against the screen recording
|
|
89
|
-
2. Extracts the most relevant frames at the exact moments you described each issue
|
|
90
|
-
3. Places screenshots inline with the corresponding narration
|
|
91
|
-
4. Structures the document with clear sections, timestamps, and context
|
|
92
|
-
5. Produces a summary with item counts and session duration
|
|
93
|
-
|
|
94
|
-
The result is a document purpose-built for AI consumption -- your coding agent can read it and immediately understand every issue, see exactly what you saw, and act on it.
|
|
95
|
-
|
|
96
|
-
On the premium tier, Claude AI reads your transcript alongside your screenshots and produces an even more intelligent document -- grouping related feedback, identifying patterns across items, surfacing what matters most, and writing actionable summaries.
|
|
97
|
-
|
|
98
|
-
### The Clipboard Bridge
|
|
99
|
-
|
|
100
|
-
When the session ends, the **file path** to your markdown document is copied to your clipboard. Not the content. The path.
|
|
101
|
-
|
|
102
|
-
This is deliberate:
|
|
103
|
-
|
|
104
|
-
- If your clipboard gets overwritten, your feedback isn't gone. The file lives on disk permanently.
|
|
105
|
-
- AI coding tools like Claude Code can read a file path and process the full document, including the screenshots.
|
|
106
|
-
- You paste the path into your AI tool, your IDE, a Slack message, an issue tracker -- wherever it needs to go.
|
|
107
|
-
- The file is yours. Local. Private. No cloud dependency.
|
|
108
|
-
|
|
109
|
-
The path is the bridge between "I captured feedback" and "something acts on it."
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## Who This Is For
|
|
114
|
-
|
|
115
|
-
**Primary users**: Individual developers and small teams (2-10 people) who use AI coding assistants daily. They deploy frequently, prefer keyboard-driven workflows, and care more about structured output than polished video.
|
|
116
|
-
|
|
117
|
-
**Secondary users**: Senior developers and tech leads who review AI-assisted work, need visibility into development decisions, and want to build team knowledge bases over time.
|
|
118
|
-
|
|
119
|
-
The common thread: these are people who think faster than they type, test their own code regularly, and want their feedback to be immediately actionable by both humans and AI tools.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## How Pricing Works
|
|
124
|
-
|
|
125
|
-
### Free Tier (Open Source, MIT License)
|
|
126
|
-
|
|
127
|
-
markupr is free and fully functional with no feature gates:
|
|
128
|
-
|
|
129
|
-
- **Local Whisper transcription** runs entirely on your machine. No API key. No internet required after the initial model download (~500MB).
|
|
130
|
-
- **BYOK (Bring Your Own Key)** for AI analysis. Plug in any API key you want -- Anthropic, OpenAI, whatever you prefer.
|
|
131
|
-
- **All features unlocked.** Screenshots, transcription, markdown output, crash recovery, silence detection, manual capture -- everything works.
|
|
132
|
-
- **Offline capable.** Once the Whisper model is downloaded, markupr works without a network connection.
|
|
133
|
-
|
|
134
|
-
A donate button rotates through messages like "Buy Eddie a Taco" and "Fund Eddie's Caffeine Addiction" -- a single link to Ko-fi. It never blocks your workflow. It never nags. It's there if you feel like it.
|
|
135
|
-
|
|
136
|
-
### Premium Tier (~$12/month)
|
|
137
|
-
|
|
138
|
-
Everything in Free, plus:
|
|
139
|
-
|
|
140
|
-
- **Built-in Claude AI analysis.** No API key setup. No configuration. Press stop, and Anthropic's Claude reads your transcript alongside your screenshots to produce an intelligent, contextualized feedback document.
|
|
141
|
-
- **Smart summaries.** Claude identifies patterns across your feedback items, groups related observations, flags the most critical issues, and writes concise action items.
|
|
142
|
-
- **Zero setup.** Eddie's API key is proxied through a Cloudflare Worker. You sign up, you pay, it works.
|
|
143
|
-
- **Stripe billing.** Standard monthly subscription. Cancel anytime.
|
|
144
|
-
|
|
145
|
-
The premium value is Claude's intelligence applied to your feedback -- not better transcription. Transcription is always local Whisper, always free. The AI analysis layer is what you pay for.
|
|
146
|
-
|
|
147
|
-
This is not an OpenAI integration. The analysis is powered by Anthropic's Claude because it produces better structured reasoning about visual and textual content.
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Design Principles
|
|
152
|
-
|
|
153
|
-
**Zero-config first run.** markupr works the moment you open it. No API keys. No account creation. No onboarding wizard with seven steps. You click the menu bar icon, press the hotkey, and start talking.
|
|
154
|
-
|
|
155
|
-
**Menu bar native.** No dock icon. No window chrome. markupr lives in your menu bar like a system utility. It's there when you need it and invisible when you don't. Inspired by how the Claude Status app behaves -- minimal, professional, out of the way.
|
|
156
|
-
|
|
157
|
-
**Never lose work.** Session state is written to disk every 5 seconds. If the app crashes, your data is recovered on restart. If your clipboard gets overwritten, the file is still on disk. If processing hangs, a watchdog timer forces recovery within 10 seconds. You will never lose a feedback session.
|
|
158
|
-
|
|
159
|
-
**AI is the luxury, not the baseline.** The free tier is a complete, production-quality tool. AI analysis makes the output smarter and more structured, but markupr is useful without it. This is not a demo that upsells you.
|
|
160
|
-
|
|
161
|
-
**Open source first.** MIT license. Fork it, improve it, ship it. Contributions welcome. The codebase is designed to be readable and well-documented. Community-driven development, not SaaS-driven.
|
|
162
|
-
|
|
163
|
-
**Ship fast, polish later.** The core loop -- record, capture, generate, copy -- matters more than animation polish or pixel-perfect design. Functionality first. Always.
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## How It Works Under the Hood
|
|
168
|
-
|
|
169
|
-
markupr is an Electron app with a React frontend. The recording session is governed by a 7-state finite state machine:
|
|
170
|
-
|
|
171
|
-
**idle** -- ready to record
|
|
172
|
-
**starting** -- initializing microphone and transcription (5-second timeout)
|
|
173
|
-
**recording** -- capturing audio and screenshots (30-minute max)
|
|
174
|
-
**stopping** -- finalizing audio capture (3-second timeout)
|
|
175
|
-
**processing** -- generating the output document (10-second timeout)
|
|
176
|
-
**complete** -- session saved, path copied (auto-returns to idle after 30 seconds)
|
|
177
|
-
**error** -- something went wrong (auto-recovers to idle after 5 seconds)
|
|
178
|
-
|
|
179
|
-
Every state has a maximum duration. A watchdog timer monitors state age in the background and forces recovery if anything gets stuck. There is no state the app can enter and not exit. This is the "bulletproof" guarantee.
|
|
180
|
-
|
|
181
|
-
### Three-Tier Transcription
|
|
182
|
-
|
|
183
|
-
Transcription degrades gracefully:
|
|
184
|
-
|
|
185
|
-
1. **OpenAI** (optional, best quality) -- cloud-based, 95%+ accuracy, ~300ms latency. Requires an API key and internet.
|
|
186
|
-
2. **Local Whisper** (default) -- runs on your machine, 90%+ accuracy, 1-2 second latency. No API key. No internet.
|
|
187
|
-
3. **macOS Dictation** (emergency fallback) -- real-time, ~85% accuracy. Uses the system's built-in speech recognition.
|
|
188
|
-
|
|
189
|
-
If OpenAI fails mid-session, markupr falls back to Whisper. If Whisper isn't available, it falls back to macOS Dictation. If nothing works, it continues capturing screenshots on a timer and saves whatever audio it has.
|
|
190
|
-
|
|
191
|
-
### Intelligent Screen Recording & Frame Extraction
|
|
192
|
-
|
|
193
|
-
During a session, markupr continuously records your screen (up to 4K@30fps, VP9/VP8 encoded). Simultaneously, silence detection monitors audio input using RMS amplitude analysis -- when you pause for ~1.2 seconds, the system notes a capture point. You can also trigger a manual capture at any time with `Cmd+Shift+S`.
|
|
194
|
-
|
|
195
|
-
The real intelligence happens in post-processing. When you end a session, the pipeline:
|
|
196
|
-
|
|
197
|
-
1. Walks through the transcript with timestamps
|
|
198
|
-
2. Correlates each narration segment with the screen recording timeline
|
|
199
|
-
3. Extracts frames at the exact moments that correspond to what you were describing
|
|
200
|
-
4. Stitches the frames and transcript into a structured markdown document
|
|
201
|
-
|
|
202
|
-
This means the output isn't just "screenshots taken during pauses" -- it's contextually-aware frame extraction that ensures every image in the document shows exactly what you were talking about.
|
|
203
|
-
|
|
204
|
-
### Crash Recovery
|
|
205
|
-
|
|
206
|
-
Session state persists to disk every 5 seconds. If the app is force-quit or crashes during a recording:
|
|
207
|
-
|
|
208
|
-
1. On next launch, markupr detects the incomplete session.
|
|
209
|
-
2. It presents a recovery dialog with the partial data.
|
|
210
|
-
3. You can resume or discard the session.
|
|
211
|
-
|
|
212
|
-
This means even a power failure mid-session doesn't lose your work.
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## What Makes markupr Different
|
|
217
|
-
|
|
218
|
-
| | markupr | Loom | Jam.dev | Screenshots + Notes |
|
|
219
|
-
|---|---|---|---|---|
|
|
220
|
-
| Voice + Screen Recording | Yes | Video only | Browser only | Manual |
|
|
221
|
-
| AI-Ready Output | Structured markdown | No | Partial | No |
|
|
222
|
-
| Intelligent Frame Extraction | Timestamp-correlated | No | Auto (browser) | No |
|
|
223
|
-
| Works Offline | Yes (local Whisper) | No | No | Yes |
|
|
224
|
-
| Works with Any App | Yes (desktop-wide) | Yes | No (browser) | Yes |
|
|
225
|
-
| Free | Fully functional | Limited | Limited | Yes |
|
|
226
|
-
| Open Source | MIT | No | No | N/A |
|
|
227
|
-
| Output format | Markdown + images | MP4 | Web report | Scattered files |
|
|
228
|
-
|
|
229
|
-
The core differentiator: markupr's intelligent pipeline understands the relationship between what you said and what was on screen, then produces a structured document optimized for AI consumption. Video files can't do that -- AI tools can't read them. Browser-only tools miss everything outside the browser. Manual note-taking breaks your flow. markupr captures everything, then intelligently assembles the output.
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## Roadmap
|
|
234
|
-
|
|
235
|
-
### Shipped (v1.0 - v1.2)
|
|
236
|
-
|
|
237
|
-
- Bulletproof state machine with watchdog timer
|
|
238
|
-
- Menu bar native interface (no dock icon)
|
|
239
|
-
- Three-tier transcription (OpenAI, Whisper, macOS Dictation)
|
|
240
|
-
- Silence-triggered screenshot capture
|
|
241
|
-
- Crash recovery with 5-second auto-save
|
|
242
|
-
- Multiple export formats (Markdown, PDF, HTML, JSON)
|
|
243
|
-
- Session history browser
|
|
244
|
-
- Annotation tools (arrows, circles, rectangles, freehand, text)
|
|
245
|
-
- Audio waveform visualization
|
|
246
|
-
- Auto-updater
|
|
247
|
-
- Cross-platform support (macOS primary, Windows secondary)
|
|
248
|
-
- Donate button with rotating messages
|
|
249
|
-
|
|
250
|
-
### Next
|
|
251
|
-
|
|
252
|
-
- Premium tier with Claude AI analysis (Stripe billing, Cloudflare Worker proxy)
|
|
253
|
-
- Improved AI-powered document structuring and pattern detection
|
|
254
|
-
- Team sharing via file system or git integration
|
|
255
|
-
- Custom vocabulary for technical domain terms
|
|
256
|
-
- Session tagging and search across history
|
|
257
|
-
- Integration hooks for issue trackers (GitHub Issues, Linear)
|
|
258
|
-
|
|
259
|
-
### Future
|
|
260
|
-
|
|
261
|
-
- Linux support (full parity)
|
|
262
|
-
- Browser extension companion for web-specific capture
|
|
263
|
-
- Multi-language transcription
|
|
264
|
-
- Voice commands during recording ("mark this as critical", "new section")
|
|
265
|
-
- API for automation and CI/CD integration
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## The Vision in One Sentence
|
|
270
|
-
|
|
271
|
-
markupr turns the way you naturally think about software -- talking through what you see -- into intelligently structured documents where every screenshot is placed exactly where it belongs, ready for humans and AI tools to act on immediately.
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
*Built by Eddie San Juan. Open source. MIT licensed.*
|
|
276
|
-
*[github.com/eddiesanjuan/markupr](https://github.com/eddiesanjuan/markupr)*
|
|
277
|
-
*[ko-fi.com/eddiesanjuan](https://ko-fi.com/eddiesanjuan)*
|