diff --git a/packages/web/src/components/InstanceSummary.tsx b/packages/web/src/components/InstanceSummary.tsx
index 6667096..8314684 100644
--- a/packages/web/src/components/InstanceSummary.tsx
+++ b/packages/web/src/components/InstanceSummary.tsx
@@ -16,10 +16,13 @@
import { Link } from "@kobalte/core/link";
import { graphql } from "relay-runtime";
+import { Show } from "solid-js";
import { createFragment } from "solid-relay";
import type { InstanceSummary_instance$key } from "./__generated__/InstanceSummary_instance.graphql.tsx";
+import styles from "~/styles/workspace.module.css";
+
export default function InstanceSummary(props: {
$instance: InstanceSummary_instance$key;
}) {
@@ -34,9 +37,23 @@ export default function InstanceSummary(props: {
);
return (
-
- {data()?.host}
- Create Actors
-
+
+ {(instance) => (
+
+
+
+
Instance host
+
{instance().host}
+
+
+ Create actors
+ →
+
+
+ )}
+
);
}
diff --git a/packages/web/src/routes/instance/[slug].tsx b/packages/web/src/routes/instance/[slug].tsx
new file mode 100644
index 0000000..49e2691
--- /dev/null
+++ b/packages/web/src/routes/instance/[slug].tsx
@@ -0,0 +1,101 @@
+// DrFed: A web-based platform for developing and debugging ActivityPub apps
+// Copyright (C) 2026 DrFed team
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+import { Title } from "@solidjs/meta";
+import { A, useParams } from "@solidjs/router";
+import { For } from "solid-js";
+
+import styles from "~/styles/instance.module.css";
+
+const actors = ["@sherry", "@newsroom", "@garden"] as const;
+
+export default function InstanceDetailPage() {
+ const params = useParams();
+ const host = () => params.slug ?? "social.example";
+
+ return (
+
+ {host()} — DrFed
+
+
+ ← All instances
+
+
+
+
+
+
+ );
+}
diff --git a/packages/web/src/routes/workspace/index.tsx b/packages/web/src/routes/workspace/index.tsx
index 74430f3..df52d22 100644
--- a/packages/web/src/routes/workspace/index.tsx
+++ b/packages/web/src/routes/workspace/index.tsx
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
+import { Link } from "@kobalte/core/link";
+import { Title } from "@solidjs/meta";
import { graphql } from "relay-runtime";
import { For, Show } from "solid-js";
import { createLazyLoadQuery } from "solid-relay";
@@ -22,6 +24,8 @@ import InstanceSummary from "~/components/InstanceSummary.tsx";
import type { WorkspaceQuery } from "./__generated__/WorkspaceQuery.graphql.tsx";
+import styles from "~/styles/workspace.module.css";
+
const workspaceQuery = graphql`
query WorkspaceQuery {
viewer {
@@ -44,16 +48,72 @@ export default function WorkspacePage() {
);
return (
-
-
- You're not signed in.}>
- {(viewer) => (
-
- {(edge) => }
-
- )}
+
+ Workspace — DrFed
+
+
+