Retro Bulletin Board Systems on atproto. Web app and TUI. lazy mirror of alyraffauf/atbbs atbbs.xyz
forums python tui atproto bbs
3
fork

Configure Feed

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

web: fixup strings

+20 -20
+1 -1
web/src/components/BBSPanel.tsx
··· 15 15 return ( 16 16 <> 17 17 <p className="text-neutral-400 mb-4"> 18 - You haven't set up a BBS yet. 18 + No BBS yet. 19 19 </p> 20 20 <ActionLink to="/account/create">create a bbs</ActionLink> 21 21 </>
+1 -1
web/src/components/MyThreadList.tsx
··· 13 13 const [shown, setShown] = useState(PAGE_SIZE); 14 14 15 15 if (threads.length === 0) 16 - return <p className="text-neutral-400">You haven't posted any threads yet.</p>; 16 + return <p className="text-neutral-400">No threads yet.</p>; 17 17 18 18 return ( 19 19 <div>
+1 -1
web/src/components/PinnedList.tsx
··· 14 14 if (pins.length === 0) 15 15 return ( 16 16 <p className="text-neutral-400"> 17 - No pinned BBSes yet. Visit a BBS and pin it to see it here. 17 + No pinned BBSes yet. 18 18 </p> 19 19 ); 20 20
+2 -2
web/src/pages/Board.tsx
··· 98 98 navigate(`/bbs/${handle}/thread/${did}/${rkey}`); 99 99 } catch (err: unknown) { 100 100 console.error("createThread failed:", err); 101 - alert(`Failed to post: ${err instanceof Error ? err.message : err}`); 101 + alert(`Could not post: ${err instanceof Error ? err.message : err}`); 102 102 } 103 103 } 104 104 ··· 153 153 disabled={loadingMore} 154 154 className="text-neutral-400 hover:text-neutral-300" 155 155 > 156 - {loadingMore ? "loading…" : "next page →"} 156 + {loadingMore ? "loading..." : "next page →"} 157 157 </button> 158 158 </div> 159 159 )}
+1 -1
web/src/pages/Dashboard.tsx
··· 83 83 { key: "bbs", label: "My BBS" }, 84 84 ]; 85 85 86 - const loading = <p className="text-neutral-400">Loading...</p>; 86 + const loading = <p className="text-neutral-400">loading...</p>; 87 87 88 88 return ( 89 89 <>
+1 -1
web/src/pages/Login.tsx
··· 24 24 try { 25 25 await login(handle.trim()); 26 26 } catch (err: unknown) { 27 - setError(err instanceof Error ? err.message : "Login failed."); 27 + setError(err instanceof Error ? err.message : "Could not log in."); 28 28 setBusy(false); 29 29 } 30 30 }
+2 -2
web/src/pages/OAuthCallback.tsx
··· 15 15 }) 16 16 .catch((e) => { 17 17 console.error(e); 18 - setError(e?.message ?? "Sign-in failed."); 18 + setError(e?.message ?? "Could not sign in."); 19 19 }); 20 20 }, [navigate]); 21 21 22 22 if (error) return <p className="text-red-400">{error}</p>; 23 - return <p className="text-neutral-400">Signing in…</p>; 23 + return <p className="text-neutral-400">signing in...</p>; 24 24 }
+1 -1
web/src/pages/Profile.tsx
··· 49 49 Recent Threads 50 50 </p> 51 51 <Suspense 52 - fallback={<p className="text-neutral-400">Loading...</p>} 52 + fallback={<p className="text-neutral-400">loading...</p>} 53 53 > 54 54 <Await resolve={threads}> 55 55 {(resolved: MyThread[]) => (
+3 -3
web/src/pages/SysopCreate.tsx
··· 69 69 {error && <p className="text-red-500 mb-4">{error}</p>} 70 70 <form onSubmit={onSubmit} className="space-y-6"> 71 71 <div> 72 - <label className="block text-neutral-400 mb-1">BBS Name</label> 72 + <label className="text-xs text-neutral-400 uppercase tracking-wide">BBS Name</label> 73 73 <Input 74 74 name="name" 75 75 required ··· 80 80 /> 81 81 </div> 82 82 <div> 83 - <label className="block text-neutral-400 mb-1">Description</label> 83 + <label className="text-xs text-neutral-400 uppercase tracking-wide">Description</label> 84 84 <Input 85 85 name="description" 86 86 value={description} ··· 90 90 /> 91 91 </div> 92 92 <div> 93 - <label className="block text-neutral-400 mb-1">Welcome Message</label> 93 + <label className="text-xs text-neutral-400 uppercase tracking-wide">Welcome Message</label> 94 94 <Textarea 95 95 name="intro" 96 96 rows={6}
+4 -4
web/src/pages/SysopEdit.tsx
··· 70 70 {error && <p className="text-red-500 mb-4">{error}</p>} 71 71 <form onSubmit={onSubmit} className="space-y-6"> 72 72 <div> 73 - <label className="block text-neutral-400 mb-1">BBS Name</label> 73 + <label className="text-xs text-neutral-400 uppercase tracking-wide">BBS Name</label> 74 74 <Input 75 75 name="name" 76 76 required ··· 80 80 /> 81 81 </div> 82 82 <div> 83 - <label className="block text-neutral-400 mb-1">Description</label> 83 + <label className="text-xs text-neutral-400 uppercase tracking-wide">Description</label> 84 84 <Input 85 85 name="description" 86 86 value={description} ··· 89 89 /> 90 90 </div> 91 91 <div> 92 - <label className="block text-neutral-400 mb-1">Welcome Message</label> 92 + <label className="text-xs text-neutral-400 uppercase tracking-wide">Welcome Message</label> 93 93 <Textarea 94 94 name="intro" 95 95 rows={6} ··· 99 99 /> 100 100 </div> 101 101 <BoardRowEditor boards={boards} onChange={setBoards} /> 102 - <Button type="submit">save changes</Button> 102 + <Button type="submit">save</Button> 103 103 </form> 104 104 </> 105 105 );
+3 -3
web/src/pages/Thread.tsx
··· 104 104 setFiles([]); 105 105 setQuote(null); 106 106 } catch { 107 - alert("Failed to post reply."); 107 + alert("Could not post reply."); 108 108 } finally { 109 109 setPosting(false); 110 110 } ··· 124 124 await deleteRecord(agent, REPLY, reply.rkey); 125 125 } catch (e: unknown) { 126 126 console.error("deleteRecord failed:", e); 127 - alert(`Failed to delete: ${e instanceof Error ? e.message : e}`); 127 + alert(`Could not delete: ${e instanceof Error ? e.message : e}`); 128 128 return; 129 129 } 130 130 removeReply(reply.uri); ··· 162 162 163 163 <div className="space-y-2 mt-4"> 164 164 {loadingPage ? ( 165 - <p className="text-neutral-400">Loading replies...</p> 165 + <p className="text-neutral-400">loading...</p> 166 166 ) : replies.length === 0 && !user ? ( 167 167 <p className="text-neutral-400">No replies yet.</p> 168 168 ) : (