Skip to content

Repository files navigation

FluentForward

Marketing site for FluentForward Limited's AI advisory and implementation practice.

Stack

  • Next.js 14 (App Router), React 18, TypeScript
  • Tailwind CSS v4, configured CSS-first via @theme in src/styles/tailwind.css
  • Fonts loaded with next/font/google: Instrument Sans (display), Inter (body), IBM Plex Mono (labels)
  • No CMS, no database. All copy lives in src/content.
  • Optional analytics/marketing vendors load only after cookie consent (see src/lib/vendors).

Getting started

npm install
npm run dev

The site runs at http://localhost:3000. Local development does not require vendor IDs.

Production vendor IDs (Vercel)

Set these on the Production environment only (not Preview or Development). Scripts stay unloaded when an ID is empty or unset.

Variable Purpose
NEXT_PUBLIC_GA4_MEASUREMENT_ID Google Analytics 4 (G-…)
NEXT_PUBLIC_META_PIXEL_ID Meta Pixel (optional)
NEXT_PUBLIC_LINKEDIN_PARTNER_ID LinkedIn Insight Tag (optional)
NEXT_PUBLIC_LINKEDIN_WEBINAR_CONVERSION_ID LinkedIn conversion for webinar registration (optional)

Profit Engine webinar (/webinar)

Demio event 1021063 (Tue 15 Dec 2026 · 11:00 GMT). The site defaults NEXT_PUBLIC_DEMIO_EVENT_ID to 1021063; override only if the event moves.

Registration wiring (pick one path on Production):

Variable Purpose
DEMIO_API_KEY Demio API key (server only, for branded first-name + email form)
DEMIO_API_SECRET Demio API secret (server only)
NEXT_PUBLIC_DEMIO_DATE_ID Optional session date ID if auto-resolve fails
NEXT_PUBLIC_DEMIO_EMBED_REF Ref token from Demio Share → Embed (unstyled inline embed)
NEXT_PUBLIC_DEMIO_EMBED_SCRIPT_SRC Full embed script URL if Demio changes the path
NEXT_PUBLIC_DEMIO_EMBED_SRC Optional iframe src instead of script embed

Branded form uses Demio PUT /api/v1/event/register with event id 1021063, session date_id from NEXT_PUBLIC_DEMIO_DATE_ID when set, and Demio’s predefined gdpr field (yes / no from the optional marketing checkbox). Demio sends confirmation email, calendar invite and join link. Do not surface join URLs on /webinar or /webinar/thanks.

Demio room (Webinar ops, not this repo): Featured Action after the session points to Constraint review only. No Score Featured Action.

Test registration after deploy:

  1. Open the Vercel preview URL for the PR (or Production after merge).
  2. Ensure DEMIO_API_KEY + DEMIO_API_SECRET or NEXT_PUBLIC_DEMIO_EMBED_REF is set on that environment.
  3. Submit a test with a real inbox you control.
  4. Confirm the registrant appears in Demio event 1021063 and the Demio confirmation email arrives.
  5. Thank-you page: /webinar/thanks (API path redirects here; for embed, set Demio post-registration redirect to https://www.fluentforward.com/webinar/thanks if desired).

Redeploy Production after changing public env vars so the client build picks them up.

Structure

src/
  app/         routes, one thin page.tsx per route plus sitemap/robots/OG image
  components/
    layout/    site header, footer, wordmark
    sections/  page sections, composed by routes
    ui/        primitives: Button, Container, Section, Heading, Reveal, SpecRow
  content/     all copy and configuration as typed TS exports
  lib/         Cal.com embed loader
  styles/      Tailwind theme and base layer

Editing copy

Every page's text is in src/content. Components take content as data rather than containing it, so changing wording never means touching layout code.

Publishing case studies

/results renders an empty state until caseStudies in src/content/results.ts has entries. Add objects matching the CaseStudy type and the page switches over automatically.

Design system

Tokens are defined once in src/styles/tailwind.css. The palette is deliberately monochrome — paper and ink surfaces with slate and mist text. --color-steel is the single accent and is used sparingly, for eyebrow rules, phase numerals, active navigation and focus rings. Primary buttons are ink, never accent.

Scroll reveals use the Reveal component, which adds html.js before hiding anything, so content stays visible without JavaScript and honours prefers-reduced-motion.

Booking

The single call to action is a Cal.com (EU) booking. Configuration lives in src/content/cal.ts; CalBookingInit in the root layout powers popup triggers and CalInline renders the inline calendar on /contact. There are no contact forms elsewhere; webinar registration uses /api/webinar/register → Demio event 1021063 when API keys or embed env vars are set (see README).

Deployment

Standard Next.js build, deployed on Vercel.

npm run build

Routes retired in the 2026 redesign (/blog, /pricing, /surfaceos, /agentic-platform) are 301 redirected in next.config.mjs.

Releases

Packages

Used by

Contributors

Languages