Author: hermes • Date: 2026-07-15 • Tier: T-deep (decision-grade — repeatable agency offering; every load-bearing claim verified against a primary source) Sources:
sources/T1-payload.md·sources/T2-directus.md·sources/T3-strapi.md·sources/T4-vercel-db-handover.mdSupersedes for THIS constraint: the fleet's prior Directus pick (that was for the fleet's own self-hosted media/authoring stack — a different constraint; see §6).
ee/ enterprise dir). Directus = new MSCL-1.0 (as of 2026-04-22, no longer the old BSL) whose grant explicitly permits agency "professional services to deploy or host the Software for the licensee." My pre-verification worry about a Directus revenue gate was outdated — corrected by reading the actual license.-pooler string, @payloadcms/db-vercel-postgres) + Cloudflare R2 or Vercel Blob for media, all on Vercel. One deploy target, MIT, cleanest handover.| Criterion | Payload v3 | Directus | Strapi v5 |
|---|---|---|---|
| 1. Vercel-native deploy (one project) | ✅ Yes — runs in Next.js, official Vercel template | ❌ No — separate always-on Docker host | ❌ No — separate always-on Node host |
| 2. Auth + RBAC | ✅ Native auth; roles = custom role field + access fns (dev sets up) |
✅ Native, policy-based additive permissions | ✅ Native admin + Users-Permissions; custom roles + field-level (free since v4.8) |
| 3. Relational team data (roster/schedule/stats) | ✅ Collections + Relationship/Join/Array fields | ✅ Real SQL tables + Knex FK relations | ✅ Content-Types Builder + relations |
| 4. License for resale/handover | ✅ MIT (verified; Figma acquisition preserved OSS + self-host) | ✅ MSCL-1.0 — agency-services clause on-point; core grant not revenue-gated | ✅ MIT outside ee/ |
| 5. What the client inherits | Vercel + DB + storage + email (multi-vendor, but 1 deploy) | Vercel + Directus host + DB + storage (4 parts) | Vercel + Strapi host + DB + storage (3-4 parts) |
| Fit verdict | STRONG | OK (wrong shape) | OK (wrong shape) |
Your goal has one hard architectural filter: "deploy through Vercel and hand over the whole project." Vercel is a serverless frontend host — no persistent process. A CMS is either (a) code that runs inside the Next app (serverless-compatible), or (b) a separate always-on server.
npx create-payload-app / install-into-Next means the admin panel and REST/GraphQL API are Next.js routes. git push → Vercel builds everything. Handover = transfer one Vercel project + the DB + a storage bucket. — Payload 3.0 blogRBAC note for Payload (only real setup cost): Payload has no turnkey "roles" dropdown — you add a role field to the Users collection and write access-control functions (e.g. admin can delete, contributor can only author). Standard Payload practice, ~an afternoon, fully covers coach/admin/player-contributor tiers. — Access Control docs
-pooler to the connection hostname. Not optional. — Neon pooling| Piece | Provider | Floor | Notes |
|---|---|---|---|
| Hosting | Vercel | $0 (Hobby) → $20/mo (Pro) | Pro needed for commercial/SLA |
| Database | Neon (direct) | ~$0–10/mo | free tier plausibly enough; autosuspends when idle |
| Media | Cloudflare R2 / Vercel Blob | ~$0–5/mo | R2 = no egress fees |
| Email (optional) | Resend/Postmark | $0–20/mo | for auth/notify emails |
| Total | ~$0–15/mo light → ~$25–45/mo with Pro+backups | multi-vendor, disclose at handover |
Build it on Payload v3 + Neon Postgres (direct) + Cloudflare R2, all deployed to Vercel.
@payloadcms/db-vercel-postgres), not MongoDB — a MongoDB-adapter serverless connection-pool bug on Vercel was live as recently as Nov 2025 (#14547, since fixed). Postgres/Neon is the proven serverless path. — Neon × Payload guiderole field + access functions for the team's auth tiers during build.Directus is not "wrong" — it's wrong-shape for THIS constraint. If the fleet later wants a self-hosted authoring backend it controls (not client-handover, not Vercel), Directus/MSCL remains a fine pick. The two decisions don't conflict.
The earlier Directus pick was scoped to the fleet's own media/authoring stack (self-hosted, R2 + Bunny CDN, fleet controls the infra). That constraint has no "must run on Vercel" and no "hand to a third party" requirement, so Directus's always-on-backend shape is fine there. This report does not overturn that — it answers a different question (client site, Vercel, handover) where the Vercel-native property is decisive. Keep the two scoped separately.