Self-hosted, federated location sharing app and server that prioritizes user privacy and security
end-to-end-encryption location-sharing privacy self-hosted federated
at ui 1.5 kB view raw
1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <script type="module" src="./signup.ts"></script> 6 <link rel="stylesheet" href="./signup.css" /> 7 </head> 8 9 <body> 10 <div class="card"> 11 <div class="header"> 12 <div class="icon-circle"> 13 <img src="/src/assets/pin.svg" alt="Pin Icon" /> 14 </div> 15 <h1>PrivacyPin</h1> 16 <p>Connect with a server to start sharing</p> 17 </div> 18 19 <!-- x-data connects this element to the signupPageState Alpine component, enabling its data (serverAddress and signupKey) and functions (signup and scanQR) to work within it :) --> 20 <!-- TODO: make this a form instead? --> 21 <div class="actions" x-data="signupPageState"> 22 <div> 23 <label for="server">Server Address</label> 24 <input id="server" type="url" placeholder="https://your-server.com" x-model="serverAddress" required /> 25 </div> 26 27 <div> 28 <label for="key">Signup Key</label> 29 <input id="key" type="password" placeholder="Enter your signup key" x-model="signupKey" required /> 30 </div> 31 32 <p class="hint">Scan a QR code to automatically fill both server address and signup key</p> 33 <button type="button" x-bind:disabled="isDoingStuff" class="btn-qr" @click="await scanQR()"> 34 <img src="/src/assets/qr.svg" alt="QR Icon" /> 35 Scan QR Code 36 </button> 37 38 <button class="btn-primary" x-bind:disabled="isDoingStuff" @click="await signup()"><span x-show="isDoingStuff">Connecting...</span> <span x-show="!isDoingStuff">Connect</span></button> 39 </div> 40 </div> 41 </body> 42</html>