Coffee journaling on ATProto (alpha) alpha.arabica.social
coffee
17
fork

Configure Feed

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

feat: add additional pds providers to create page

+80 -27
+80 -27
internal/web/pages/create_account.templ
··· 13 13 BadgeColor string // Tailwind color prefix for badge (e.g. "amber", "green") 14 14 OperatorName string // Optional: handle of community operator (e.g. "@baileytownsend.dev") 15 15 OperatorURL string // Optional: link to operator profile 16 + SignupURL string // Optional: if set, link directly to this URL instead of using prompt=create 16 17 } 17 18 18 19 // PDSCategory groups providers under a heading. ··· 38 39 Badge: "Invite Only", 39 40 BadgeColor: "amber", 40 41 }, 42 + { 43 + URL: "https://bsky.social", 44 + Name: "Bluesky", 45 + Domain: "bsky.social", 46 + Description: "The largest AT Protocol provider.", 47 + Location: "United States", 48 + Badge: "Open", 49 + BadgeColor: "green", 50 + SignupURL: "https://bsky.app", 51 + }, 52 + // { 53 + // URL: "https://tngl.sh", 54 + // Name: "Tangled", 55 + // Domain: "tngl.sh", 56 + // Description: "Developer-focused AT Protocol hosting.", 57 + // Location: "Europe", 58 + // Badge: "Open", 59 + // BadgeColor: "green", 60 + // SignupURL: "https://tangled.sh", 61 + // }, 62 + { 63 + URL: "https://npmx.social", 64 + Name: "npmx", 65 + Domain: "npmx.social", 66 + Description: "Developer-focused Community provider.", 67 + Location: "Europe", 68 + Badge: "Open", 69 + BadgeColor: "green", 70 + SignupURL: "https://npmx.social", 71 + }, 41 72 }, 42 73 }, 43 74 { ··· 54 85 BadgeColor: "green", 55 86 OperatorName: "@baileytownsend.dev", 56 87 OperatorURL: "https://bsky.app/profile/baileytownsend.dev", 88 + }, 89 + { 90 + URL: "https://eurosky.social", 91 + Name: "Eurosky", 92 + Domain: "eurosky.social", 93 + Description: "Sovereign European AT Protocol hosting.", 94 + Location: "Europe", 95 + Badge: "Open", 96 + BadgeColor: "green", 97 + SignupURL: "https://portal.eurosky.tech/create-account", 57 98 }, 58 99 }, 59 100 }, ··· 118 159 // pdsCard renders a PDS server option card with a sign-up button. 119 160 templ pdsCard(p PDSProvider) { 120 161 <div class="card card-inner"> 121 - <form method="POST" action="/join/create"> 122 - <input type="hidden" name="pds_url" value={ p.URL }/> 123 - <p class="flex items-baseline gap-2 text-lg font-semibold text-brown-900"> 124 - { p.Name } 125 - <span class={ "relative -top-px inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium", "bg-" + p.BadgeColor + "-100", "text-" + p.BadgeColor + "-800" }> 126 - { p.Badge } 127 - </span> 128 - </p> 129 - <p class="text-sm text-brown-700"> 130 - { p.Description } 131 - if p.OperatorName != "" { 132 - { " hosted by " } 133 - <a href={ templ.SafeURL(p.OperatorURL) } target="_blank" rel="noopener noreferrer" class="link-bold">{ p.OperatorName }</a>. 134 - } 135 - </p> 136 - <p class="flex items-center gap-1 text-xs text-brown-500"> 137 - { p.Domain } · 138 - @locationPin() 139 - { p.Location } 140 - </p> 141 - <div class="mt-3"> 142 - @components.PrimaryButton(components.ButtonProps{ 143 - Text: "Create Account", 144 - Type: "submit", 145 - }) 146 - </div> 147 - </form> 162 + @pdsCardInfo(p) 163 + <div class="mt-3"> 164 + if p.SignupURL != "" { 165 + <a href={ templ.SafeURL(p.SignupURL) } target="_blank" rel="noopener noreferrer"> 166 + @components.PrimaryButton(components.ButtonProps{ 167 + Text: "Create Account", 168 + }) 169 + </a> 170 + } else { 171 + <form method="POST" action="/join/create"> 172 + <input type="hidden" name="pds_url" value={ p.URL }/> 173 + @components.PrimaryButton(components.ButtonProps{ 174 + Text: "Create Account", 175 + Type: "submit", 176 + }) 177 + </form> 178 + } 179 + </div> 148 180 </div> 149 181 } 182 + 183 + templ pdsCardInfo(p PDSProvider) { 184 + <p class="flex items-baseline gap-2 text-lg font-semibold text-brown-900"> 185 + { p.Name } 186 + <span class={ "relative -top-px inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium", "bg-" + p.BadgeColor + "-100", "text-" + p.BadgeColor + "-800" }> 187 + { p.Badge } 188 + </span> 189 + </p> 190 + <p class="text-sm text-brown-700"> 191 + { p.Description } 192 + if p.OperatorName != "" { 193 + { " hosted by " } 194 + <a href={ templ.SafeURL(p.OperatorURL) } target="_blank" rel="noopener noreferrer" class="link-bold">{ p.OperatorName }</a>. 195 + } 196 + </p> 197 + <p class="flex items-center gap-1 text-xs text-brown-500"> 198 + { p.Domain } · 199 + @locationPin() 200 + { p.Location } 201 + </p> 202 + }