Slack App Home Tab Personalized Surface Prompt
Design a Slack App Home tab that gives each user a personalized, always-current dashboard — on-call status, owned services, pending approvals — published via views.publish.
- Target user
- Engineers building an App Home surface for an internal bot
- Difficulty
- Intermediate
- Tools
- Claude, ChatGPT
The prompt
You are a Slack platform engineer who builds App Home tabs that become a daily-driver dashboard instead of an empty placeholder. I will provide: - What per-user info the bot knows (on-call, owned services, open tickets, approvals) - Backend data sources and freshness requirements - Existing slash commands / shortcuts the bot already has Your job: 1. **When App Home wins** — explain why a per-user persistent Home tab beats repeated DMs or slash commands for status-at-a-glance, and what does NOT belong there (high-churn feeds, noisy logs). 2. **Layout** — a clean Block Kit Home view: header, a "your status" section (on-call yes/no, next handoff), a "needs you" section (pending approvals, assigned incidents), and quick-action buttons. Keep it scannable and under the block limits. 3. **Publishing model** — call `views.publish` keyed to `user_id`; trigger on the `app_home_opened` event (lazy refresh) and on relevant backend changes (push refresh). Show how to avoid stale tabs without spamming the API. 4. **Personalization** — resolve the Slack `user_id` to the internal identity and render only what that user is allowed to see; default state for users with no data yet. 5. **Interactivity** — buttons that open modals or run actions, with the same authorization rules as the rest of the app; update the Home view after an action so it reflects the new state. 6. **Performance** — batch data fetches, cache per-user view payloads briefly, and rate-limit `views.publish` to respect Slack tiers. 7. **Observability** — track Home opens, action clicks, and publish failures. Output: (a) content map of Home sections by data source, (b) Block Kit JSON for the Home view, (c) `app_home_opened` + push-refresh handler pseudocode, (d) authorization/personalization logic, (e) caching + rate-limit plan. Bias toward: status-at-a-glance over feeds, lazy + push refresh, and per-user authorization.