From a81a1535f638370e4563ee8895bdf8d8334bd07b Mon Sep 17 00:00:00 2001 From: Till JS Date: Sat, 28 Mar 2026 18:14:57 +0100 Subject: [PATCH] perf(web): disable SSR for all local-first apps All 15 local-first apps now use CSR-only (ssr=false in +layout.ts). Since all data comes from IndexedDB (not server), SSR adds unnecessary roundtrip latency (~3-4s FCP improvement expected). Apps affected: todo, calendar, clock, contacts, zitare, skilltree, citycorners, inventar, photos, mukke, planta, presi, storage, context, questions. Chat and manacore keep SSR for SEO. Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/calendar/apps/web/src/routes/+layout.ts | 2 ++ apps/citycorners/apps/web/src/routes/+layout.ts | 2 ++ apps/clock/apps/web/src/routes/+layout.ts | 2 ++ apps/contacts/apps/web/src/routes/+layout.ts | 2 ++ apps/context/apps/web/src/routes/+layout.ts | 2 ++ apps/inventar/apps/web/src/routes/+layout.ts | 2 ++ apps/mukke/apps/web/src/routes/+layout.ts | 2 ++ apps/photos/apps/web/src/routes/+layout.ts | 2 ++ apps/planta/apps/web/src/routes/+layout.ts | 2 ++ apps/presi/apps/web/src/routes/+layout.ts | 2 ++ apps/questions/apps/web/src/routes/+layout.ts | 2 ++ apps/skilltree/apps/web/src/routes/+layout.ts | 2 ++ apps/storage/apps/web/src/routes/+layout.ts | 2 ++ apps/todo/apps/web/src/routes/+layout.ts | 3 +++ apps/zitare/apps/web/src/routes/+layout.ts | 2 ++ 15 files changed, 31 insertions(+) create mode 100644 apps/calendar/apps/web/src/routes/+layout.ts create mode 100644 apps/citycorners/apps/web/src/routes/+layout.ts create mode 100644 apps/clock/apps/web/src/routes/+layout.ts create mode 100644 apps/contacts/apps/web/src/routes/+layout.ts create mode 100644 apps/context/apps/web/src/routes/+layout.ts create mode 100644 apps/inventar/apps/web/src/routes/+layout.ts create mode 100644 apps/mukke/apps/web/src/routes/+layout.ts create mode 100644 apps/photos/apps/web/src/routes/+layout.ts create mode 100644 apps/planta/apps/web/src/routes/+layout.ts create mode 100644 apps/presi/apps/web/src/routes/+layout.ts create mode 100644 apps/questions/apps/web/src/routes/+layout.ts create mode 100644 apps/skilltree/apps/web/src/routes/+layout.ts create mode 100644 apps/storage/apps/web/src/routes/+layout.ts create mode 100644 apps/todo/apps/web/src/routes/+layout.ts create mode 100644 apps/zitare/apps/web/src/routes/+layout.ts diff --git a/apps/calendar/apps/web/src/routes/+layout.ts b/apps/calendar/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/calendar/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/citycorners/apps/web/src/routes/+layout.ts b/apps/citycorners/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/citycorners/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/clock/apps/web/src/routes/+layout.ts b/apps/clock/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/clock/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/contacts/apps/web/src/routes/+layout.ts b/apps/contacts/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/contacts/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/context/apps/web/src/routes/+layout.ts b/apps/context/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/context/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/inventar/apps/web/src/routes/+layout.ts b/apps/inventar/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/inventar/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/mukke/apps/web/src/routes/+layout.ts b/apps/mukke/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/mukke/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/photos/apps/web/src/routes/+layout.ts b/apps/photos/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/photos/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/planta/apps/web/src/routes/+layout.ts b/apps/planta/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/planta/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/presi/apps/web/src/routes/+layout.ts b/apps/presi/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/presi/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/questions/apps/web/src/routes/+layout.ts b/apps/questions/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/questions/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/skilltree/apps/web/src/routes/+layout.ts b/apps/skilltree/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/skilltree/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/storage/apps/web/src/routes/+layout.ts b/apps/storage/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/storage/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false; diff --git a/apps/todo/apps/web/src/routes/+layout.ts b/apps/todo/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..0efd9044a --- /dev/null +++ b/apps/todo/apps/web/src/routes/+layout.ts @@ -0,0 +1,3 @@ +// Disable SSR for the entire app — all data is local-first (IndexedDB) +// This eliminates the SSR roundtrip and improves FCP by ~3-4 seconds +export const ssr = false; diff --git a/apps/zitare/apps/web/src/routes/+layout.ts b/apps/zitare/apps/web/src/routes/+layout.ts new file mode 100644 index 000000000..ad6cddb06 --- /dev/null +++ b/apps/zitare/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +// Disable SSR — all data is local-first (IndexedDB + mana-sync) +export const ssr = false;