diff --git a/README.md b/README.md index 00cd7a9..1acc166 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,10 @@ heatmap**, a gym SBD panel and links to friends' sites. `ND_HTTPHEADERS_FRAMEOPTIONS=ALLOWALL` and Forgejo needs `[cors] X_FRAME_OPTIONS = unset`. A spinner covers the frame while the site boots. Discord sends `DENY` and keeps a link card instead. +- **Friend sites in windows** — clicking a friend's desktop icon opens their site in a + window. `bukovinafilip.com` and `vlcak.me` send no framing headers, so they load live; + `skopec.dev` sends `X-Frame-Options: SAMEORIGIN`, so the window frames the bundled mirror + at `/skopec.html` and the `www` button opens the real site. - **Minecraft-style SMP window** — the SMP shortcut opens a join menu modelled on Minecraft's multiplayer screen, with live status, player count, MOTD and version pulled from mcstatus.io through the site's own ping API. diff --git a/agents.md b/agents.md index 8dc4b1e..eb293ce 100644 --- a/agents.md +++ b/agents.md @@ -295,6 +295,14 @@ list reordering, not free placement. Don't confuse the two. `Content-Security-Policy: frame-ancestors`. Discord keeps a link card because it sends `DENY` and can't be configured. Always verify headers before enabling `embed` on a new service. +- Friend shortcuts reuse the same embed path, driven by `data.ts`. `friend.iframe` + is the `embed` flag; `friend.url` is what the frame loads and `friend.realUrl` + is what the www button opens — `createWebsiteApp`'s `embedUrl` option lets the + two differ. `bukovinafilip.com` and `vlcak.me` send no framing headers, so they + frame the live site; `skopec.dev` sends `X-Frame-Options: SAMEORIGIN` on every + path, so `friends[0].url` points at the bundled `/public/skopec.html` mirror + and only the button is live. Making a blocking site load *live* would need a + header-stripping proxy (allowlisted) — not implemented. - **Embedded iframes swallow the pointer.** While dragging/resizing a window, the moment the cursor passes over a service `