Skip to content

Commit 73d2e19

Browse files
committed
✨ Enhance App Home UI with emojis and improved layout
## Changes - Add emojis to all section headers for visual consistency - Redesign Birthday Statistics with 2-column fields layout - Improve user preferences display with visual indicators - Add emojis to buttons and empty states - Clarify statistics text (e.g., "10 birthdays" instead of "(10)") - Use consistent bullet formatting with em-dashes ## Files Modified - handlers/app_home.py
1 parent a01b201 commit 73d2e19

File tree

1 file changed

+71
-48
lines changed

1 file changed

+71
-48
lines changed

handlers/app_home.py

Lines changed: 71 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def _build_home_view(user_id, app):
8585
blocks = []
8686

8787
# Header
88-
blocks.append({"type": "header", "text": {"type": "plain_text", "text": "BrightDayBot"}})
88+
blocks.append({"type": "header", "text": {"type": "plain_text", "text": "🎉 BrightDayBot"}})
8989

9090
blocks.append(
9191
{
@@ -103,7 +103,7 @@ def _build_home_view(user_id, app):
103103
blocks.append(
104104
{
105105
"type": "section",
106-
"text": {"type": "mrkdwn", "text": "*Your Birthday Status*"},
106+
"text": {"type": "mrkdwn", "text": "*🎂 Your Birthday Status*"},
107107
}
108108
)
109109

@@ -113,12 +113,12 @@ def _build_home_view(user_id, app):
113113
age = calculate_age(user_birthday["year"]) if user_birthday.get("year") else None
114114

115115
fields = [
116-
{"type": "mrkdwn", "text": f"*Birthday:*\n{date_words}"},
117-
{"type": "mrkdwn", "text": f"*Star Sign:*\n{star_sign}"},
116+
{"type": "mrkdwn", "text": f"📅 *Birthday*\n{date_words}"},
117+
{"type": "mrkdwn", "text": f"*Star Sign*\n{star_sign}"},
118118
]
119119

120120
if age:
121-
fields.append({"type": "mrkdwn", "text": f"*Age:*\n{age} years"})
121+
fields.append({"type": "mrkdwn", "text": f"🎈 *Age*\n{age} years"})
122122

123123
blocks.append({"type": "section", "fields": fields})
124124

@@ -133,12 +133,17 @@ def _build_home_view(user_id, app):
133133

134134
pref_items = []
135135
if is_active:
136-
pref_items.append("Celebrations: Active")
136+
pref_items.append(" Active")
137137
else:
138-
pref_items.append("Celebrations: Paused")
139-
pref_items.append(f"AI Images: {'On' if image_enabled else 'Off'}")
140-
pref_items.append(f"Show Age: {'Yes' if show_age else 'No'}")
141-
pref_items.append(f"Style: {celebration_style.title()}")
138+
pref_items.append("⏸️ Paused")
139+
pref_items.append(
140+
f"{'🖼️' if image_enabled else '📝'} {'Images On' if image_enabled else 'Text Only'}"
141+
)
142+
pref_items.append(
143+
f"{'🎂' if show_age else '🤫'} {'Age Shown' if show_age else 'Age Hidden'}"
144+
)
145+
style_emoji = {"quiet": "🤫", "standard": "🎊", "epic": "🚀"}.get(celebration_style, "🎊")
146+
pref_items.append(f"{style_emoji} {celebration_style.title()}")
142147

143148
blocks.append(
144149
{
@@ -154,13 +159,13 @@ def _build_home_view(user_id, app):
154159
"elements": [
155160
{
156161
"type": "button",
157-
"text": {"type": "plain_text", "text": "Edit Birthday"},
162+
"text": {"type": "plain_text", "text": "✏️ Edit Birthday", "emoji": True},
158163
"action_id": "open_birthday_modal",
159164
"style": "primary",
160165
},
161166
{
162167
"type": "button",
163-
"text": {"type": "plain_text", "text": "Remove Birthday"},
168+
"text": {"type": "plain_text", "text": "🗑️ Remove", "emoji": True},
164169
"action_id": "remove_birthday_confirm",
165170
"style": "danger",
166171
"confirm": {
@@ -182,7 +187,7 @@ def _build_home_view(user_id, app):
182187
"type": "section",
183188
"text": {
184189
"type": "mrkdwn",
185-
"text": "You haven't added your birthday yet!",
190+
"text": "🎈 You haven't added your birthday yet! Add it now to receive personalized celebrations.",
186191
},
187192
}
188193
)
@@ -194,7 +199,7 @@ def _build_home_view(user_id, app):
194199
"elements": [
195200
{
196201
"type": "button",
197-
"text": {"type": "plain_text", "text": "Add My Birthday"},
202+
"text": {"type": "plain_text", "text": "Add My Birthday", "emoji": True},
198203
"action_id": "open_birthday_modal",
199204
"style": "primary",
200205
}
@@ -208,7 +213,7 @@ def _build_home_view(user_id, app):
208213
blocks.append(
209214
{
210215
"type": "section",
211-
"text": {"type": "mrkdwn", "text": "*Upcoming Birthdays*"},
216+
"text": {"type": "mrkdwn", "text": "*🗓️ Upcoming Birthdays*"},
212217
}
213218
)
214219

@@ -217,13 +222,13 @@ def _build_home_view(user_id, app):
217222
birthday_lines = []
218223
for bday in upcoming:
219224
if bday["days_until"] == 0:
220-
days_text = "_Today!_ 🎂"
225+
days_text = "🎂 _Today!_"
221226
elif bday["days_until"] == 1:
222-
days_text = "_Tomorrow_"
227+
days_text = "🔜 _Tomorrow_"
223228
else:
224229
days_text = f"_in {bday['days_until']} days_"
225230

226-
birthday_lines.append(f"• <@{bday['user_id']}> ({bday['date']}) - {days_text}")
231+
birthday_lines.append(f"• <@{bday['user_id']}> ({bday['date']}) {days_text}")
227232

228233
blocks.append(
229234
{
@@ -240,7 +245,7 @@ def _build_home_view(user_id, app):
240245
"type": "section",
241246
"text": {
242247
"type": "mrkdwn",
243-
"text": "_No birthdays registered yet._",
248+
"text": "_No upcoming birthdays in the next few days._",
244249
},
245250
}
246251
)
@@ -252,48 +257,66 @@ def _build_home_view(user_id, app):
252257
blocks.append(
253258
{
254259
"type": "section",
255-
"text": {"type": "mrkdwn", "text": "*Birthday Statistics*"},
260+
"text": {"type": "mrkdwn", "text": "*📊 Birthday Statistics*"},
256261
}
257262
)
258263

259-
# Build stats text
260-
stats_lines = []
261-
stats_lines.append(f"*{stats['total']}* birthdays registered")
264+
# Build stats fields for 2-column layout
265+
stats_fields = [
266+
{
267+
"type": "mrkdwn",
268+
"text": f"🎂 *Total Registered*\n{stats['total']} birthdays",
269+
}
270+
]
262271

263272
if stats["this_week"] > 0:
264-
stats_lines.append(f"*{stats['this_week']}* birthday(s) this week")
273+
week_text = (
274+
"1 celebration" if stats["this_week"] == 1 else f"{stats['this_week']} celebrations"
275+
)
276+
stats_fields.append({"type": "mrkdwn", "text": f"📅 *This Week*\n{week_text}"})
277+
265278
if stats["this_month"] > 0:
266-
stats_lines.append(f"*{stats['this_month']}* birthday(s) in next 30 days")
279+
month_text = (
280+
"1 upcoming" if stats["this_month"] == 1 else f"{stats['this_month']} upcoming"
281+
)
282+
stats_fields.append({"type": "mrkdwn", "text": f"🗓️ *Next 30 Days*\n{month_text}"})
267283

268284
if stats["most_common_month"]:
269-
stats_lines.append(
270-
f"Most popular month: *{stats['most_common_month']}* ({stats['most_common_count']} birthdays)"
285+
count = stats["most_common_count"]
286+
count_text = "1 birthday" if count == 1 else f"{count} birthdays"
287+
stats_fields.append(
288+
{
289+
"type": "mrkdwn",
290+
"text": f"⭐ *Most Popular*\n{stats['most_common_month']} ({count_text})",
291+
}
271292
)
272293

273-
# Fun fact about empty months
294+
blocks.append({"type": "section", "fields": stats_fields})
295+
296+
# Fun fact about empty months as context
274297
if stats["empty_months"]:
275298
if len(stats["empty_months"]) == 1:
276-
stats_lines.append(f"No one born in {stats['empty_months'][0]} yet!")
299+
fun_fact = f"💡 No one born in {stats['empty_months'][0]} yet — be the first!"
277300
elif len(stats["empty_months"]) <= 3:
278-
stats_lines.append(f"No birthdays in: {', '.join(stats['empty_months'])}")
301+
fun_fact = f"💡 Missing birthdays in: {', '.join(stats['empty_months'])}"
302+
else:
303+
fun_fact = None
279304

280-
blocks.append(
281-
{
282-
"type": "section",
283-
"text": {
284-
"type": "mrkdwn",
285-
"text": "\n".join(f"• {line}" for line in stats_lines),
286-
},
287-
}
288-
)
305+
if fun_fact:
306+
blocks.append(
307+
{
308+
"type": "context",
309+
"elements": [{"type": "mrkdwn", "text": fun_fact}],
310+
}
311+
)
289312

290313
blocks.append({"type": "divider"})
291314

292315
# Upcoming Special Days
293316
blocks.append(
294317
{
295318
"type": "section",
296-
"text": {"type": "mrkdwn", "text": "*Upcoming Special Days*"},
319+
"text": {"type": "mrkdwn", "text": "*Upcoming Special Days*"},
297320
}
298321
)
299322

@@ -344,7 +367,7 @@ def _build_home_view(user_id, app):
344367
"type": "section",
345368
"text": {
346369
"type": "mrkdwn",
347-
"text": "_No special days in the next week._",
370+
"text": "_No special days coming up this week._",
348371
},
349372
}
350373
)
@@ -355,7 +378,7 @@ def _build_home_view(user_id, app):
355378
blocks.append(
356379
{
357380
"type": "section",
358-
"text": {"type": "mrkdwn", "text": "*Quick Commands*"},
381+
"text": {"type": "mrkdwn", "text": "*⌨️ Quick Commands*"},
359382
}
360383
)
361384

@@ -365,11 +388,11 @@ def _build_home_view(user_id, app):
365388
"text": {
366389
"type": "mrkdwn",
367390
"text": "Use these slash commands anywhere:\n"
368-
+ "- `/birthday` - Add or edit your birthday\n"
369-
+ "- `/birthday check` - Check your birthday\n"
370-
+ "- `/birthday list` - See upcoming birthdays\n"
371-
+ "- `/birthday export` - Export to calendar\n"
372-
+ "- `/special-day` - View today's special days",
391+
+ " `/birthday` Add or edit your birthday\n"
392+
+ " `/birthday check` Check your birthday\n"
393+
+ " `/birthday list` See upcoming birthdays\n"
394+
+ " `/birthday export` Export to calendar\n"
395+
+ " `/special-day` View today's special days",
373396
},
374397
}
375398
)
@@ -381,7 +404,7 @@ def _build_home_view(user_id, app):
381404
"elements": [
382405
{
383406
"type": "mrkdwn",
384-
"text": "Tip: Send me a DM with your date (e.g., 25/12) to quickly add your birthday!",
407+
"text": "💡 Tip: Send me a DM with your date (e.g., 25/12) to quickly add your birthday!",
385408
}
386409
],
387410
}

0 commit comments

Comments
 (0)