Get Your Audit

EN

RU

Soon

All case studies
#Performance CASE_01 Webflow & Vanilla JS Delivered 07.2026

Paintgun — a video-heavy Webflow site that still loads fast

Nearly every section of the design is carried by video. We rebuilt how the page requests its media, so the showreel survived and the first paint did too.

The delivered site, scrolled top to bottom — every dark panel here is a background video.
Client paintgun.io
Scope Figma → Webflow build, media optimisation, custom JS
Platform Webflow
Delivered July 2026
01 — The project

An agency that sells attention, on a page that had to earn it

Paintgun is a full-service creative agency that uses AI-powered analysis to help brands produce and improve advertising content. Their site works like a showreel: the work is the argument, so it plays rather than sits still.

We received a finished Figma design and were responsible for everything after it — the Webflow build, responsive behaviour across desktop, tablet and mobile, asset preparation, and the custom JavaScript that decides when each video is allowed to load.

Our role

  • Complete Figma-to-Webflow development
  • Responsive implementation across desktop, tablet and mobile
  • Image and video compression and optimisation
  • Custom background-video lazy-loading system
  • Separate desktop and mobile video sources
  • Safari, iOS and Low Power Mode handling
  • Performance testing and tuning before handover

Stack

  • Webflow — structure, styling, CMS-editable content
  • Vanilla JavaScript with IntersectionObserver
  • Figma as the single source of design truth
  • Compressed MP4 sources with WebP posters
  • Lighthouse and real-device testing
02 — The brief

Keep the video. Lose the wait.

The design relies on video to present Paintgun’s capabilities. Loading every file when the page opened would have meant megabytes of traffic before a visitor read a single line — a slow first render, and a performance score that quietly contradicts the pitch.

The task was to preserve the visual impact of the original design without letting the amount of media decide the loading time. That left us a specific set of constraints:

  • No cutting sections and no static substitutes — the design ships as designed.
  • Webflow’s native background video requests its source as soon as the section exists in the DOM.
  • Desktop needs horizontal crops, mobile needs vertical ones — and neither should download the other.
  • Safari, iOS and Low Power Mode refuse autoplay in cases we do not control, and a refused video must never leave an empty rectangle.
  • The client’s team edits the site afterwards, so adding a video section cannot require a developer.
03 — The solution

The video element does not exist until the section is close

Rather than let the browser discover every source at load, we build the video elements ourselves — and only once a section is approaching the viewport. Each section declares its own configuration in data attributes, so the markup carries the intent and the script carries the behaviour.

  1. Declare Each section holds its desktop source, mobile source and poster as data attributes. No video element is in the document yet, so nothing is requested.

  2. Observe One IntersectionObserver watches every marked section with a root margin ahead of the viewport, so the load starts before the section is on screen.

  3. Pick the right file A media query decides between the horizontal and vertical source before the request goes out — a phone never pays for the desktop crop.

  4. Build and play The script injects a muted, looping, inline video and starts playback when it is ready. The poster holds the frame until then, so there is no flash of empty panel.

  5. Fall back cleanly If autoplay is refused — Safari, iOS, Low Power Mode — the poster stays as the final image and the section still reads as designed.

Because the behaviour lives in attributes rather than in bespoke code per section, the client’s team can add a new video panel in Webflow by filling in three fields.

We turned this into a reusable tool

The same system, documented and packaged with ready-to-use code — free to drop into any site.

Smart Background Video

04 — The result

Green scores with the media still in place

All image and video assets were prepared and compressed for web delivery. Combined with conditional loading, the site kept its media-rich presentation and still measured in the green at handover.

99 Performance
100 Accessibility
100 Best Practices
92 SEO
3/3 Agentic Browsing

Lighthouse, measured at delivery. Nothing was removed from the design to get there — the gain came from loading each asset at the right moment.

Lighthouse report for paintgun.io showing green scores and Core Web Vitals
The audit run on the delivered build: first contentful paint 0.7s, largest contentful paint 0.8s, total blocking time 0ms.
05 — The build

Screens from the delivered site

06 — In hindsight

What we would do differently

  • Generate posters automatically. Exporting a first-frame poster by hand is the step most likely to be forgotten when a new section is added later. Pulling it from the video during asset prep removes that risk.
  • Move the sources behind a media CDN. Per-device transcodes would replace the second manual export and give us finer control over bitrate per breakpoint.
  • Ship a QA view with the site. A small page listing every video section and its current load state is faster to check than scrolling the whole site after each edit.

Media-heavy site, mediocre scores?

Send us the URL. We will tell you where the weight actually sits and what it would take to keep the design and the speed.

Get Your Free Audit