Prospia Sites builder guide

How Prospia Sites works

Prospia Sites hosts landing pages, blog articles, news and simple pages for a Prospia organization, with the SEO work done by the platform: HTML rendered on the server, sitemap, robots.txt, llms.txt, RSS, JSON-LD structured data, share images and 301 redirects when an address changes.

Who and where

Order of work for a new site

  1. getting_started, then sites_guide for the topics you need (design, blocks, recipes).
  2. site_list, or site_create (slug 3 to 40 chars, name, locale pt-BR, en or es, kind organization or person).
  3. Upload every image first and keep the returned mediaId: media_upload (https URL or base64), or media_upload_url (a one-time PUT link for curl) when the file is on a disk you reach with a shell. Start with the logo (SVG) when the brand has one.
  4. Settings and design with site_update (colors, design, menu, profiles, job title, per-language chrome). This saves a SETTINGS DRAFT; the live site does not change.
  5. Pages: landing_create_draft with the blocks (or content_generate_landing, which spends credits), page_create_draft, blog_create_draft, news_create_draft. All create DRAFTS.
  6. Review: preview_link (one page draft; links to other pages open their drafts) and site_preview_link (the whole site with the draft settings). Show the links to the person.
  7. Publish only after the person agrees: content_publish (or landing_publish...) for pages, site_settings_publish for the settings. The site is rebuilt at once.
  8. Home page: with a single published landing it is the home automatically; otherwise set homeContentId in site_update.

Revisions and baseRevision

Deleting a site

Articles, news and simple pages

Errors

The tools validate with strict schemas: an unknown argument, an unknown block field, a value over its limit, a missing required field or an invalid link is refused with the field path, and nothing is saved. Read the message, fix that field, send again. A tool that answers "missing scope" was added after the connection was made: the person accepts the new permission in Prospia (Settings > Connected apps).

Site design

The design of a site is a set of closed options (no free CSS): every site stays fast, accessible and consistent. All of them go through site_update (or site_create), land in the settings draft and go live with site_settings_publish. Check them with site_preview_link, not with the page preview_link.

Colors

Fonts: fontPairing

Heading and text fonts, served by the site itself (no third-party font service):

Light, dark or automatic: colorScheme

Header

Footer

Per-language chrome: locales

Identity

Choosing a look

Every design field: primaryColor, accentColor, backgroundColor, textColor, font, fontPairing, colorScheme, surfaceColor, mutedTextColor, borderColor, darkPrimaryColor, darkAccentColor, darkBackgroundColor, darkTextColor, darkSurfaceColor, darkMutedTextColor, darkBorderColor, themeToggle, headerMark, monogram, logoLabel, languageSwitcher, footerBadges.

Landing blocks

A landing page is an ordered list of blocks. The set of block types is fixed on purpose: no free layout, no custom CSS, so every site stays fast, accessible and readable on phones.

The field lists below are generated from the same JSON Schema the tools validate with; limits are in characters.

Fields every block takes

Rules across fields

hero

The opening of the page: the one H1 of the page, a short promise and the main action. When to use: Always first, exactly once per landing. On a personal site it carries the name, the role line, a short bio, a round portrait and the profile buttons.

features

What you offer, as a grid of items that can each link to a page (products, services, projects). When to use: For a catalog of products, services or projects; give each item its own link when it has a page.

benefits

What the visitor gains, as a grid of short items (outcomes, not features). When to use: Right after the hero on product and service pages: 3 or 4 items, each a concrete result.

faq

Questions and answers; published as FAQPage structured data. When to use: Near the end, with the 3 to 6 questions buyers really ask (price policy, area served, deadlines, how it works).

cta

A call to action with one button: a full-width banner, or a card with an optional image. When to use: To close the page (banner) or to highlight one thing in the middle of it (card, for example a series, a launch or a guide).

testimonials

Quotes from real customers, with name and role. When to use: Only with real quotes the person gave you, with permission. Never write or paraphrase testimonials.

text

Free text in markdown: an about section, a story, terms, a list. When to use: When the content is prose rather than a grid: "About", "How it works", a short manifesto.

image

One image across the width of the page, with a caption. When to use: For a diagram, a product photo or a screenshot that explains more than text would.

posts

The newest LIVE posts of the site (blog articles, news or both) as the same cards as the /blog index: cover, title, summary and date, in the language of the landing. When to use: On a home or hub landing so it shows fresh content by itself: every publication rebuilds the site and updates the list. Without matching posts the section is left out, so it is safe before the first article.

form

A lead form (name, e-mail and consent always; optional and custom fields); the leads arrive in Prospia. When to use: On lead capture and service pages, when the plan includes forms. Point buttons at it with #form-<formId>.

Recipes

Starting points for the sites people ask for most. Adapt the copy to the real business: every name, number and URL below is an example. Values in <angle brackets> are placeholders for ids you get from media_upload, and content:<uuid> links stand for the id of one of your pages (from the *_list tools).

Always: hero first, one main action, the anchors the menu needs, alt text on every image, the person sees the preview before anything is published.

Recipe: Personal or portfolio site (personal)

Use when: A person presenting their work: consultant, engineer, designer, writer. Site kind "person" so the structured data is a Person with jobTitle and sameAs.

Order and why:

  1. hero: Name as the heading, the role as subheading, a two or three sentence bio in body, a round portrait (avatarMediaId) and the profile buttons (showSocialLinks: true reuses the site profiles).
  2. cta: A card (style card, image on the right) for the one thing you want people to read or try next: a series, a talk, a product.
  3. features: Products or projects, one item per project, each linking to its page; extra links (source code) in links. Eyebrow "Products", anchorId "products" for the menu.
  4. text: About: a short story in markdown, with an eyebrow "About" and a heading that says something ("Since 2005"). anchorId "about".

Site settings (site_update):

{"kind":"person","jobTitle":"Cofounder and DevOps engineer","fontPairing":"classic-serif","colorScheme":"auto","themeToggle":true,"headerMark":"monogram","monogram":"AL","languageSwitcher":"compact","navLinks":[{"label":"Products","url":"#products"},{"label":"About","url":"#about"}],"socialLinks":[{"label":"GitHub","url":"https://github.com/example"},{"label":"LinkedIn","url":"https://www.linkedin.com/in/example"}]}

Example blocks (landing_create_draft or landing_update blocks):

[
{"type":"hero","heading":"Ada Lovelace","subheading":"Cofounder and DevOps engineer","body":"I build infrastructure that small teams can run alone. Today I work on [Example Cloud](https://example.com).","avatarMediaId":"<portrait mediaId>","avatarAlt":"Portrait of Ada Lovelace","showSocialLinks":true},
{"type":"cta","eyebrow":"Series","heading":"Infrastructure with AI, step by step","text":"How I run deploys, alerts and reviews with an AI agent, and what went wrong.","buttonLabel":"Read the series","buttonUrl":"content:3f2b8c1e-0a4d-4e6b-9c7a-5d1e2f3a4b5c","style":"card","imageMediaId":"<diagram mediaId>","imageAlt":"Diagram of the five-step cycle","imagePosition":"right"},
{"type":"features","anchorId":"products","eyebrow":"Products","heading":"What I work on","items":[{"title":"Example Cloud","text":"Hosting for Node and Go apps, with backups and alerts included.","linkUrl":"https://example.com","linkLabel":"Visit Example Cloud"},{"title":"tui-tools","text":"Small terminal tools for daily server work.","linkUrl":"https://example.org/tui-tools","links":[{"label":"Source code","url":"https://github.com/example/tui-tools"}]}]},
{"type":"text","anchorId":"about","eyebrow":"About","heading":"Since 2005","markdown":"I started as a Linux admin and moved to platform work in 2014.\n\nI write about what I build in the [series](/infra-with-ai)."}
]

Recipe: SaaS product landing (saas)

Use when: A software product with a sign-up or trial. One clear action repeated at the top and at the end.

Order and why:

  1. hero: The outcome in the heading, who it is for in the subheading, the sign-up button, and a real screenshot (imageMediaId, PNG).
  2. benefits: 3 or 4 outcomes the customer gets, each with one proving sentence.
  3. features: What the product does, one item per capability; link items to docs pages when they exist. anchorId "features".
  4. testimonials: Only when you have real quotes with permission; skip the block otherwise.
  5. faq: Pricing model, trial, data and security, integrations: what blocks a sign-up. anchorId "faq".
  6. cta: Banner that repeats the hero action.

Site settings (site_update):

{"kind":"organization","fontPairing":"modern","colorScheme":"light","navLinks":[{"label":"Features","url":"#features"},{"label":"FAQ","url":"#faq"}]}

Example blocks (landing_create_draft or landing_update blocks):

[
{"type":"hero","heading":"Close the month in one afternoon","subheading":"Bookkeeping software for small agencies, with bank sync and invoices in one place.","ctaLabel":"Start free trial","ctaUrl":"https://app.example.com/signup","imageMediaId":"<screenshot mediaId>","imageAlt":"Monthly closing screen with the bank reconciliation done"},
{"type":"benefits","heading":"Why teams switch","items":[{"title":"Bank sync every hour","text":"Transactions arrive matched to invoices."},{"title":"Invoices in two clicks","text":"From a project, with your taxes already set."},{"title":"One report for the accountant","text":"Export the month as a single file."}]},
{"type":"features","anchorId":"features","heading":"Features","items":[{"title":"Reconciliation","text":"Suggested matches you confirm or fix.","linkUrl":"/reconciliation"},{"title":"Invoices","text":"Recurring and one-off, sent by e-mail."},{"title":"Reports","text":"Cash flow and profit by project."}]},
{"type":"faq","anchorId":"faq","items":[{"question":"How long is the trial?","answer":"Fourteen days, no card needed."},{"question":"Which banks are supported?","answer":"The list is on the integrations page and grows every month."}]},
{"type":"cta","heading":"Try it with your own numbers","buttonLabel":"Start free trial","buttonUrl":"https://app.example.com/signup"}
]

Recipe: Local service business (local-service)

Use when: A clinic, workshop, office or contractor that serves one area. Visitors want to know what you do, where, and how to reach you now.

