Full document, spreadsheet, slideshow, and diagram tooling
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: update sign-in modal for AT Proto OAuth and strip @ prefix

Modal copy was leftover from tools fork ("display name for cursors").
Updated to Bluesky sign-in language with proper placeholder. Strip
leading @ from handle input to prevent double-@ in error messages
and failed identity resolution.

+5 -5
+3 -3
src/index.html
··· 149 149 <div class="modal-backdrop" id="username-modal" style="display:none;"> 150 150 <div class="modal username-modal" role="dialog" aria-modal="true" aria-labelledby="username-modal-title"> 151 151 <h2 id="username-modal-title">Welcome to Atmosphere Docs</h2> 152 - <p>Choose a display name for collaboration cursors.</p> 153 - <input type="text" class="username-input" id="username-input" placeholder="Your name" maxlength="50" autofocus /> 152 + <p>Sign in with your Bluesky handle to get started.</p> 153 + <input type="text" class="username-input" id="username-input" placeholder="you.bsky.social" maxlength="100" autofocus /> 154 154 <div class="username-modal-actions"> 155 155 <button class="btn-secondary" id="username-skip">Skip</button> 156 - <button class="btn-primary" id="username-confirm">Continue</button> 156 + <button class="btn-primary" id="username-confirm">Sign In</button> 157 157 </div> 158 158 </div> 159 159 </div>
+2 -2
src/landing-events-identity.ts
··· 36 36 37 37 export function attachUsernameListeners(deps: EventDeps): void { 38 38 deps.usernameConfirm.addEventListener('click', () => { 39 - const handle = deps.usernameInput.value.trim(); 39 + const handle = deps.usernameInput.value.trim().replace(/^@/, ''); 40 40 if (!handle) { 41 - deps.usernameInput.setCustomValidity('Enter your Bluesky handle'); 41 + deps.usernameInput.setCustomValidity('Enter your Bluesky handle (e.g. you.bsky.social)'); 42 42 deps.usernameInput.reportValidity(); 43 43 return; 44 44 }