Implementation Status
What ships today, what is intentionally left for you to bring, and what is planned.
What ships
- Full marketing surface: hero, services, case studies, portfolio, pricing, testimonials, FAQ, CTA, blog, contact, legal, docs, SEO landing pages.
- 3 locales (English, French, Spanish: all LTR) via
next-intlmiddleware. - Directus 11 CMS with 18 pre-provisioned collections, their translation children, relations, permissions, and EN/FR/ES seeded content. All created by a programmatic
bootstrap.mjs+seed.mjs: no clicking through the admin to model data. - GraphQL consumption: frontend fetchers hit Directus
/graphqldirectly with unauthenticated Public-role reads. - Pre-bundled
@directus-labs/seo-plugin: the SEO interface (live Search Preview, character hints, Open Graph, canonical, robots) is wired to everyseofield out of the box. - Zero-command stack:
docker compose up -d --buildboots Postgres + Redis + Directus + init sidecar; init provisions schema and seeds content, then exits. - Fallback content in
frontend/src/config/ui/*so the frontend renders even if Directus is offline or a collection is empty. - Admin UX polish: collection groups (Pages / Blog / Marketing / Navigation / System), color coding, Material icons, display templates using non-translation fields, archive/status UX on collections with
status. - Contact form with honeypot spam protection and optional Resend delivery. Submissions persist to
form_submissionsvia public-create permission. - SEO primitives: canonical URLs, hreflang alternates, Organization + LocalBusiness JSON-LD, sitemap.xml, robots.txt.
- 31+ shadcn/ui components with dark mode.
Bring your own
Agency is a marketing site. It deliberately does not ship:
- Auth / user accounts: use SaaSForge Core if you need workspaces and RBAC.
- Subscription billing: use SaaSForge Core if you need Stripe subscriptions.
- Product app: if your buyer signs in and uses a dashboard, Agency isn't the right shell.
If you only need to capture leads and sell services, Agency is complete as-is.
Env vars buyers need to supply
| Var | Why | Source |
|---|---|---|
DIRECTUS_ADMIN_EMAIL / DIRECTUS_ADMIN_PASSWORD | Admin login | Pick your own |
POSTGRES_* | DB credentials | Pick your own |
DIRECTUS_KEY / DIRECTUS_SECRET | Directus signing secrets | uuidgen × 2 |
NEXT_PUBLIC_DIRECTUS_URL | Frontend → CMS | Your Directus URL |
NEXT_PUBLIC_SITE_URL | Canonical + sitemap | Your public domain |
RESEND_API_KEY (optional) | Contact form email | resend.com |
NEXT_PUBLIC_GTM_ID / NEXT_PUBLIC_GA_ID (optional) | Analytics | |
NEXT_PUBLIC_BOOKING_URL (optional) | Floating booking CTA | Calendly / Cal.com |
On the roadmap
- Additional locale seeds (DE, PT) wired in the same pattern as EN/FR/ES.
- Richer case-study templates with comparison sliders.
- Optional Formspree / Tally fallback for the contact form.
- Optional draft preview flow via
DIRECTUS_PREVIEW_TOKEN.
File an issue or email support if something on the roadmap is blocking you: we prioritize buyer requests.