# sources

content_hash: 2431ef0f56f4e8e953a8a0247271f93ab1150ff7423a553cf6adcd6e85aaebfd
indexed_at: 2026-08-04 11:16:54
label:
  cmd:pnpm exec node --input-type=module -e 
  import { chromium } from "playwright";
  const viewports = [{w:390,h:844,label:"mobile"},{w:1440,h:900,label:"desktop"}];
  const browser = await chromium.launch();
  for (const vp of viewports) {
    const page = await browser.newPage({ viewport: { width: vp.w, height: vp.h } });
    await page.addInitScript(() => {
      const state = { shifts: [] };
      window.__clsState = state;
      new PerformanceObserver((list) => {
        for (const e of list.getEntries()) {
          const s = e;
          if (!s.hadRecentInput) state.shifts.push({ value: s.value, t: e.startTime, sources: (s.sources||[]).map(src=>({ tag: src.node?.tagName?.toLowerCase(), attr: src.node?.getAttribute?.("data-site-footer") ? "footer" : src.node?.getAttribute?.("data-bottom-nav") ? "bottom-nav" : src.node?.getAttribute?.("data-testid") || "", prev: src.previousRect, cur: src.currentRect }))});
        }
      }).observe({ type: "layout-shift", buffered: true });
    });
    await page.goto("http://127.0.0.1:4321/deals", { waitUntil: "networkidle", timeout: 120000 });
    await page.waitForTimeout(3000);
    const data = await page.evaluate(() => {
      const st = window.__clsState || { shifts: [] };
      const cls = st.shifts.reduce((s,x)=>s+x.value,0);
      const footer = document.querySelector("[data-site-footer]");
      return { cls, shiftCount: st.shifts.length, shifts: st.shifts, footerRect: footer ? footer.getBoundingClientRect().toJSON() : null, bottomNav: !!document.querySelector("[data-bottom-nav]") };
    });
    console.log(JSON.stringify({ viewport: vp.label, ...data }, null, 2));
    await page.close();
  }
  await browser.close();


content_hash: 3b49795330feb5503a2173d4d9a7e5e55b4a81d2300871ccccce0862dace67c4
indexed_at: 2026-08-04 11:19:46
label:
  cmd:pnpm exec node --input-type=module -e 
  import { chromium } from "playwright";
  const viewports = [{w:390,h:844,label:"mobile"},{w:1440,h:900,label:"desktop"}];
  const browser = await chromium.launch();
  for (const vp of viewports) {
    const page = await browser.newPage({ viewport: { width: vp.w, height: vp.h } });
    await page.addInitScript(() => {
      const state = { shifts: [], footerRects: [] };
      window.__clsState = state;
      new PerformanceObserver((list) => {
        for (const e of list.getEntries()) {
          const s = e;
          if (!s.hadRecentInput) state.shifts.push({ value: s.value, t: e.startTime, sources: (s.sources||[]).map(src=>({ tag: src.node?.tagName?.toLowerCase(), attr: src.node?.getAttribute?.("data-site-footer") ? "footer" : src.node?.getAttribute?.("data-bottom-nav") ? "bottom-nav" : src.node?.getAttribute?.("data-testid") || "", prev: src.previousRect, cur: src.currentRect }))});
        }
      }).observe({ type: "layout-shift", buffered: true });
      const sample = () => {
        const f = document.querySelector("[data-site-footer]");
        if (f) state.footerRects.push({ t: performance.now(), rect: f.getBoundingClientRect().toJSON() });
      };
      sample();
      requestAnimationFrame(sample);
      setTimeout(sample, 0);
      setTimeout(sample, 50);
      setTimeout(sample, 200);
      setTimeout(sample, 500);
      setTimeout(sample, 1000);
      setTimeout(sample, 2000);
      setTimeout(sample, 5000);
    });
    const resp = await page.goto("http://127.0.0.1:4321/deals", { waitUntil: "domcontentloaded", timeout: 120000 });
    await page.waitForTimeout(8000);
    await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
    await page.waitForTimeout(2000);
    const data = await page.evaluate(() => {
      const st = window.__clsState || { shifts: [], footerRects: [] };
      const cls = st.shifts.reduce((s,x)=>s+x.value,0);
      const footer = document.querySelector("[data-site-footer]");
      const islands = [...document.querySelectorAll("astro-island")].map((el,i)=>({i, client: el.getAttribute("client"), name: el.getAttribute("component-url")?.split("/").pop(), hasFooter: !!el.querySelector("[data-site-footer]")}));
      return { cls, shiftCount: st.shifts.length, shifts: st.shifts, footerRects: st.footerRects, footerRect: footer ? footer.getBoundingClientRect().toJSON() : null, bottomNav: !!document.querySelector("[data-bottom-nav]"), title: document.title, main: !!document.querySelector("main"), islands };
    });
    console.log(JSON.stringify({ viewport: vp.label, status: resp?.status(), ...data }, null, 2));
    await page.close();
  }
  await browser.close();


