Atriumstatus

master9da7fa5

← all systems

Atrium website

Downcritical@atrium/website

The public marketing site: home, services, work, pricing, about, resources, contact.

checked 2m ago· owner AtriumProduction

Checks

Homepage

Nobody can reach the site at all.

76.19%

24h

80%

30d

GET https://atrium-platform-website.vercel.appexpects 200last 404 · 5ms · 2m ago

HTTP 404, expected 200

Sitemap

Search engines lose the map of the site.

76.19%

24h

80%

30d

GET https://atrium-platform-website.vercel.app/sitemap.xmlexpects 200last 404 · 11ms · 2m ago

HTTP 404, expected 200

Work index

The portfolio — the page sales actually sends people to — is down.

76.19%

24h

80%

30d

GET https://atrium-platform-website.vercel.app/workexpects 200last 404 · 6ms · 2m ago

HTTP 404, expected 200

What it is

The front door. Next.js 16 on the App Router, built as a static site with a single dynamic route (/contact). Everything a visitor sees is prerendered at build time, so an outage here is almost always a deploy problem or a CDN problem, not a runtime one.

Case studies are data, not pages: lib/work.ts holds ten studies, and each one resolves its media through an override chain. The site is designed to keep rendering when media is missing — it degrades to placeholders rather than breaking the layout.

How a case study finds its media

Two asset paths exist, and the order matters:

  1. lib/case-assets.overrides.ts — absolute URLs on cdn.atriumad.com. Hand-curated, wins when present.
  2. lib/cloudinary-assets.generated.ts — generated by bun run sync:assets from the Cloudinary Admin API.

lib/work.ts:492 picks the override first and falls back to the generated map. Four studies (aahaa, chick-in-waffle, taco-naco, taha) have overrides and therefore survive a Cloudinary outage; the other six do not.

Rendering and delivery

next build emits 35 routes. /services/[slug] and /work/[slug] use generateStaticParams, so adding a service or a case study to the data file is enough to create its page — there is no route to write.

Images come from two remote hosts allowed in next.config.ts: the Cloudinary delivery domain and cdn.atriumad.com. Anything else is blocked by next/image at request time.

Booking

Cal.com is embedded lazily: CalEmbedProvider only injects the script when a [data-cal-link] node exists on the page, so pages without a CTA pay nothing for it. The account handles live in lib/cal.ts and lib/cta.ts — today those two disagree, which is tracked as a known issue.

When it breaks

Symptom

Homepage returns a non-200

Check

Vercel deployment logs for the latest build; then the origin directly.

Fix

Roll back to the previous deployment in Vercel. The site is static, so a rollback is instant and safe.

Symptom

Pages load but case-study media is missing

Check

The Cloudinary monitor on this page. A 401 there explains every missing image at once.

Fix

Restore the Cloudinary account, or move the affected slugs into lib/case-assets.overrides.ts so they serve from the CDN.

Symptom

Sitemap or canonical URLs point at the wrong host

Check

NEXT_PUBLIC_SITE_URL in the deployment environment.

Fix

Set it explicitly; unset it falls back to https://atrium.agency silently.

Needs

  • Asset CDNcdn.atriumad.com — client photos and reels on Hostinger shared hosting.
  • CloudinaryLegacy media delivery for the case studies that have no CDN override.
  • Cal.com bookingEvery call-to-action on the site ends here. If it is down, inbound stops.

Breaks when this does

  • Chick-in-WaffleClient case study with 44 assets on the CDN; site URL not yet registered here.

Configuration

variablestatuspurpose
NEXT_PUBLIC_SITE_URLapps/atrium.website/.envmissingCanonical origin for metadata, sitemap and robots.Falls back to https://atrium.agency — a domain that does not resolve today (SERVFAIL). Every canonical URL, the sitemap and every OG tag are therefore pointing at nothing until this is set.
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAMEapps/atrium.website/.envsetCloud used to build every Cloudinary delivery URL.
CLOUDINARY_API_KEY / CLOUDINARY_API_SECRETapps/atrium.website/.envscript-onlyAdmin API auth for the asset sync script.Only scripts/sync-cloudinary-assets.ts reads these. Absent from .env.example.

Where to start reading

  • Case study data

    apps/atrium.website/lib/work.ts
  • CDN asset overrides

    apps/atrium.website/lib/case-assets.overrides.ts
  • Cloudinary URL builders

    apps/atrium.website/lib/cloudinary.ts
  • Cal.com embed

    apps/atrium.website/components/ui/CalEmbedProvider.tsx

In the repo

path

apps/atrium.website

version

0.1.0

files

131 (4 tests)

lines

25,444

routes

9

depends on

@atrium/ui
engineering view →

Incident history

Openwebsite-homeHTTP 404, expected 2008/19/2026, 3:24:53 PM · 1h 39m
Openwebsite-sitemapHTTP 404, expected 2008/19/2026, 3:24:53 PM · 1h 39m
Openwebsite-workHTTP 404, expected 2008/19/2026, 3:24:53 PM · 1h 39m