@@ -9,25 +9,25 @@ import (
99)
1010
1111// BuildBlocks creates Slack Block Kit UI for the home dashboard.
12- // Design: Craigslist meets Apple - minimal, clean, functional .
12+ // Design matches dashboard at https://ready-to-review.dev - modern minimal with indigo accents .
1313func BuildBlocks (dashboard * Dashboard , primaryOrg string ) []slack.Block {
1414 var blocks []slack.Block
1515
16- // Header
16+ // Header - matches dashboard's gradient header
1717 blocks = append (blocks ,
1818 slack .NewHeaderBlock (
19- slack .NewTextBlockObject ("plain_text" , "Ready to Review" , false , false ),
19+ slack .NewTextBlockObject ("plain_text" , "🚀 Ready to Review" , false , false ),
2020 ),
2121 )
2222
2323 counts := dashboard .Counts ()
2424
25- // Incoming section
25+ // Incoming section - matches dashboard's card-based sections
2626 blocks = append (blocks ,
2727 slack .NewDividerBlock (),
2828 slack .NewSectionBlock (
2929 slack .NewTextBlockObject ("mrkdwn" ,
30- fmt .Sprintf ("*INCOMING* ( %d blocked, %d total) " ,
30+ fmt .Sprintf ("*🪿 Incoming PRs* • %d blocked • %d total" ,
3131 counts .IncomingBlocked ,
3232 counts .IncomingTotal ),
3333 false ,
@@ -52,12 +52,12 @@ func BuildBlocks(dashboard *Dashboard, primaryOrg string) []slack.Block {
5252 }
5353 }
5454
55- // Outgoing section
55+ // Outgoing section - matches dashboard's card-based sections
5656 blocks = append (blocks ,
5757 slack .NewDividerBlock (),
5858 slack .NewSectionBlock (
5959 slack .NewTextBlockObject ("mrkdwn" ,
60- fmt .Sprintf ("*OUTGOING* ( %d blocked, %d total) " ,
60+ fmt .Sprintf ("*:popper: Outgoing PRs* • %d blocked • %d total" ,
6161 counts .OutgoingBlocked ,
6262 counts .OutgoingTotal ),
6363 false ,
@@ -82,13 +82,13 @@ func BuildBlocks(dashboard *Dashboard, primaryOrg string) []slack.Block {
8282 }
8383 }
8484
85- // Footer with link to comprehensive web dashboard
85+ // Footer with link to comprehensive web dashboard - matches dashboard styling
8686 blocks = append (blocks ,
8787 slack .NewDividerBlock (),
8888 slack .NewContextBlock (
8989 "" ,
9090 slack .NewTextBlockObject ("mrkdwn" ,
91- fmt .Sprintf ("For a more comprehensive view, visit <%s|%s.ready-to-review.dev>" ,
91+ fmt .Sprintf ("✨ Visit <%s|%s.ready-to-review.dev> for the full dashboard experience " ,
9292 fmt .Sprintf ("https://%s.ready-to-review.dev" , primaryOrg ),
9393 primaryOrg ,
9494 ),
@@ -102,14 +102,16 @@ func BuildBlocks(dashboard *Dashboard, primaryOrg string) []slack.Block {
102102}
103103
104104// formatPRBlock formats a single PR as a Slack block.
105+ // Matches dashboard's card design with clean hierarchy.
105106func formatPRBlock (pr * PR ) slack.Block {
106- // Determine emoji prefix based on blocking status
107- emoji := "•"
107+ // Status emoji - matches dashboard's visual indicators
108+ // Using indigo/purple themed emojis to match dashboard color scheme
109+ emoji := "🔵" // normal state (matches dashboard's indigo)
108110 if pr .IsBlocked || pr .NeedsReview {
109- emoji = "■"
111+ emoji = "🟣" // blocked/needs attention (matches dashboard's purple accent)
110112 }
111113
112- // Build PR line: ■ repo#number — action • age
114+ // Build PR line: 🟣 repo#number — action • age
113115 // Extract repo name from "owner/repo"
114116 repoParts := strings .SplitN (pr .Repository , "/" , 2 )
115117 repo := pr .Repository
@@ -118,25 +120,25 @@ func formatPRBlock(pr *PR) slack.Block {
118120 }
119121 prRef := fmt .Sprintf ("%s#%d" , repo , pr .Number )
120122
121- line := fmt .Sprintf ("%s <%s|%s >" , emoji , pr .URL , prRef )
123+ line := fmt .Sprintf ("%s <%s|*%s* >" , emoji , pr .URL , prRef )
122124
123- // Add action kind if present
125+ // Add action kind if present - matches dashboard's secondary text style
124126 if pr .ActionKind != "" {
125127 actionDisplay := strings .ReplaceAll (pr .ActionKind , "_" , " " )
126- line = fmt .Sprintf ("%s — %s" , line , actionDisplay )
128+ line = fmt .Sprintf ("%s → %s" , line , actionDisplay )
127129 }
128130
129- // Add age
131+ // Add age - matches dashboard's tertiary text style
130132 age := formatAge (pr .UpdatedAt )
131- line = fmt .Sprintf ("%s • %s " , line , age )
133+ line = fmt .Sprintf ("%s • `%s` " , line , age )
132134
133- // Title as secondary line (truncated if too long)
135+ // Title as secondary line (truncated if too long) - matches dashboard's card content
134136 title := pr .Title
135137 if len (title ) > 100 {
136138 title = title [:97 ] + "..."
137139 }
138140
139- text := fmt .Sprintf ("%s\n _%s_ " , line , title )
141+ text := fmt .Sprintf ("%s\n %s " , line , title )
140142
141143 return slack .NewSectionBlock (
142144 slack .NewTextBlockObject ("mrkdwn" , text , false , false ),
0 commit comments