# chunks_content

c3: command
c5: 2026-08-04T11:16:54.714886875+00:00
c0:
  pnpm exec node --input-type=module -e 
  import { chromium } from "playwright";
  const viewports = [{w:390,h:844,label:"mobile"},{w:1440,h:900,label:"desktop"}];
  const browser = await chromium.launch();
  for (const vp of viewports) {
    const page = await browser.newPage({ viewport: { width: vp.w, height: vp.h } });
    await page.addInitScript(() => {
      const state = { shifts: [] };
      window.__clsState = state;
      new PerformanceObserver((list) => {
        for (const e of list.getEntries()) {
          const s = e;
          if (!s.hadRecentInput) state.shifts.push({ value: s.value, t: e.startTime, sources: (s.sources||[]).map(src=>({ tag: src.node?.tagName?.toLowerCase(), attr: src.node?.getAttribute?.("data-site-footer") ? "footer" : src.node?.getAttribute?.("data-bottom-nav") ? "bottom-nav" : src.node?.getAttribute?.("data-testid") || "", prev: src.previousRect, cur: src.currentRect }))});
        }
      }).observe({ type: "layout-shift", buffered: true });
    });
    await page.goto("http://127.0.0.1:4321/deals", { waitUntil: "networkidle", timeout: 120000 });
    await page.waitForTimeout(3000);
    const data = await page.evaluate(() => {
      const st = window.__clsState || { shifts: [] };
      const cls = st.shifts.reduce((s,x)=>s+x.value,0);
      const footer = document.querySelector("[data-site-footer]");
      return { cls, shiftCount: st.shifts.length, shifts: st.shifts, footerRect: footer ? footer.getBoundingClientRect().toJSON() : null, bottomNav: !!document.querySelector("[data-bottom-nav]") };
    });
    console.log(JSON.stringify({ viewport: vp.label, ...data }, null, 2));
    await page.close();
  }
  await browser.close();

c1:
  {
    "viewport": "mobile",
    "cls": 0,
    "shiftCount": 0,
    "shifts": [],
    "footerRect": {
      "x": 0,
      "y": 506.390625,
      "width": 390,
      "height": 793,
      "top": 506.390625,
      "right": 390,
      "bottom": 1299.390625,
      "left": 0
    },
    "bottomNav": false
  }
  {
    "viewport": "desktop",
    "cls": 0,
    "shiftCount": 0,
    "shifts": [],
    "footerRect": {
      "x": 0,
      "y": 540,
      "width": 1440,
      "height": 505,
      "top": 540,
      "right": 1440,
      "bottom": 1045,
      "left": 0
    },
    "bottomNav": false
  }


