Highly ambitious ATProtocol AppView service and sdks
0
fork

Configure Feed

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

fix title copy

+203 -61
+8 -4
frontend/src/features/landing/handlers.tsx
··· 25 25 ogImage: ogImageUrl, 26 26 }), 27 27 { 28 - title: "Slice - Build AT Protocol AppViews in minutes, not months", 28 + title: "Slices - Build AT Protocol AppViews in minutes, not months", 29 29 description: 30 30 "The complete backend platform for AT Protocol developers. Deploy schemas, query indexed data, authenticate users. Everything you need to ship your AppView.", 31 - }, 31 + } 32 32 ); 33 33 } 34 34 ··· 38 38 // In production (Docker), the working directory is /app, so fonts are at /app/frontend/src/fonts 39 39 // In development, we're already in the frontend directory, so fonts are at ./src/fonts 40 40 const isDevelopment = Deno.env.get("DENO_ENV") !== "production"; 41 - const fontPath = isDevelopment ? "./src/fonts/InterVariable.ttf" : "./frontend/src/fonts/InterVariable.ttf"; 41 + const fontPath = isDevelopment 42 + ? "./src/fonts/InterVariable.ttf" 43 + : "./frontend/src/fonts/InterVariable.ttf"; 42 44 const fontBuffer = await Deno.readFile(fontPath); 43 45 44 46 const fonts = [ ··· 72 74 }, 73 75 }); 74 76 } catch (error) { 75 - return new Response(`Error generating image: ${error.message}`, { status: 500 }); 77 + return new Response(`Error generating image: ${error.message}`, { 78 + status: 500, 79 + }); 76 80 } 77 81 } 78 82
+195 -57
frontend/src/features/landing/templates/LandingPage.tsx
··· 50 50 }); 51 51 return ( 52 52 <Layout 53 - title="Slice - Build AT Protocol AppViews in minutes, not months" 53 + title="Slices - Build AT Protocol AppViews in minutes, not months" 54 54 description="The complete backend platform for AT Protocol developers. Deploy schemas, query indexed data, authenticate users. Everything you need to ship your AppView." 55 55 ogImage={ogImage} 56 56 currentUser={currentUser} ··· 58 58 <div className="px-4 py-8"> 59 59 {/* Hero Section */} 60 60 <div className="text-center mb-16"> 61 - <Text as="h1" size="3xl" className="text-4xl md:text-6xl font-bold text-zinc-900 dark:text-white mb-6"> 62 - Build AT Protocol AppViews<a href="https://bsky.app/profile/pfrazee.com/post/3lyucxfxq622w" className="text-blue-600 dark:text-blue-400 text-4xl align-super no-underline hover:underline" target="_blank" rel="noopener noreferrer">*</a><br /> 63 - <span className="text-blue-600 dark:text-blue-400">in minutes, not months.</span> 61 + <Text 62 + as="h1" 63 + size="3xl" 64 + className="text-4xl md:text-6xl font-bold text-zinc-900 dark:text-white mb-6" 65 + > 66 + Build AT Protocol AppViews 67 + <a 68 + href="https://bsky.app/profile/pfrazee.com/post/3lyucxfxq622w" 69 + className="text-blue-600 dark:text-blue-400 text-4xl align-super no-underline hover:underline" 70 + target="_blank" 71 + rel="noopener noreferrer" 72 + > 73 + * 74 + </a> 75 + <br /> 76 + <span className="text-blue-600 dark:text-blue-400"> 77 + in minutes, not months. 78 + </span> 64 79 </Text> 65 - <Text as="p" size="xl" variant="secondary" className="mb-8 max-w-2xl mx-auto"> 80 + <Text 81 + as="p" 82 + size="xl" 83 + variant="secondary" 84 + className="mb-8 max-w-2xl mx-auto" 85 + > 66 86 The complete backend platform for{" "} 67 - <a href="https://atproto.com" className="text-blue-600 dark:text-blue-400 underline">AT Protocol</a> developers. 68 - Deploy schemas, query indexed data, authenticate users. 87 + <a 88 + href="https://atproto.com" 89 + className="text-blue-600 dark:text-blue-400 underline" 90 + > 91 + AT Protocol 92 + </a>{" "} 93 + developers. Deploy schemas, query indexed data, authenticate users. 69 94 </Text> 70 - <Text as="p" size="lg" variant="muted" className="mb-8 max-w-3xl mx-auto"> 71 - Skip the infrastructure. Focus on your app logic. Everything you need 72 - to ship production AppViews with type-safe APIs and automatic indexing. 95 + <Text 96 + as="p" 97 + size="lg" 98 + variant="muted" 99 + className="mb-8 max-w-3xl mx-auto" 100 + > 101 + Skip the infrastructure. Focus on your app logic. Everything you 102 + need to ship production AppViews with type-safe APIs and automatic 103 + indexing. 73 104 </Text> 74 105 <Button variant="blue" size="lg" href="/waitlist"> 75 106 Ship your AppView → ··· 79 110 {/* Features Section */} 80 111 <div className="mb-16"> 81 112 <div className="max-w-6xl mx-auto"> 82 - 83 113 {/* Feature 1: Auto-Indexing Engine */} 84 114 <div className="grid md:grid-cols-2 gap-12 items-center mb-20"> 85 115 <div> 86 - <Text as="h2" size="3xl" className="font-bold text-zinc-900 dark:text-white mb-4"> 116 + <Text 117 + as="h2" 118 + size="3xl" 119 + className="font-bold text-zinc-900 dark:text-white mb-4" 120 + > 87 121 Auto-Indexing Engine 88 122 </Text> 89 - <Text as="p" size="xl" className="text-blue-600 dark:text-blue-400 mb-6"> 123 + <Text 124 + as="p" 125 + size="xl" 126 + className="text-blue-600 dark:text-blue-400 mb-6" 127 + > 90 128 Real-time data sync from the AT Protocol network. 91 129 </Text> 92 - <Text as="p" size="lg" variant="muted" className="leading-relaxed"> 93 - Automatically discover and index records matching your lexicons. Connected to the firehose 94 - to keep your data fresh. 130 + <Text 131 + as="p" 132 + size="lg" 133 + variant="muted" 134 + className="leading-relaxed" 135 + > 136 + Automatically discover and index records matching your 137 + lexicons. Connected to the firehose to keep your data fresh. 95 138 </Text> 96 139 </div> 97 140 <div className="bg-zinc-100 dark:bg-zinc-800 rounded-lg overflow-hidden border border-zinc-200 dark:border-zinc-700"> ··· 117 160 /> 118 161 </div> 119 162 <div> 120 - <Text as="h2" size="3xl" className="font-bold text-zinc-900 dark:text-white mb-4"> 163 + <Text 164 + as="h2" 165 + size="3xl" 166 + className="font-bold text-zinc-900 dark:text-white mb-4" 167 + > 121 168 Type-Safe APIs 122 169 </Text> 123 - <Text as="p" size="xl" className="text-blue-600 dark:text-blue-400 mb-6"> 170 + <Text 171 + as="p" 172 + size="xl" 173 + className="text-blue-600 dark:text-blue-400 mb-6" 174 + > 124 175 Generated clients with collection methods. 125 176 </Text> 126 - <Text as="p" size="lg" variant="muted" className="leading-relaxed"> 127 - From lexicon to production code in seconds. Get fully-typed getRecords(), createRecord(), 128 - updateRecord(), and deleteRecord() methods with filtering, sorting, and pagination. 129 - Complete with project templates for popular frameworks and CLI tools to scaffold your AppView. 130 - Complex infrastructure made simple. 177 + <Text 178 + as="p" 179 + size="lg" 180 + variant="muted" 181 + className="leading-relaxed" 182 + > 183 + From lexicon to production code in seconds. Get fully-typed 184 + getRecords(), createRecord(), updateRecord(), and 185 + deleteRecord() methods with filtering, sorting, and 186 + pagination. Complete with project templates for popular 187 + frameworks and CLI tools to scaffold your AppView. Complex 188 + infrastructure made simple. 131 189 </Text> 132 190 </div> 133 191 </div> ··· 135 193 {/* Feature 3: Lexicon Management */} 136 194 <div className="grid md:grid-cols-2 gap-12 items-center mb-20"> 137 195 <div> 138 - <Text as="h2" size="3xl" className="font-bold text-zinc-900 dark:text-white mb-4"> 196 + <Text 197 + as="h2" 198 + size="3xl" 199 + className="font-bold text-zinc-900 dark:text-white mb-4" 200 + > 139 201 Schema Management 140 202 </Text> 141 - <Text as="p" size="xl" className="text-blue-600 dark:text-blue-400 mb-6"> 203 + <Text 204 + as="p" 205 + size="xl" 206 + className="text-blue-600 dark:text-blue-400 mb-6" 207 + > 142 208 Define once, query everywhere. 143 209 </Text> 144 - <Text as="p" size="lg" variant="muted" className="leading-relaxed"> 145 - Configure lexicons that instantly become queryable collections. Built-in 146 - validation ensures your schemas work correctly from day one. Deploy and 147 - start querying immediately. 210 + <Text 211 + as="p" 212 + size="lg" 213 + variant="muted" 214 + className="leading-relaxed" 215 + > 216 + Configure lexicons that instantly become queryable 217 + collections. Built-in validation ensures your schemas work 218 + correctly from day one. Deploy and start querying immediately. 148 219 </Text> 149 220 </div> 150 221 <div className="bg-zinc-100 dark:bg-zinc-800 rounded-lg overflow-hidden border border-zinc-200 dark:border-zinc-700"> ··· 176 247 /> 177 248 </div> 178 249 <div> 179 - <Text as="h2" size="3xl" className="font-bold text-zinc-900 dark:text-white mb-4"> 250 + <Text 251 + as="h2" 252 + size="3xl" 253 + className="font-bold text-zinc-900 dark:text-white mb-4" 254 + > 180 255 User Authentication 181 256 </Text> 182 - <Text as="p" size="xl" className="text-blue-600 dark:text-blue-400 mb-6"> 257 + <Text 258 + as="p" 259 + size="xl" 260 + className="text-blue-600 dark:text-blue-400 mb-6" 261 + > 183 262 OAuth flows that just work. 184 263 </Text> 185 - <Text as="p" size="lg" variant="muted" className="leading-relaxed"> 186 - Production-ready authentication with OAuth 2.0 PKCE for web apps and 187 - Device Code Auth for CLI tools. Automatic token management, refresh handling, 188 - and secure session storage. Focus on features, not auth infrastructure. 264 + <Text 265 + as="p" 266 + size="lg" 267 + variant="muted" 268 + className="leading-relaxed" 269 + > 270 + Production-ready authentication with OAuth 2.0 PKCE for web 271 + apps and Device Code Auth for CLI tools. Automatic token 272 + management, refresh handling, and secure session storage. 273 + Focus on features, not auth infrastructure. 189 274 </Text> 190 275 </div> 191 276 </div> 192 - 193 277 </div> 194 278 </div> 195 279 196 280 {/* Production-Ready Operations */} 197 281 <div className="mb-16"> 198 282 <div className="text-center mb-12"> 199 - <Text as="h2" size="2xl" className="font-bold text-zinc-900 dark:text-white mb-4"> 283 + <Text 284 + as="h2" 285 + size="2xl" 286 + className="font-bold text-zinc-900 dark:text-white mb-4" 287 + > 200 288 Production-Ready Operations 201 289 </Text> 202 - <Text as="p" size="lg" variant="secondary" className="max-w-2xl mx-auto"> 203 - Everything you need to monitor, manage, and scale your AppView in production. 290 + <Text 291 + as="p" 292 + size="lg" 293 + variant="secondary" 294 + className="max-w-2xl mx-auto" 295 + > 296 + Everything you need to monitor, manage, and scale your AppView in 297 + production. 204 298 </Text> 205 299 </div> 206 300 ··· 210 304 <div className="w-8 h-8 text-blue-600 dark:text-blue-400 mb-3"> 211 305 <BarChart3 size={32} /> 212 306 </div> 213 - <Text as="h3" size="lg" className="font-semibold text-zinc-900 dark:text-white mb-2"> 307 + <Text 308 + as="h3" 309 + size="lg" 310 + className="font-semibold text-zinc-900 dark:text-white mb-2" 311 + > 214 312 Jetstream Logs 215 313 </Text> 216 314 <Text variant="muted" size="sm"> 217 - Real-time connection monitoring and detailed event logs for debugging and observability. 315 + Real-time connection monitoring and detailed event logs for 316 + debugging and observability. 218 317 </Text> 219 318 </div> 220 319 ··· 223 322 <div className="w-8 h-8 text-green-600 dark:text-green-400 mb-3"> 224 323 <RotateCcw size={32} /> 225 324 </div> 226 - <Text as="h3" size="lg" className="font-semibold text-zinc-900 dark:text-white mb-2"> 325 + <Text 326 + as="h3" 327 + size="lg" 328 + className="font-semibold text-zinc-900 dark:text-white mb-2" 329 + > 227 330 Data Backfill 228 331 </Text> 229 332 <Text variant="muted" size="sm"> 230 - Historical data synchronization and migration tools to populate your AppView from scratch. 333 + Historical data synchronization and migration tools to populate 334 + your AppView from scratch. 231 335 </Text> 232 336 </div> 233 337 ··· 236 340 <div className="w-8 h-8 text-orange-600 dark:text-orange-400 mb-3"> 237 341 <Users size={32} /> 238 342 </div> 239 - <Text as="h3" size="lg" className="font-semibold text-zinc-900 dark:text-white mb-2"> 343 + <Text 344 + as="h3" 345 + size="lg" 346 + className="font-semibold text-zinc-900 dark:text-white mb-2" 347 + > 240 348 Waitlist Management 241 349 </Text> 242 350 <Text variant="muted" size="sm"> 243 - User onboarding and access control workflows for managing early access and beta testing. 351 + User onboarding and access control workflows for managing early 352 + access and beta testing. 244 353 </Text> 245 354 </div> 246 355 ··· 249 358 <div className="w-8 h-8 text-purple-600 dark:text-purple-400 mb-3"> 250 359 <Search size={32} /> 251 360 </div> 252 - <Text as="h3" size="lg" className="font-semibold text-zinc-900 dark:text-white mb-2"> 361 + <Text 362 + as="h3" 363 + size="lg" 364 + className="font-semibold text-zinc-900 dark:text-white mb-2" 365 + > 253 366 Record Explorer 254 367 </Text> 255 368 <Text variant="muted" size="sm"> 256 - Visual query interface with advanced filtering, search, and data exploration capabilities. 369 + Visual query interface with advanced filtering, search, and data 370 + exploration capabilities. 257 371 </Text> 258 372 </div> 259 - 260 373 </div> 261 374 </div> 262 375 263 376 {/* Social Platform Section */} 264 377 <div className="mb-16"> 265 378 <div className="text-center mb-12"> 266 - <Text as="h2" size="2xl" className="font-bold text-zinc-900 dark:text-white mb-4"> 379 + <Text 380 + as="h2" 381 + size="2xl" 382 + className="font-bold text-zinc-900 dark:text-white mb-4" 383 + > 267 384 Built for Collaboration 268 385 </Text> 269 - <Text as="p" size="lg" variant="secondary" className="max-w-2xl mx-auto"> 270 - Share lexicons, discover AppViews, and learn from the community timeline. 386 + <Text 387 + as="p" 388 + size="lg" 389 + variant="secondary" 390 + className="max-w-2xl mx-auto" 391 + > 392 + Share lexicons, discover AppViews, and learn from the community 393 + timeline. 271 394 </Text> 272 395 </div> 273 396 ··· 279 402 <BarChart3 size={24} /> 280 403 </div> 281 404 </div> 282 - <Text as="h3" size="lg" className="font-semibold text-zinc-900 dark:text-white mb-2"> 405 + <Text 406 + as="h3" 407 + size="lg" 408 + className="font-semibold text-zinc-900 dark:text-white mb-2" 409 + > 283 410 Community Timeline 284 411 </Text> 285 412 <Text variant="muted" size="sm"> 286 - See what other developers are building. Get inspired by new lexicons and AppView implementations. 413 + See what other developers are building. Get inspired by new 414 + lexicons and AppView implementations. 287 415 </Text> 288 416 </div> 289 417 ··· 294 422 <Users size={24} /> 295 423 </div> 296 424 </div> 297 - <Text as="h3" size="lg" className="font-semibold text-zinc-900 dark:text-white mb-2"> 425 + <Text 426 + as="h3" 427 + size="lg" 428 + className="font-semibold text-zinc-900 dark:text-white mb-2" 429 + > 298 430 Lexicon Discovery 299 431 </Text> 300 432 <Text variant="muted" size="sm"> 301 - Browse and fork community lexicons. Build on proven schemas instead of starting from scratch. 433 + Browse and fork community lexicons. Build on proven schemas 434 + instead of starting from scratch. 302 435 </Text> 303 436 </div> 304 437 ··· 309 442 <Search size={24} /> 310 443 </div> 311 444 </div> 312 - <Text as="h3" size="lg" className="font-semibold text-zinc-900 dark:text-white mb-2"> 445 + <Text 446 + as="h3" 447 + size="lg" 448 + className="font-semibold text-zinc-900 dark:text-white mb-2" 449 + > 313 450 Learn & Share 314 451 </Text> 315 452 <Text variant="muted" size="sm"> 316 - Documentation, tutorials, and best practices shared by the community. Level up your AT Protocol skills. 453 + Documentation, tutorials, and best practices shared by the 454 + community. Level up your AT Protocol skills. 317 455 </Text> 318 456 </div> 319 457 </div>