Client side atproto account migrator in your web browser, along with services for backups and adversarial migrations.
pdsmoover.com
pds
atproto
migrations
moo
cow
1<!doctype html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8"/>
5 <link rel="icon" type="image/webp" href="/halloween_moover.webp"/>
6 {% block meta %}{% endblock %}
7
8 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
9 <title>PDS MOOver</title>
10 <link rel="stylesheet" href="/style.css?new">
11 <script src="https://unpkg.com/alpinejs" defer></script>
12
13
14{{ layout_context.script_tags | safe }}
15
16{% if let Some(hmr_script) = layout_context.vite_hmr_url %}
17 {{hmr_script | safe}}
18{% endif %}
19
20</head>
21<body>
22<header class="navbar" role="banner" x-data="{ open: false }">
23 <div class="navbar-inner">
24 <a class="brand" href="/">PDS MOOver</a>
25 <button class="navbar-toggle" @click="open = !open" :aria-expanded="open.toString()" aria-controls="primary-navigation" aria-label="Toggle navigation">
26
27 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24.9512 17.1997">
28 <g>
29 <rect height="17.1997" opacity="0" width="24.9512" x="0" y="0"/>
30 <path d="M8.1543 16.9678L23.5962 16.9678C24.1455 16.9678 24.5972 16.5405 24.5972 15.9912C24.5972 15.4297 24.1455 15.0024 23.5962 15.0024L8.1543 15.0024C7.59277 15.0024 7.16553 15.4297 7.16553 15.9912C7.16553 16.5405 7.59277 16.9678 8.1543 16.9678Z" fill="white" fill-opacity="0.85"/>
31 <path d="M1.2085 17.1997L3.2959 17.1997C3.96729 17.1997 4.5166 16.6504 4.5166 15.9912C4.5166 15.3076 3.96729 14.7705 3.2959 14.7705L1.2085 14.7705C0.537109 14.7705 0 15.3076 0 15.9912C0 16.6504 0.537109 17.1997 1.2085 17.1997Z" fill="white" fill-opacity="0.85"/>
32 <path d="M8.1543 9.59473L23.5962 9.59473C24.1455 9.59473 24.5972 9.15527 24.5972 8.60596C24.5972 8.05664 24.1455 7.62939 23.5962 7.62939L8.1543 7.62939C7.59277 7.62939 7.16553 8.05664 7.16553 8.60596C7.16553 9.15527 7.59277 9.59473 8.1543 9.59473Z" fill="white" fill-opacity="0.85"/>
33 <path d="M1.2085 9.82666L3.2959 9.82666C3.96729 9.82666 4.5166 9.27734 4.5166 8.60596C4.5166 7.93457 3.96729 7.39746 3.2959 7.39746L1.2085 7.39746C0.537109 7.39746 0 7.93457 0 8.60596C0 9.27734 0.537109 9.82666 1.2085 9.82666Z" fill="white" fill-opacity="0.85"/>
34 <path d="M8.1543 2.20947L23.5962 2.20947C24.1455 2.20947 24.5972 1.78223 24.5972 1.23291C24.5972 0.671387 24.1455 0.244141 23.5962 0.244141L8.1543 0.244141C7.59277 0.244141 7.16553 0.671387 7.16553 1.23291C7.16553 1.78223 7.59277 2.20947 8.1543 2.20947Z" fill="white" fill-opacity="0.85"/>
35 <path d="M1.2085 2.44141L3.2959 2.44141C3.96729 2.44141 4.5166 1.89209 4.5166 1.23291C4.5166 0.549316 3.96729 0.012207 3.2959 0.012207L1.2085 0.012207C0.537109 0.012207 0 0.549316 0 1.23291C0 1.89209 0.537109 2.44141 1.2085 2.44141Z" fill="white" fill-opacity="0.85"/>
36 </g>
37 </svg>
38
39 </button>
40 <nav id="primary-navigation" class="nav-links" :class="open ? 'open' : ''" aria-label="Primary" @click="open = false">
41 <a href="/info" class="{% if layout_context.current_path == "/info" %}active{% endif %}">Info</a>
42 <a href="/moover" class="{% if layout_context.current_path == "/moover" %}active{% endif %}">Moover</a>
43 <a href="/missing-blobs" class="{% if layout_context.current_path == "/missing-blobs" %}active{% endif %}">Missing Blobs</a>
44 <a href="/turn-off" class="{% if layout_context.current_path == "/turn-off" %}active{% endif %}">Turn Off</a>
45 <a href="/backups" class="{% if layout_context.current_path == "/backups" %}active{% endif %}">Backups</a>
46 <a href="/restore" class="{% if layout_context.current_path == "/restore" %}active{% endif %}">Restore</a>
47 <a href="/terms" class="{% if layout_context.current_path == "/terms" %}active{% endif %}">Legal</a>
48
49 </nav>
50 </div>
51</header>
52
53<main class="page-content" role="main">
54 {% block content %}{% endblock %}
55</main>
56</body>
57</html>
58