Atrium website
Downcritical@atrium/websiteThe 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:
lib/case-assets.overrides.ts— absolute URLs oncdn.atriumad.com. Hand-curated, wins when present.lib/cloudinary-assets.generated.ts— generated bybun run sync:assetsfrom 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
| variable | status | purpose |
|---|---|---|
NEXT_PUBLIC_SITE_URLapps/atrium.website/.env | missing | Canonical 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/.env | set | Cloud used to build every Cloudinary delivery URL. |
CLOUDINARY_API_KEY / CLOUDINARY_API_SECRETapps/atrium.website/.env | script-only | Admin 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.tsCDN asset overrides
apps/atrium.website/lib/case-assets.overrides.tsCloudinary URL builders
apps/atrium.website/lib/cloudinary.tsCal.com embed
apps/atrium.website/components/ui/CalEmbedProvider.tsx
In the repo
path
apps/atrium.websiteversion
files
lines
routes
depends on
Incident history
website-homeHTTP 404, expected 2008/19/2026, 3:24:53 PM · 1h 39mwebsite-sitemapHTTP 404, expected 2008/19/2026, 3:24:53 PM · 1h 39mwebsite-workHTTP 404, expected 2008/19/2026, 3:24:53 PM · 1h 39m