diff --git a/package.json b/package.json
index 8f71d78..fccf4cb 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@yusurko/vigil",
"private": true,
- "version": "0.1.0-dev51",
+ "version": "0.1.0-dev62",
"type": "module",
"scripts": {
"dev": "vite dev",
diff --git a/src/lib/HomeMenu.svelte b/src/lib/HomeMenu.svelte
index 36e2669..35f359a 100644
--- a/src/lib/HomeMenu.svelte
+++ b/src/lib/HomeMenu.svelte
@@ -1,5 +1,5 @@
+
+
+
+
+ {#snippet left()}
+
+ {/snippet}
+
+ {#snippet right()}
+ {#if top_guilds}
+
+
+ {#each top_guilds as gu}
+ -
+ +{gu.name} -
+ {gu.post_count ?? 0} posts -
+ {gu.subscriber_count ?? 0} subscribers
+
+ {/each}
+
+
+ {/if}
+ {/snippet}
+
+
+
diff --git a/src/routes/explore/+page.ts b/src/routes/explore/+page.ts
new file mode 100644
index 0000000..978dd28
--- /dev/null
+++ b/src/routes/explore/+page.ts
@@ -0,0 +1,53 @@
+import { backend, type GuildEntry, type PostEntry } from '$lib/backend.js';
+import { getMe, sleep } from '$lib/globals.svelte.js';
+import type { LoadEvent } from '@sveltejs/kit';
+
+
+async function loadFeed (event: LoadEvent): Promise {
+ const resp = await backend.withEvent(event).fetch('explore/feed');
+
+ if ([200].indexOf(resp.status) < 0) {
+ console.error(`fetch feed returned status ${resp.status}`);
+ return null;
+ }
+ try {
+ const respJ = await resp.json();
+
+ const { feed } : { feed: PostEntry[] } = respJ;
+
+ return feed;
+ } catch (e) {
+ return null;
+ }
+}
+
+async function loadTopGuilds (event: LoadEvent): Promise {
+ const resp = await backend.withEvent(event).fetch('top/guilds');
+
+ if ([200].indexOf(resp.status) < 0) {
+ console.error(`fetch top_guilds returned status ${resp.status}`);
+ return null;
+ }
+ try {
+ const respJ = await resp.json();
+
+ const { has: top_guilds } : { has: GuildEntry[] } = respJ;
+ return top_guilds;
+ } catch (e) {
+ return null;
+ }
+}
+
+export async function load(event): Promise<{feed: PostEntry[] | null, top_guilds?: GuildEntry[] | null}> {
+
+ let feed = null;
+ let me = getMe();
+ let top_guilds = null;
+
+ if (me) {
+ feed = await loadFeed(event);
+ top_guilds = await loadTopGuilds(event);
+ }
+
+ return { feed, top_guilds };
+}