Skip to content

Brand theming & the watermark

Every embedded polst carries the brand’s identity, not ours. A single Branding page in the dashboard controls it, and one save propagates to every embed.

A single Branding page in the dashboard controls the whole look:

  • Colours — accent, background, text, buttons
  • Shape — corner radius and density
  • Typography — system fonts, a serif, or the brand’s own custom font
  • Logo — light and dark variants, plus favicon
  • Advanced CSS — a sanitised escape hatch for designers who want fine-grained control

These map directly onto the resolved BrandTheme DTO that renderers consume.

The Branding page renders a real polst alongside the form. Every edit updates the preview instantly, so the user sees the exact result before saving.

One save propagates the new theme to every embed — iframes on third-party sites, widgets on the brand’s own pages, native views inside the mobile app — within roughly a minute. No redeploy, no republish.

Each save bumps the theme version, which is the stable cache key renderers use to revalidate via the ETag flow. The theme row is updated with PATCH /brands/me/theme — see the REST API reference.

Every embedded polst shows a small “Powered by Polst” mark in the corner by default, subtly themed to match the brand’s accent colour.

  • Free plan: watermark is always visible. Doubles as attribution and an acquisition channel.
  • Premium plan: brands can toggle it off from the Branding page.

On the free plan the toggle is disabled with a “Contact sales” prompt. Grants are admin-issued for now; self-serve upgrade lands with the separate billing project later.