Client side atproto account migrator in your web browser, along with services for backups and adversarial migrations. pdsmoover.com
pds atproto migrations moo cow
at feat/batch-one-qol 95 lines 4.1 kB view raw
1{%- import "partials/cow-header.askama.html" as cow -%} 2{% extends "layout.askama.html" %} 3 4{% block meta %} 5 <meta property="og:description" content="PDS MOOver – ATProto tools for PDS migrations and backups"/> 6 <meta property="og:image" content="/halloween_moover.webp"> 7{% endblock %} 8 9{% block content %} 10<script> 11 12 13document.addEventListener('alpine:init', () => { 14 window.Alpine.data('serverStats', () => ({ 15 loading: true, 16 error: null, 17 stats: null, 18 async init() { 19 try { 20 const res = await fetch('/xrpc/com.pdsmoover.backup.describeServer'); 21 if (!res.ok) throw new Error(`Failed to load: ${res.status}`); 22 this.stats = await res.json(); 23 } catch (e) { 24 console.error(e); 25 this.error = 'Failed to load server stats. Please try again later.'; 26 } finally { 27 this.loading = false; 28 } 29 }, 30 //TODO bad but do not want to figure out onload with current setup 31 32 33 })); 34}); 35 36</script> 37 38<div class="container"> 39 {% call cow::cow_header("PDS MOOver") %} 40 41 <section class="section" style="text-align:left"> 42 <p> 43 PDS MOOver is a set of AT Protocol tools to help you 44 <a href="/moover">migrate to a new PDS</a>, 45 <a href="/missing-blobs">find your missing blobs</a>, 46 sign up for free automated <a href="/backups">backups</a>, and <a href="/restore">restore your account</a> 47 in the event you need to. 48 </p> 49 <ul> 50 <li><a href="/moover">Moover</a> – helps you migrate to a new PDS.</li> 51 <li><a href="/missing-blobs">Missing Blobs</a> – find any missing blobs (pictures/videos) from a previous migration.</li> 52 <li><a href="/backups">Backups</a> – sign up for free automated backups stored on PDS MOOver servers and view your account's backup status.</li> 53 <li><a href="/restore">Restore</a> – restore from your backups if needed.</li> 54 <li><a href="/turn-off">Turn Off</a> – helper to make sure your old account is deactivated.</li> 55 <li><a href="/info">Info</a> – FAQs and a few other bits of information about our tools.</li> 56 <li><a href="https://tangled.org/@baileytownsend.dev/pds-moover">Check our source code on tangled</a></li> 57 </ul> 58 </section> 59 60 <section class="section" aria-labelledby="stats-heading" x-data="serverStats()" x-init="init()"> 61 <h2 id="stats-heading">Server stats</h2> 62 <span>Total stats for all accounts backed up on pdsmoover.com</span> 63 <div style="padding-top: 5%" class="stats-grid" x-show="!error"> 64 <div class="stat-card"> 65 <div class="stat-label">Total repositories</div> 66 <div class="stat-value" x-text="stats?.totalRepos.toLocaleString()"></div> 67 </div> 68 <div class="stat-card"> 69 <div class="stat-label">Total blobs</div> 70 <div class="stat-value" x-text="stats?.totalBlobs.toLocaleString()"></div> 71 </div> 72 <div class="stat-card"> 73 <div class="stat-label">Estimated total repo size</div> 74 <div class="stat-value" x-text="fmtBytes(stats?.estimatedReposSizeOnDisk)"></div> 75 </div> 76 <div class="stat-card"> 77 <div class="stat-label">Estimated total blob size</div> 78 <div class="stat-value" x-text="fmtBytes(stats?.estimatedBlobsSizeOnDisk)"></div> 79 </div> 80 <div class="stat-card"> 81 <div class="stat-label">Last backup ran at</div> 82 <div class="stat-value stat-value--small" x-text="fmtDate(stats?.lastBackupAt)"></div> 83 </div> 84 <div class="stat-card"> 85 <div class="stat-label">Server Status last updated</div> 86 <div class="stat-value stat-value--small" x-text="fmtDate(stats?.statusLastUpdated)"></div> 87 </div> 88 </div> 89 <div class="warning-message" x-show="error" x-text="error"></div> 90 </section> 91</div> 92 93 94 95{% endblock %}