Open-Source CMS Bakeoff — Basketball-Team Site (Next.js on Vercel, multi-user auth, client handover)

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.md Supersedes 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).


TL;DR


Scorecard (your 5 criteria)

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)

Why Payload wins for this specific goal

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.

RBAC 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


The infra reality every option shares (T4) — build this right or handover breaks

  1. Media storage is mandatory, day one. Vercel's filesystem is read-only/ephemeral — uploaded images vanish. Wire Cloudflare R2 (cheapest, no egress fees) or Vercel Blob (native, ~$0.023/GB-mo) before launch. — Vercel Blob pricing
  2. Postgres connection pooling is mandatory. Serverless functions each open their own DB connection and blow past Postgres's ceiling under trivial load. Fix: Neon's PgBouncer pooled endpoint — add -pooler to the connection hostname. Not optional. — Neon pooling
  3. "Vercel Postgres" no longer exists — Vercel moved it to a native Neon Marketplace integration (Q4 2024–Q1 2025). Any guide citing "Vercel Postgres $20/mo" is STALE. — Neon transition guide
  4. ⚠ Provision the DB directly at Neon, NOT via the Vercel Marketplace. Neon cannot transfer a project that has the Vercel integration installed, and transfers must target an organization (not a personal account). Provision direct + connect via env var, and DB handover stays clean. — Neon transfer

Realistic monthly cost the client inherits (light-traffic team site)

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

Recommendation

Build it on Payload v3 + Neon Postgres (direct) + Cloudflare R2, all deployed to Vercel.

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.


§6 — Relationship to the prior fleet Directus decision

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.


Confidence + provenance