A community-maintained directory of Bluesky Personal Data Servers (PDS). pdslist.wisp.place
at main 4.8 kB view raw
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>PDSList - A database of Bluesky PDSes </title> 7 <link rel="stylesheet" href="styles.css"> 8 <meta name="description" content="A database of Bluesky PDSes that are 'open' - by madebydanny.uk"> 9 <meta property="og:image" content="/media/ogimg.png"> 10 <link rel="icon" href="/media/database-solid-full.svg" type="image/x-icon"/> 11 <link rel="shortcut icon" href="/media/database-solid-full.svg" type="image/x-icon"/> 12</head> 13<body> 14 <div class="container"> 15 <h1>PDSList - A database of Bluesky PDSes </h1> 16 <p>A database of Bluesky PDSes that are "open"</p> 17 <p><b>NOTE: Data on this site is sourced from the server's</b> <i>/xrpc/com.atproto.server.describeServer</i> <b>endpoint</b></p> 18 <p><a href="https://tangled.org/madebydanny.uk/pdslist#adding-your-pds">→ Add Your PDS</a></p> 19 20 <div id="loading"> 21 <p>Loading database...</p> 22 </div> 23 24 <div id="content" style="display: none;"> 25 <div class="stats"> 26 <div class="stat"> 27 <div class="stat-label">Total Servers</div> 28 <div class="stat-value" id="server-count">0</div> 29 </div> 30 <div class="stat"> 31 <div class="stat-label">Showing</div> 32 <div class="stat-value" id="filtered-count">0</div> 33 </div> 34 </div> 35 36 <!-- Mobile Popup --> 37 <div id="mobile-popup" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1000; justify-content: center; align-items: center;"> 38 <div style="background: white; padding: 30px; border-radius: 8px; max-width: 400px; text-align: center; box-shadow: 0 4px 20px rgba(0,0,0,0.2);"> 39 <h2 style="margin-top: 0; color: #0066cc;">Mobile Notice</h2> 40 <p>This site is best viewed on a desktop for the best experience.</p> 41 <p style="font-size: 14px; color: #666;">The database table is optimized for larger screens.</p> 42 <button id="close-mobile-popup" style="padding: 10px 20px; background: #0066cc; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 14px;">Got it, continue anyway</button> 43 </div> 44 </div> 45 46 <!-- Search and Filters --> 47 <div style="margin-bottom: 20px; padding: 15px; background: #f0f4f8; border-radius: 4px; border: 1px solid #ddd;"> 48 <input type="text" id="search-input" placeholder="Search by URL, handles, maintainer, or email..." style="width: 100%; padding: 10px 12px; margin-bottom: 15px; border: 1px solid #ddd; border-radius: 4px; font-size: 14px;"> 49 50 <div style="display: flex; gap: 15px; flex-wrap: wrap; align-items: center;"> 51 <label style="display: flex; align-items: center; gap: 8px; cursor: pointer;"> 52 <input type="radio" name="invite-filter" value="all" checked> 53 <span>All Servers</span> 54 </label> 55 <label style="display: flex; align-items: center; gap: 8px; cursor: pointer;"> 56 <input type="radio" name="invite-filter" value="yes"> 57 <span>Invite Required</span> 58 </label> 59 <label style="display: flex; align-items: center; gap: 8px; cursor: pointer;"> 60 <input type="radio" name="invite-filter" value="no"> 61 <span>No Invite Required</span> 62 </label> 63 </div> 64 </div> 65 66 <div style="overflow-x: auto; -webkit-overflow-scrolling: touch;"> 67 <table id="pds-table" border="1" cellpadding="10" cellspacing="0"> 68 <thead> 69 <tr> 70 <th>URL</th> 71 <th>Handles</th> 72 <th>Maintainer</th> 73 <th>Server Location</th> 74 <th>Email</th> 75 <th>Invite Code Needed</th> 76 <th>Terms</th> 77 <th>Privacy</th> 78 </tr> 79 </thead> 80 <tbody id="table-body"> 81 </tbody> 82 </table> 83 </div> 84 85 <div id="no-data" style="display: none;"> 86 <p>No PDS servers found.</p> 87 </div> 88 </div> 89 </div> 90 91 <script src="app.js"></script> 92</body> 93</html>