TPOnlineMedia.com

I built the whole digital foundation for TPOnlineMedia: the website in Danish, English and German, an admin panel and an automatic website check that shows what is wrong with a website, written so anyone can understand it.

August–September 2026Next.jsSupabaseEdge FunctionsAccessibility
tponlinemedia.dk

In short

548/550measurements matched an independent browser measurement
11.3 → 1.9 MBthe front page, same images in WebP
0accessibility violations on all 28 pages
3languages: Danish, English and German

The challenge

The site had to work without a server that needs running and maintaining. At the same time it had to be fast, accessible and findable by search engines in three languages.

The website

The website is a static export with no backend of its own. Enquiries go straight from the browser to Supabase, where the public key can only add data, never read customer details out.

In September I rebuilt the site into a dark design with one typeface all the way through.

The website check

You enter an address and get a report with measurements in five categories: SEO, speed, security, tech and conversion, written so it can be read without knowing how to code. The report itself points to what should be fixed first.

How a check runs7 steps · same engine as the validation
  1. Address and email are validated, and a hidden field catches bots without giving them a report

  2. The attempt is reserved in the database first — 4 per email per hour, 8 per IP, 10 per domain, 150 in total, otherwise it is rejected straight away

  3. The page is fetched safely, https first and http only if https fails; bot protection from Vercel or Cloudflare is recognised and passed on to the team instead of counting as an error

  4. Robots.txt, sitemap, favicon, https redirect and compression are fetched in parallel with the page itself

  5. The measurement is turned into passed/partial/failed per check, and into a score for each of the five categories

  6. The report is saved, and Google’s PageSpeed measurement is fetched in the background, without the visitor waiting for it

  7. The report is sent in the customer’s own language, and an English note reaches the team at the same time

The same engine runs when a customer uses the site and when the validation checks it against an independent measurement.

Before the check went live, it was compared with an independent browser measurement of 22 real websites. In the last run 548 of 550 measurements matched. The two that didn’t were caused by a site that sends its security header differently from one time to the next.

The admin panel

The panel gathers enquiries from all three language versions, pipeline, calendar and traffic, which is measured without cookies. Replies are sent from the panel, and the customer’s answer lands in the same thread.

The lead tool for Germany is a call list, not an email tool. Cold B2B email requires prior consent under UWG §7, while calls to businesses may be made on the basis of presumed consent.

Results

The front page went from 11.3 MB to 1.9 MB by switching 13 screenshots from PNG to WebP at the same size, with no visible difference.

Contrast is measured automatically on all 28 pages and over 7,000 text fields, with not one below the requirement. Every page has been tested with an automatic accessibility tool at desktop and phone width with no errors.

The site’s security rule for which domains content may be loaded from now blocks everything else, after 33 pages across all three languages were checked in the browser without a single violation.

548 / 550Measurements matched an independent browser measurement of 22 real sites
0Accessibility violations found with axe on all 28 pages, at 1440 and 390 px
0CSP violations on 33 pages across all three languages, checked in WebKit

Shall we talk?

I reply within 1–2 working days. I’m the one who replies, and the one who builds the site.