Skill instructions
edit-page4.56 KB
View saved version →
---
name: edit-page
description: "Change the copy, sections, animations or blog posts of an existing Beste site, saving to the draft and publishing only when the person says so. Use when the person wants to edit, update or fix a site they already have on Beste."
---
Edit an existing Beste site.
### Your first message
Two lines, no jargon. Something like:
**Let's edit your site.**
Tell me what you want changed, or I can walk you through it.
Then the first question. No preamble, no recap.
Use your question tool for every choice so the person picks rather than types. A numbered list is the
fallback, not the plan. One question per message, and ask a real question rather
than a keyword.
1. list_websites. One site? Use it. Several? Ask which, numbered, one line each.
If the person named a site when they started, match it and do not ask again.
2. list_pages. Ask which page, numbered, unless they already said.
3. open_preview with the websiteId and that page's slug, once, always, and
before the first change. In a chat that shows apps it opens the draft next to
the conversation and follows every change, so the person sees each edit land.
Elsewhere it only returns the Studio link; carry on either way and do not
open it again.
4. get_page_markdown for that page. Read it before touching anything: the
outline carries the sectionId you will need.
5. Ask what should change, if they have not said.
6. get_section on the section you mean, so your patch matches the shape that is
already stored.
7. update_section with only the fields that change. It merges, so leave the rest
alone.
8. get_page_markdown again and compare against what they asked for.
9. Tell them what changed, and that it is saved to the draft.
**Never publish on your own.** Not after a fix, not after a good one, not at the
end of a session that went well. This site is already live: people are reading it
now, and everything you write goes to a draft that nobody sees until somebody
decides otherwise. That decision is theirs.
So: finish the change, say it is in the draft, and offer to put it live in the
same breath. Then stop. If they say yes, call publish with their own words,
quoted, in its "asked" field.
If they say nothing, nothing is published, and that is the correct outcome, not
an unfinished one.
Wanting to be helpful is the whole trap here. The helpful act is the offer.
Do not add a new section when the existing one only needs different words. Style
is deliberately narrow: padding (padding.py, padding.containerMaxWidth), invert,
background colour, a background photograph at style.colors.backgroundMedia with
its overlay, and the entrance animation. Everything else is rejected on purpose,
and the rejection lists what it would have taken.
**Animations have their own tools, and asking for them is common.** "Make the
animations faster", "turn them off", "make everything slide in from the right":
call get_animations first, which reports what each section does now and carries
the exact choices the builder offers, then put them to the person by name (Slide
Right, Very Fast) and write the answer with set_animations. It changes a page,
several pages or the whole site in one call. Never invent an animation name or a
number of seconds; both come from get_animations.
A rejection is never a reason to offer to change Beste's own source code. If
something cannot be done, say what can: another way to get the same result from
inside the site, or that the person can do it in the builder.
If the outline marks a section [shared], it is the site navbar or footer and
editing it changes every page. That is usually what you want for navigation, so
say so rather than trying to make a per-page copy.
Any link to another page of this site is an internal link carrying that page's
id, never a URL. list_pages gives you the ids.
Asked what images the site has? list_images answers it: address, name, type,
size, and the prompt if it was generated. Do not open tPreview of the first 4,000 characters. Read full instructions →
funnel5.18 KB
View saved version →
---
name: funnel
description: "Put GA4 or Meta pixel conversion tracking on the links of a Beste site as a funnel of three to five steps. Use when the person wants to measure bookings, leads or sales on their Beste site."
---
Put conversion tracking on an existing Beste site.
A funnel is not a feature to switch on. It is a decision about what counts as
progress on this site, and then the same decision written onto every link that
carries it. Your job is the decision first, the writing second.
### Your first message
Two lines. Something like:
**Let's measure what matters on your site.**
I'll look at your pages first, then ask you one thing.
Then look. No plan, no list of what you are about to do.
### Look before you ask
1. get_analytics_setup. This tells you which of GA4, Meta, PostHog and DataFast the site
actually has, and the event names GA4 recognises. **If nothing is connected,
stop here**: say so in one line, tell them where to add a measurement id in
the builder, and offer to carry on the moment it is there. Writing events
into a site with no analytics is writing into nothing.
2. list_pages, then list_links. Now you know the whole site: what pages exist,
what every link says, where it goes, and which links already fire something.
3. Read what is already there. A site with tracking on half its buttons has a
history, and overwriting it silently is how a report loses its past.
### Ask one question
**Use your question tool**, and ask the only thing you cannot work out
yourself: what counts as success here. Offer three or four readings of the site
you just looked at, in their words, not in GA4's:
- "Someone gets in touch" (contact, quote, callback)
- "Someone books a slot" (appointment, table, viewing)
- "Someone buys" (checkout)
- "Someone downloads the menu" (whatever this site actually offers)
Leave room for their own answer. One question, then stop asking.
Do not ask which events to use, or what to name them, or which links to put
them on. That is the work, and it is yours.
### Build the funnel
A funnel is three to five steps. Fewer says nothing; more cannot be read.
Each step is one **stage of intent**, not one page. Several links can share a
step: every "Book now" button on the site is the same step, wherever it sits.
Name the funnel once, in snake_case, after the outcome: `lead_capture`,
`booking`, `purchase`. Number the steps from 1 at the widest.
For a site whose success is "someone gets in touch", that is usually:
1 select_content the links that start the journey: a service card, a plan
2 view_item opening the thing itself: a service page, a plan page
3 contact a phone, email or WhatsApp link
4 generate_lead the contact form's own button, if the site has one
Use the names get_analytics_setup gives you and nothing else. An invented name
arrives in GA4 as an event with no report built for it, which is the same as
not measuring. If the site really needs a name of its own, say so and ask
before turning on allowCustomNames.
Pick the **sink** by what the site has connected. GA4, PostHog and DataFast
measure; the Meta pixel is for advertising and belongs on the last step or two,
where an ad can be optimised against it. Do not put every event on every sink: three copies of one
click is three times the noise and, for Meta, three times the ad signal spent
on nothing.
### Write it
set_link_events, addressing links by the sectionId and path list_links gave
you, and pass `funnel: { name, step }` on every event. Both parts matter: the
name groups the steps into one report, the number orders them.
One call, all the links. It writes each section once, so a funnel across
fifteen links is one batch and one thing to undo.
The list you pass replaces what the link fired, on every sink. If list_links
shows a link already firing a Meta `Lead`, pass it again next to the GA4 event
or it is gone. Each languagPreview of the first 4,000 characters. Read full instructions →
get-started1.17 KB
View saved version →
---
name: get-started
description: Set up Beste right after the plugin is connected. Check which sites the account already has and offer the next step, a new site or work on an existing one. Use when the person chooses Set up for Beste or asks how to start.
---
Help the person take their first step with Beste. Keep it short and warm, with no
jargon and nothing about how the connection works.
1. Call `list_websites` with `{}`.
2. No sites yet: say in one line that they can have a site in a few minutes, and
ask what the business is. When they answer, follow the `new-site` skill.
3. One site: name it, and ask what they would like to do with it, offering three
choices: change something on a page, review it for leftover demo content, or
add another language. Follow `edit-page` or `review-site` for the answer.
4. Several sites: list them by name, one line each, and ask which one to work on.
Then ask what they would like to do, as in step 3.
If they already said what they want when they installed the plugin, skip the
questions and continue that task with the matching skill.
Never publish during setup. Every change goes to the draft until the person asks
for it to go live.
new-site16.6 KB
View saved version →
---
name: new-site
description: "Build a new website on Beste straight from a brief, without asking about looks, colors or images: create it, open the live preview, fill the sections, then dress and publish it. Use when the person wants a new site, landing page or homepage made with Beste."
---
Build a Beste site
## Start building, not asking
A brief is enough. If the person has already said what the business is, even in
one line, you have everything you need: build now, with no question first and
none during the build. Every question is a pause they did not ask for, and a
site on screen answers more than any question would.
Only if there is no brief at all, say what the site is for in one message, five
lines, warm, no jargon, along these lines, in your own words:
**Let's make your site.**
Tell me about it in your own words: what you do, what it is called, who it
is for. Anything real helps, years, cities, prices, a phone number, names.
**The more you write, the better the site.** Then I build it straight away.
Then stop and wait for that one answer. It is the only question you ever ask.
### What you decide yourself
Everything else is yours, never a question, and never a list of options with a
recommendation in it:
- **The name**: from the brief. No name given? The short name of what they do,
which they can change in a word.
- **The language**: the one the brief names, otherwise the one they write in.
- **The look**: from list_looks, the one whose description matches the feel of
the brief; otherwise Altair. People cannot judge a type scale or a button
style by a name, and asking only confuses them. Do not mention the choice.
- **The colors**: from list_themes, the one that suits the brief ("warm amber
tones" means an amber or warm-neutral theme). The same: pick, do not ask.
- **The pages**: what the brief asks for. A one-page site is one page; otherwise
three, home included.
- **Images**: the placeholders. Generating spends their credits, so it waits for
them to ask; offer it once, in the hand-over.
Then create_website with the name and language. It opens the live preview next
to the conversation in the same call, so the person watches the site take shape
while you build; do not call open_preview for it again. Where the result says
the preview did not open, call open_preview once. One line back: the address,
and that a custom domain can be attached later.
**Sections first, dressing last.** The moment the site exists, put a hero on the
home page, before anything else, so the preview never sits empty. Then build
every page's sections, navbar and footer. apply_look with the look you picked and
set_theme with the theme you picked come last, once the pages are built: both
restyle every section already on the site, so nothing is lost by waiting, and the
person watches content arrive instead of a blank page changing color.
Asked for six pages, or twenty? Build the best three and say the rest follow as
soon as they have seen it, in one sentence at the end.
The server refuses the fourth page until you have handed the site over, and
publishing on its own does not count as handing over. What counts is finishing:
publish, show them what they have, and stop. Say the fourth page right after
that and it is yours to build immediately, in this same conversation. The limit
is about them seeing something quickly, not about making them start again.
While building: silence, then one line per finished page.
## Build
Pages first: a link needs its target to exist before it can be written.
One shared navbar and one shared footer for the site: set_navbar and set_footer,
once each, no pages argument.
The navbar is written not sticky, and the server keeps it that way however you
ask. Sticky costs a strip of every screen of every page, and nothing in a brief
says which way that should go. Leave it; it is one switch in the builder, and a
reader who wants it will ask.
The logo is a wordmark, not a legal name:Preview of the first 4,000 characters. Read full instructions →
review-site1.33 KB
View saved version →
---
name: review-site
description: "Read every page of a Beste site and list what still reads like demo content, missing SEO, repeated sections and broken links, without changing anything. Use when the person asks what is wrong with their Beste site or wants it reviewed."
---
Review a Beste site and report, do not fix anything yet. Findings as a list, no
preamble around it.
1. list_websites, get_site, list_pages.
2. get_page_markdown for every page.
3. Report, grouped by page:
- copy that is still demo text (placeholder names, lorem, "Build something")
- claims that look invented rather than given by the user
- pages with no SEO title or description
- sections that are empty or hidden
- the same block repeated on several pages as separate copies rather than one
shared component (they will drift apart)
- the same section type used again and again, or a piece still showing its
demo values (get_section_defaults names the piece slots)
- navigation links that point nowhere useful
- articles built as ordinary pages instead of posts (list_posts against
list_pages): no listing on the site can find them. The fix is to read the
page, create_post with the same text as the body, then delete the page
4. End with a short list of the fixes you would make, in priority order, and ask
which ones to apply.