diff --git a/apps/web/src/components/molecules/ProductIdentityStep.scss b/apps/web/src/components/molecules/ProductIdentityStep.scss
new file mode 100644
index 0000000..c97e83c
--- /dev/null
+++ b/apps/web/src/components/molecules/ProductIdentityStep.scss
@@ -0,0 +1,9 @@
+.product-identity-step {
+ align-content: start;
+}
+
+.product-identity-step__intro {
+ margin: var(--space-2) 0 0;
+ color: var(--color-text-muted);
+ font-size: var(--text-sm);
+}
diff --git a/apps/web/src/components/molecules/ProductIdentityStep.stories.js b/apps/web/src/components/molecules/ProductIdentityStep.stories.js
new file mode 100644
index 0000000..c33a572
--- /dev/null
+++ b/apps/web/src/components/molecules/ProductIdentityStep.stories.js
@@ -0,0 +1,22 @@
+import ProductIdentityStep from './ProductIdentityStep.vue';
+
+export default { title: 'Molecules/ProductIdentityStep', component: ProductIdentityStep };
+
+export const Empty = {
+ args: {
+ productName: '',
+ categoryId: '',
+ categories: [
+ { id: 'cards', name: 'Trading cards' },
+ { id: 'merchandise', name: 'Merchandise' },
+ ],
+ },
+};
+
+export const Filled = {
+ args: {
+ productName: 'Charizard ex #199/165',
+ categoryId: 'cards',
+ categories: [{ id: 'cards', name: 'Trading cards' }],
+ },
+};
diff --git a/apps/web/src/components/molecules/ProductIdentityStep.vue b/apps/web/src/components/molecules/ProductIdentityStep.vue
new file mode 100644
index 0000000..a4160d4
--- /dev/null
+++ b/apps/web/src/components/molecules/ProductIdentityStep.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
diff --git a/apps/web/src/pages/AdminHomePage.vue b/apps/web/src/pages/AdminHomePage.vue
index e33cdef..70ee587 100644
--- a/apps/web/src/pages/AdminHomePage.vue
+++ b/apps/web/src/pages/AdminHomePage.vue
@@ -5,6 +5,7 @@ import { RouterLink } from "vue-router";
import { useAuth } from "@/composables/useAuth.js";
import AdminListingStatus from "@/components/molecules/AdminListingStatus.vue";
import InventoryWorkflowStepper from "@/components/molecules/InventoryWorkflowStepper.vue";
+import ProductIdentityStep from "@/components/molecules/ProductIdentityStep.vue";
import {
createAdminInventory,
createAdminProduct,
@@ -675,39 +676,15 @@ onMounted(load);