Skip to content
Work/Geoffr.ai
Client work · AI hospitality · 2026

A bilingual HubSpot site, live 4 days after scoping.

Geoffr.ai sells an AI butler to hotels, campsites and holiday villages over WhatsApp. Its site was built in Next.js, so every change needed a developer. I moved it to HubSpot, in French and English, connected to the CRM, then handed it over so the founders could run it on their own.

RoleBuild, migration and handover, solo
TimelineLive 8 Sept 2026, second wave 15 to 18 Sept
StackHubSpot Content Hub, HubL, Claude
Scope12 pages FR and EN, forms, blog, cookie banners
4 daysFrom scoping to a live site
18Custom HubL modules in the theme
1 dayFor the co-founder to finish the site on his own
geoffr.ai/en
Geoffr.ai English homepage on HubSpot: hero with a WhatsApp conversation between a hotel and a guest
Context

A site only a developer could change.

Geoffr.ai's marketing site was a Next.js app hosted on Vercel. It looked good, but every new page, every wording change and every new language meant going back to a developer.

The founders wanted to own their site: write, publish and translate themselves, with every lead landing in HubSpot.

The challenge

Same site, new engine, two languages.

Rebuild the site on HubSpot Content Hub, in French and English, editable by a non-technical team and connected to the CRM, quickly. On the Starter plan, without HubSpot's database feature (HubDB) that a site like this would usually rely on.

The system

One theme the founders can run.

Every section of the site is a module with editable fields, in both languages, on desktop and mobile.

geoffr.ai/en · how it works
The 'How it works' section on geoffr.ai, built as a HubSpot module
The same section on a phone, read from top to bottom
18 custom modules

Hero, guest journey, pricing, FAQ, contact, team and more, each one editable in HubSpot.

French and English

A version of every page in both languages, with a language switch in the header.

Connected to the CRM

Native HubSpot forms in both languages, so every demo request lands in the CRM.

Theme settings

Colours and fontsSet once, in one place

One CSS rule fixed contrast

18 custom modules

HeroEditable fields
Guest journeySame content model
Pricing, FAQ, teamAnd the rest of the 18

Repeater fields, no database needed

Pages

6 pages in FrenchLanguage switch in the header
6 pages in EnglishSame modules and settings
2 blog listingsLive at launch

Live 4 days after scoping

CRM

In the CRMEvery demo request, from HubSpot forms in both languages, qualified by rooms and property type
18 moduleseach one editable in HubSpot
12 pages6 French, 6 English
1 placeto change colours and fonts
HubSpot CMSHubLClaude
What I built

Built for the person
who edits next.

01

One custom theme, 18 modules

I reused the original site's styles and linked them to HubSpot's theme settings, so colours and fonts are changed in one place. Where the Starter plan has no database, lists such as the pricing grid became editable repeating fields.

The features section of geoffr.ai, one of the 18 custom modules
02

Fixes made once, for the whole site

White text on green now passes accessibility standards: contrast went from 2.76:1 to 6.50:1, with a single CSS rule. Content stays readable even when scripts are blocked. And the founders' diagram, once an image, is now a real section.

Before: an image
The original diagram supplied as an image
After: a section
The diagram rebuilt as a responsive section, on a phone
03

Every lead lands in HubSpot

Native HubSpot forms in French and English replace the old site's custom code, with CRM properties that qualify each request: number of rooms and type of property.

The demo request form on geoffr.ai, with number of rooms and property type fields
04

A handover built as a deliverable

A narrated video walkthrough and an annotated playbook: the actions left to the team, how to create a page, how the two languages work, and direct links to every admin screen. Updated after each wave.

Pages from the annotated playbook handed over to Geoffr.ai
Second wave · 15 to 18 Sept

Launch went well, so the backlog came next.

Separate French and English blogs, CNIL-compliant cookie banners, a guest-journey timeline, a team page, 8 share images and an updated playbook.

Results

Live in 4 days. Then run without me.

8 SeptLive on geoffr.ai, 4 days after scoping
12 pages6 in French, 6 in English, plus 2 blog listings at launch
1 dayFor the co-founder to finish the site on his own after the handover
"J'ai pu finaliser le site en 1 journée de mon côté, en autonomie. Ton livrable est top."

"I was able to finish the site in one day on my side, on my own. Your deliverable is great."

Co-founder, Geoffr.ai · email, 23 September 2026

Stack

Tools and how I used them

CMSHubSpot Content Hub
ThemeHubL modules, design tokens
CRMHubSpot forms and properties
BuildClaude, HubSpot CLI
QAPlaywright, local previews
ComplianceHubSpot cookie banners
HandoverVideo and annotated PDF
LanguagesFrench, English
Handover

What the team kept

▶Narrated video walkthroughLaunch day
▤Annotated playbook: the site and its editorPDF
▤Playbook update: everything from the second wavePDF
✓A short list of actions left to the teamPage 1