You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: fix staleness vs latest ../formono and tighten guides (#86)
* docs: fix staleness vs latest ../formono and tighten guides
Audited the docs against the current backend, SDKs, frontend, and the
published @formo/cli, and corrected stale or incorrect content.
HIGH
- wallet-labels: replace the old session-count lifecycle table with a
link to the canonical 6-stage definition; drop invented labels
(DeFi Active, ETH Staker) in favor of real filters (Apps, Lifecycle).
- integrations: only webhook alerts ship (Slack via webhook URL); drop
the unimplemented Email channel.
- metrics: channel #5 is "Referrals" (code value), not "Affiliates".
MED
- chains: BOB and BOB Testnet are indexed for contract events.
- mcp: document the project_users tool; fix the "not a tool" note and
the lifecycle tool description.
- cli: output defaults to TOON (not raw JSON); document the incur
output flags; jq examples need --json; query desc had wrong formats.
- charts: add Stacked Bar and Area chart types.
- guides: chart button is "Add Chart"; chart type is "Funnel"/"Flow"
not "Conversion Funnel"/"User Path"; nav is "Explorer"; fix typos.
- events: points is a Number (not String).
- security: bump SRI example to analytics@1.33.0 with the hash from the
GitHub release; remove the non-existent "Delete forms" role permission.
LOW
- metrics: complete AI-assistant domains; widen Email/Organic Social
rules; channels are assigned at ingestion, not query time.
- sql-explorer: reframe the session-count bucket query so it no longer
masquerades as the lifecycle definition.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs: fix broken example link (next-app-router -> with-next-app-router)
The getformo/examples repo folder is named with-next-app-router; the
bare next-app-router path 404s.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: cli/query.mdx
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
title: "Query"
3
3
sidebarTitle: "Query"
4
4
icon: database
5
-
description: "Run ClickHouse SQL queries against your Formo analytics data warehouse directly from the terminal and output results in table, JSON, or CSV format."
5
+
description: "Run ClickHouse SQL queries against your Formo analytics data warehouse directly from the terminal, with results in TOON, JSON, or other output formats."
6
6
---
7
7
8
8
The `formo query run` command lets you execute SQL queries against your Formo analytics data warehouse directly from the terminal.
@@ -34,12 +34,12 @@ formo query run "SELECT address, net_worth_usd FROM wallet_profiles ORDER BY net
34
34
formo query run "SELECT DATE(timestamp) as day, COUNT(DISTINCT address) as dau FROM events WHERE timestamp > now() - INTERVAL 7 DAY GROUP BY day ORDER BY day"
35
35
36
36
# Pipe results to jq for processing
37
-
formo query run "SELECT count(*) as total FROM events"| jq '.data'
37
+
formo query run "SELECT count(*) as total FROM events"--json | jq '.data'
38
38
```
39
39
40
40
### Tips
41
41
42
42
- SQL queries execute against your project's analytics data warehouse.
43
43
- Wrap your query in double quotes to prevent shell interpretation.
44
44
- Use single quotes inside your SQL for string literals.
45
-
-Pipe the output to `jq` for JSON processing in scripts.
45
+
-Pass `--json` and pipe the output to `jq` for processing in scripts (default output is TOON).
Copy file name to clipboardExpand all lines: data/events/track.mdx
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -50,7 +50,7 @@ Include these optional properties in a custom event to track values associated w
50
50
|`volume`| Number | The volume amount as a result of an event. For e.g., a token swap worth $20.00 would result in a volume of 20.00. Can be positive or negative e.g. send -100 to track outflows. |
51
51
|`revenue`| Number | The revenue amount as a result of an event. For e.g., a transaction with a protocol fee of $5.00 would result in a revenue of 5.00. Must be a non-negative number.|
52
52
|`currency`| String | The currency of the revenue as a result of the event, set in ISO 4217 format. If this is not set, Formo assumes the revenue is in USD. |
53
-
|`points`|String| An abstract value such as points or XP associated with an event, to be used by various teams. |
53
+
|`points`|Number| An abstract value such as points or XP associated with an event, to be used by various teams. |
Copy file name to clipboardExpand all lines: data/metrics.mdx
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -86,19 +86,19 @@ To minimize the amount of traffic that falls within the "Direct / None" category
86
86
87
87
### Channel
88
88
89
-
The acquisition channel that brought a session to your app. Every session is assigned to exactly one of 12 channels at query time, using a priority-ordered ladder over referrer domain, `utm_medium`, and 8 ad-platform click IDs (`gclid`, `gad_source`, `fbclid`, `msclkid`, `ttclid`, `twclid`, `li_fat_id`, `rdt_cid`).
89
+
The acquisition channel that brought a session to your app. Every session is assigned to exactly one of 12 channels when its events are ingested, using a priority-ordered ladder over referrer domain, `utm_source`, `utm_medium`, and 8 ad-platform click IDs (`gclid`, `gad_source`, `fbclid`, `msclkid`, `ttclid`, `twclid`, `li_fat_id`, `rdt_cid`). The channel is stored on the event, so queries read it back without recomputing.
90
90
91
91
| # | Channel | Definition |
92
92
|---|---------|------------|
93
93
| 1 | Paid Search | Paid signal + referrer is a search engine (Google, Bing, DuckDuckGo, Yahoo, Yandex, Baidu, Brave, Kagi, Naver, ...) |
94
94
| 2 | Paid Video | Paid signal + referrer is a video platform (YouTube, Vimeo, Twitch, Dailymotion, Loom, Wistia) |
95
95
| 3 | Paid Social | Paid signal + referrer is a social platform (Meta, X, LinkedIn, Reddit, TikTok, Pinterest, Snapchat, Threads, Discord, Telegram, Farcaster, ...) |
| 7 | AI | Referrer is an AI assistant domain (ChatGPT, Claude, Gemini, Copilot, Perplexity, DeepSeek, Phind, Poe, Mistral Chat, Meta AI, You.com, Pi) |
99
+
| 7 | AI | Referrer is an AI assistant domain (ChatGPT, Claude, Gemini, Copilot, Perplexity, DeepSeek, Phind, Poe, Mistral Chat, Meta AI, You.com, Pi, Grok, Qwen, Kimi, Hugging Face, Genspark) |
100
100
| 8 | Organic Search |`utm_medium=organic` or referrer is a search engine with no paid signal |
101
-
| 9 | Organic Social |`utm_medium` ∈ \{`social`, `social-network`, `social-media`, `sm`\} or referrer is a social platform with no paid signal |
101
+
| 9 | Organic Social |`utm_medium` ∈ \{`social`, `social-network`, `social-media`, `sm`, `social network`, `social media`\} or referrer is a social platform with no paid signal |
102
102
| 10 | Organic Video | Referrer is a video platform with no paid signal |
103
103
| 11 | Referrers | Any other non-empty referrer not matched by the rules above |
104
104
| 12 | Direct | No referrer, no UTM, no click ID (typed URL, bookmark, or stripped referrer) |
Copy file name to clipboardExpand all lines: features/wallet-intelligence/wallet-labels.mdx
+11-15Lines changed: 11 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,11 +17,7 @@ Each tracked user on Formo is assigned labels based on their onchain activity an
17
17
18
18
### User lifecycle labels
19
19
20
-
| Label | Description |
21
-
|-------|-------------|
22
-
|**New User**| Number of sessions = 1 |
23
-
|**Returning User**| Number of sessions > 1 and < 10 |
24
-
|**Power User**| Number of sessions > 10 |
20
+
Every wallet is assigned a lifecycle stage based on its recency and active days: **New**, **Returning**, **Power User**, **Resurrected**, **At Risk**, or **Churned**. See [User lifecycle](/features/wallet-intelligence/wallet-profiles#user-lifecycle) for the exact rules and thresholds.
25
21
26
22
### Attestations
27
23
@@ -53,9 +49,10 @@ Wallet labels turn anonymous addresses into actionable user profiles. This guide
53
49
Formo automatically analyzes each wallet's onchain activity and assigns relevant labels. Labels update as users' behavior changes.
In the funnel builder, you'll see a list of all of your events including events from the frontend (page views, wallet connects) and contract events (swaps, transfers) in the step dropdown.
84
84
85
85
Example funnel:
86
86
1. "Wallet Connected" (frontend event with type `connect`)
87
-
2. "Transaction" (frontend event with type type `transcation`)
87
+
2. "Transaction" (frontend event with type `transaction`)
88
88
3. "Swap" (contract event: Swap)
89
89
90
90
This funnel measures: Of users who connected a wallet, how many made a transaction, and of those, how many executed a swap?
@@ -97,7 +97,7 @@ This funnel measures: Of users who connected a wallet, how many made a transacti
97
97
98
98
For advanced analysis, use the **Explorer** (SQL editor).
99
99
100
-
Navigate to **Explore** in the sidebar. The schema browser on the left shows available tables: `events`, `users`, `anonymous_users`.
100
+
Navigate to **Explorer** in the sidebar. The schema browser on the left shows available tables: `events`, `users`, `anonymous_users`.
101
101
102
102
The `events` table includes contract events with columns like:
103
103
-`type`: Event type (e.g., `decoded_log` for contract events, `connect` for wallet connections)
0 commit comments