@friedbotstudio/create-baseline 0.2.0 → 0.2.1

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 (28) hide show
  1. package/obj/template/.claude/skills/audit-baseline/audit.sh +11 -5
  2. package/obj/template/.claude/skills/google-analytics/SKILL.md +129 -0
  3. package/obj/template/.claude/skills/google-analytics/references/audiences.md +389 -0
  4. package/obj/template/.claude/skills/google-analytics/references/bigquery.md +470 -0
  5. package/obj/template/.claude/skills/google-analytics/references/custom-dimensions.md +355 -0
  6. package/obj/template/.claude/skills/google-analytics/references/custom-events.md +383 -0
  7. package/obj/template/.claude/skills/google-analytics/references/data-management.md +416 -0
  8. package/obj/template/.claude/skills/google-analytics/references/debugview.md +364 -0
  9. package/obj/template/.claude/skills/google-analytics/references/events-fundamentals.md +398 -0
  10. package/obj/template/.claude/skills/google-analytics/references/gtag.md +502 -0
  11. package/obj/template/.claude/skills/google-analytics/references/gtm-integration.md +483 -0
  12. package/obj/template/.claude/skills/google-analytics/references/measurement-protocol.md +519 -0
  13. package/obj/template/.claude/skills/google-analytics/references/privacy.md +441 -0
  14. package/obj/template/.claude/skills/google-analytics/references/recommended-events.md +464 -0
  15. package/obj/template/.claude/skills/google-analytics/references/reporting.md +397 -0
  16. package/obj/template/.claude/skills/google-analytics/references/setup.md +344 -0
  17. package/obj/template/.claude/skills/google-analytics/references/user-tracking.md +417 -0
  18. package/obj/template/.claude/skills/optimize-seo/SKILL.md +313 -0
  19. package/obj/template/.claude/skills/optimize-seo/scripts/pagespeed.mjs +197 -0
  20. package/obj/template/.claude/skills/pagespeed-insights/LICENSE.md +37 -0
  21. package/obj/template/.claude/skills/pagespeed-insights/SKILL.md +446 -0
  22. package/obj/template/.claude/skills/pagespeed-insights/reference.md +50 -0
  23. package/obj/template/CLAUDE.md +3 -3
  24. package/obj/template/docs/init/seed.md +2 -2
  25. package/obj/template/manifest.json +26 -5
  26. package/package.json +1 -1
  27. package/src/CLAUDE.template.md +3 -3
  28. package/src/seed.template.md +2 -2
@@ -139,10 +139,11 @@ disk_baseline_hooks = disk_hooks - add_hooks
139
139
  disk_baseline_agents = disk_agents - add_agents
140
140
 
141
141
  # Skill provenance: a skill is baseline iff its SKILL.md frontmatter declares
142
- # owner: baseline. User-added skills (owner: user) are excluded from baseline
143
- # counts so headline claims and check_names match even after a user adds skills.
142
+ # owner: baseline. Every other on-disk skill (absent owner: field, or explicit
143
+ # owner: user) is treated as user/third-party and out-of-scope of baseline
144
+ # audit checks. Absence-of-owner is the default so projects with pre-existing
145
+ # skills can install the baseline without annotating every file.
144
146
  disk_baseline_skills = {s for s in disk_skills if read_skill_owner(s) == "baseline"}
145
- disk_user_skills = {s for s in disk_skills if read_skill_owner(s) == "user"}
146
147
 
147
148
  # ---------- counts vs seed.md ----------
148
149
  seed = read_text("docs/init/seed.md")