Order and why:

  1. hero: What you do and where in the heading; the phone (tel:) or the form (#form-quote) as the button; a real photo of the place or the team.
  2. features: Services, one item per service. anchorId "services".
  3. benefits: Why choose you: response time, guarantee, area served. Only facts you can back.
  4. testimonials: Real reviews with permission, if you have them.
  5. faq: Opening hours, area served, how a quote works, payment methods.
  6. form: A quote request (when the plan has forms); otherwise a cta with tel: or mailto:.

Site settings (site_update):

{"kind":"organization","fontPairing":"system","colorScheme":"light","navLinks":[{"label":"Services","url":"#services"},{"label":"Contact","url":"#form-quote"}]}

Example blocks (landing_create_draft or landing_update blocks):

[
{"type":"hero","heading":"Air conditioning repair in Campinas","subheading":"Same-week visits for homes and offices.","ctaLabel":"Call (19) 3000-0000","ctaUrl":"tel:+551930000000","imageMediaId":"<team photo mediaId>","imageAlt":"Technician cleaning a split air conditioner"},
{"type":"features","anchorId":"services","heading":"Services","items":[{"title":"Installation","text":"Split and window units, with the electrical check."},{"title":"Cleaning and maintenance","text":"Filters, coils and drain, with a checklist report."},{"title":"Repair","text":"Diagnosis on the first visit."}]},
{"type":"faq","items":[{"question":"Which neighborhoods do you serve?","answer":"All of Campinas and Valinhos."},{"question":"How does a quote work?","answer":"Send the model and the problem; we answer the same day."}]},
{"type":"form","formId":"quote","purpose":"We use your contact only to answer this quote request.","heading":"Request a quote","fields":["phone","message"],"required":["phone"],"submitLabel":"Send request","controllerName":"Example Air Ltda","controllerEmail":"privacy@example.com"}
]

Recipe: Lead capture page with a form (lead-capture)

Use when: A campaign page (ads, e-mail, a QR code) with one goal: get the visitor to fill a form. No menu detours, one offer.

Order and why:

  1. hero: The offer in the heading, what the visitor gets in the subheading, a button to #form-<formId>.
  2. benefits: Three reasons to fill the form now, concrete.
  3. form: The form itself: few fields (each extra field loses people), a clear purpose sentence, and the controller data or a privacy link.
  4. faq: The objections: price, commitment, what happens after sending.

Site settings (site_update):

{"colorScheme":"light","fontPairing":"modern"}

Example blocks (landing_create_draft or landing_update blocks):

[
{"type":"hero","heading":"Free energy audit for small factories","subheading":"A two-hour visit and a written report with the three changes that save the most.","ctaLabel":"Book the audit","ctaUrl":"#form-audit"},
{"type":"benefits","items":[{"title":"Written report","text":"Yours to keep, with the expected savings of each change."},{"title":"No commitment","text":"You decide later if you want help with the changes."},{"title":"Two hours on site","text":"We measure while the line runs."}]},
{"type":"form","formId":"audit","purpose":"We use these details to schedule the audit and send the report.","heading":"Book the audit","fields":["company","phone","city"],"required":["company"],"submitLabel":"Book the audit","successMessage":"Thanks. We will call you within one business day to set the date.","privacyUrl":"https://example.com/privacy"},
{"type":"faq","items":[{"question":"Is it really free?","answer":"Yes. The audit and the report have no cost."},{"question":"What happens after I send the form?","answer":"We call you to pick a date."}]}
]

Recipe: Blog or news hub (blog-hub)

Use when: A site that lives on articles. The blog index (/blog) and news index (/news) are automatic; the landing is the home that explains the site and points to the best articles.

Order and why:

  1. hero: What the site is about and for whom, with a button to the best starting article (content:<id>).
  2. features: Three to six hand-picked articles, each item linking to its article with content:<id>.
  3. posts: The newest articles, refreshed by every publication, with "See all" to /blog.
  4. cta: Subscribe or contact (a link), or a form if the plan has one.

Site settings (site_update):

{"fontPairing":"book","colorScheme":"auto","themeToggle":true,"navLinks":[{"label":"Start here","url":"content:3f2b8c1e-0a4d-4e6b-9c7a-5d1e2f3a4b5c"}]}

Example blocks (landing_create_draft or landing_update blocks):

[
{"type":"hero","heading":"Practical notes on running small servers","subheading":"One article a week on backups, deploys and monitoring, from real incidents.","ctaLabel":"Start here","ctaUrl":"content:3f2b8c1e-0a4d-4e6b-9c7a-5d1e2f3a4b5c"},
{"type":"features","eyebrow":"Most read","heading":"Start with these","items":[{"title":"Backups you actually tested","text":"A restore drill in 30 minutes.","linkUrl":"content:3f2b8c1e-0a4d-4e6b-9c7a-5d1e2f3a4b5c","linkLabel":"Read"},{"title":"Alerts that wake the right person","text":"Three rules that cut our pages by half.","linkUrl":"/blog"}]},
{"type":"posts","eyebrow":"Latest","heading":"New on the blog","kind":"article","count":3,"showAllLink":true},
{"type":"cta","heading":"Get the next article","text":"One e-mail a week, no tracking.","buttonLabel":"Subscribe","buttonUrl":"https://example.com/newsletter","buttonStyle":"outline"}
]

Recipe: Multi-language site (multi-language)

Use when: The same site in two or more languages, with the language switcher and hreflang done for you. Build and review the main language first, then translate.

Order and why:

  1. main language: Finish the pages in the site language first (blocks, anchors, menu).
  2. content_create_translation: For each page: content_create_translation {id, locale: "en"} makes a linked draft copy at /en/<same slug> (translate: true lets the AI translate, which spends credits). Then rewrite the copy with landing_update or page_update.
  3. anchors: Keep or translate anchorId values per language, and make the menu of that language (locales.<lang>.navLinks) point at them.
  4. settings locales: site_update locales: {"en": {navLinks, footerText, jobTitle, footerBadges}} so the menu and footer follow the page language.
  5. review: site_preview_link shows the switcher and hreflang inside the preview; publish each page and the settings when the person agrees.

Site settings (site_update):

{"languageSwitcher":"compact","locales":{"en":{"navLinks":[{"label":"Products","url":"#products"},{"label":"About","url":"#about"}],"footerText":"Product names belong to their owners.","jobTitle":"Cofounder and DevOps engineer"}}}

Example blocks (landing_create_draft or landing_update blocks):

[
{"type":"hero","heading":"Ada Lovelace","subheading":"Cofounder and DevOps engineer","showSocialLinks":true},
{"type":"features","anchorId":"products","eyebrow":"Products","items":[{"title":"Example Cloud","linkUrl":"https://example.com"}]},
{"type":"text","anchorId":"about","eyebrow":"About","heading":"Since 2005","markdown":"English version of the about text."}
]

Writing the copy

Copy decides whether a visitor stays. These rules are the same ones the Prospia AI writer follows:

Language

Facts

Lengths that work

Images

media_upload stores an image (https URL or base64) and returns the mediaId plus the sizes. JPEG, PNG, GIF, WebP and ICO go up to 15 MB: the platform makes widths of 1600, 800 and 400 px for responsive loading and a 1200x630 share card, and removes EXIF and GPS data.

SVG

Uploading a local file: media_upload_url

Upload errors

PNG or JPG

Sizes per slot

Alt text

Share image order

The page ogMediaId, else the cover, else the site defaultOgMediaId, else (landings) the hero or first image, else a generated card with the title in the site colors.

AI images

content_generate_image, content_generate_share_image and content_generate_favicon draw images and spend credits; no text, logos or real people in them. Prefer the person's own photos and screenshots when they exist.

SEO and languages

The platform does the technical SEO (server HTML, canonical, Open Graph, JSON-LD, sitemap, hreflang, llms.txt, redirects). Your part is the words and the structure.

Slugs

Titles and descriptions

Languages

Analytics

Structure that ranks

Common mistakes

Collected from real sites built through this connector. Each one cost a round of rework.

Credits

Reading, writing drafts, uploading images, previews, publishing and this guide are free. Only AI generation spends the organization's AI credits: