Skip to content

Commit 272e008

Browse files
authored
Merge pull request #29 from eddiesanjuan/launch/campaign-v2.4.0
Launch: campaign content, examples, and SEO for v2.4.0
2 parents 3e279ee + 002cf5c commit 272e008

15 files changed

+2964
-7
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<a href="#why-markupr">Why markupr?</a> |
2424
<a href="#features">Features</a> |
2525
<a href="#how-it-works">How It Works</a> |
26+
<a href="#example-output">Examples</a> |
2627
<a href="#installation">Installation</a> |
2728
<a href="#cli-usage">CLI Usage</a> |
2829
<a href="#mcp-server-for-ai-coding-agents">MCP Server</a> |
@@ -170,6 +171,14 @@ idle ─→ starting (5s timeout) ─→ recording (30min max) ─→ stopping (
170171

171172
Every state has a maximum duration. A watchdog timer monitors state age and forces recovery if anything gets stuck.
172173

174+
## Example Output
175+
176+
See what markupr produces:
177+
178+
- [Desktop app feedback session](examples/feedback-session-example.md) -- a developer reviewing a dashboard, finding mobile and UX issues
179+
- [MCP server capture session](examples/mcp-session-example.md) -- an AI coding agent recording a CSS bug via `capture_with_voice`
180+
- [CLI analysis output](examples/cli-output-example.md) -- `npx markupr analyze` processing a security code review
181+
173182
## Installation
174183

175184
### macOS

examples/cli-output-example.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# CLI Output Example
2+
3+
What you see when you run `markupr analyze` from the command line.
4+
5+
## Terminal Output
6+
7+
```
8+
markupr v2.4.0 • CLI Mode
9+
────────────────────────────────────────
10+
11+
→ Video: /Users/dev/recordings/code-review-session.mov
12+
→ Output: /Users/dev/markupr-output
13+
14+
→ Starting analysis pipeline...
15+
16+
→ Extracting audio from video...
17+
→ Transcribing with local Whisper (base model)...
18+
→ Analyzing transcript for key moments...
19+
→ Extracting frames at 5 timestamps...
20+
→ Generating Markdown report...
21+
22+
✔ Analysis complete!
23+
24+
Transcript segments: 5
25+
Extracted frames: 5
26+
Processing time: 8.3s
27+
28+
Output: /Users/dev/markupr-output/markupr-report.md
29+
OUTPUT:/Users/dev/markupr-output/markupr-report.md
30+
```
31+
32+
---
33+
34+
## Generated Report
35+
36+
Below is the Markdown report that markupr writes to disk. An AI coding agent reads this file directly.
37+
38+
---
39+
40+
# markupr Session — Feb 11, 2026 at 4:15 PM
41+
> Segments: 5 | Frames: 5 | Duration: 2:58
42+
43+
## Transcript
44+
45+
### [0:00] Looking at the auth middleware
46+
> Okay so I'm reviewing the auth middleware and the first thing I notice is there's no rate limiting on the login endpoint.
47+
> Someone could brute-force passwords all day and we wouldn't throttle them.
48+
49+
![Frame at 0:03](frames/frame-0003.png)
50+
51+
### [0:34] The JWT expiry is set to 30 days
52+
> The JWT expiry here is set to 30 days which is way too long.
53+
> If a token gets leaked that's a month-long window.
54+
> Should be more like 15 minutes for access tokens with a refresh token flow.
55+
56+
![Frame at 0:37](frames/frame-0037.png)
57+
58+
### [1:02] No CSRF protection on the form
59+
> This form submission handler doesn't have any CSRF protection.
60+
> There's no token validation, no SameSite cookie attribute check — nothing.
61+
> Anyone could craft a cross-site request and it would go through.
62+
63+
![Frame at 1:05](frames/frame-0065.png)
64+
65+
### [1:45] Error messages leak internal details
66+
> These error responses are leaking internal details.
67+
> Like here — a failed login returns the full Prisma error with the query and table name.
68+
> That's giving attackers a map of our database schema.
69+
> We need generic error messages for the client and structured logging server-side.
70+
71+
![Frame at 1:48](frames/frame-0108.png)
72+
73+
### [2:22] The password reset flow has no expiry
74+
> Last thing — the password reset tokens don't expire.
75+
> Once you generate a reset link it's valid forever.
76+
> Should be 15 minutes max, and single-use.
77+
78+
![Frame at 2:25](frames/frame-0145.png)
79+
80+
---
81+
*Generated by [markupr](https://markupr.com)*
82+
*If this report saved you time, support development: [Ko-fi](https://ko-fi.com/eddiesanjuan)*
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# Acme Dashboard Feedback Report
2+
> Generated by markupr on Feb 12, 2026 at 3:47 PM
3+
> Duration: 3:22 | Items: 4 | Screenshots: 6
4+
5+
## Session Overview
6+
- **Session ID:** `sess_a4f91c2e`
7+
- **Source:** markupr Session (screen)
8+
- **Platform:** darwin
9+
- **Segments:** 4
10+
- **High-impact items:** 2
11+
12+
---
13+
14+
## Executive Summary
15+
16+
- 4 total feedback items were captured.
17+
- 2 items are categorized as **Critical** or **High** priority.
18+
- 6 screenshots were aligned to spoken context.
19+
- Top themes: mobile, layout, navigation, responsive.
20+
21+
---
22+
23+
## Actionable Feedback
24+
25+
### FB-001: Button tap targets too small on mobile
26+
- **Severity:** High
27+
- **Type:** UX Issue
28+
- **Timestamp:** 00:14
29+
- **Signals:** mobile, tap target, button, touch
30+
31+
#### What Happened
32+
33+
> Okay so I'm looking at the dashboard on a 375 viewport and these action buttons in the header are way too small.
34+
> Like the "Export" and "Filter" buttons — I keep missing them on tap.
35+
> They're maybe 28px tall which is below the 44px minimum for touch targets.
36+
> This is gonna frustrate anyone on a phone.
37+
38+
#### Evidence
39+
![FB-001-1](screenshots/fb-001-1.png)
40+
41+
![FB-001-2](screenshots/fb-001-2.png)
42+
43+
#### Suggested Next Step
44+
- Revise the UI interaction and run a quick usability check focused on: "Okay so I'm looking at the dashboard on a 375 viewport and these action buttons in the header are way too small. Like the "Export" and "Filter" bu...".
45+
46+
---
47+
48+
### FB-002: Layout shift after loading spinner
49+
- **Severity:** High
50+
- **Type:** Performance
51+
- **Timestamp:** 00:58
52+
53+
#### What Happened
54+
55+
> There's a janky layout shift happening when the data loads in.
56+
> Watch — the spinner is centered in the card, but when the table renders it pushes everything down by like 40 pixels.
57+
> The sidebar jumps too because the main content height changes.
58+
> We need a skeleton or a min-height on that container so the layout doesn't reflow.
59+
60+
#### Evidence
61+
![FB-002](screenshots/fb-002.png)
62+
63+
#### Suggested Next Step
64+
- Profile this flow, target the slow step first, and validate before/after metrics for: "There's a janky layout shift happening when the data loads in. Watch — the spinner is centered in the card, but when the table r...".
65+
66+
---
67+
68+
### FB-003: Nav highlight not updating on route change
69+
- **Severity:** High
70+
- **Type:** Bug
71+
- **Timestamp:** 01:41
72+
73+
#### What Happened
74+
75+
> Alright this one's a bug.
76+
> I click "Analytics" in the sidebar and the page changes but the active highlight is still on "Overview."
77+
> If I click away and come back it fixes itself, so the state is updating but the CSS class isn't rerendering.
78+
> Probably a missing dependency in a useEffect or the router isn't triggering a rerender on the nav component.
79+
80+
#### Evidence
81+
![FB-003-1](screenshots/fb-003-1.png)
82+
83+
![FB-003-2](screenshots/fb-003-2.png)
84+
85+
#### Suggested Next Step
86+
- Reproduce and patch this defect, then add a regression test that validates: "Alright this one's a bug. I click "Analytics" in the sidebar and the page changes but the active highlight is still on "Over...".
87+
88+
---
89+
90+
### FB-004: Table doesn't scroll horizontally on narrow viewports
91+
- **Severity:** Medium
92+
- **Type:** UX Issue
93+
- **Timestamp:** 02:35
94+
95+
#### What Happened
96+
97+
> The data table on the metrics page — on anything under maybe 768px it just overflows off screen.
98+
> You can't scroll it horizontally, the last two columns are just clipped.
99+
> Needs an overflow-x auto on the table wrapper.
100+
> This is probably a one-line fix but it makes the whole page unusable on tablet.
101+
102+
#### Evidence
103+
![FB-004](screenshots/fb-004.png)
104+
105+
#### Suggested Next Step
106+
- Revise the UI interaction and run a quick usability check focused on: "The data table on the metrics page — on anything under maybe 768px it just overflows off screen. You can't scroll it horizon...".
107+
108+
---
109+
110+
## Summary
111+
112+
| Type | Count |
113+
|------|-------|
114+
| UX Issue | 2 |
115+
| Performance | 1 |
116+
| Bug | 1 |
117+
| **Total** | **4** |
118+
119+
| Severity | Count |
120+
|----------|-------|
121+
| High | 3 |
122+
| Medium | 1 |
123+
| **Total** | **4** |
124+
125+
---
126+
*Generated by [markupr](https://markupr.com)*
127+
*If this report saved you time, support development: [Ko-fi](https://ko-fi.com/eddiesanjuan)*

examples/mcp-session-example.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# markupr Session — Feb 13, 2026 at 11:22 AM
2+
> Segments: 3 | Frames: 4 | Duration: 1:47
3+
4+
<!--
5+
This report was generated by the markupr MCP server via the capture_with_voice tool.
6+
The AI coding agent called: capture_with_voice({ duration: 120 })
7+
The developer narrated a CSS layout bug while the agent listened.
8+
-->
9+
10+
## Transcript
11+
12+
### [0:00] Grid layout breaks at the md breakpoint
13+
> So I've got this product grid that's supposed to go from single column on mobile to three columns at the md breakpoint.
14+
> But look at this — at exactly 768px it's doing this weird thing where the third item wraps to a new row with a huge gap.
15+
16+
![Frame at 0:04](frames/frame-0004.png)
17+
18+
### [0:38] The gap property is conflicting with the padding
19+
> I think the issue is the gap combined with the container padding.
20+
> The grid is set to gap-6 which is 24px, and the container has px-4 on each side, so the math doesn't work out for three equal columns.
21+
> The total width exceeds the container and the last item wraps.
22+
23+
![Frame at 0:41](frames/frame-0041.png)
24+
25+
![Frame at 0:52](frames/frame-0052.png)
26+
27+
### [1:18] Same issue on the category filter bar
28+
> Actually wait, the same thing is happening on the category filter bar up top.
29+
> These pill buttons are in a flex-wrap container and at that same breakpoint two of them drop to a second line when they shouldn't.
30+
> Probably the same root cause — padding plus gap not accounting for the container boundaries.
31+
32+
![Frame at 1:21](frames/frame-0081.png)
33+
34+
---
35+
*Generated by [markupr](https://markupr.com)*
36+
*If this report saved you time, support development: [Ko-fi](https://ko-fi.com/eddiesanjuan)*

0 commit comments

Comments
 (0)