Skip to content
Creative Nomad DesignCREATIVE NOMAD
← All work
03Fortris.ai, fleet operations SaaS

Fortris.ai Marketing Site

Rebuilding a B2B SaaS marketing site from static HTML into a Next.js 14 design system in two months.

⤢ enlarge
Home hero, “Imagine Being the Smartest Operator”▤ Image
Client
Fortris.ai
Role
Design lead + front-end
Year
2026 (shipped May)
Surface
14 pages incl. 8 legal
Stack
Next.js 14 · Framer Motion
Hosting
Static export
01The challenge

The original Fortris.ai site was a static, Bootstrap-era build. Seven hand-coded HTML files, 58KB on the home page and 90KB on pricing, a PHP mailer behind the contact form, and no shared design system. Adding a section meant editing every page. Adding a theme meant editing every rule. It read like product marketing from a different decade of the web.

The product on the other side of that site was the opposite: a modern fleet operations platform in the same ecosystem as the Battle Motors Command portal, used daily to monitor vehicle health, route compliance, safety alerts, and revenue. The disconnect was loud, real product signal sold by a site that looked generated, not designed.

The brief: rebuild the marketing site as a modern Next.js application aligned to the Command portal so a customer moving from marketing to product feels one brand. Constraints were aggressive, keep static export so hosting stays cheap, hit a public ship date in early May, and document the system clearly enough that other engineers and writers could extend it without me.

02The approach
01

Tokenize everything

I started with the tokens, not the components. Six color axes in globals.css, background, card, surface, border, text, and accent, plus shadow, overlay, hero-gradient, and glass. Every token gets a light value and a dark value, and components read them through Tailwind. Flip the theme and the whole site changes in one frame. Adding a page means picking from a vocabulary instead of inventing values.

02

Match the product accent

The accent is cyan #06b6d4. I pulled it straight from the Command portal, the product these same customers sign into. They click 'Sign In', land in the app, and the color is still holding the brand together. I wrote that alignment into AGENTS.md so it survives whoever touches the code next.

03

Build a motion vocabulary, not effects

Motion is a system here, not decoration bolted onto each element. A small set of primitives gets reused across the whole site. Scroll-triggered enters on a designer's cubic-bezier. Spring-physics counters. Slow drifting orbs. A self-drawing geometric grid. Pulsing rings on the legal heroes. Each one lives in its own module, so I can pull it into any page without rebuilding it.

04

Static-export discipline

Static export, not SSR. The build drops into out/, a postbuild step carries the .htaccess over, and IndexNow pings the search engines. Hosting is just a static file server. Cheaper to run, and a lot harder to break. None of this shows up in a screenshot. It's the difference between a site that runs clean for years and one that needs babysitting.

03Design System

The system fits on one page because it's deliberately small: six color axes, two typefaces, one accent, five motion primitives. Anything more lives inside Tailwind (spacing, radius, sizes) or the token layer (everything that needs theming).

Inter for headings (variable, 4xl–7xl on the hero), DM Sans for body at 1.6 line-height. A .glass utility provides the frosted-card look; selection color is cyan-tinted so even OS-level text selection feels part of the brand.

TokenValueUse
--bg#0a1222Primary background
--card#0f1d35Card surfaces
--surface#1a3355Secondary surfaces
--accent#06b6d4Buttons, links, active states
--text#ffffffPrimary text
--text-secondary#c0c8d4Captions, secondary copy
04Motion vocabulary

Hero enter sequence

Three stacked elements (eyebrow pill, headline, subhead) each enter from opacity 0 / y 30 over 0.7s with staggered 0 / 0.1 / 0.2s delays and a custom easing of [0.16, 1, 0.3, 1] that overshoots slightly and settles. Reads as a purposeful, confident reveal rather than elements snapping into place.

Self-drawing geometric grid

The signature element. A faint 60px dotted grid carries ten geometric squares that draw themselves into existence via a buildAnimations helper, each square defined as four corner points plus a drawOrder for its edges, animating on independent delays. Buyers literally watch the geometric DNA of the brand assemble.

Atmosphere, not events

Two large radial-blur orbs drift behind the hero over 18–20s loops, slow enough that a viewer doesn't notice consciously but feels the space breathe. Pulsing concentric rings on the legal-page heroes mirror a radar ping, reinforcing the operations-platform identity without saying anything literal.

05Selected work
01

Home hero

Headline appeals to identity, not features: 'Imagine Being the Smartest Operator in the World.' Eyebrow pill with a pulsing cyan dot, a single Request-Demo CTA, geometric squares and orbs running continuously behind the type.

02

Service cards

Two grids of six cards, Fleet Performance Insights and Fleet Alerts. Each is a Lucide icon, title, description, image, and deep-link to the relevant /apps section. Alternating image/text layout creates editorial rhythm; the cards are system components, not bespoke layouts.

03

Pricing & legal surface

Three tiers with an animated monthly/yearly toggle that reveals savings as a chip. Six dedicated legal pages (terms, privacy, SLA, data retention, hardware warranty, support), all wrapped in one LegalPage component. The surface most SaaS sites neglect, treated as part of the brand.

04

The Fortris.ai logo

I designed the Fortris.ai logo. The mark builds an F from a grid of data cells, cyan on navy, the same accent that runs the product UI and every page of this site. Brand, marketing, and product hold one line. The mark moves, too. I art directed a logo bumper for social and video work, with a contractor animating alongside me.

06Captures
⤢ enlarge
Fleet Performance Insights, alternating service cards▤ Image
⤢ enlarge
Fleet Alerts & Notifications, FlameSafe, route deviation▤ Image
⤢ enlarge
Pricing, three tiers, monthly / yearly toggle▤ Image
⤢ enlarge
Apps mega-menu, the product suite▤ Image
⤢ enlarge
App detail, Revenue, Billing & Service Verify▤ Image
⤢ enlarge
Home, system-health section + legal-surface footer▤ Image

Brand

⤢ enlarge
The Fortris.ai logo. My design: an F built from data cells, cyan on navy.▤ Image
The Fortris bumper. My art direction, a contractor animating alongside me. Runs on social and in the videos.
The Fortris bumper. My art direction, a contractor animating alongside me. Runs on social and in the videos.▶ Video
07Before / After

The _old_site/ folder is preserved in the repo, seven HTML files plus a mailer.php and a separate legal folder, ~420KB of static markup. pricing.html alone was 90KB of inline code copy-pasted between three tiers.

Home
Before

Bootstrap header, static feature grid, zero motion

After

Next.js animated hero, self-drawing grid, scroll-triggered counters

Pricing
Before

90KB single HTML file, no toggle

After

Monthly/yearly toggle, three tier cards with motion

Legal / Privacy
Before

Raw HTML, no styling system

After

Consistent LegalPage wrapper, prose styling, pulsing-rings hero

Dark / Light theme
⤢ enlarge
Light▤ Image
⤢ enlarge
Dark▤ Image
08Outcome

The rebuild swapped a brittle, copy-paste static site for a documented design system that any engineer or writer can extend.

14

Pages, one shared system

6-token

Theme system, light + dark

~70%

Pricing page weight cut (est.)

day → min

Time to publish a new legal page

2 mo

Brief to launch

0

Servers to maintain, full static export

What I owned

The Fortris.ai logo, original wireframes and end-to-end UI/UX in Figma, design-system definition, motion-vocabulary design, front-end implementation in Next.js + TypeScript, static-export pipeline, system documentation in AGENTS.md, and the design-product alignment with the Command portal.

Next case — 04

Battle Motors Web Platform

Want something like this?

Start a conversation