+11
README.md
+11
README.md
···
2
2
3
3
Navigate and manage [atproto](https://atproto.com/) repositories and the records they contain, as well as watching the relay in real time (firehose + jetstream support).
4
4
5
+
### Hacking
6
+
7
+
You will need `node` and `pnpm` to get started:
8
+
9
+
```
10
+
pnpm i # install deps
11
+
pnpm dev # or pnpm run start, runs vite
12
+
pnpm build # runs vite build
13
+
pnpm serve # runs vite preview
14
+
```
15
+
5
16
### Credits
6
17
7
18
[atcute](https://github.com/mary-ext/atcute) - atproto SDK\
-1
index.html
-1
index.html
···
9
9
<meta property="og:url" content="https://pdsls.dev" />
10
10
<meta property="og:description" content="Browse and manage atproto repositories" />
11
11
<meta property="description" content="Browse and manage atproto repositories" />
12
-
<title>PDSls</title>
13
12
<script>
14
13
if (
15
14
localStorage.theme === "dark" ||
+1
-1
package.json
+1
-1
package.json
+5
-5
pnpm-lock.yaml
+5
-5
pnpm-lock.yaml
···
76
76
version: 1.9.8
77
77
devDependencies:
78
78
'@iconify-json/lucide':
79
-
specifier: ^1.2.61
80
-
version: 1.2.61
79
+
specifier: ^1.2.62
80
+
version: 1.2.62
81
81
'@iconify-json/lucide-lab':
82
82
specifier: ^1.2.3
83
83
version: 1.2.3
···
556
556
'@iconify-json/lucide-lab@1.2.3':
557
557
resolution: {integrity: sha512-N+8vnVt4IY/6FZi81f6nh5VhJSMYrs5KTVsT2Z/E0Wn7Lu4jJKO5fOfiTVX1YWVI4FFwQ1zVXPFb8kLAwskrjA==}
558
558
559
-
'@iconify-json/lucide@1.2.61':
560
-
resolution: {integrity: sha512-0sLmi3vyEsJ6XL/uhl0a+uphdYIW1viYkUmiuT4SK3e2R3o3GIWY9k8N+SZL++GVBbMKy9oatx8KrzyoPZ6WqQ==}
559
+
'@iconify-json/lucide@1.2.62':
560
+
resolution: {integrity: sha512-K0KfhvP5YQZ2KraOgCm6jJbwwzQCVocvXcdMpDou5uLa48QnLBRW/dQ8VDGmxHTGpwF9EqLlvnUSinH2i6xs3Q==}
561
561
562
562
'@iconify/types@2.0.0':
563
563
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
···
1706
1706
dependencies:
1707
1707
'@iconify/types': 2.0.0
1708
1708
1709
-
'@iconify-json/lucide@1.2.61':
1709
+
'@iconify-json/lucide@1.2.62':
1710
1710
dependencies:
1711
1711
'@iconify/types': 2.0.0
1712
1712
+1
-1
src/components/search.tsx
+1
-1
src/components/search.tsx
+11
-6
src/layout.tsx
+11
-6
src/layout.tsx
···
7
7
import { Search } from "./components/search.jsx";
8
8
import { AccountManager } from "./components/account.jsx";
9
9
import { resolveHandle } from "./utils/api.js";
10
-
import { Meta, MetaProvider } from "@solidjs/meta";
10
+
import { Meta, MetaProvider, Title } from "@solidjs/meta";
11
11
import { kawaii, Settings } from "./components/settings.jsx";
12
12
import { Handle } from "@atcute/lexicons";
13
13
import { copyNotice } from "./utils/copy.js";
14
+
15
+
const customTitle: Record<string, string> = {
16
+
"did:plc:hx53snho72xoj7zqt5uice4u": "wrenls",
17
+
};
14
18
15
19
const Layout = (props: RouteSectionProps<unknown>) => {
16
20
const params = useParams();
···
27
31
28
32
return (
29
33
<div id="main" class="m-4 flex flex-col items-center text-slate-900 dark:text-slate-100">
30
-
<Show when={location.pathname !== "/"}>
31
-
<MetaProvider>
34
+
<MetaProvider>
35
+
<Show when={location.pathname !== "/"}>
32
36
<Meta name="robots" content="noindex, nofollow" />
33
-
</MetaProvider>
34
-
</Show>
37
+
</Show>
38
+
<Title>{customTitle[params.repo] ?? "PDSls"}</Title>
39
+
</MetaProvider>
35
40
<div class="mb-2 flex w-[21rem] items-center sm:w-[24rem]">
36
41
<div class="flex basis-1/3 gap-x-2">
37
42
<A href="/jetstream">
···
43
48
</div>
44
49
<div class="flex basis-1/3 items-center justify-center text-center">
45
50
<A href="/" class="font-mono font-bold hover:underline">
46
-
PDSls
51
+
{customTitle[params.repo] ?? "PDSls"}
47
52
</A>
48
53
<Show when={localStorage.kawaii === "true" || kawaii()}>
49
54
<a
+5
src/views/home.tsx
+5
src/views/home.tsx
···
72
72
<div class="i-lucide-github text-xl" />
73
73
</A>
74
74
</Tooltip>
75
+
<Tooltip text="Tangled">
76
+
<A href="https://tangled.sh/@pdsls.dev/pdsls/" target="_blank">
77
+
<div class="i-lucide-line-squiggle text-xl" />
78
+
</A>
79
+
</Tooltip>
75
80
<Tooltip text="Bluesky">
76
81
<A href="https://bsky.app/profile/did:plc:6q5daed5gutiyerimlrnojnz" target="_blank">
77
82
<div class="i-tabler-brand-bluesky text-xl" />
+3
-1
src/views/pds.tsx
+3
-1
src/views/pds.tsx
···
119
119
</>
120
120
)}
121
121
</Show>
122
-
<p class="w-full font-semibold text-stone-600 dark:text-stone-400">Repositories</p>
122
+
<p class="w-full font-semibold text-stone-600 dark:text-stone-400">
123
+
{repos()?.length} Repositories
124
+
</p>
123
125
<For each={repos()}>
124
126
{(repo) => (
125
127
<A
+1
-1
src/views/record.tsx
+1
-1
src/views/record.tsx
···
131
131
<Show when={record()}>
132
132
<div class="dark:shadow-dark-900/80 dark:bg-dark-300 my-3 flex gap-3 rounded-full bg-white px-2.5 py-2 shadow-sm">
133
133
<Tooltip text="Copy record">
134
-
<button onclick={() => addToClipboard(JSON.stringify(record()?.value))}>
134
+
<button onclick={() => addToClipboard(JSON.stringify(record()?.value, null, 2))}>
135
135
<div class="i-lucide-copy text-xl" />
136
136
</button>
137
137
</Tooltip>