Skip to main content

Homepage

The first thing merchants see when they open your app in App Home is a landing page, associated with the route file app._index.jsx in React Router-based Shopify apps.

It provides a clear entry point for merchants, and an opportunity to provide daily value through status updates, metrics, and clear actions merchants can take. Surface key information at a glance like performance metrics, items needing attention, and onboarding guidance for new users.

The homepage pattern provides this foundation while following proven design guidelines that help your app feel native to the Shopify admin. See Built for Shopify requirements for more details on these guidelines for apps.


Anchor to Surface a homepage with score banner, metrics, and product listSurface a homepage with score banner, metrics, and product list

Merchants need a clear entry point with key information and actions. This example surfaces a homepage for a Product Quality Auditor app with a score banner, metrics cards, setup guide, common issues summary, and a list of products needing attention.

Preview

const [visible, setVisible] = useState({
banner: true,
setupGuide: true,
calloutCard: true,
featuredApps: true,
});
const [expanded, setExpanded] = useState({
setupGuide: true,
step1: false,
step2: false,
step3: false,
});
const [progress, setProgress] = useState(0);

return (
<s-page>
<s-button slot="primary-action">Create puzzle</s-button>
<s-button slot="secondary-actions">Browse templates</s-button>
<s-button slot="secondary-actions">Import image</s-button>

{/* === */}
{/* Banner */}
{/* Use banners sparingly. Only one banner should be visible at a time. */}
{/* If dismissed, use local storage or a database entry to avoid showing this section again to the same user. */}
{/* === */}
{visible.banner && (
<s-banner
dismissible
onDismiss={() => setVisible({ ...visible, banner: false })}
>
3 of 5 puzzles created.{" "}
<s-link href="#">Upgrade to Puzzlify Pro</s-link> to create unlimited
puzzles.
</s-banner>
)}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://cdn.shopify.com/shopifycloud/polaris.js"></script>
<title>Pattern</title>
<script>
// Simple global object to store handlers
window.puzzleApp = {
progress: 0,

// Banner handlers
dismissBanner: function(bannerElement) {
if (bannerElement) {
bannerElement.style.display = 'none';
}
},

// Guide handlers
dismissGuide: function(guideSection) {
if (guideSection) {
guideSection.style.display = 'none';
}
},

toggleGuide: function(button, container) {
if (button && container) {
const isExpanded = container.style.display !== 'none';
container.style.display = isExpanded ? 'none' : 'block';
button.setAttribute('icon', isExpanded ? 'chevron-down' : 'chevron-up');
}
},

// Step handlers
toggleStep: function(button, detailsContainer) {

Was this page helpful?