---
title: "Open questions"
url: https://mdfy.app/ir0K6-u2
updated: 2026-05-16T14:17:17.775Z
source: "demo-seed"
---
# Open questions

Things we're carrying. Not decisions — placeholders.

## Pricing model

Three candidates:

1. Per-seat ($X / user / month) — predictable for buyer, penalises invite-heavy teams
2. Per-page ($Y / published page / month) — usage-aligned, complex to communicate
3. Flat tiers ($Z / month) — simple, but caps usage on plans

Need 5 more pricing interviews before deciding. Talk to marketing leads at 10–50 person companies.

## Webhook delivery semantics

We emit webhooks on `page.published`, `page.updated`, `form.submitted`.
Open: at-least-once or exactly-once?

- At-least-once (current) — receivers must dedupe
- Exactly-once — requires distributed ledger / message ID tracking
- Practical answer is probably at-least-once + a `webhook_id` header for receiver-side dedup

## i18n strategy

Currently English-only. Korean is the next likely market based on inbound interest. Options:

1. `next-intl` (heavy, full framework)
2. `next-international` (lighter)
3. Roll-our-own with route segments `/en/...` and `/ko/...`

Lean toward option 3 because we only have ~30 strings to translate
and we want SEO per locale.

## Per-block vs per-page versioning

Currently versioning at the page level. Marketing users edit one
block at a time, so the version history is noisy ("v23: changed
headline by 2 words"). Consider block-level version log layered on
top — pages still version, but `page_block_versions` captures the
actual change shape.

Trade-off: more storage, more complex restore UI.

## Cron jobs ownership

Right now cron lives in `api/cron/*` routes triggered by Vercel
crons. Works fine. Open: at scale, do we move heavy cron (re-rank
embedding refresh, abandoned-cart sweeps) to durable workflow
(Vercel WDK)?

Decide when we have one job that takes >2 minutes.
