Skip to content

Commit c86db63

Browse files
author
Sébastien Henau
committed
Merge branch 'feature/add-claude-skills' into feature/dependencies-update
2 parents 82abbed + 844f9a7 commit c86db63

File tree

2 files changed

+16
-102
lines changed

2 files changed

+16
-102
lines changed

.claude/CLAUDE.md

Lines changed: 16 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -144,61 +144,17 @@ Before building new features, clean up the repo to make it a solid foundation. K
144144
**Goal:** Make Flare's JavaScript error tracking good enough to stand on its own — not just an add-on for Laravel/PHP
145145
users, but a worthy error tracker for JavaScript-only projects.
146146

147-
The frontend error monitoring is currently barebones. We need to research competitors (Sentry, PostHog, etc.), identify
148-
gaps, and ship improvements as a series of projects. Each project gets a release and an announcement post.
149-
150-
## Research & discovery
151-
152-
- [x] Research Sentry — features, DX, SDK capabilities, what they do well
153-
- [x] Research PostHog — error tracking features, session replay, context collection
154-
- [x] Research other competitors (Bugsnag, Rollbar, LogRocket, Datadog RUM, New Relic, Raygun, Highlight.io)
155-
- [x] Audit current Flare JS client capabilities in detail
156-
- [x] Compile findings: what are we missing? What's table stakes vs. differentiators?
157-
- [x] Organize findings + idea list into concrete projects with priorities
158-
159-
## Competitive research findings
160-
161-
### What every competitor has (table stakes we're missing)
162-
163-
| Feature | Sentry | Bugsnag | Rollbar | Flare |
164-
|---|---|---|---|---|
165-
| **Automatic breadcrumbs** (console, clicks, navigation, network) | Yes | Yes (best-in-class) | Yes ("telemetry") | Manual "glows" only |
166-
| **User identification API** (`setUser()`) | Yes | Yes | Yes | None |
167-
| **Device/browser/OS context** (parsed from UA) | Yes | Yes | Yes | Raw UA string only |
168-
| **Sampling / rate limiting** | Yes | Yes | Yes (`itemsPerMinute`) | None |
169-
| **addEventListener** (robust error capture) | Yes | Yes | Yes | Fragile `window.onerror =` assignment |
170-
| **Error deduplication** | Yes | Yes | Yes | None |
171-
| **Release/version tracking** | Yes | Yes | Yes | Only `sourcemapVersion` for sourcemaps |
172-
| **ignoreErrors / URL filtering** | Yes | Yes | Yes | Must implement manually in hooks |
173-
| **Error cause chaining** (`error.cause`) | Yes | Yes | No | None |
174-
| **Retry logic** for report submission | Yes | Yes | Yes | None (single fetch, lost on failure) |
175-
| **React Error Boundary with fallback UI** | Yes | Yes | Yes | No fallback, no getDerivedStateFromError |
176-
| **Multiple sourcemap upload tools** | Vite/Webpack/Rollup/esbuild/CLI | CLI + Webpack | CLI + Webpack | Vite only |
177-
178-
### What differentiates the leaders
179-
180-
| Feature | Leader | Notes |
181-
|---|---|---|
182-
| Session replay linked to errors | LogRocket, Sentry, PostHog | Watch what user did before crash |
183-
| Backend trace correlation | Datadog, New Relic | Link frontend error to backend span |
184-
| Stability/crash-free scores | Bugsnag | Session-based release health tracking |
185-
| Feature flag context | Bugsnag, PostHog, Datadog | Which flag variant caused the regression? |
186-
| State management integration | LogRocket | Redux/Vuex snapshots at time of error |
187-
| Rage/dead click detection | LogRocket, Datadog | User frustration signals |
188-
| Performance monitoring / Web Vitals | Sentry, Datadog, New Relic | Tracing + Core Web Vitals |
189-
| `guess_uncaught_frames` | Rollbar | Reconstruct missing stack frames heuristically |
190-
| Plugin/integration architecture | Sentry, Bugsnag | Tree-shakeable, modular, extensible |
191-
| Tunnel / ad blocker bypass | Sentry | Proxy events through your own server |
192-
193-
### Flare's existing unique strengths
194-
195-
- **Solution providers** — no competitor has programmatic "here's how to fix this" suggestions
196-
- **Tiny bundle**~3-5KB gzipped vs Sentry's ~22KB+ core
147+
The frontend error monitoring is currently barebones. We need to identify gaps and ship improvements as a series of projects. Each project gets a release and an announcement post.
148+
149+
## Flare's existing strengths
150+
151+
- **Solution providers** — programmatic "here's how to fix this" suggestions
152+
- **Tiny bundle**~3-5KB gzipped
197153
- **Laravel/PHP ecosystem** — deep integration with the most popular PHP framework
198-
- **Vite-first** — modern build tool support (most competitors still lead with Webpack)
154+
- **Vite-first** — modern build tool support
199155
- **Clean two-hook system**`beforeEvaluate` (filter errors) + `beforeSubmit` (modify reports)
200156

201-
### Current gaps in Flare (detailed)
157+
## Current gaps in Flare (detailed)
202158

203159
**Context collection** — only captures URL, user agent (raw string), referrer, readyState, cookies, query params. Missing: browser name/version, OS, device type, screen size, viewport, locale, timezone, online/offline status, memory, connection info.
204160

@@ -208,7 +164,7 @@ gaps, and ship improvements as a series of projects. Each project gets a release
208164

209165
**Networking** — single `fetch()` POST per error. No retry, no offline queue, no rate limiting, no batching, no `sendBeacon()` for unload, no request timeout.
210166

211-
**React** (`@flareapp/react`) — captures component stack string only. Missing: fallback UI (`getDerivedStateFromError`), component props, component name, onError/onReset callbacks, React Router integration, Redux/Zustand state.
167+
**React** (`@flareapp/react`) — captures component stack string only. Missing: fallback UI (`getDerivedStateFromError`), component props, component name, onError/onReset callbacks, React Router integration, state management integration.
212168

213169
**Vue** (`@flareapp/vue`) — captures component name + info string. Missing: component props, Vue Router context, Pinia/Vuex state, component tree. Written in plain JS (no TypeScript).
214170

@@ -218,9 +174,9 @@ gaps, and ship improvements as a series of projects. Each project gets a release
218174

219175
## Roadmap: organized into projects
220176

221-
### Project 1: Core SDK hardening (table stakes)
177+
### Project 1: Core SDK hardening
222178

223-
Make `@flareapp/js` robust and feature-complete with what every competitor ships. This is the foundation everything else builds on.
179+
Make `@flareapp/js` robust and feature-complete. This is the foundation everything else builds on.
224180

225181
- [ ] Switch from `window.onerror =` to `addEventListener('error')` / `addEventListener('unhandledrejection')` for robustness
226182
- [ ] Automatic breadcrumbs: console output interception (`console.log/warn/error/info/debug`)
@@ -246,7 +202,7 @@ Make `@flareapp/js` robust and feature-complete with what every competitor ships
246202

247203
### Project 2: Enhanced React package
248204

249-
Make `@flareapp/react` competitive with Sentry's React integration.
205+
Make `@flareapp/react` a full-featured React error tracking integration.
250206

251207
- [ ] Fallback UI: implement `getDerivedStateFromError` so the boundary can render a fallback component
252208
- [ ] Configurable fallback: `<FlareErrorBoundary fallback={<ErrorPage />}>` or render prop `fallback={(error, reset) => ...}`
@@ -259,7 +215,7 @@ Make `@flareapp/react` competitive with Sentry's React integration.
259215

260216
### Project 3: Enhanced Vue package
261217

262-
Make `@flareapp/vue` competitive with Sentry's Vue integration.
218+
Make `@flareapp/vue` a full-featured Vue error tracking integration.
263219

264220
- [ ] Rewrite in TypeScript (currently plain JS)
265221
- [ ] Capture component props (configurable: `attachProps: true/false`)
@@ -318,13 +274,11 @@ Verify and ensure Flare works beyond the browser.
318274

319275
## Future considerations (not yet planned as projects)
320276

321-
These are features the leading competitors have but that may be out of scope for now:
322-
323-
- **Session replay** — would be a major undertaking (PostHog, Sentry, LogRocket all have this)
277+
- **Session replay** — would be a major undertaking
324278
- **Performance monitoring / Web Vitals** — could be a lightweight add-on
325-
- **Distributed tracing** — connecting frontend errors to backend spans (Datadog/New Relic territory)
279+
- **Distributed tracing** — connecting frontend errors to backend spans
326280
- **Feature flag integration** — linking errors to active feature flags
327281
- **Tunnel / ad blocker bypass** — proxy events through the user's own server
328-
- **Plugin/integration architecture** — modular system like Sentry's integrations (would require significant refactoring)
282+
- **Plugin/integration architecture** — modular, tree-shakeable, extensible system (would require significant refactoring)
329283
- **Offline event queuing** — persist unsent events in localStorage/IndexedDB
330284
- **Rage/dead click detection** — user frustration signals without explicit errors

.claude/skills/research/SKILL.md

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)