···7171// Start begins the profile watcher in a background goroutine. It will reconnect
7272// automatically on failure, rotating through endpoints with exponential backoff.
7373func (pw *ProfileWatcher) Start(ctx context.Context) {
7474- pw.wg.Add(1)
7575- go func() {
7676- defer pw.wg.Done()
7474+ pw.wg.Go(func() {
7775 pw.run(ctx)
7878- }()
7676+ })
7977}
80788179// Stop gracefully shuts down the watcher.
+3-3
internal/handlers/recipe.go
···782782 return si > sj
783783 })
784784785785- // Take top 6
786786- if len(recipes) > 6 {
787787- recipes = recipes[:6]
785785+ const maxRecipes = 3
786786+ if len(recipes) > maxRecipes {
787787+ recipes = recipes[:maxRecipes]
788788 }
789789790790 if err := components.PopularRecipes(components.PopularRecipesProps{
+1-4
internal/ogcard/entities.go
···991010// entityStartY computes the starting Y to vertically center contentH within the card.
1111func entityStartY(contentH int) int {
1212- y := (brandBarY - contentH) / 2
1313- if y < 30 {
1414- y = 30
1515- }
1212+ y := max((brandBarY-contentH)/2, 30)
1613 return y
1714}
1815
···11package components
2233import (
44- "tangled.org/arabica.social/arabica/internal/models"
54 "fmt"
65 "strings"
66+ "tangled.org/arabica.social/arabica/internal/models"
77)
8899// IncompleteRecord represents a single entity that needs attention
+1-1
internal/web/components/popular_recipes.templ
···11package components
2233import (
44- "tangled.org/arabica.social/arabica/internal/models"
54 "fmt"
55+ "tangled.org/arabica.social/arabica/internal/models"
66)
7788// PopularRecipesProps defines the data for the popular recipes section
+1-1
internal/web/components/profile_brew_card.templ
···11package components
2233import (
44+ "fmt"
45 "tangled.org/arabica.social/arabica/internal/atproto"
56 "tangled.org/arabica.social/arabica/internal/models"
67 "tangled.org/arabica.social/arabica/internal/web/bff"
77- "fmt"
88)
991010// ProfileBrewCardProps defines props for a single brew card on profile