@@ -219,11 +220,16 @@ check_names("commands names match seed §4.4", EXPECTED_COMMANDS, set(),
219
220
 
220
221
  # ---------- skill ownership (per-file hash drift + frontmatter validation) ----------
221
222
  def check_skill_ownership():
222
- # Frontmatter validation: every on-disk SKILL.md must declare owner: baseline|user.
223
+ # Frontmatter validation. Absence-of-`owner` is treated as user/third-party
224
+ # and silently skipped — that is the default for any skill not shipped in
225
+ # the baseline. Only an `owner:` field that is present but carries an
226
+ # invalid value (typo, wrong literal) is a FAIL. Baseline-listed slugs
227
+ # (per manifest.owners.skills) that fail to declare `owner: baseline` are
228
+ # surfaced by the names-match check ("skills names match seed §4.3"),
229
+ # which compares manifest keys against `disk_baseline_skills`.
223
230
  for slug in sorted(disk_skills):
224
231
  owner = read_skill_owner(slug)
225
232
  if owner is None:
226
- add(f"skill ownership: {slug}", "FAIL", "missing owner frontmatter")
227
233
  continue
228
234
  if owner not in ("baseline", "user"):
229
235
  add(f"skill ownership: {slug}", "FAIL", f"invalid owner={owner}")
@@ -0,0 +1,129 @@
1
+ ---
2
+ name: google-analytics
3
+ description: Comprehensive Google Analytics 4 guide covering property setup, events, custom events, recommended events, custom dimensions, user tracking, audiences, reporting, BigQuery integration, gtag.js implementation, GTM integration, Measurement Protocol, DebugView, privacy compliance, and data management. Use when working with GA4 implementation, tracking, analysis, or any GA4-related tasks.
4
+ ---
5
+
6
+ # Google Analytics 4 Complete Guide
7
+
8
+ ## Overview
9
+
10
+ Google Analytics 4 (GA4) is Google's event-based analytics platform for measuring user interactions across websites and applications. Every user interaction is tracked as an event with associated parameters, providing flexible cross-platform measurement.
11
+
12
+ ## When to Use This Skill
13
+
14
+ Invoke this skill for any GA4-related task:
15
+
16
+ - Setting up GA4 properties, data streams, and Measurement IDs
17
+ - Installing GA4 via gtag.js, GTM, or CMS plugins
18
+ - Implementing event tracking (automatic, recommended, custom, ecommerce)
19
+ - Creating custom dimensions, audiences, and reports
20
+ - Exporting data to BigQuery for SQL analysis
21
+ - Server-side tracking via Measurement Protocol
22
+ - User ID and cross-device tracking
23
+ - Privacy compliance, Consent Mode, and GDPR/CCPA
24
+ - Testing and debugging with DebugView
25
+
26
+ ## Quick Start
27
+
28
+ 1. **Create property:** analytics.google.com -> Admin -> Create -> Property
29
+ 2. **Create data stream:** Add web stream, note Measurement ID (G-XXXXXXXXXX)
30
+ 3. **Install tracking** (choose one):
31
+ - **GTM (recommended):** Install container, create Google Tag with Measurement ID, trigger on All Pages, publish
32
+ - **gtag.js direct:**
33
+ ```html
34
+ <script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
35
+ <script>
36
+ window.dataLayer = window.dataLayer || [];
37
+ function gtag(){dataLayer.push(arguments);}
38
+ gtag('js', new Date());
39
+ gtag('config', 'G-XXXXXXXXXX');
40
+ </script>
41
+ ```
42
+ 4. **Verify:** Enable GA Debugger extension, check Admin -> DebugView for session_start, page_view
43
+ 5. **Send custom events:**
44
+ ```javascript
45
+ gtag('event', 'button_click', { button_name: 'Subscribe', button_location: 'header' });
46
+ ```
47
+
48
+ ## Decision Tree: Which Reference Do I Need?
49
+
50
+ ```
51
+ What are you trying to do?
52
+
53
+ Setting up GA4 for the first time? -> references/setup.md
54
+ Understanding how events work? -> references/events-fundamentals.md
55
+ Implementing standard tracking events? -> references/recommended-events.md
56
+ Creating business-specific custom events? -> references/custom-events.md
57
+ Making parameters appear in reports? -> references/custom-dimensions.md
58
+ Implementing User ID / cross-device? -> references/user-tracking.md
59
+ Building audiences for remarketing? -> references/audiences.md
60
+ Analysing data in GA4 reports? -> references/reporting.md
61
+ Exporting to BigQuery for SQL analysis? -> references/bigquery.md
62
+ Installing via gtag.js directly? -> references/gtag.md
63
+ Setting up GA4 in Google Tag Manager? -> references/gtm-integration.md
64
+ Sending events from server/backend? -> references/measurement-protocol.md
65
+ Testing and debugging implementation? -> references/debugview.md
66
+ Implementing GDPR/Consent Mode? -> references/privacy.md
67
+ Configuring Admin settings? -> references/data-management.md
68
+ ```
69
+
70
+ ## Core Concepts
71
+
72
+ ### Event-Based Model
73
+
74
+ GA4 tracks everything as events in four categories:
75
+
76
+ | Category | Description | Examples |
77
+ |----------|-------------|----------|
78
+ | Automatic | Fire without configuration | session_start, first_visit |
79
+ | Enhanced Measurement | Toggle on/off in settings | scroll, click, file_download |
80
+ | Recommended | Google-defined with standard parameters | purchase, login, sign_up |
81
+ | Custom | Business-specific tracking | demo_requested, trial_started |
82
+
83
+ ### Key Limits
84
+
85
+ | Limit | Value |
86
+ |-------|-------|
87
+ | Event names per property | 500 distinct |
88
+ | Parameters per event | 25 |
89
+ | Event name length | 40 characters |
90
+ | Parameter name/value length | 40 / 100 characters |
91
+ | Custom dimensions (event/user/item) | 50 / 25 / 10 |
92
+ | Audiences per property | 100 |
93
+
94
+ ### Measurement ID
95
+
96
+ - Format: `G-XXXXXXXXXX` (G- prefix + 10 alphanumeric characters)
97
+ - Location: Admin -> Data Streams -> Web Stream
98
+ - Used in: gtag.js config, GTM tags, Measurement Protocol
99
+
100
+ ## Common Workflows
101
+
102
+ ### Ecommerce Tracking
103
+
104
+ 1. Review [recommended events](references/recommended-events.md) for the purchase funnel: view_item -> add_to_cart -> begin_checkout -> purchase
105
+ 2. Structure items array (required: item_id OR item_name; recommended: price, quantity, item_category)
106
+ 3. Test with [DebugView](references/debugview.md), then register custom item parameters as [custom dimensions](references/custom-dimensions.md)
107
+
108
+ ### Cross-Device Tracking
109
+
110
+ 1. Implement [User ID](references/user-tracking.md) and configure Reporting Identity (Admin -> Data Settings)
111
+ 2. Set [user properties](references/custom-dimensions.md) and build [cross-device audiences](references/audiences.md)
112
+
113
+ ### GDPR Compliance
114
+
115
+ 1. Set up [Consent Mode](references/privacy.md) with default denied state
116
+ 2. Integrate with CMP (OneTrust, Cookiebot, etc.), update consent on user acceptance
117
+ 3. Test consent implementation with [DebugView](references/debugview.md)
118
+
119
+ ### Custom Reports
120
+
121
+ 1. Understand available data in [reporting](references/reporting.md)
122
+ 2. Register custom parameters as [dimensions](references/custom-dimensions.md), create Explorations
123
+ 3. For unsampled data, export to [BigQuery](references/bigquery.md)
124
+
125
+ ## Best Practices
126
+
127
+ - **Naming:** Use snake_case, be descriptive and action-oriented, keep under 40 characters, avoid generic names
128
+ - **Implementation order:** Enhanced Measurement -> recommended events -> custom events -> custom dimensions
129
+ - **Data quality:** Separate test/production properties, set up internal traffic filters from day one, document all custom events, audit regularly with DebugView, export to BigQuery for backup
@@ -0,0 +1,389 @@
1
+ # GA4 Audiences and Segmentation
2
+
3
+ Expert guidance for creating and managing audiences for analysis, remarketing, and personalisation.
4
+
5
+ ## Overview
6
+
7
+ Audiences in GA4 allow creation of user segments for analysis, remarketing, and personalisation based on dimensions, metrics, and events. Audiences can be exported to Google Ads for targeting and used in GA4 reports for analysis.
8
+
9
+ ## Accessing Audiences
10
+
11
+ **Path:** Admin -> Audiences
12
+
13
+ **Available Actions:**
14
+ - View all audiences
15
+ - Create new audiences
16
+ - Edit existing audiences
17
+ - View audience membership
18
+
19
+ ## Predefined Audiences
20
+
21
+ GA4 includes template audiences:
22
+
23
+ | Audience | Description |
24
+ |----------|-------------|
25
+ | All Users | All users in selected timeframe |
26
+ | Purchasers | Users who completed purchase (30 days) |
27
+ | New Users | First-time visitors |
28
+ | Returning Users | Repeat visitors |
29
+ | Recent Users | Active in last 7 days |
30
+
31
+ ### Activating Predefined Audiences
32
+
33
+ 1. Admin -> Audiences -> Create Audience
34
+ 2. Select suggested template
35
+ 3. Customise conditions if needed
36
+ 4. Save audience
37
+
38
+ ## Creating Custom Audiences
39
+
40
+ ### Basic Process
41
+
42
+ 1. Admin -> Audiences -> New Audience
43
+ 2. Choose method:
44
+ - Start from scratch
45
+ - Use suggested template
46
+ - Create predictive audience
47
+ 3. Configure audience:
48
+ - Name: Descriptive (e.g., "High-Value Shoppers")
49
+ - Description: Optional notes
50
+ - Membership duration: 1-540 days
51
+ 4. Add conditions
52
+ 5. Preview size
53
+ 6. Save
54
+
55
+ ### Condition Types
56
+
57
+ #### Dimension Filters
58
+
59
+ Filter by user or event attributes:
60
+
61
+ ```
62
+ country == "United States"
63
+ device_category == "mobile"
64
+ platform == "web"
65
+ ```
66
+
67
+ **Available Dimensions:**
68
+ - User: city, country, device_category, platform
69
+ - Event: event_name, page_location, item_id
70
+ - Custom: Any registered custom dimensions
71
+
72
+ #### Metric Filters
73
+
74
+ Filter by quantitative measures:
75
+
76
+ ```
77
+ totalRevenue > 100
78
+ sessionCount >= 3
79
+ engagementTime > 60
80
+ ```
81
+
82
+ **Available Metrics:**
83
+ - Event count
84
+ - Session count
85
+ - Revenue
86
+ - Engagement time
87
+ - Conversion count
88
+
89
+ #### Event Conditions
90
+
91
+ Include/exclude based on events:
92
+
93
+ **Include users who:**
94
+ - Have triggered specific event
95
+ - Have NOT triggered event
96
+ - Triggered event with specific parameters
97
+
98
+ **Example:** Users who triggered `purchase` with `value > 50`
99
+
100
+ #### Sequence Conditions
101
+
102
+ Build audiences based on event order:
103
+
104
+ **Example:** Users who:
105
+ 1. Viewed product (view_item)
106
+ 2. Added to cart (add_to_cart)
107
+ 3. Did NOT complete purchase (within 7 days)
108
+
109
+ ### Membership Duration
110
+
111
+ | Duration | Use Case |
112
+ |----------|----------|
113
+ | 1-7 days | Short campaigns |
114
+ | 30-90 days | Remarketing |
115
+ | 540 days | Lifetime segments |
116
+
117
+ **How it works:**
118
+ - User enters when conditions met
119
+ - Stays for duration period
120
+ - Exits after duration (unless conditions still met)
121
+
122
+ ## Audience Examples
123
+
124
+ ### High-Value Customers
125
+
126
+ ```
127
+ Conditions:
128
+ - totalRevenue > 500 (lifetime)
129
+ - purchaseCount >= 3
130
+
131
+ Membership: 540 days
132
+ ```
133
+
134
+ ### Cart Abandoners
135
+
136
+ ```
137
+ Sequence:
138
+ 1. add_to_cart (within last 7 days)
139
+ 2. Did NOT: purchase
140
+
141
+ Membership: 7 days
142
+ ```
143
+
144
+ ### Engaged Mobile Users
145
+
146
+ ```
147
+ Conditions:
148
+ - deviceCategory == "mobile"
149
+ - sessionCount >= 5 (last 30 days)
150
+ - avgEngagementTime > 60 seconds
151
+
152
+ Membership: 30 days
153
+ ```
154
+
155
+ ### Product Category Viewers
156
+
157
+ ```
158
+ Event Condition:
159
+ - view_item (last 30 days)
160
+ - item_category == "Electronics"
161
+
162
+ Membership: 30 days
163
+ ```
164
+
165
+ ### Geographic Segment
166
+
167
+ ```
168
+ Conditions:
169
+ - country == "United States"
170
+ - region == "California"
171
+
172
+ Membership: 90 days
173
+ ```
174
+
175
+ ### Newsletter Subscribers
176
+
177
+ ```
178
+ Event Condition:
179
+ - sign_up (any time)
180
+ - method == "newsletter"
181
+
182
+ Membership: 540 days
183
+ ```
184
+
185
+ ## Predictive Audiences
186
+
187
+ GA4 can create audiences based on predicted user behaviour.
188
+
189
+ ### Available Predictions
190
+
191
+ | Prediction | Description |
192
+ |------------|-------------|
193
+ | Purchase probability | Likelihood to purchase (7 days) |
194
+ | Churn probability | Likelihood to not return (7 days) |
195
+ | Revenue prediction | Expected 28-day revenue |
196
+
197
+ ### Requirements
198
+
199
+ - 1,000+ users triggering target event (28 days)
200
+ - Sufficient historical data
201
+ - Model quality threshold met
202
+
203
+ ### Creating Predictive Audience
204
+
205
+ 1. Create New Audience
206
+ 2. Choose "Predictive"
207
+ 3. Select metric (purchase probability, etc.)
208
+ 4. Set threshold (e.g., > 50% purchase probability)
209
+ 5. Save
210
+
211
+ ### Use Cases
212
+
213
+ - Target likely purchasers with ads
214
+ - Re-engage likely-to-churn users
215
+ - Focus on high-revenue potential users
216
+
217
+ ## Audience Triggers
218
+
219
+ ### What are Triggers
220
+
221
+ Actions that fire when user enters audience.
222
+
223
+ ### Supported Actions
224
+
225
+ - Send event to GA4
226
+ - Create Google Ads remarketing list
227
+ - Send to Google Ads for targeting
228
+
229
+ ### Setup
230
+
231
+ 1. Create audience
232
+ 2. In settings, add trigger
233
+ 3. Configure action (event name, Ads account)
234
+ 4. Save
235
+
236
+ ### Use Cases
237
+
238
+ - Track when users become high-value
239
+ - Send conversion events to Ads
240
+ - Real-time remarketing lists
241
+
242
+ ## Exporting to Google Ads
243
+
244
+ ### Prerequisites
245
+
246
+ - Google Ads account linked
247
+ - Admin -> Product Links -> Google Ads Links
248
+ - Minimum audience size met
249
+
250
+ ### Minimum Sizes
251
+
252
+ | Region | Minimum Users |
253
+ |--------|---------------|
254
+ | Standard | 100 active |
255
+ | EEA/UK | 1,000 active |
256
+
257
+ ### Setup
258
+
259
+ 1. Link Google Ads account
260
+ 2. In audience, enable "Ads Personalisation"
261
+ 3. Audience appears in Ads within 24-48 hours
262
+
263
+ ### Export Destinations
264
+
265
+ - Google Ads (remarketing, targeting)
266
+ - Display & Video 360
267
+ - Search Ads 360
268
+
269
+ ## Analysing Audiences
270
+
271
+ ### Viewing Audience Data
272
+
273
+ **Reports -> Realtime:**
274
+ - Active users in audience
275
+
276
+ **Reports -> User Acquisition:**
277
+ - How audience members acquired
278
+
279
+ **Explorations -> Segment Overlap:**
280
+ - Compare audiences
281
+
282
+ **Explorations -> User Lifetime:**
283
+ - LTV of audience members
284
+
285
+ ### Audience Metrics
286
+
287
+ | Metric | Description |
288
+ |--------|-------------|
289
+ | Total Users | Current members |
290
+ | New Users (7/30 days) | Recent additions |
291
+ | User Growth | Trend over time |
292
+
293
+ ## Using Audiences in Explorations
294
+
295
+ ### As Segments
296
+
297
+ 1. Open Exploration
298
+ 2. Click "+" in Segments
299
+ 3. Select audience
300
+ 4. Apply to analysis
301
+
302
+ ### Comparing Audiences
303
+
304
+ 1. Add multiple audiences as segments
305
+ 2. View side-by-side comparison
306
+ 3. Analyse differences
307
+
308
+ ## Limits and Quotas
309
+
310
+ | Limit | Standard | 360 |
311
+ |-------|----------|-----|
312
+ | Audiences per property | 100 | 400 |
313
+ | Conditions per audience | 10 | 10 |
314
+ | Membership duration max | 540 days | 540 days |
315
+
316
+ ## Common Issues
317
+
318
+ ### Audience Size Too Small
319
+
320
+ **Causes:**
321
+ - Conditions too restrictive
322
+ - Low traffic volume
323
+ - Date range too narrow
324
+
325
+ **Solutions:**
326
+ 1. Broaden conditions
327
+ 2. Increase membership duration
328
+ 3. Wait for more traffic
329
+
330
+ ### Audience Not in Google Ads
331
+
332
+ **Causes:**
333
+ - Below minimum size
334
+ - Link not configured
335
+ - Ads personalisation disabled
336
+
337
+ **Solutions:**
338
+ 1. Check audience size
339
+ 2. Verify Google Ads link
340
+ 3. Enable Ads Personalisation
341
+
342
+ ### Stale Audience Data
343
+
344
+ **Cause:** Audiences update with delay
345
+
346
+ **Solution:** Wait 24-48 hours for updates
347
+
348
+ ## Best Practices
349
+
350
+ ### Naming Conventions
351
+
352
+ Use clear, descriptive names:
353
+ - "High-Value Customers - $500+"
354
+ - "Cart Abandoners - Last 7 Days"
355
+ - "Newsletter Subscribers"
356
+
357
+ ### Documentation
358
+
359
+ Document each audience:
360
+ - Purpose
361
+ - Conditions used
362
+ - Expected size
363
+ - Use cases
364
+
365
+ ### Regular Review
366
+
367
+ - Audit audiences quarterly
368
+ - Remove unused audiences
369
+ - Update conditions as needed
370
+
371
+ ## Quick Reference
372
+
373
+ ### Audience Limits
374
+
375
+ - Maximum: 100 audiences (standard)
376
+ - Membership: 1-540 days
377
+ - Export minimum: 100 users (1,000 EEA/UK)
378
+
379
+ ### Export Destinations
380
+
381
+ - Google Ads
382
+ - Display & Video 360
383
+ - Search Ads 360
384
+
385
+ ### Predictive Options
386
+
387
+ - Purchase probability
388
+ - Churn probability
389
+ - Revenue prediction