A simple tool which lets you scrape twitter accounts and crosspost them to bluesky accounts! Comes with a CLI and a webapp for managing profiles! Works with images/videos/link embeds/threads.
13
fork

Configure Feed

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

ui: enhance Add Account form to easily reuse existing bsky accounts

jack ddfed152 a11fb300

+32 -11
+32 -11
public/index.html
··· 416 416 </h5> 417 417 <form onSubmit={addMapping}> 418 418 <div className="mb-2"> 419 - <input name="owner" placeholder="Owner" className="form-control form-control-sm" required /> 419 + <input name="owner" placeholder="Owner (e.g. My Brand)" className="form-control form-control-sm" required /> 420 420 </div> 421 421 <div className="mb-2"> 422 - <input name="twitterUsername" placeholder="Twitter" className="form-control form-control-sm" required /> 422 + <input name="twitterUsername" placeholder="Twitter Username" className="form-control form-control-sm" required /> 423 423 </div> 424 - <hr className="my-2"/> 425 - <div className="mb-2"> 426 - <input name="bskyIdentifier" placeholder="Bluesky" className="form-control form-control-sm" required /> 427 - </div> 428 - <div className="mb-2"> 429 - <input name="bskyPassword" type="password" placeholder="App Password" className="form-control form-control-sm" required /> 430 - </div> 431 - <div className="mb-3"> 424 + 425 + <div className="mt-3 mb-2"> 426 + <label className="form-label small fw-bold text-muted">Bluesky Destination</label> 427 + {mappings.length > 0 && ( 428 + <div className="mb-2"> 429 + <select 430 + className="form-select form-select-sm" 431 + onChange={(e) => { 432 + if (e.target.value) { 433 + const m = mappings.find(x => x.bskyIdentifier === e.target.value); 434 + if (m) { 435 + const form = e.target.form; 436 + form.bskyIdentifier.value = m.bskyIdentifier; 437 + form.bskyPassword.value = m.bskyPassword; 438 + form.bskyServiceUrl.value = m.bskyServiceUrl; 439 + } 440 + } 441 + }} 442 + > 443 + <option value="">-- Use Existing Bluesky Account --</option> 444 + {[...new Set(mappings.map(m => m.bskyIdentifier))].map(id => ( 445 + <option key={id} value={id}>{id}</option> 446 + ))} 447 + </select> 448 + </div> 449 + )} 450 + <input name="bskyIdentifier" placeholder="Bluesky Handle" className="form-control form-control-sm mb-2" required /> 451 + <input name="bskyPassword" type="password" placeholder="App Password" className="form-control form-control-sm mb-2" required /> 432 452 <input name="bskyServiceUrl" defaultValue="https://bsky.social" className="form-control form-control-sm" /> 433 453 </div> 454 + 434 455 <button className="btn btn-success btn-sm w-100" disabled={loading}> 435 - {loading ? 'Adding...' : 'Add'} 456 + {loading ? 'Adding...' : 'Add Account Mapping'} 436 457 </button> 437 458 </form> 438 459 </div>