Skip to content

Commit ae80c1c

Browse files
authored
Merge pull request #414 from bborn/task/1123-improve-first-time-user-onboarding-exper
Improve first-time user onboarding experience
2 parents 0945f7c + 7cd0b4d commit ae80c1c

3 files changed

Lines changed: 329 additions & 88 deletions

File tree

internal/ui/app.go

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,66 +1447,73 @@ func (m *AppModel) viewDashboard() string {
14471447
}
14481448

14491449
// renderWelcomeMessage renders a friendly getting started message for first-time users.
1450+
// Focuses on demonstrating the mental model: describe what you want, AI does it, review.
14501451
func (m *AppModel) renderWelcomeMessage(height int) string {
1451-
// Welcome title
1452+
// Styles
14521453
titleStyle := lipgloss.NewStyle().
14531454
Bold(true).
1454-
Foreground(ColorPrimary).
1455-
MarginBottom(1)
1455+
Foreground(ColorPrimary)
14561456

1457-
// Subtitle style
14581457
subtitleStyle := lipgloss.NewStyle().
1459-
Foreground(ColorSecondary).
1460-
MarginBottom(2)
1458+
Foreground(ColorSecondary)
1459+
1460+
stepNumStyle := lipgloss.NewStyle().
1461+
Bold(true).
1462+
Foreground(ColorPrimary)
1463+
1464+
stepDescStyle := lipgloss.NewStyle().
1465+
Foreground(lipgloss.Color("252"))
14611466

1462-
// Action style for keyboard shortcuts
14631467
actionStyle := lipgloss.NewStyle().
14641468
Bold(true).
14651469
Foreground(ColorPrimary)
14661470

1467-
// Description style
14681471
descStyle := lipgloss.NewStyle().
14691472
Foreground(ColorMuted)
14701473

14711474
// Build the welcome content
14721475
var lines []string
14731476

14741477
lines = append(lines, titleStyle.Render("Welcome to TaskYou!"))
1475-
lines = append(lines, subtitleStyle.Render("Your AI-powered task management system"))
14761478
lines = append(lines, "")
14771479

1478-
// Key actions
1479-
lines = append(lines, lipgloss.JoinHorizontal(lipgloss.Top,
1480-
actionStyle.Render("n"),
1481-
descStyle.Render(" Create your first task"),
1482-
))
1480+
// Mental model - how it works in 3 steps
1481+
lines = append(lines, subtitleStyle.Render("How it works:"))
14831482
lines = append(lines, "")
14841483

14851484
lines = append(lines, lipgloss.JoinHorizontal(lipgloss.Top,
1486-
actionStyle.Render("s"),
1487-
descStyle.Render(" Open settings to configure projects"),
1485+
stepNumStyle.Render("1. "),
1486+
stepDescStyle.Render("Describe what you want done"),
1487+
))
1488+
lines = append(lines, lipgloss.JoinHorizontal(lipgloss.Top,
1489+
stepNumStyle.Render("2. "),
1490+
stepDescStyle.Render("AI works on it autonomously"),
1491+
))
1492+
lines = append(lines, lipgloss.JoinHorizontal(lipgloss.Top,
1493+
stepNumStyle.Render("3. "),
1494+
stepDescStyle.Render("Review the result"),
14881495
))
14891496
lines = append(lines, "")
14901497

1498+
// Quick start action
14911499
lines = append(lines, lipgloss.JoinHorizontal(lipgloss.Top,
1492-
actionStyle.Render("?"),
1493-
descStyle.Render(" Show all keyboard shortcuts"),
1500+
descStyle.Render("Press "),
1501+
actionStyle.Render("n"),
1502+
descStyle.Render(" to create your first task"),
14941503
))
14951504
lines = append(lines, "")
14961505

14971506
// Executor status
14981507
if len(m.availableExecutors) == 0 {
14991508
warningStyle := lipgloss.NewStyle().
1500-
Foreground(ColorWarning).
1501-
MarginTop(1)
1502-
lines = append(lines, warningStyle.Render(IconBlocked()+" Install an AI executor to run tasks"))
1503-
lines = append(lines, descStyle.Render(" Visit: https://code.claude.com/docs/en/overview"))
1509+
Foreground(ColorWarning)
1510+
lines = append(lines, warningStyle.Render(IconBlocked()+" No AI executor found"))
1511+
lines = append(lines, descStyle.Render(" Install one: claude, codex, or gemini"))
15041512
} else {
15051513
readyStyle := lipgloss.NewStyle().
1506-
Foreground(ColorDone).
1507-
MarginTop(1)
1514+
Foreground(ColorDone)
15081515
executorList := strings.Join(m.availableExecutors, ", ")
1509-
lines = append(lines, readyStyle.Render(IconDone()+" Ready to run tasks with: "+executorList))
1516+
lines = append(lines, readyStyle.Render(IconDone()+" Ready with: "+executorList))
15101517
}
15111518

15121519
content := lipgloss.JoinVertical(lipgloss.Left, lines...)
@@ -1515,8 +1522,8 @@ func (m *AppModel) renderWelcomeMessage(height int) string {
15151522
boxStyle := lipgloss.NewStyle().
15161523
Border(lipgloss.RoundedBorder()).
15171524
BorderForeground(ColorPrimary).
1518-
Padding(2, 4).
1519-
Width(min(60, m.width-4))
1525+
Padding(1, 3).
1526+
Width(min(50, m.width-4))
15201527

15211528
boxed := boxStyle.Render(content)
15221529

0 commit comments

Comments
 (0)