Case study · Domino Data Lab
Two years of development on a Remix and Sanity marketing site
Domino Data Lab builds the enterprise AI platform used inside life sciences, financial services, and insurance. From 2023 to 2025 we ran development on domino.ai. Not WordPress: a Remix front end reading from Sanity, deployed to Vercel.
The client
Domino Data Lab
Domino gives large organizations one place to build, deploy, monitor, and govern machine learning models across hybrid and multi-cloud infrastructure. Their customers are regulated: pharma, banks, insurers. The marketing site is where that story gets told, and where the leads come in.
We came in the way we usually do. A web director we had worked with for years at another client moved to Domino and brought us with him.
The stack
A JavaScript site, not a WordPress one
Worth saying plainly, because most of our work is WordPress. domino.ai is a Remix application that resolves every URL against Sanity through a single catch-all route, then picks a template by document type. Around 56 content types and 52 editable blocks sit behind that. The Sanity studio is embedded in the site itself rather than hosted separately.
The original build came from Tinloof. We joined in August 2023 as the development team on a codebase we did not write, working next to Domino's in-house web and marketing people. Over the engagement that added up to more than 200 tracked work items and about 180 commits in their repo.
- front end
- Remix (React)
- content
- Sanity v3, studio embedded in the site
- hosting
- Vercel
- styles
- Tailwind
- search
- Algolia, then Coveo
- forms
- HubSpot
- consent
- Cookiebot + GTM Consent Mode
- webinars
- Goldcast
How a page resolves
One route for the whole site
There is no file per page. A request for any path hits the same catch-all route, which asks Sanity what lives there, picks a template from the document type that comes back, and renders whatever blocks the editor put on it. Add a content type and it routes itself.
- Any URL One catch-all Remix route handles every path on the site.
- Sanity lookup A GROQ query resolves the path to a document and its blocks.
- Template by type The document type picks the React template that renders it.
- Blocks render Editors composed the page from the block library. It renders in order.
The work
Integrations, mostly
A marketing site at this size is a set of third-party systems that have to agree with each other. Search, forms, consent, analytics, webinars. Most of what we did was in the seams.
- Moved site search off Algolia and onto Coveo, the engine already running their docs and support sites.
- Consolidated HubSpot forms and replaced per-asset thank-you pages with one page that reveals the asset on submit.
- Swapped the HubSpot cookie banner for Cookiebot, with a separate banner for the EU and the rest of the world.
- Built out the editable block library so marketing could compose pages without a developer.
- Ran the event machinery behind RevX, Customer Tech Hour, and the Goldcast webinars.
- Carried the dominodatalab.com to domino.ai rebrand through the redirect map.
Search
Algolia out, Coveo in
Domino's docs and support sites already ran on Coveo, and Coveo was already indexing the marketing site. Site search was on Algolia, so a visitor got different results depending on which property they searched from. Josh moved marketing search onto Coveo, added the filtering that keeps events and docs in their own lanes, and put a datatype meta tag on the pages so the crawler had something reliable to key on.
Forms and consent
Fewer thank-you pages, better banners
Every gated asset used to mean a custom thank-you page and a kickback email. We consolidated the HubSpot forms and built one page that changes itself on submit to reveal the asset, whether that is a PDF, a video, or an event confirmation with add-to-calendar links. The submission URL goes back to HubSpot as a hidden field, so the team can see where a lead actually came from.
Consent moved from the HubSpot banner to Cookiebot. HubSpot could not run a different banner in the EU than in the rest of the world, and Cookiebot can. That meant an opt-out style banner outside the EU, which is worth real acceptance-rate points, plus GTM Consent Mode wired underneath it.
The redesign
Staging a design change on a live site
The site changed shape while we were on it, from a vertical left-hand nav to a horizontal one, with new fonts and a reworked card and hero system underneath. The interesting part was not the design. It was switching to it without a dark window: staging the new pages alongside the old ones, listing every database item that had to change during the content freeze, and running a QA clearinghouse before the cutover.
Events
RevX, tech hours, and webinars
Domino runs a city-by-city event series called RevX plus a weekly Customer Tech Hour and a steady webinar schedule on Goldcast. That is a lot of content with dates attached, and dates are where content models break. Speakers, agendas, city pages, registration forms that preselect the right city, events that need to stay pinned without saying "weekly," cards that should not show up in both upcoming and on-demand on the day of the event. We built the blocks and the rules behind all of it.
Reliability
What a nine-minute outage bought us
We took the site down for about nine minutes rushing deployments ahead of a RevX event. Two feature branches touched the same line of a config file, the merge conflict got resolved in the GitHub web editor, and a missing brace went to production. Vercel's instant rollback brought it back.
The fix was not "be more careful." We added a functional testing step to the deploy pipeline and stopped resolving conflicts in the browser. Anthony's build configs came out of the same instinct: pin Node and Yarn locally to what Vercel CI actually runs, so a build that passes on a laptop passes in CI.
The rebrand
dominodatalab.com to domino.ai
The company moved its primary domain to domino.ai and the old one still has to resolve. That lives as a redirect map of about 250 rules, including host-level rules that catch anything still arriving at dominodatalab.com or the older event subdomains and send it to the right path on domino.ai. Unglamorous, and the kind of thing that quietly costs you traffic when it is done badly.
Who did the work
The team on this account
- Josh Visick
- Moved site search from Algolia to Coveo, including the filtering that separates events and docs from everything else, and the meta tags the Coveo crawler indexes on. Also the deploy pipeline work and the dev-database refresh instructions the rest of us used.
- Henry Tung
- The largest share of the build. Most of the block library (cards, FAQ, tabs, two-column, stats, hero variants), the RevX speaker and agenda blocks, the Goldcast embeds, the Cookiebot rollout, the dynamic HubSpot thank-you renderer, and the structured-data and no-index rules across the content types.
- Anthony Skelton
- YouTube embeds with the JS API turned on, the AI Hub URL restructure, the carousel migration from slick to Swiper, and the build configs that pinned Node and Yarn versions so local builds matched Vercel CI.
- Ed Reckers
- Ran the account. Onboarding into someone else's codebase, the working agreement with Domino and Tinloof, and the process changes that came out of production incidents.
Services on this account
- Remix & React development
- Sanity CMS modeling
- Search migration
- Marketing integrations
- Performance
- Deploy pipeline & QA
Running a marketing site on a JavaScript stack?
We work on Remix, Astro, and WordPress sites for funded technology companies, usually alongside an in-house marketing and design team.