blonk is a radar for your web, where you follow vibes for cool blips on the radar
at main 61 lines 3.0 kB view raw
1<div class="mx-auto max-w-md"> 2 <div class="bg-white rounded-lg shadow-lg p-8"> 3 <.header class="text-center mb-8"> 4 <div class="text-2xl text-gray-700">transmit your frequency</div> 5 <:subtitle> 6 <div class="text-gray-600 mt-2"> 7 Connect securely with your Bluesky App Password 8 </div> 9 <div class="bg-blue-50 border border-blue-200 text-blue-800 px-4 py-3 rounded mt-4 text-sm"> 10 🔒 <strong>Security Notice:</strong> Never use your main Bluesky password. 11 <br />Create a secure App Password in your Bluesky settings. 12 </div> 13 </:subtitle> 14 </.header> 15 16 <.simple_form :let={f} for={@conn.params["user"]} as={:user} action={~p"/users/log_in"} class="space-y-6"> 17 <div :if={@error_message} class="bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded mb-4"> 18 {String.replace(@error_message, "email", "handle")} 19 </div> 20 21 <div> 22 <label class="block text-gray-700 text-sm font-medium mb-3">Bluesky Handle</label> 23 <.input field={f[:handle]} type="text" placeholder="yourname.bsky.social or yourname@custom.domain" 24 class="w-full border border-gray-300 rounded-lg px-4 py-3 focus:ring-2 focus:ring-blue-500 focus:border-transparent" 25 required /> 26 <div class="text-xs text-gray-500 mt-2">Enter your Bluesky handle (with or without .bsky.social)</div> 27 </div> 28 29 <div> 30 <label class="block text-gray-700 text-sm font-medium mb-3">App Password</label> 31 <.input field={f[:password]} type="password" placeholder="xxxx-xxxx-xxxx-xxxx" 32 class="w-full border border-gray-300 rounded-lg px-4 py-3 focus:ring-2 focus:ring-blue-500 focus:border-transparent font-mono" 33 required /> 34 <div class="text-xs text-gray-500 mt-2"> 35 <strong>Important:</strong> Use an <strong>App Password</strong>, not your main password. 36 <br /> 37 <a href="https://bsky.app/settings/app-passwords" target="_blank" class="text-blue-600 hover:underline"> 38 Generate an App Password in Bluesky Settings → 39 </a> 40 </div> 41 </div> 42 43 <:actions :let={f}> 44 <div class="flex items-center justify-between"> 45 <.input field={f[:remember_me]} type="checkbox" label="Keep me logged in" class="text-sm" /> 46 <div class="text-sm text-gray-600"> 47 Need help? 48 <a href="https://bsky.app/settings/app-passwords" target="_blank" class="text-blue-600 hover:underline">App Password Guide</a> 49 </div> 50 </div> 51 </:actions> 52 <:actions> 53 <div class="flex justify-center pt-4"> 54 <.button phx-disable-with="Authenticating..." class="bg-blue-600 text-white px-8 py-3 rounded-lg hover:bg-blue-700 font-medium w-full"> 55 Connect to Bluesky <span aria-hidden="true">🔗</span> 56 </.button> 57 </div> 58 </:actions> 59 </.simple_form> 60 </div> 61</div>