import { authenticate } from "../shopify.server"; import { useLoaderData } from "react-router"; export const loader = async ({ request }) => { const { admin, session } = await authenticate.admin(request); // Fetch some reviews to show in the admin dashboard const response = await admin.graphql(`#graphql query { metaobjects(first: 10, type: "custom_product_review") { edges { node { id fields { key value } } } } } `); const data = await response.json(); const reviews = (data.data?.metaobjects?.edges || []).map(edge => { const fields = {}; edge.node.fields.forEach(f => { fields[f.key] = f.value; }); return { id: edge.node.id, ...fields }; }); return { reviews }; }; export default function Index() { const { reviews } = useLoaderData(); return ( All reviews are stored directly in Shopify Metaobjects. You can view, edit, or delete them here. {reviews.length === 0 ? ( No reviews found yet. Try adding one from your store! ) : ( {reviews.map((r) => ( {r.customer_name || 'Anonymous'} {r.content} Product ID: {r.product_id} ))} )} This app is 100% database-less. Storage: Shopify Metaobjects Auth: App Proxy & Admin API Framework: React Router ); }