c0: pnpm build
c3: command
c5: 2026-08-04T11:19:22.223982986+00:00
c1:
  > @multideal/web@0.1.0 prebuild /home/user/builds/task-kf3JOm-8766202a1dcb/apps/web
  > node scripts/write-build-info.mjs
  [build-info] wrote /home/user/builds/task-kf3JOm-8766202a1dcb/apps/web/src/generated/build-info.ts sha=d530724c200c time=2026-08-04T11:17:43.330Z
  > @multideal/web@0.1.0 build /home/user/builds/task-kf3JOm-8766202a1dcb/apps/web
  > astro build; rc=$?; node scripts/strip-session-kv.mjs; node scripts/minify-server-chunks.mjs; exit $rc
  14:17:45 [@astrojs/cloudflare] Enabling compile-time image optimization. Images will be pre-optimized at build time.
  14:17:45 [@astrojs/cloudflare] Enabling sessions with Cloudflare KV with the "SESSION" KV binding.
  14:17:45 [types] Generated 114ms
  14:17:45 [build] output: "server"
  14:17:45 [build] mode: "server"
  14:17:45 [build] directory: /home/user/builds/task-kf3JOm-8766202a1dcb/apps/web/dist/
  14:17:45 [build] adapter: @astrojs/cloudflare
  14:17:45 [build] Collecting build info...
  14:17:45 [build] ✓ Completed in 296ms.
  14:17:45 [build] Building server entrypoints...
  14:17:47 [vite] ✓ built in 2.31s
  14:17:53 [WARN] [vite] [33m[EVAL] [0mUse of direct `eval` function is strongly discouraged as it poses security risks and may cause issues with minification.
      [38;5;246m╭[0m[38;5;246m─[0m[38;5;246m[[0m ../../node_modules/.pnpm/gray-matter@4.0.3/node_modules/gray-matter/lib/engines.js:36:11 [38;5;246m][0m
      [38;5;246m│[0m
   [38;5;246m36 │[0m [38;5;249m [0m[38;5;249m [0m[38;5;249m [0m[38;5;249m [0m[38;5;249m [0m[38;5;249m [0m[38;5;249m [0m[38;5;249m [0m[38;5;249m [0m[38;5;249mr[0m[38;5;249me[0m[38;5;249mt[0m[38;5;249mu[0m[38;5;249mr[0m[38;5;249mn[0m[38;5;249m [0meval[38;5;249m([0m[38;5;249ms[0m[38;5;249mt[0m[38;5;249mr[0m[38;5;249m)[0m[38;5;249m [0m[38;5;249m|[0m[38;5;249m|[0m[38;5;249m [0m[38;5;249m{[0m[38;5;249m}[0m[38;5;249m;[0m
   [38;5;240m   │[0m                 ──┬─  
   [38;5;240m   │[0m                   ╰─── Use of direct `eval` here.
   [38;5;240m   │[0m 
   [38;5;240m   │[0m [38;5;115mHelp[0m: Consider using indirect eval. For more information, check the documentation: https://rolldown.rs/guide/troubleshooting#avoiding-direct-eval
  [38;5;246m────╯[0m
  14:17:53 [vite] ✓ built in 5.71s
  14:17:55 [WARN] [vite] [plugin astro:transitions] [33m[SOURCEMAP_BROKEN] [0mSourcemap is likely to be incorrect: a plugin (astro:transitions) was used to transform files, but didn't generate a sourcemap for the transformation. Consult the plugin documentation for help: https://rolldown.rs/guide/troubleshooting#warning-sourcemap-is-likely-to-be-incorrect
  14:17:55 [vite] ✓ built in 1.96s
   prerendering static routes 
  ✨ Parsed 4 valid header rules.
  14:17:56   ├─ /en/maintenance/index.html (+228ms) 
  14:17:56   ├─ /en/offline/index.html (+23ms) 
  14:17:56   ├─ /maintenance/index.html (+21ms) 
  14:17:56   ├─ /offline/index.html (+20ms) 
  14:17:57 ✓ Completed in 1.30s.
  14:17:57 [build] Rearranging server assets...
  14:17:57 [build] ✓ Completed in 11.45s.
  14:17:57 [@astrojs/sitemap] `sitemap-index.xml` created at `dist/client`
  14:17:58 [build] Server built in 13.21s
  14:17:58 [build] Complete!
  [strip-session-kv] patched SESSION KV → d328e5ed6397464da43a1e8e8755287b in /home/user/builds/task-kf3JOm-8766202a1dcb/apps/web/dist/server/wrangler.json
  [strip-session-kv] fixed corrupted _redirects (newline repair + path dedup)
  [minify-server-chunks] minifying 1149 chunks
  [minify-server-chunks] done, 1149 chunks minified
  pnpm install: 0 packages, 2 warnings


c3: command
c5: 2026-08-04T11:19:46.368265430+00:00
c0:
  pnpm exec node --input-type=module -e 
  import { chromium } from "playwright";
  const viewports = [{w:390,h:844,label:"mobile"},{w:1440,h:900,label:"desktop"}];
  const browser = await chromium.launch();
  for (const vp of viewports) {
    const page = await browser.newPage({ viewport: { width: vp.w, height: vp.h } });
    await page.addInitScript(() => {
      const state = { shifts: [], footerRects: [] };
      window.__clsState = state;
      new PerformanceObserver((list) => {
        for (const e of list.getEntries()) {
          const s = e;
          if (!s.hadRecentInput) state.shifts.push({ value: s.value, t: e.startTime, sources: (s.sources||[]).map(src=>({ tag: src.node?.tagName?.toLowerCase(), attr: src.node?.getAttribute?.("data-site-footer") ? "footer" : src.node?.getAttribute?.("data-bottom-nav") ? "bottom-nav" : src.node?.getAttribute?.("data-testid") || "", prev: src.previousRect, cur: src.currentRect }))});
        }
      }).observe({ type: "layout-shift", buffered: true });
      const sample = () => {
        const f = document.querySelector("[data-site-footer]");
        if (f) state.footerRects.push({ t: performance.now(), rect: f.getBoundingClientRect().toJSON() });
      };
      sample();
      requestAnimationFrame(sample);
      setTimeout(sample, 0);
      setTimeout(sample, 50);
      setTimeout(sample, 200);
      setTimeout(sample, 500);
      setTimeout(sample, 1000);
      setTimeout(sample, 2000);
      setTimeout(sample, 5000);
    });
    const resp = await page.goto("http://127.0.0.1:4321/deals", { waitUntil: "domcontentloaded", timeout: 120000 });
    await page.waitForTimeout(8000);
    await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
    await page.waitForTimeout(2000);
    const data = await page.evaluate(() => {
      const st = window.__clsState || { shifts: [], footerRects: [] };
      const cls = st.shifts.reduce((s,x)=>s+x.value,0);
      const footer = document.querySelector("[data-site-footer]");
      const islands = [...document.querySelectorAll("astro-island")].map((el,i)=>({i, client: el.getAttribute("client"), name: el.getAttribute("component-url")?.split("/").pop(), hasFooter: !!el.querySelector("[data-site-footer]")}));
      return { cls, shiftCount: st.shifts.length, shifts: st.shifts, footerRects: st.footerRects, footerRect: footer ? footer.getBoundingClientRect().toJSON() : null, bottomNav: !!document.querySelector("[data-bottom-nav]"), title: document.title, main: !!document.querySelector("main"), islands };
    });
    console.log(JSON.stringify({ viewport: vp.label, status: resp?.status(), ...data }, null, 2));
    await page.close();
  }
  await browser.close();

c1:
  {
    "viewport": "mobile",
    "status": 500,
    "cls": 0,
    "shiftCount": 0,
    "shifts": [],
    "footerRects": [
      {
        "t": 333.39999985694885,
        "rect": {
          "x": 0,
          "y": 506.390625,
          "width": 390,
          "height": 793,
          "top": 506.390625,
          "right": 390,
          "bottom": 1299.390625,
          "left": 0
        }
      },
      {
        "t": 633.5999999046326,
        "rect": {
          "x": 0,
          "y": 506.390625,
          "width": 390,
          "height": 793,
          "top": 506.390625,
          "right": 390,
          "bottom": 1299.390625,
          "left": 0
        }
      },
      {
        "t": 1133.5999999046326,
        "rect": {
          "x": 0,
          "y": 506.390625,
          "width": 390,
          "height": 793,
          "top": 506.390625,
          "right": 390,
          "bottom": 1299.390625,
          "left": 0
        }
      },
      {
        "t": 2134.0999999046326,
        "rect": {
          "x": 0,
          "y": 506.390625,
          "width": 390,
          "height": 793,
          "top": 506.390625,
          "right": 390,
          "bottom": 1299.390625,
          "left": 0
        }
      },
      {
        "t": 5133.599999904633,
        "rect": {
          "x": 0,
          "y": 506.390625,
          "width": 390,
          "height": 793,
          "top": 506.390625,
          "right": 390,
          "bottom": 1299.390625,
          "left": 0
        }
      }
    ],
    "footerRect": {
      "x": 0,
      "y": 51.390625,
      "width": 390,
      "height": 793,
      "top": 51.390625,
      "right": 390,
      "bottom": 844.390625,
      "left": 0
    },
    "bottomNav": false,
    "title": "שגיאת שרת | מולטידיל",
    "main": true,
    "islands": [
      {
        "i": 0,
        "client": "load",
        "name": "index.DO7VB59d.js",
        "hasFooter": false
      },
      {
        "i": 1,
        "client": "idle",
        "name": "WebVitalsIsland.CvpI3zvL.js",
        "hasFooter": false
      },
      {
        "i": 2,
        "client": "load",
        "name": "index.BiTOxFqy.js",
        "hasFooter": false
      },
      {
        "i": 3,
        "client": "load",
        "name": "index.D3a7oFdY.js",
        "hasFooter": true
      }
    ]
  }
  {
    "viewport": "desktop",
    "status": 500,
    "cls": 0,
    "shiftCount": 0,
    "shifts": [],
    "footerRects": [
      {
        "t": 119.09999990463257,
        "rect": {
          "x": 0,
          "y": 540,
          "width": 1440,
          "height": 505,
          "top": 540,
          "right": 1440,
          "bottom": 1045,
          "left": 0
        }
      },
      {
        "t": 265.7999999523163,
        "rect": {
          "x": 0,
          "y": 540,
          "width": 1440,
          "height": 505,
          "top": 540,
          "right": 1440,
          "bottom": 1045,
          "left": 0
        }
      },
      {
        "t": 565.7999999523163,
        "rect": {
          "x": 0,
          "y": 540,
          "width": 1440,
          "height": 505,
          "top": 540,
          "right": 1440,
          "bottom": 1045,
          "left": 0
        }
      },
      {
        "t": 1065.8999998569489,
        "rect": {
          "x": 0,
          "y": 540,
          "width": 1440,
          "height": 505,
          "top": 540,
          "right": 1440,
          "bottom": 1045,
          "left": 0
        }
      },
      {
        "t": 2066.5,
        "rect": {
          "x": 0,
          "y": 540,
          "width": 1440,
          "height": 505,
          "top": 540,
          "right": 1440,
          "bottom": 1045,
          "left": 0
        }
      },
      {
        "t": 5065.899999856949,
        "rect": {
          "x": 0,
          "y": 540,
          "width": 1440,
          "height": 505,
          "top": 540,
          "right": 1440,
          "bottom": 1045,
          "left": 0
        }
      }
    ],
    "footerRect": {
      "x": 0,
      "y": 395,
      "width": 1440,
      "height": 505,
      "top": 395,
      "right": 1440,
      "bottom": 900,
      "left": 0
    },
    "bottomNav": false,
    "title": "שגיאת שרת | מולטידיל",
    "main": true,
    "islands": [
      {
        "i": 0,
        "client": "load",
        "name": "index.DO7VB59d.js",
        "hasFooter": false
      },
      {
        "i": 1,
        "client": "idle",
        "name": "WebVitalsIsland.CvpI3zvL.js",
        "hasFooter": false
      },
     
  [truncated]
  # ft-hint: next time: pnpm ls --depth=0  # top-level only, ~85% smaller


