Skip to content

[Catalog] Add Formbricks #182

Description

@onel

App: Formbricks
Repo: https://github.com/formbricks/formbricks
Docs: https://formbricks.com/docs

Open-source survey and experience-management platform — build in-app, link, and website surveys; analyse responses with AI insights.


How to do this: follow Authoring catalog apps with an agent. Paste the prompt, append the inputs above, run it inside the malmo repo.

Gate findings (static screen, commit 9291f255c100):

GO (degraded) — four Gate D limitations to record in the manifest.

Compose architecture (7 services):

  • pgvector/pgvector:pg18 — Postgres sidecar at elected uid 999 (brings pgvector extension; do NOT swap to managed Postgres — the migration requires pgvector and managed images don't have it)
  • valkey/valkey — Redis-compatible cache sidecar (standard pattern)
  • formbricks-migrate — init container (node migration script, exits cleanly)
  • ghcr.io/formbricks/formbricks:latest — main Next.js app, runs as nextjs uid 1001 (clean)
  • hub-migrate — init container for Hub (goose + river migrations)
  • ghcr.io/formbricks/hub:latest — Formbricks Hub Go API, required
  • cubejs/cube:v1.6.6 — semantic analytics layer, requires ./cube/cube.js and ./cube/schema/ config files mounted read-only (must be bundled in the catalog entry)

Key adapt notes:

  • Postgres sidecar: set user: "999:999" so the official entrypoint skips chown+gosu — no stripped caps needed
  • NEXTAUTH_SECRET, ENCRYPTION_KEY, CRON_SECRET, HUB_API_KEY, CUBEJS_API_SECRET all map to secrets: cleanly
  • WEBAPP_URL / NEXTAUTH_URLMALMO_APP_URL
  • SMTP vars → MALMO_MAIL_*; declare mail: {optional: true}
  • Boot-time: confirm SAML DB setup (create-saml-database.js) completes against the pgvector sidecar or fails gracefully when SAML is unconfigured

Gate D limitations to record:

  1. Link surveys / external reachability — sharing survey URLs with respondents outside the LAN is broken until remote access ships; in-app and embedded surveys work on LAN (no-public-url, open)
  2. OAuth callbacks link-localWEBAPP_URL/NEXTAUTH_URL injected as .local mDNS; OAuth logins and email verification links break off-LAN (app-url-injection, same class as docuseal, open)
  3. SMTP optional — maps to MALMO_MAIL_*; email verification and password reset disabled by default without SMTP (smtp-relay, mitigated)
  4. Third-party integrations — Google Sheets, Airtable, Slack, Notion, social SSO (GitHub, Google, Azure AD, OIDC, SAML), EE enterprise license key all require operator-supplied env vars with no in-app config surface (operator-env-config, open)

Done when:

  • catalog/<id>/manifest.yml and catalog/<id>/compose.yml exist
  • go run ./cmd/malmo manifest check catalog/<id>/manifest.yml passes — schema + admission in one (run it yourself, don't trust the agent's claim)
  • docker compose -f catalog/<id>/compose.yml config -q passes
  • go run ./cmd/malmo manifest resolve catalog/<id>/manifest.yml run to fill image digests/sizes — or images: omitted with a note if the registry was unreachable
  • PR body includes Closes #<N>

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedHas an unmet dependencycatalogApp catalog contribution

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions