Statusphere running on a slice 馃崟
at main 1.4 kB view raw
1interface LoginPageProps { 2 error?: string; 3} 4 5export function LoginPage({ error }: LoginPageProps) { 6 return ( 7 <div class="card"> 8 <h1>Sign In to Statusphere</h1> 9 <p class="status-meta"> 10 Share your current status with a single emoji using your AT Protocol identity. 11 </p> 12 13 {error && ( 14 <div class="error" role="alert"> 15 {error} 16 </div> 17 )} 18 19 <form 20 method="post" 21 action="/oauth/authorize" 22 class="form-container" 23 > 24 <div class="form-group"> 25 <label class="form-label" for="loginHint"> 26 AT Protocol Handle 27 </label> 28 <input 29 type="text" 30 id="loginHint" 31 name="loginHint" 32 class="form-input" 33 placeholder="alice.bsky.social" 34 required 35 /> 36 <div class="form-help"> 37 Enter your Bluesky or AT Protocol handle 38 </div> 39 </div> 40 41 <button type="submit" class="btn btn-primary btn-block"> 42 Sign In with OAuth 43 </button> 44 </form> 45 46 <div class="signup-prompt"> 47 <p class="status-meta"> 48 Don't have an account? 49 <a href="https://bsky.app" target="_blank" rel="noopener" class="link"> 50 Sign up on Bluesky 51 </a> 52 </p> 53 </div> 54 </div> 55 ); 56}