Skip to content

fix(apps): improve empty state UX when user has no apps#1747

Open
ToriChanIntegration wants to merge 3 commits intoCap-go:mainfrom
ToriChanIntegration:fix/apps-empty-state-ux
Open

fix(apps): improve empty state UX when user has no apps#1747
ToriChanIntegration wants to merge 3 commits intoCap-go:mainfrom
ToriChanIntegration:fix/apps-empty-state-ux

Conversation

@ToriChanIntegration
Copy link

@ToriChanIntegration ToriChanIntegration commented Mar 7, 2026

Summary

  • Hide the empty table when no apps exist — previously showed an infinitely-loading skeleton that confused new users
  • Replace the confusing "Start using: Capgo!" banner with a clean, centered empty state: icon + clear "Add your first app" heading + action buttons
  • Table only renders when apps exist or user is actively searching (v-else instead of always visible)

Test plan

  • Navigate to /apps with an account that has zero apps — should see centered empty state with "Add your first app" heading, not the loading table
  • Click "Start onboarding" button — should navigate to /app/new
  • Click "Demo onboarding" button (desktop only) — should open demo modal
  • Navigate to /apps with an account that has apps — should see the normal app table as before
  • Verify dark mode styling on the empty state

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Redesigned Apps page empty state with integrated onboarding, demo onboarding button, and conditional app list display; improved pagination and search interactions for smoother navigation.
  • Documentation

    • Expanded multi-language support: added "Add your first app" and additional email verification and SSO-related localization strings across 15+ languages.

Hide the empty table that appeared to load infinitely when no apps exist.
Replace the confusing "Start using: Capgo!" banner with a clean, centered
empty state showing a clear "Add your first app" heading and action buttons.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 7, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 708c281e-5e7d-4c06-a1f2-6861d5c8067a

📥 Commits

Reviewing files that changed from the base of the PR and between 8ce29b8 and f037962.

⛔ Files ignored due to path filters (2)
  • docs/screenshots/apps-empty-state-dark.png is excluded by !**/*.png
  • docs/screenshots/apps-empty-state-light.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • messages/en.json
  • src/pages/apps.vue

📝 Walkthrough

Walkthrough

Adds an "add-your-first-app" localization key across multiple locale files, expands English translations with SSO and email-verification keys, and changes the apps page to show a new empty state and updated AppTable props/events when apps exist.

Changes

Cohort / File(s) Summary
Localization — multiple locales
messages/de.json, messages/es.json, messages/fr.json, messages/hi.json, messages/id.json, messages/it.json, messages/ja.json, messages/ko.json, messages/pl.json, messages/pt-br.json, messages/ru.json, messages/tr.json, messages/vi.json, messages/zh-cn.json
Added the add-your-first-app translation key in each listed locale (single-line additions).
Localization — English
messages/en.json
Added add-your-first-app plus multiple email verification and SSO-related translation keys; some keys were reordered within the file.
Apps page UI
src/pages/apps.vue
Introduced conditional empty state shown when no apps exist; AppTable is rendered only when apps are present and its usage now passes/handles additional props (apps, total, delete-button, server-side-pagination, is-loading) and new events (add-app, update:current-page, update:search, reload, reset).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

enhancement

Suggested reviewers

  • riderx

Poem

🐰 A tiny hop, a new line’s born,
"Add your first app" greets the morn,
In many tongues the welcome sings,
The apps page blooms with hopeful things,
I nibble joy — the onboarding springs! 🥕✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: improving the empty state UX for users with no apps, which is reflected throughout the changeset.
Description check ✅ Passed The description includes Summary and Test plan sections matching the template, though Screenshots and Checklist items are missing but not strictly required for this type of change.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@messages/en.json`:
- Line 1494: Update the user-facing label for the localization key
"sso-reactivate" in messages/en.json to use "Reactivate" (no hyphen) instead of
"Re-activate" so it reads consistently with other labels like "Activate SSO" and
"Deactivate"; locate the "sso-reactivate" entry and replace its value
accordingly.

In `@src/pages/apps.vue`:
- Around line 165-166: The empty-state branch currently uses v-if="totalApps ===
0 && !searchQuery" and can flash when a refresh is in flight; update the
condition to also require the table load to be finished (e.g., include
!isTableLoading) so the "Add your first app" onboarding only shows once
getMyApps() has resolved; change the v-if to check totalApps === 0 &&
!searchQuery && !isTableLoading and ensure isTableLoading is set around
getMyApps() calls.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1f7b357e-f41b-4975-b498-792f82b22d68

📥 Commits

Reviewing files that changed from the base of the PR and between 170ff22 and 8ce29b8.

📒 Files selected for processing (16)
  • messages/de.json
  • messages/en.json
  • messages/es.json
  • messages/fr.json
  • messages/hi.json
  • messages/id.json
  • messages/it.json
  • messages/ja.json
  • messages/ko.json
  • messages/pl.json
  • messages/pt-br.json
  • messages/ru.json
  • messages/tr.json
  • messages/vi.json
  • messages/zh-cn.json
  • src/pages/apps.vue

@ToriChanIntegration
Copy link
Author

Screenshots - Empty State (After Changes)

Screenshots showing the new centered empty state when user has no apps.

Light mode:
See attached screenshots below.

Changes visible:

  • Clean centered layout with plus icon
  • Clear 'Add your first app' heading
  • 'Start onboarding' and 'Demo onboarding' action buttons
  • No confusing empty table or loading skeleton

@ToriChanIntegration
Copy link
Author

Screenshots

Light mode:
Light mode empty state

Dark mode:
Dark mode empty state

Addresses CodeRabbit review: prevent empty state flash when clearing
a search by checking !isTableLoading before showing the onboarding card.
Also fixes "Re-activate" → "Reactivate" copy inconsistency.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@sonarqubecloud
Copy link

sonarqubecloud bot commented Mar 7, 2026

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant