@feastalytics/cli 0.1.2 → 0.1.4
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 +47 -0
- package/dist/cli.js +1870 -203
- package/feast/SKILL.md +8 -0
- package/feast/references/links.md +67 -0
- package/package.json +1 -1
package/feast/SKILL.md
CHANGED
|
@@ -93,6 +93,14 @@ Many tasks are multi-step and have a required ordering the app normally enforces
|
|
|
93
93
|
|
|
94
94
|
For the ordered steps and domain rules of each common workflow, read `references/workflows.md`. It covers what's **fully doable** — creating/cloning a campaign, authoring automations end-to-end (create/edit/delete/simulate, with the trigger, condition, send-time, and chaining rules that make a flow professional), editing funnel screens (the draft → preview → promote loop), creating offers, and exploring users — and what's **not yet exposed** — members-program reward creation, brand identity, and replying to guests by SMS. Don't fabricate a call for a workflow whose tools aren't listed by `feast tools`; tell the user that part isn't available yet.
|
|
95
95
|
|
|
96
|
+
## Link to what you touched
|
|
97
|
+
|
|
98
|
+
Work you do through the CLI lands somewhere in the product, and a link is a cheap thing to offer — so offer them freely. After a turn where you created, changed, or published something, close with a short markdown list: where to see it, where to edit it, where to preview it. Not because anyone has to go check your work, but because opening the thing is usually the next step anyway. When someone asks where a thing lives or how to set it up, lead with the link rather than click-by-click directions.
|
|
99
|
+
|
|
100
|
+
**You don't know these URLs — read `references/links.md` before you write one.** The dashboard's shape is not the one you'd extrapolate from the guest-facing links elsewhere in this skill, so a URL that looks obviously right is the exact case to check. A wrong link is worse than no link: it looks authoritative and 404s.
|
|
101
|
+
|
|
102
|
+
That file has the dashboard routes with their panel and tab names, the guest-facing pages on the organization's own subdomain, the preview route that completes the funnel draft loop, and which query params actually suppress analytics versus merely tagging a visit as a preview.
|
|
103
|
+
|
|
96
104
|
## Worked example
|
|
97
105
|
|
|
98
106
|
User: "add a $5-off offer to the Plum location in my Plum Vietnamese org."
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Linking to your work
|
|
2
|
+
|
|
3
|
+
Most of what you create or change through the CLI has a stable URL in the product. Handing one over is cheap and saves the user hunting through the dashboard for the thing you just made — opening it is usually their next step anyway.
|
|
4
|
+
|
|
5
|
+
So offer links freely: after a turn where you created, changed, or published something, close with a short markdown list — usually two to four, covering where to see it, where to edit it, and where to preview it. When someone asks where a thing lives or how to set it up, lead with the link rather than describing where to click. It's an affordance, not a checkpoint; nobody has to go verify your work.
|
|
6
|
+
|
|
7
|
+
You can build almost every URL below from ids you already have. `<organizationId>` is the same value you pass to `--org`. Campaign, flow and draft ids come back from the tool call you just made. Only `<subdomain>` needs a lookup.
|
|
8
|
+
|
|
9
|
+
Angle brackets below mark a value **you** substitute. A finished link contains no brackets, no braces and no backticks — if you emit `{{...}}` or a bare `<campaignId>`, the link is broken.
|
|
10
|
+
|
|
11
|
+
## Dashboard
|
|
12
|
+
|
|
13
|
+
Everything an authenticated user sees hangs off `https://feastalytics.com/<organizationId>/app`. Note the shape: the organization id is a **path segment**, not a subdomain — there is no `app.feastalytics.com`.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
/ home
|
|
17
|
+
/campaigns every acquisition campaign
|
|
18
|
+
/campaigns/<campaignId> one campaign
|
|
19
|
+
/campaigns/<campaignId>?panel=funnel-v2 that campaign's funnel editor
|
|
20
|
+
/members-program?panel=<panel> the members program
|
|
21
|
+
/members-program?panel=funnel the members program funnel editor
|
|
22
|
+
/automation/<flowId> one automation flow
|
|
23
|
+
/settings/<tab> settings
|
|
24
|
+
/chats guest conversations
|
|
25
|
+
/orders /activity /guest-journey
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Campaign panels: `overview`, `funnel-v2`, `automations`, `promotions`, `metrics`, `ads`, `orders`, `reservations`, `subscriptions`, `creative-strategy`. With no `?panel=`, an unpublished campaign opens on `funnel-v2` and a published one on `overview`.
|
|
29
|
+
|
|
30
|
+
Members-program panels: `overview`, `funnel`, `automations`, `pass-builder`, `rewards`.
|
|
31
|
+
|
|
32
|
+
Settings tabs: `account`, `general`, `members`, `integrations`, `notifications`, `usage`, `scanning`, `texting`, `subscription`. Point people at `/settings/integrations` when a task needs a POS or Meta connection you can't make for them.
|
|
33
|
+
|
|
34
|
+
Funnels are always edited inside a panel, never on a page of their own — a campaign's `funnel-v2` panel, or the members program's `funnel` panel.
|
|
35
|
+
|
|
36
|
+
## Public pages
|
|
37
|
+
|
|
38
|
+
The guest-facing site lives on the organization's own subdomain, `https://<subdomain>.feastalytics.com`:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
/campaign/<campaignId> the live campaign funnel
|
|
42
|
+
/ the live members program funnel
|
|
43
|
+
/preview/<draftId> an unsaved funnel draft, as a tree of every screen
|
|
44
|
+
/preview/<draftId>/<campaignId> the same draft, scoped to one campaign
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Get `<subdomain>` from `loadCurrentOrganization` → `organization.subdomains2[].subdomain`. When the link is about a campaign, pick the subdomain matching that campaign's `referrers` rather than the first one. The funnel draft tools (`createFunnelDraft`, `getFunnelDraft`) already return the draft's `referrer`, so use that instead of looking it up again.
|
|
48
|
+
|
|
49
|
+
The `/preview/<draftId>` route is the payoff of the draft → preview → promote loop in `workflows.md`: it renders every screen of the staged funnel as a tree, so it's the right link to hand over after `stageFunnelEdit` and before `saveFunnelEdits`. It stops working once the draft is discarded or expires.
|
|
50
|
+
|
|
51
|
+
## Two query params that don't do what they look like
|
|
52
|
+
|
|
53
|
+
`utm_source=PREVIEW` only *tags* a visit as a preview so it can be filtered out of reporting later. The visit is still counted. The in-app preview panes append it, so use it when you want to match what the app does.
|
|
54
|
+
|
|
55
|
+
`internal_qa=1` is what actually suppresses analytics, and it sticks for that browser until cleared with `internal_qa=0`. Use it when the point is to look at a live page without being counted. `qa=1`, `review=1` and `campaign_review=1` suppress the current page only.
|
|
56
|
+
|
|
57
|
+
## Worked example
|
|
58
|
+
|
|
59
|
+
After creating a campaign and applying a funnel template. Every id below is substituted — this is what a finished message looks like, with nothing left to fill in:
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
Done — "Fall Prix Fixe" is live as a draft.
|
|
63
|
+
|
|
64
|
+
- [Open the campaign](https://feastalytics.com/3e8cb27c-6e54-444b-859f-66dbae0e711b/app/campaigns/e8ccc852-6555-4a9a-b48b-127d687bb34a)
|
|
65
|
+
- [Edit the funnel](https://feastalytics.com/3e8cb27c-6e54-444b-859f-66dbae0e711b/app/campaigns/e8ccc852-6555-4a9a-b48b-127d687bb34a?panel=funnel-v2)
|
|
66
|
+
- [See it as a guest](https://melbourneseafoodstation.feastalytics.com/campaign/e8ccc852-6555-4a9a-b48b-127d687bb34a?utm_source=PREVIEW)
|
|
67
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@feastalytics/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Command-line client for the Feastalytics platform — list, create, and update campaigns, automations, offers, and members-program rewards from the terminal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|