From d71c36554c8ceb5d65001c64587748977d4a226d Mon Sep 17 00:00:00 2001
From: Florian <45694132+flo-bit@users.noreply.github.com>
Date: Fri, 13 Feb 2026 23:12:12 +0100
Subject: [PATCH 1/6] ok actually maybe a big refactor ^^
---
src/lib/website/EditBar.svelte | 2 +-
src/lib/website/SaveModal.svelte | 2 +-
src/routes/+page.server.ts | 26 --
.../[[actor=actor]]/(pages)/+layout.server.ts | 40 +++
.../(pages)}/+page.svelte | 0
.../(pages)/edit/+page.svelte | 0
.../(pages)/p/[[page]]}/+page.svelte | 0
.../(pages)}/p/[[page]]/copy/+page.svelte | 2 +-
.../(pages)/p/[[page]]/edit/+page.svelte | 0
.../site.standard.publication/+server.ts | 44 +++
.../[[actor=actor]]/api/refresh/+server.ts | 37 +++
.../og.png/+server.ts | 33 ++-
.../[actor=actor]/(pages)/+layout.server.ts | 18 --
.../(pages)/p/[[page]]/+page.svelte | 13 -
.../(pages)/p/[[page]]/copy/+page.svelte | 252 ------------------
.../site.standard.publication/+server.ts | 16 --
.../[actor=actor]/api/refresh/+server.ts | 14 -
src/routes/edit/+page.server.ts | 26 --
src/routes/edit/+page.svelte | 7 -
src/routes/p/[[page]]/+layout.server.ts | 26 --
src/routes/p/[[page]]/+page.svelte | 13 -
src/routes/p/[[page]]/edit/+page.svelte | 6 -
22 files changed, 154 insertions(+), 423 deletions(-)
delete mode 100644 src/routes/+page.server.ts
create mode 100644 src/routes/[[actor=actor]]/(pages)/+layout.server.ts
rename src/routes/{ => [[actor=actor]]/(pages)}/+page.svelte (100%)
rename src/routes/{[actor=actor] => [[actor=actor]]}/(pages)/edit/+page.svelte (100%)
rename src/routes/{[actor=actor]/(pages) => [[actor=actor]]/(pages)/p/[[page]]}/+page.svelte (100%)
rename src/routes/{ => [[actor=actor]]/(pages)}/p/[[page]]/copy/+page.svelte (98%)
rename src/routes/{[actor=actor] => [[actor=actor]]}/(pages)/p/[[page]]/edit/+page.svelte (100%)
create mode 100644 src/routes/[[actor=actor]]/.well-known/site.standard.publication/+server.ts
create mode 100644 src/routes/[[actor=actor]]/api/refresh/+server.ts
rename src/routes/{[actor=actor] => [[actor=actor]]}/og.png/+server.ts (71%)
delete mode 100644 src/routes/[actor=actor]/(pages)/+layout.server.ts
delete mode 100644 src/routes/[actor=actor]/(pages)/p/[[page]]/+page.svelte
delete mode 100644 src/routes/[actor=actor]/(pages)/p/[[page]]/copy/+page.svelte
delete mode 100644 src/routes/[actor=actor]/.well-known/site.standard.publication/+server.ts
delete mode 100644 src/routes/[actor=actor]/api/refresh/+server.ts
delete mode 100644 src/routes/edit/+page.server.ts
delete mode 100644 src/routes/edit/+page.svelte
delete mode 100644 src/routes/p/[[page]]/+layout.server.ts
delete mode 100644 src/routes/p/[[page]]/+page.svelte
delete mode 100644 src/routes/p/[[page]]/edit/+page.svelte
diff --git a/src/lib/website/EditBar.svelte b/src/lib/website/EditBar.svelte
index 7ed8dfd6..1fd53a91 100644
--- a/src/lib/website/EditBar.svelte
+++ b/src/lib/website/EditBar.svelte
@@ -63,7 +63,7 @@
function getShareUrl() {
const base = typeof window !== 'undefined' ? window.location.origin : '';
const pagePath =
- data.page && data.page !== 'blento.self' ? `/${data.page.replace('blento.', '')}` : '';
+ data.page && data.page !== 'blento.self' ? `/p/${data.page.replace('blento.', '')}` : '';
return `${base}/${data.handle}${pagePath}`;
}
diff --git a/src/lib/website/SaveModal.svelte b/src/lib/website/SaveModal.svelte
index 0be64218..dd8d42a9 100644
--- a/src/lib/website/SaveModal.svelte
+++ b/src/lib/website/SaveModal.svelte
@@ -15,7 +15,7 @@
function getShareUrl() {
const base = typeof window !== 'undefined' ? window.location.origin : '';
- const pagePath = page && page !== 'blento.self' ? `/${page.replace('blento.', '')}` : '';
+ const pagePath = page && page !== 'blento.self' ? `/p/${page.replace('blento.', '')}` : '';
return `${base}/${handle}${pagePath}`;
}
diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts
deleted file mode 100644
index c5c69968..00000000
--- a/src/routes/+page.server.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { loadData } from '$lib/website/load';
-import { env } from '$env/dynamic/public';
-import { env as privateEnv } from '$env/dynamic/private';
-import { createCache } from '$lib/cache';
-import type { ActorIdentifier } from '@atcute/lexicons';
-
-export async function load({ platform, request }) {
- const handle = env.PUBLIC_HANDLE;
-
- const kv = platform?.env?.CUSTOM_DOMAINS;
-
- const cache = createCache(platform);
- const customDomain = request.headers.get('X-Custom-Domain')?.toLocaleLowerCase();
-
- if (kv && customDomain) {
- try {
- const did = await kv.get(customDomain);
-
- if (did) return await loadData(did as ActorIdentifier, cache, false, 'self', privateEnv);
- } catch (error) {
- console.error('failed to get custom domain kv', error);
- }
- }
-
- return await loadData(handle as ActorIdentifier, cache, false, 'self', privateEnv);
-}
diff --git a/src/routes/[[actor=actor]]/(pages)/+layout.server.ts b/src/routes/[[actor=actor]]/(pages)/+layout.server.ts
new file mode 100644
index 00000000..69e6cb2e
--- /dev/null
+++ b/src/routes/[[actor=actor]]/(pages)/+layout.server.ts
@@ -0,0 +1,40 @@
+import { loadData } from '$lib/website/load';
+import { env } from '$env/dynamic/private';
+import { error } from '@sveltejs/kit';
+import { createCache } from '$lib/cache';
+import type { ActorIdentifier } from '@atcute/lexicons';
+import { env as publicEnv } from '$env/dynamic/public';
+
+export async function load({ params, platform, request }) {
+ if (env.PUBLIC_IS_SELFHOSTED) error(404);
+
+ const cache = createCache(platform);
+
+ const customDomain = request.headers.get('X-Custom-Domain')?.toLowerCase();
+
+ let actor: ActorIdentifier | undefined = params.actor;
+
+ if (!actor) {
+ const kv = platform?.env?.CUSTOM_DOMAINS;
+
+ if (kv && customDomain) {
+ try {
+ const did = await kv.get(customDomain);
+
+ if (did) actor = did as ActorIdentifier;
+ } catch (error) {
+ console.error('failed to get custom domain kv', error);
+ }
+ } else {
+ actor = publicEnv.PUBLIC_HANDLE as ActorIdentifier;
+ }
+ } else if (customDomain && params.actor) {
+ actor = undefined;
+ }
+
+ if (!actor) {
+ throw error(404, 'Page not found');
+ }
+
+ return await loadData(actor, cache, false, params.page, env);
+}
diff --git a/src/routes/+page.svelte b/src/routes/[[actor=actor]]/(pages)/+page.svelte
similarity index 100%
rename from src/routes/+page.svelte
rename to src/routes/[[actor=actor]]/(pages)/+page.svelte
diff --git a/src/routes/[actor=actor]/(pages)/edit/+page.svelte b/src/routes/[[actor=actor]]/(pages)/edit/+page.svelte
similarity index 100%
rename from src/routes/[actor=actor]/(pages)/edit/+page.svelte
rename to src/routes/[[actor=actor]]/(pages)/edit/+page.svelte
diff --git a/src/routes/[actor=actor]/(pages)/+page.svelte b/src/routes/[[actor=actor]]/(pages)/p/[[page]]/+page.svelte
similarity index 100%
rename from src/routes/[actor=actor]/(pages)/+page.svelte
rename to src/routes/[[actor=actor]]/(pages)/p/[[page]]/+page.svelte
diff --git a/src/routes/p/[[page]]/copy/+page.svelte b/src/routes/[[actor=actor]]/(pages)/p/[[page]]/copy/+page.svelte
similarity index 98%
rename from src/routes/p/[[page]]/copy/+page.svelte
rename to src/routes/[[actor=actor]]/(pages)/p/[[page]]/copy/+page.svelte
index b456d151..cfcfb41a 100644
--- a/src/routes/p/[[page]]/copy/+page.svelte
+++ b/src/routes/[[actor=actor]]/(pages)/p/[[page]]/copy/+page.svelte
@@ -159,7 +159,7 @@
success = true;
// Redirect to the logged-in user's destination page edit
- const destPath = destinationPage.trim() === '' ? '' : `/${destinationPage.trim()}`;
+ const destPath = destinationPage.trim() === '' ? '' : `/p/${destinationPage.trim()}`;
setTimeout(() => {
goto(`/${userHandle}${destPath}/edit`);
}, 1000);
diff --git a/src/routes/[actor=actor]/(pages)/p/[[page]]/edit/+page.svelte b/src/routes/[[actor=actor]]/(pages)/p/[[page]]/edit/+page.svelte
similarity index 100%
rename from src/routes/[actor=actor]/(pages)/p/[[page]]/edit/+page.svelte
rename to src/routes/[[actor=actor]]/(pages)/p/[[page]]/edit/+page.svelte
diff --git a/src/routes/[[actor=actor]]/.well-known/site.standard.publication/+server.ts b/src/routes/[[actor=actor]]/.well-known/site.standard.publication/+server.ts
new file mode 100644
index 00000000..faccbef3
--- /dev/null
+++ b/src/routes/[[actor=actor]]/.well-known/site.standard.publication/+server.ts
@@ -0,0 +1,44 @@
+import { loadData } from '$lib/website/load';
+import { createCache } from '$lib/cache';
+import { env } from '$env/dynamic/private';
+import { env as publicEnv } from '$env/dynamic/public';
+import type { ActorIdentifier } from '@atcute/lexicons';
+
+import { error } from '@sveltejs/kit';
+import { text } from '@sveltejs/kit';
+
+export async function GET({ params, platform, request }) {
+ const cache = createCache(platform);
+
+ const customDomain = request.headers.get('X-Custom-Domain')?.toLowerCase();
+
+ let actor: ActorIdentifier | undefined = params.actor;
+
+ if (!actor) {
+ const kv = platform?.env?.CUSTOM_DOMAINS;
+
+ if (kv && customDomain) {
+ try {
+ const did = await kv.get(customDomain);
+
+ if (did) actor = did as ActorIdentifier;
+ } catch (error) {
+ console.error('failed to get custom domain kv', error);
+ }
+ } else {
+ actor = publicEnv.PUBLIC_HANDLE as ActorIdentifier;
+ }
+ } else if (customDomain && params.actor) {
+ actor = undefined;
+ }
+
+ if (!actor) {
+ throw error(404, 'Page not found');
+ }
+
+ const data = await loadData(actor, cache, false, params.page, env);
+
+ if (!data.publication) throw error(300);
+
+ return text(data.did + '/site.standard.publication/blento.self');
+}
diff --git a/src/routes/[[actor=actor]]/api/refresh/+server.ts b/src/routes/[[actor=actor]]/api/refresh/+server.ts
new file mode 100644
index 00000000..66105123
--- /dev/null
+++ b/src/routes/[[actor=actor]]/api/refresh/+server.ts
@@ -0,0 +1,37 @@
+import { createCache } from '$lib/cache';
+import { loadData } from '$lib/website/load.js';
+import { env } from '$env/dynamic/private';
+import { env as publicEnv } from '$env/dynamic/public';
+import type { ActorIdentifier } from '@atcute/lexicons';
+import { error, json } from '@sveltejs/kit';
+
+export async function GET({ params, platform, request }) {
+ const cache = createCache(platform);
+ if (!cache) return json('no cache');
+
+ const customDomain = request.headers.get('X-Custom-Domain')?.toLowerCase();
+
+ let actor: ActorIdentifier | undefined = params.actor;
+
+ if (!actor) {
+ const kv = platform?.env?.CUSTOM_DOMAINS;
+
+ if (kv && customDomain) {
+ try {
+ const did = await kv.get(customDomain);
+
+ if (did) actor = did as ActorIdentifier;
+ } catch (error) {
+ console.error('failed to get custom domain kv', error);
+ }
+ } else {
+ actor = publicEnv.PUBLIC_HANDLE as ActorIdentifier;
+ }
+ }
+
+ if (!actor) {
+ throw error(404, 'Page not found');
+ }
+
+ return json(await loadData(actor, cache, true, 'self', env));
+}
diff --git a/src/routes/[actor=actor]/og.png/+server.ts b/src/routes/[[actor=actor]]/og.png/+server.ts
similarity index 71%
rename from src/routes/[actor=actor]/og.png/+server.ts
rename to src/routes/[[actor=actor]]/og.png/+server.ts
index c469fb32..1fbc59a4 100644
--- a/src/routes/[actor=actor]/og.png/+server.ts
+++ b/src/routes/[[actor=actor]]/og.png/+server.ts
@@ -2,8 +2,11 @@ import { getCDNImageBlobUrl } from '$lib/atproto/methods.js';
import { createCache } from '$lib/cache';
import { loadData } from '$lib/website/load';
import { env } from '$env/dynamic/private';
-import type { Handle } from '@atcute/lexicons';
+import { env as publicEnv } from '$env/dynamic/public';
+
+import type { ActorIdentifier } from '@atcute/lexicons';
import { ImageResponse } from '@ethercorps/sveltekit-og';
+import { error } from '@sveltejs/kit';
function escapeHtml(str: string): string {
return str
@@ -14,10 +17,34 @@ function escapeHtml(str: string): string {
.replace(/'/g, ''');
}
-export async function GET({ params, platform }) {
+export async function GET({ params, platform, request }) {
const cache = createCache(platform);
- const data = await loadData(params.actor, cache, false, 'self', env);
+ const customDomain = request.headers.get('X-Custom-Domain')?.toLowerCase();
+
+ let actor: ActorIdentifier | undefined = params.actor;
+
+ if (!actor) {
+ const kv = platform?.env?.CUSTOM_DOMAINS;
+
+ if (kv && customDomain) {
+ try {
+ const did = await kv.get(customDomain);
+
+ if (did) actor = did as ActorIdentifier;
+ } catch (error) {
+ console.error('failed to get custom domain kv', error);
+ }
+ } else {
+ actor = publicEnv.PUBLIC_HANDLE as ActorIdentifier;
+ }
+ }
+
+ if (!actor) {
+ throw error(404, 'Page not found');
+ }
+
+ const data = await loadData(actor, cache, false, 'self', env);
let image: string | undefined = data.profile.avatar;
diff --git a/src/routes/[actor=actor]/(pages)/+layout.server.ts b/src/routes/[actor=actor]/(pages)/+layout.server.ts
deleted file mode 100644
index 4150b37c..00000000
--- a/src/routes/[actor=actor]/(pages)/+layout.server.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { loadData } from '$lib/website/load';
-import { env } from '$env/dynamic/private';
-import { error } from '@sveltejs/kit';
-import { createCache } from '$lib/cache';
-
-export async function load({ params, platform, request }) {
- if (env.PUBLIC_IS_SELFHOSTED) error(404);
-
- const cache = createCache(platform);
-
- const customDomain = request.headers.get('X-Custom-Domain');
-
- if (customDomain) {
- throw error(404, 'Page not found!');
- }
-
- return await loadData(params.actor, cache, false, params.page, env);
-}
diff --git a/src/routes/[actor=actor]/(pages)/p/[[page]]/+page.svelte b/src/routes/[actor=actor]/(pages)/p/[[page]]/+page.svelte
deleted file mode 100644
index 3419d88c..00000000
--- a/src/routes/[actor=actor]/(pages)/p/[[page]]/+page.svelte
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
{sourceCards.length} cards
-