diff --git a/.changeset/ninety-wolves-fix.md b/.changeset/ninety-wolves-fix.md
new file mode 100644
index 0000000000..11b34cee58
--- /dev/null
+++ b/.changeset/ninety-wolves-fix.md
@@ -0,0 +1,22 @@
+---
+"@bigcommerce/catalyst-core": minor
+---
+
+Rename `/vibes/soul/` to `/ui/`, replacing all imports and configuration rules to match new pathname.
+
+## Migration instructions
+
+### Rebase conflicts
+
+- Custom components in `/vibes/soul/*` need to be moved to `/ui/`.
+- Change import name from `@/vibes/soul/` to `@/ui/`.
+- If import order errors occur, run `pnpm run lint -- --fix` to fix import order or fix manually.
+
+### Manual migration
+
+- Replace `/vibes/soul/` for `/ui/`.
+- Rename all imports from `@/vibes/soul/` to `@/ui/`.
+- Update `tsconfig.json` to point to the `@/ui` path.
+- Update `next.config.ts` to replaces `vibes` with `ui` in the included eslint dirs.
+- Update `global.css` to replace `./vibes` with `./ui`.
+- Run `pnpm run lint -- --fix` to auto fix import order.
diff --git a/core/app/[locale]/(default)/(auth)/change-password/_actions/change-password.ts b/core/app/[locale]/(default)/(auth)/change-password/_actions/change-password.ts
index 128b2e3b8e..1d2b1c7fb5 100644
--- a/core/app/[locale]/(default)/(auth)/change-password/_actions/change-password.ts
+++ b/core/app/[locale]/(default)/(auth)/change-password/_actions/change-password.ts
@@ -5,7 +5,7 @@ import { SubmissionResult } from '@conform-to/react';
 import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 
-import { schema } from '@/vibes/soul/sections/reset-password-section/schema';
+import { schema } from '@/ui/sections/reset-password-section/schema';
 import { client } from '~/client';
 import { graphql } from '~/client/graphql';
 
diff --git a/core/app/[locale]/(default)/(auth)/change-password/page.tsx b/core/app/[locale]/(default)/(auth)/change-password/page.tsx
index 944f091c6c..502fe0199d 100644
--- a/core/app/[locale]/(default)/(auth)/change-password/page.tsx
+++ b/core/app/[locale]/(default)/(auth)/change-password/page.tsx
@@ -2,7 +2,7 @@
 import { Metadata } from 'next';
 import { getTranslations, setRequestLocale } from 'next-intl/server';
 
-import { ResetPasswordSection } from '@/vibes/soul/sections/reset-password-section';
+import { ResetPasswordSection } from '@/ui/sections/reset-password-section';
 import { redirect } from '~/i18n/routing';
 
 import { changePassword } from './_actions/change-password';
diff --git a/core/app/[locale]/(default)/(auth)/login/_actions/login.ts b/core/app/[locale]/(default)/(auth)/login/_actions/login.ts
index 65812eda8b..60016b6c33 100644
--- a/core/app/[locale]/(default)/(auth)/login/_actions/login.ts
+++ b/core/app/[locale]/(default)/(auth)/login/_actions/login.ts
@@ -6,7 +6,7 @@ import { parseWithZod } from '@conform-to/zod';
 import { AuthError } from 'next-auth';
 import { getLocale, getTranslations } from 'next-intl/server';
 
-import { schema } from '@/vibes/soul/sections/sign-in-section/schema';
+import { schema } from '@/ui/sections/sign-in-section/schema';
 import { signIn } from '~/auth';
 import { redirect } from '~/i18n/routing';
 import { getCartId } from '~/lib/cart';
diff --git a/core/app/[locale]/(default)/(auth)/login/forgot-password/_actions/reset-password.ts b/core/app/[locale]/(default)/(auth)/login/forgot-password/_actions/reset-password.ts
index 52f6d9c301..868170bbcf 100644
--- a/core/app/[locale]/(default)/(auth)/login/forgot-password/_actions/reset-password.ts
+++ b/core/app/[locale]/(default)/(auth)/login/forgot-password/_actions/reset-password.ts
@@ -5,7 +5,7 @@ import { SubmissionResult } from '@conform-to/react';
 import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 
-import { schema } from '@/vibes/soul/sections/forgot-password-section/schema';
+import { schema } from '@/ui/sections/forgot-password-section/schema';
 import { client } from '~/client';
 import { graphql } from '~/client/graphql';
 
diff --git a/core/app/[locale]/(default)/(auth)/login/forgot-password/page.tsx b/core/app/[locale]/(default)/(auth)/login/forgot-password/page.tsx
index 9b7ecbc6af..18b099c24b 100644
--- a/core/app/[locale]/(default)/(auth)/login/forgot-password/page.tsx
+++ b/core/app/[locale]/(default)/(auth)/login/forgot-password/page.tsx
@@ -6,7 +6,7 @@ import { getTranslations, setRequestLocale } from 'next-intl/server';
 // import { revalidate } from '~/client/revalidate-target';
 // import { bypassReCaptcha } from '~/lib/bypass-recaptcha';
 
-import { ForgotPasswordSection } from '@/vibes/soul/sections/forgot-password-section';
+import { ForgotPasswordSection } from '@/ui/sections/forgot-password-section';
 
 import { resetPassword } from './_actions/reset-password';
 
diff --git a/core/app/[locale]/(default)/(auth)/login/page.tsx b/core/app/[locale]/(default)/(auth)/login/page.tsx
index 49e127220a..8412288f84 100644
--- a/core/app/[locale]/(default)/(auth)/login/page.tsx
+++ b/core/app/[locale]/(default)/(auth)/login/page.tsx
@@ -2,8 +2,8 @@
 import { Metadata } from 'next';
 import { getTranslations, setRequestLocale } from 'next-intl/server';
 
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import { SignInSection } from '@/vibes/soul/sections/sign-in-section';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import { SignInSection } from '@/ui/sections/sign-in-section';
 import { buildConfig } from '~/build-config/reader';
 import { ForceRefresh } from '~/components/force-refresh';
 
diff --git a/core/app/[locale]/(default)/(auth)/register/_actions/register-customer.ts b/core/app/[locale]/(default)/(auth)/register/_actions/register-customer.ts
index cc49cdf155..d3ad8928d9 100644
--- a/core/app/[locale]/(default)/(auth)/register/_actions/register-customer.ts
+++ b/core/app/[locale]/(default)/(auth)/register/_actions/register-customer.ts
@@ -6,7 +6,7 @@ import { parseWithZod } from '@conform-to/zod';
 import { getLocale, getTranslations } from 'next-intl/server';
 import { z } from 'zod';
 
-import { Field, FieldGroup, schema } from '@/vibes/soul/form/dynamic-form/schema';
+import { Field, FieldGroup, schema } from '@/ui/form/dynamic-form/schema';
 import { signIn } from '~/auth';
 import { client } from '~/client';
 import { graphql, VariablesOf } from '~/client/graphql';
diff --git a/core/app/[locale]/(default)/(auth)/register/page.tsx b/core/app/[locale]/(default)/(auth)/register/page.tsx
index 240e3cb36c..38c5ecca0f 100644
--- a/core/app/[locale]/(default)/(auth)/register/page.tsx
+++ b/core/app/[locale]/(default)/(auth)/register/page.tsx
@@ -5,7 +5,7 @@ import { getTranslations, setRequestLocale } from 'next-intl/server';
 // TODO: Add recaptcha token
 // import { bypassReCaptcha } from '~/lib/bypass-recaptcha';
 
-import { DynamicFormSection } from '@/vibes/soul/sections/dynamic-form-section';
+import { DynamicFormSection } from '@/ui/sections/dynamic-form-section';
 import { formFieldTransformer } from '~/data-transformers/form-field-transformer';
 import {
   CUSTOMER_FIELDS_TO_EXCLUDE,
diff --git a/core/app/[locale]/(default)/(faceted)/brand/[slug]/page.tsx b/core/app/[locale]/(default)/(faceted)/brand/[slug]/page.tsx
index bbafc350be..7afb18e7bd 100644
--- a/core/app/[locale]/(default)/(faceted)/brand/[slug]/page.tsx
+++ b/core/app/[locale]/(default)/(faceted)/brand/[slug]/page.tsx
@@ -4,14 +4,14 @@ import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/serve
 import { createSearchParamsCache } from 'nuqs/server';
 import { cache } from 'react';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { createCompareLoader } from '@/vibes/soul/primitives/compare-drawer/loader';
-import { CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Product } from '@/vibes/soul/primitives/product-card';
-import { ProductsListSection } from '@/vibes/soul/sections/products-list-section';
-import { getFilterParsers } from '@/vibes/soul/sections/products-list-section/filter-parsers';
-import { Filter } from '@/vibes/soul/sections/products-list-section/filters-panel';
-import { Option as SortOption } from '@/vibes/soul/sections/products-list-section/sorting';
+import { Streamable } from '@/ui/lib/streamable';
+import { createCompareLoader } from '@/ui/primitives/compare-drawer/loader';
+import { CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Product } from '@/ui/primitives/product-card';
+import { ProductsListSection } from '@/ui/sections/products-list-section';
+import { getFilterParsers } from '@/ui/sections/products-list-section/filter-parsers';
+import { Filter } from '@/ui/sections/products-list-section/filters-panel';
+import { Option as SortOption } from '@/ui/sections/products-list-section/sorting';
 import { facetsTransformer } from '~/data-transformers/facets-transformer';
 import { pageInfoTransformer } from '~/data-transformers/page-info-transformer';
 import { pricesTransformer } from '~/data-transformers/prices-transformer';
diff --git a/core/app/[locale]/(default)/(faceted)/category/[slug]/page.tsx b/core/app/[locale]/(default)/(faceted)/category/[slug]/page.tsx
index 58c9fa8012..958a698954 100644
--- a/core/app/[locale]/(default)/(faceted)/category/[slug]/page.tsx
+++ b/core/app/[locale]/(default)/(faceted)/category/[slug]/page.tsx
@@ -5,15 +5,15 @@ import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/serve
 import { createSearchParamsCache } from 'nuqs/server';
 import { cache } from 'react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { createCompareLoader } from '@/vibes/soul/primitives/compare-drawer/loader';
-import { CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Product } from '@/vibes/soul/primitives/product-card';
-import { Breadcrumb } from '@/vibes/soul/sections/breadcrumbs';
-import { ProductsListSection } from '@/vibes/soul/sections/products-list-section';
-import { getFilterParsers } from '@/vibes/soul/sections/products-list-section/filter-parsers';
-import { Filter } from '@/vibes/soul/sections/products-list-section/filters-panel';
-import { Option as SortOption } from '@/vibes/soul/sections/products-list-section/sorting';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { createCompareLoader } from '@/ui/primitives/compare-drawer/loader';
+import { CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Product } from '@/ui/primitives/product-card';
+import { Breadcrumb } from '@/ui/sections/breadcrumbs';
+import { ProductsListSection } from '@/ui/sections/products-list-section';
+import { getFilterParsers } from '@/ui/sections/products-list-section/filter-parsers';
+import { Filter } from '@/ui/sections/products-list-section/filters-panel';
+import { Option as SortOption } from '@/ui/sections/products-list-section/sorting';
 import { facetsTransformer } from '~/data-transformers/facets-transformer';
 import { pageInfoTransformer } from '~/data-transformers/page-info-transformer';
 import { pricesTransformer } from '~/data-transformers/prices-transformer';
diff --git a/core/app/[locale]/(default)/(faceted)/search/page.tsx b/core/app/[locale]/(default)/(faceted)/search/page.tsx
index 0f5cfafef5..4d5ebed7ea 100644
--- a/core/app/[locale]/(default)/(faceted)/search/page.tsx
+++ b/core/app/[locale]/(default)/(faceted)/search/page.tsx
@@ -3,15 +3,15 @@ import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/serve
 import { createSearchParamsCache } from 'nuqs/server';
 import { cache } from 'react';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { createCompareLoader } from '@/vibes/soul/primitives/compare-drawer/loader';
-import { CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Product } from '@/vibes/soul/primitives/product-card';
-import { Breadcrumb } from '@/vibes/soul/sections/breadcrumbs';
-import { ProductsListSection } from '@/vibes/soul/sections/products-list-section';
-import { getFilterParsers } from '@/vibes/soul/sections/products-list-section/filter-parsers';
-import { Filter } from '@/vibes/soul/sections/products-list-section/filters-panel';
-import { Option as SortOption } from '@/vibes/soul/sections/products-list-section/sorting';
+import { Streamable } from '@/ui/lib/streamable';
+import { createCompareLoader } from '@/ui/primitives/compare-drawer/loader';
+import { CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Product } from '@/ui/primitives/product-card';
+import { Breadcrumb } from '@/ui/sections/breadcrumbs';
+import { ProductsListSection } from '@/ui/sections/products-list-section';
+import { getFilterParsers } from '@/ui/sections/products-list-section/filter-parsers';
+import { Filter } from '@/ui/sections/products-list-section/filters-panel';
+import { Option as SortOption } from '@/ui/sections/products-list-section/sorting';
 import { facetsTransformer } from '~/data-transformers/facets-transformer';
 import { pricesTransformer } from '~/data-transformers/prices-transformer';
 
diff --git a/core/app/[locale]/(default)/_components/slideshow/index.tsx b/core/app/[locale]/(default)/_components/slideshow/index.tsx
index 7e47520989..14cbad40a7 100644
--- a/core/app/[locale]/(default)/_components/slideshow/index.tsx
+++ b/core/app/[locale]/(default)/_components/slideshow/index.tsx
@@ -1,6 +1,6 @@
 import { useTranslations } from 'next-intl';
 
-import { Slideshow as SlideshowSection } from '~/vibes/soul/sections/slideshow';
+import { Slideshow as SlideshowSection } from '@/ui/sections/slideshow';
 
 import SlideBg01 from './slide-bg-01.jpg';
 import SlideBg02 from './slide-bg-02.jpg';
diff --git a/core/app/[locale]/(default)/account/addresses/_actions/address-action.ts b/core/app/[locale]/(default)/account/addresses/_actions/address-action.ts
index d94594b41d..ce12375e39 100644
--- a/core/app/[locale]/(default)/account/addresses/_actions/address-action.ts
+++ b/core/app/[locale]/(default)/account/addresses/_actions/address-action.ts
@@ -1,7 +1,7 @@
 import { SubmissionResult } from '@conform-to/react';
 
-import { Field, FieldGroup } from '@/vibes/soul/form/dynamic-form/schema';
-import { Address, DefaultAddressConfiguration } from '@/vibes/soul/sections/address-list-section';
+import { Field, FieldGroup } from '@/ui/form/dynamic-form/schema';
+import { Address, DefaultAddressConfiguration } from '@/ui/sections/address-list-section';
 
 import { createAddress } from './create-address';
 import { deleteAddress } from './delete-address';
diff --git a/core/app/[locale]/(default)/account/addresses/_actions/create-address.ts b/core/app/[locale]/(default)/account/addresses/_actions/create-address.ts
index 94c7e3dc1e..64c9c18d6b 100644
--- a/core/app/[locale]/(default)/account/addresses/_actions/create-address.ts
+++ b/core/app/[locale]/(default)/account/addresses/_actions/create-address.ts
@@ -4,8 +4,8 @@ import { unstable_expireTag as expireTag } from 'next/cache';
 import { getTranslations } from 'next-intl/server';
 import { z } from 'zod';
 
-import { Field, FieldGroup } from '@/vibes/soul/form/dynamic-form/schema';
-import { schema } from '@/vibes/soul/sections/address-list-section/schema';
+import { Field, FieldGroup } from '@/ui/form/dynamic-form/schema';
+import { schema } from '@/ui/sections/address-list-section/schema';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
 import { graphql, VariablesOf } from '~/client/graphql';
diff --git a/core/app/[locale]/(default)/account/addresses/_actions/delete-address.ts b/core/app/[locale]/(default)/account/addresses/_actions/delete-address.ts
index 6dd1f82cfe..434adfe22e 100644
--- a/core/app/[locale]/(default)/account/addresses/_actions/delete-address.ts
+++ b/core/app/[locale]/(default)/account/addresses/_actions/delete-address.ts
@@ -4,7 +4,7 @@ import { unstable_expireTag as expireTag } from 'next/cache';
 import { getTranslations } from 'next-intl/server';
 import { z } from 'zod';
 
-import { schema } from '@/vibes/soul/sections/address-list-section/schema';
+import { schema } from '@/ui/sections/address-list-section/schema';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
 import { graphql, VariablesOf } from '~/client/graphql';
diff --git a/core/app/[locale]/(default)/account/addresses/_actions/update-address.ts b/core/app/[locale]/(default)/account/addresses/_actions/update-address.ts
index f891ad199c..85edcdefa1 100644
--- a/core/app/[locale]/(default)/account/addresses/_actions/update-address.ts
+++ b/core/app/[locale]/(default)/account/addresses/_actions/update-address.ts
@@ -4,8 +4,8 @@ import { unstable_expireTag as expireTag } from 'next/cache';
 import { getTranslations } from 'next-intl/server';
 import { z } from 'zod';
 
-import { Field, FieldGroup } from '@/vibes/soul/form/dynamic-form/schema';
-import { schema } from '@/vibes/soul/sections/address-list-section/schema';
+import { Field, FieldGroup } from '@/ui/form/dynamic-form/schema';
+import { schema } from '@/ui/sections/address-list-section/schema';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
 import { graphql, VariablesOf } from '~/client/graphql';
diff --git a/core/app/[locale]/(default)/account/addresses/page.tsx b/core/app/[locale]/(default)/account/addresses/page.tsx
index a4b3f4b470..1f7f7f759b 100644
--- a/core/app/[locale]/(default)/account/addresses/page.tsx
+++ b/core/app/[locale]/(default)/account/addresses/page.tsx
@@ -2,7 +2,7 @@ import { Metadata } from 'next';
 import { notFound } from 'next/navigation';
 import { getTranslations, setRequestLocale } from 'next-intl/server';
 
-import { Address, AddressListSection } from '@/vibes/soul/sections/address-list-section';
+import { Address, AddressListSection } from '@/ui/sections/address-list-section';
 import {
   fieldToFieldNameTransformer,
   formFieldTransformer,
diff --git a/core/app/[locale]/(default)/account/layout.tsx b/core/app/[locale]/(default)/account/layout.tsx
index 49c9aa7e8d..5673a36866 100644
--- a/core/app/[locale]/(default)/account/layout.tsx
+++ b/core/app/[locale]/(default)/account/layout.tsx
@@ -1,8 +1,8 @@
 import { getTranslations, setRequestLocale } from 'next-intl/server';
 import { PropsWithChildren } from 'react';
 
-import { SidebarMenu } from '@/vibes/soul/sections/sidebar-menu';
-import { StickySidebarLayout } from '@/vibes/soul/sections/sticky-sidebar-layout';
+import { SidebarMenu } from '@/ui/sections/sidebar-menu';
+import { StickySidebarLayout } from '@/ui/sections/sticky-sidebar-layout';
 import { isLoggedIn } from '~/auth';
 import { redirect } from '~/i18n/routing';
 
diff --git a/core/app/[locale]/(default)/account/orders/[id]/page.tsx b/core/app/[locale]/(default)/account/orders/[id]/page.tsx
index 7857c959ad..9944feecfe 100644
--- a/core/app/[locale]/(default)/account/orders/[id]/page.tsx
+++ b/core/app/[locale]/(default)/account/orders/[id]/page.tsx
@@ -1,7 +1,7 @@
 import { notFound } from 'next/navigation';
 import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/server';
 
-import { OrderDetailsSection } from '@/vibes/soul/sections/order-details-section';
+import { OrderDetailsSection } from '@/ui/sections/order-details-section';
 import { orderDetailsTransformer } from '~/data-transformers/order-details-transformer';
 
 import { getCustomerOrderDetails } from './page-data';
diff --git a/core/app/[locale]/(default)/account/orders/page.tsx b/core/app/[locale]/(default)/account/orders/page.tsx
index 30caae8eb4..bfba22b366 100644
--- a/core/app/[locale]/(default)/account/orders/page.tsx
+++ b/core/app/[locale]/(default)/account/orders/page.tsx
@@ -1,9 +1,9 @@
 import { notFound } from 'next/navigation';
 import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/server';
 
+import { OrderListSection } from '@/ui/sections/order-list-section';
 import { ordersTransformer } from '~/data-transformers/orders-transformer';
 import { pageInfoTransformer } from '~/data-transformers/page-info-transformer';
-import { OrderListSection } from '~/vibes/soul/sections/order-list-section';
 
 import { getCustomerOrders } from './page-data';
 
diff --git a/core/app/[locale]/(default)/account/settings/_actions/change-password.ts b/core/app/[locale]/(default)/account/settings/_actions/change-password.ts
index 48fea2b0ad..ccb289710d 100644
--- a/core/app/[locale]/(default)/account/settings/_actions/change-password.ts
+++ b/core/app/[locale]/(default)/account/settings/_actions/change-password.ts
@@ -4,8 +4,8 @@ import { BigCommerceGQLError } from '@bigcommerce/catalyst-client';
 import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 
-import { ChangePasswordAction } from '@/vibes/soul/sections/account-settings-section/change-password-form';
-import { changePasswordSchema } from '@/vibes/soul/sections/account-settings-section/schema';
+import { ChangePasswordAction } from '@/ui/sections/account-settings-section/change-password-form';
+import { changePasswordSchema } from '@/ui/sections/account-settings-section/schema';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
 import { graphql } from '~/client/graphql';
diff --git a/core/app/[locale]/(default)/account/settings/_actions/update-customer.ts b/core/app/[locale]/(default)/account/settings/_actions/update-customer.ts
index 3dc937ed1c..747101a525 100644
--- a/core/app/[locale]/(default)/account/settings/_actions/update-customer.ts
+++ b/core/app/[locale]/(default)/account/settings/_actions/update-customer.ts
@@ -5,8 +5,8 @@ import { parseWithZod } from '@conform-to/zod';
 import { unstable_expireTag } from 'next/cache';
 import { getTranslations } from 'next-intl/server';
 
-import { updateAccountSchema } from '@/vibes/soul/sections/account-settings-section/schema';
-import { UpdateAccountAction } from '@/vibes/soul/sections/account-settings-section/update-account-form';
+import { updateAccountSchema } from '@/ui/sections/account-settings-section/schema';
+import { UpdateAccountAction } from '@/ui/sections/account-settings-section/update-account-form';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
 import { graphql } from '~/client/graphql';
diff --git a/core/app/[locale]/(default)/account/settings/page.tsx b/core/app/[locale]/(default)/account/settings/page.tsx
index 352fb7f254..da0c3831be 100644
--- a/core/app/[locale]/(default)/account/settings/page.tsx
+++ b/core/app/[locale]/(default)/account/settings/page.tsx
@@ -2,7 +2,7 @@ import { Metadata } from 'next';
 import { notFound } from 'next/navigation';
 import { getTranslations, setRequestLocale } from 'next-intl/server';
 
-import { AccountSettingsSection } from '@/vibes/soul/sections/account-settings-section';
+import { AccountSettingsSection } from '@/ui/sections/account-settings-section';
 
 import { changePassword } from './_actions/change-password';
 import { updateCustomer } from './_actions/update-customer';
diff --git a/core/app/[locale]/(default)/account/wishlists/[id]/_components/share-button.tsx b/core/app/[locale]/(default)/account/wishlists/[id]/_components/share-button.tsx
index 958010fbce..f6dd7fe200 100644
--- a/core/app/[locale]/(default)/account/wishlists/[id]/_components/share-button.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/[id]/_components/share-button.tsx
@@ -3,11 +3,11 @@
 import { clsx } from 'clsx';
 import { useState } from 'react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Button, ButtonProps } from '@/vibes/soul/primitives/button';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
-import { toast } from '@/vibes/soul/primitives/toaster';
-import { Tooltip } from '@/vibes/soul/primitives/tooltip';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Button, ButtonProps } from '@/ui/primitives/button';
+import * as Skeleton from '@/ui/primitives/skeleton';
+import { toast } from '@/ui/primitives/toaster';
+import { Tooltip } from '@/ui/primitives/tooltip';
 import { Modal } from '~/components/modal';
 
 import { ShareWishlistModal } from '../../_components/modals/share';
diff --git a/core/app/[locale]/(default)/account/wishlists/[id]/_components/visibility-switch.tsx b/core/app/[locale]/(default)/account/wishlists/[id]/_components/visibility-switch.tsx
index e29a33a790..8b0eb64417 100644
--- a/core/app/[locale]/(default)/account/wishlists/[id]/_components/visibility-switch.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/[id]/_components/visibility-switch.tsx
@@ -2,9 +2,9 @@
 
 import { useActionState, useEffect, useTransition } from 'react';
 
-import { Switch } from '@/vibes/soul/form/switch';
-import { toast } from '@/vibes/soul/primitives/toaster';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { Switch } from '@/ui/form/switch';
+import { toast } from '@/ui/primitives/toaster';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 
 import { toggleWishlistVisibility } from '../../_actions/change-wishlist-visibility';
 
diff --git a/core/app/[locale]/(default)/account/wishlists/[id]/_components/wishlist-actions.tsx b/core/app/[locale]/(default)/account/wishlists/[id]/_components/wishlist-actions.tsx
index d4ecbc7814..f856f8560c 100644
--- a/core/app/[locale]/(default)/account/wishlists/[id]/_components/wishlist-actions.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/[id]/_components/wishlist-actions.tsx
@@ -1,7 +1,7 @@
-import { SwitchSkeleton } from '@/vibes/soul/form/switch';
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { SwitchSkeleton } from '@/ui/form/switch';
+import { Streamable } from '@/ui/lib/streamable';
+import * as Skeleton from '@/ui/primitives/skeleton';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 
 import { WishlistAction, WishlistActionsMenu } from '../../_components/wishlist-actions-menu';
 
diff --git a/core/app/[locale]/(default)/account/wishlists/[id]/page.tsx b/core/app/[locale]/(default)/account/wishlists/[id]/page.tsx
index f2dc7f4e22..26fff4065f 100644
--- a/core/app/[locale]/(default)/account/wishlists/[id]/page.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/[id]/page.tsx
@@ -3,9 +3,9 @@ import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/serve
 import { SearchParams } from 'nuqs';
 import { createSearchParamsCache, parseAsInteger, parseAsString } from 'nuqs/server';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Wishlist, WishlistDetails } from '@/vibes/soul/sections/wishlist-details';
+import { Streamable } from '@/ui/lib/streamable';
+import { CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Wishlist, WishlistDetails } from '@/ui/sections/wishlist-details';
 import { ExistingResultType } from '~/client/util';
 import { defaultPageInfo, pageInfoTransformer } from '~/data-transformers/page-info-transformer';
 import { wishlistDetailsTransformer } from '~/data-transformers/wishlists-transformer';
diff --git a/core/app/[locale]/(default)/account/wishlists/_components/modals/change-visibility.tsx b/core/app/[locale]/(default)/account/wishlists/_components/modals/change-visibility.tsx
index 2955f0ce87..7ec2e92ef9 100644
--- a/core/app/[locale]/(default)/account/wishlists/_components/modals/change-visibility.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/_components/modals/change-visibility.tsx
@@ -1,7 +1,7 @@
 'use client';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { FormStatus } from '@/ui/form/form-status';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 import { useModalForm } from '~/components/modal/modal-form-provider';
 
 import { toggleWishlistVisibilitySchema } from '../../_actions/schema';
diff --git a/core/app/[locale]/(default)/account/wishlists/_components/modals/delete.tsx b/core/app/[locale]/(default)/account/wishlists/_components/modals/delete.tsx
index 2b0dad22e1..6dc7d1db2c 100644
--- a/core/app/[locale]/(default)/account/wishlists/_components/modals/delete.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/_components/modals/delete.tsx
@@ -1,7 +1,7 @@
 'use client';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { FormStatus } from '@/ui/form/form-status';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 import { useModalForm } from '~/components/modal/modal-form-provider';
 
 import { deleteWishlistSchema } from '../../_actions/schema';
diff --git a/core/app/[locale]/(default)/account/wishlists/_components/modals/new.tsx b/core/app/[locale]/(default)/account/wishlists/_components/modals/new.tsx
index fb1afeddd6..ab95800e72 100644
--- a/core/app/[locale]/(default)/account/wishlists/_components/modals/new.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/_components/modals/new.tsx
@@ -3,8 +3,8 @@
 import { getInputProps } from '@conform-to/react';
 import { useRef } from 'react';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Input } from '@/vibes/soul/form/input';
+import { FormStatus } from '@/ui/form/form-status';
+import { Input } from '@/ui/form/input';
 import { useModalForm } from '~/components/modal/modal-form-provider';
 
 import { newWishlistSchema } from '../../_actions/schema';
diff --git a/core/app/[locale]/(default)/account/wishlists/_components/modals/rename.tsx b/core/app/[locale]/(default)/account/wishlists/_components/modals/rename.tsx
index 26fbeeed36..b9e406ba03 100644
--- a/core/app/[locale]/(default)/account/wishlists/_components/modals/rename.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/_components/modals/rename.tsx
@@ -3,9 +3,9 @@
 import { getInputProps } from '@conform-to/react';
 import { useRef } from 'react';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Input } from '@/vibes/soul/form/input';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { FormStatus } from '@/ui/form/form-status';
+import { Input } from '@/ui/form/input';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 import { useModalForm } from '~/components/modal/modal-form-provider';
 
 import { renameWishlistSchema } from '../../_actions/schema';
diff --git a/core/app/[locale]/(default)/account/wishlists/_components/modals/share.tsx b/core/app/[locale]/(default)/account/wishlists/_components/modals/share.tsx
index 8e35e1ed0d..131c051cbf 100644
--- a/core/app/[locale]/(default)/account/wishlists/_components/modals/share.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/_components/modals/share.tsx
@@ -1,6 +1,6 @@
 'use client';
 
-import { Input } from '@/vibes/soul/form/input';
+import { Input } from '@/ui/form/input';
 
 export const ShareWishlistModal = ({ publicUrl }: { publicUrl: string }) => {
   const shareUrl = String(new URL(publicUrl, window.location.origin));
diff --git a/core/app/[locale]/(default)/account/wishlists/_components/new-wishlist-button.tsx b/core/app/[locale]/(default)/account/wishlists/_components/new-wishlist-button.tsx
index 1ee0c67a23..2ae5c51d51 100644
--- a/core/app/[locale]/(default)/account/wishlists/_components/new-wishlist-button.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/_components/new-wishlist-button.tsx
@@ -2,8 +2,8 @@
 
 import { useState } from 'react';
 
-import { Button } from '@/vibes/soul/primitives/button';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { Button } from '@/ui/primitives/button';
+import { toast } from '@/ui/primitives/toaster';
 import { Modal, ModalFormState } from '~/components/modal';
 
 import { WishlistModalProps } from './wishlist-actions-menu';
diff --git a/core/app/[locale]/(default)/account/wishlists/_components/wishlist-actions-menu.tsx b/core/app/[locale]/(default)/account/wishlists/_components/wishlist-actions-menu.tsx
index 9f08a16253..f0d13501bf 100644
--- a/core/app/[locale]/(default)/account/wishlists/_components/wishlist-actions-menu.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/_components/wishlist-actions-menu.tsx
@@ -3,9 +3,9 @@
 import { EllipsisIcon } from 'lucide-react';
 import { useReducer } from 'react';
 
-import { Button } from '@/vibes/soul/primitives/button';
-import { DropdownMenu } from '@/vibes/soul/primitives/dropdown-menu';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { Button } from '@/ui/primitives/button';
+import { DropdownMenu } from '@/ui/primitives/dropdown-menu';
+import { toast } from '@/ui/primitives/toaster';
 import { Modal, ModalButton, ModalFormAction, ModalFormState } from '~/components/modal';
 
 import { getShareWishlistModal } from '../modals';
diff --git a/core/app/[locale]/(default)/account/wishlists/modals.tsx b/core/app/[locale]/(default)/account/wishlists/modals.tsx
index 1fa8ae51d3..71081339fd 100644
--- a/core/app/[locale]/(default)/account/wishlists/modals.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/modals.tsx
@@ -1,6 +1,6 @@
 import { getTranslations } from 'next-intl/server';
 
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 import { ExistingResultType } from '~/client/util';
 
 import { toggleWishlistVisibility } from './_actions/change-wishlist-visibility';
diff --git a/core/app/[locale]/(default)/account/wishlists/page.tsx b/core/app/[locale]/(default)/account/wishlists/page.tsx
index 8c2065e4ce..58db215a18 100644
--- a/core/app/[locale]/(default)/account/wishlists/page.tsx
+++ b/core/app/[locale]/(default)/account/wishlists/page.tsx
@@ -2,11 +2,11 @@ import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/serve
 import { SearchParams } from 'nuqs';
 import { createSearchParamsCache, parseAsInteger, parseAsString } from 'nuqs/server';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
-import { WishlistsSection } from '@/vibes/soul/sections/wishlists-section';
+import { Streamable } from '@/ui/lib/streamable';
+import { CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import * as Skeleton from '@/ui/primitives/skeleton';
+import { Wishlist } from '@/ui/sections/wishlist-details';
+import { WishlistsSection } from '@/ui/sections/wishlists-section';
 import { ExistingResultType } from '~/client/util';
 import { defaultPageInfo, pageInfoTransformer } from '~/data-transformers/page-info-transformer';
 import { wishlistsTransformer } from '~/data-transformers/wishlists-transformer';
diff --git a/core/app/[locale]/(default)/blog/[blogId]/page.tsx b/core/app/[locale]/(default)/blog/[blogId]/page.tsx
index e6bda68e8e..b4a0e9ceee 100644
--- a/core/app/[locale]/(default)/blog/[blogId]/page.tsx
+++ b/core/app/[locale]/(default)/blog/[blogId]/page.tsx
@@ -3,8 +3,8 @@ import { notFound } from 'next/navigation';
 import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/server';
 import { cache } from 'react';
 
-import { BlogPostContent, BlogPostContentBlogPost } from '@/vibes/soul/sections/blog-post-content';
-import { Breadcrumb } from '@/vibes/soul/sections/breadcrumbs';
+import { BlogPostContent, BlogPostContentBlogPost } from '@/ui/sections/blog-post-content';
+import { Breadcrumb } from '@/ui/sections/breadcrumbs';
 
 import { getBlogPageData } from './page-data';
 
diff --git a/core/app/[locale]/(default)/blog/page.tsx b/core/app/[locale]/(default)/blog/page.tsx
index b0756183f4..86cf295a3f 100644
--- a/core/app/[locale]/(default)/blog/page.tsx
+++ b/core/app/[locale]/(default)/blog/page.tsx
@@ -4,8 +4,8 @@ import { getTranslations, setRequestLocale } from 'next-intl/server';
 import { SearchParams } from 'nuqs';
 import { createSearchParamsCache, parseAsInteger, parseAsString } from 'nuqs/server';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { FeaturedBlogPostList } from '@/vibes/soul/sections/featured-blog-post-list';
+import { Streamable } from '@/ui/lib/streamable';
+import { FeaturedBlogPostList } from '@/ui/sections/featured-blog-post-list';
 import { defaultPageInfo, pageInfoTransformer } from '~/data-transformers/page-info-transformer';
 
 import { getBlog, getBlogPosts } from './page-data';
diff --git a/core/app/[locale]/(default)/cart/_actions/update-coupon-code.ts b/core/app/[locale]/(default)/cart/_actions/update-coupon-code.ts
index 01611007f7..10f95adfe4 100644
--- a/core/app/[locale]/(default)/cart/_actions/update-coupon-code.ts
+++ b/core/app/[locale]/(default)/cart/_actions/update-coupon-code.ts
@@ -5,7 +5,7 @@ import { SubmissionResult } from '@conform-to/react';
 import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 
-import { couponCodeActionFormDataSchema } from '@/vibes/soul/sections/cart/schema';
+import { couponCodeActionFormDataSchema } from '@/ui/sections/cart/schema';
 import { getCartId } from '~/lib/cart';
 
 import { getCart } from '../page-data';
diff --git a/core/app/[locale]/(default)/cart/_actions/update-line-item.ts b/core/app/[locale]/(default)/cart/_actions/update-line-item.ts
index 557c7a5b11..873b548a80 100644
--- a/core/app/[locale]/(default)/cart/_actions/update-line-item.ts
+++ b/core/app/[locale]/(default)/cart/_actions/update-line-item.ts
@@ -6,8 +6,8 @@ import { parseWithZod } from '@conform-to/zod';
 import { FragmentOf } from 'gql.tada';
 import { getTranslations } from 'next-intl/server';
 
-import { CartLineItem } from '@/vibes/soul/sections/cart';
-import { cartLineItemActionFormDataSchema } from '@/vibes/soul/sections/cart/schema';
+import { CartLineItem } from '@/ui/sections/cart';
+import { cartLineItemActionFormDataSchema } from '@/ui/sections/cart/schema';
 
 import { DigitalItemFragment, PhysicalItemFragment } from '../page-data';
 
diff --git a/core/app/[locale]/(default)/cart/_actions/update-shipping-info.ts b/core/app/[locale]/(default)/cart/_actions/update-shipping-info.ts
index bb1c1d34a0..3c556c7b29 100644
--- a/core/app/[locale]/(default)/cart/_actions/update-shipping-info.ts
+++ b/core/app/[locale]/(default)/cart/_actions/update-shipping-info.ts
@@ -4,8 +4,8 @@ import { BigCommerceGQLError } from '@bigcommerce/catalyst-client';
 import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 
-import { shippingActionFormDataSchema } from '@/vibes/soul/sections/cart/schema';
-import { ShippingFormState } from '@/vibes/soul/sections/cart/shipping-form';
+import { shippingActionFormDataSchema } from '@/ui/sections/cart/schema';
+import { ShippingFormState } from '@/ui/sections/cart/shipping-form';
 import { getCartId } from '~/lib/cart';
 
 import { getCart } from '../page-data';
diff --git a/core/app/[locale]/(default)/cart/loading.tsx b/core/app/[locale]/(default)/cart/loading.tsx
index 1f0e533b4f..e46272eaee 100644
--- a/core/app/[locale]/(default)/cart/loading.tsx
+++ b/core/app/[locale]/(default)/cart/loading.tsx
@@ -1,6 +1,6 @@
 import { useTranslations } from 'next-intl';
 
-import { CartSkeleton } from '@/vibes/soul/sections/cart';
+import { CartSkeleton } from '@/ui/sections/cart';
 
 export default function Loading() {
   const t = useTranslations('Cart');
diff --git a/core/app/[locale]/(default)/cart/page.tsx b/core/app/[locale]/(default)/cart/page.tsx
index 8ddd6cf909..e1aeaab0f7 100644
--- a/core/app/[locale]/(default)/cart/page.tsx
+++ b/core/app/[locale]/(default)/cart/page.tsx
@@ -1,7 +1,7 @@
 import { Metadata } from 'next';
 import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/server';
 
-import { Cart as CartComponent, CartEmptyState } from '@/vibes/soul/sections/cart';
+import { Cart as CartComponent, CartEmptyState } from '@/ui/sections/cart';
 import { getCartId } from '~/lib/cart';
 import { exists } from '~/lib/utils';
 
diff --git a/core/app/[locale]/(default)/compare/_actions/add-to-cart.tsx b/core/app/[locale]/(default)/compare/_actions/add-to-cart.tsx
index d04cdc1536..49245f2b7c 100644
--- a/core/app/[locale]/(default)/compare/_actions/add-to-cart.tsx
+++ b/core/app/[locale]/(default)/compare/_actions/add-to-cart.tsx
@@ -6,7 +6,7 @@ import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 import { ReactNode } from 'react';
 
-import { compareAddToCartFormDataSchema } from '@/vibes/soul/primitives/compare-card/schema';
+import { compareAddToCartFormDataSchema } from '@/ui/primitives/compare-card/schema';
 import { Link } from '~/components/link';
 import { addToOrCreateCart } from '~/lib/cart';
 import { MissingCartError } from '~/lib/cart/error';
diff --git a/core/app/[locale]/(default)/compare/page.tsx b/core/app/[locale]/(default)/compare/page.tsx
index 0062f43694..f0265266d8 100644
--- a/core/app/[locale]/(default)/compare/page.tsx
+++ b/core/app/[locale]/(default)/compare/page.tsx
@@ -4,9 +4,9 @@ import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/serve
 import { cache } from 'react';
 import * as z from 'zod';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { CompareCardWithId } from '@/vibes/soul/primitives/compare-card';
-import { CompareSection } from '@/vibes/soul/sections/compare-section';
+import { Streamable } from '@/ui/lib/streamable';
+import { CompareCardWithId } from '@/ui/primitives/compare-card';
+import { CompareSection } from '@/ui/sections/compare-section';
 import { pricesTransformer } from '~/data-transformers/prices-transformer';
 
 import { addToCart } from './_actions/add-to-cart';
diff --git a/core/app/[locale]/(default)/error.tsx b/core/app/[locale]/(default)/error.tsx
index de9c3456a8..f2225f4f94 100644
--- a/core/app/[locale]/(default)/error.tsx
+++ b/core/app/[locale]/(default)/error.tsx
@@ -2,7 +2,7 @@
 
 import { useTranslations } from 'next-intl';
 
-import { Error as ErrorSection } from '@/vibes/soul/sections/error';
+import { Error as ErrorSection } from '@/ui/sections/error';
 
 interface Props {
   error: Error & { digest?: string };
diff --git a/core/app/[locale]/(default)/page.tsx b/core/app/[locale]/(default)/page.tsx
index af327b48af..ba2374c415 100644
--- a/core/app/[locale]/(default)/page.tsx
+++ b/core/app/[locale]/(default)/page.tsx
@@ -2,9 +2,9 @@ import { removeEdgesAndNodes } from '@bigcommerce/catalyst-client';
 import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/server';
 import { cache } from 'react';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { FeaturedProductCarousel } from '@/vibes/soul/sections/featured-product-carousel';
-import { FeaturedProductList } from '@/vibes/soul/sections/featured-product-list';
+import { Streamable } from '@/ui/lib/streamable';
+import { FeaturedProductCarousel } from '@/ui/sections/featured-product-carousel';
+import { FeaturedProductList } from '@/ui/sections/featured-product-list';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
 import { graphql } from '~/client/graphql';
diff --git a/core/app/[locale]/(default)/product/[slug]/_actions/add-to-cart.tsx b/core/app/[locale]/(default)/product/[slug]/_actions/add-to-cart.tsx
index a3f790bf8a..141e0fb64c 100644
--- a/core/app/[locale]/(default)/product/[slug]/_actions/add-to-cart.tsx
+++ b/core/app/[locale]/(default)/product/[slug]/_actions/add-to-cart.tsx
@@ -6,7 +6,7 @@ import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 import { ReactNode } from 'react';
 
-import { Field, schema } from '@/vibes/soul/sections/product-detail/schema';
+import { Field, schema } from '@/ui/sections/product-detail/schema';
 import { graphql } from '~/client/graphql';
 import { Link } from '~/components/link';
 import { addToOrCreateCart } from '~/lib/cart';
diff --git a/core/app/[locale]/(default)/product/[slug]/_components/reviews.tsx b/core/app/[locale]/(default)/product/[slug]/_components/reviews.tsx
index 955839cb15..ecfad57ead 100644
--- a/core/app/[locale]/(default)/product/[slug]/_components/reviews.tsx
+++ b/core/app/[locale]/(default)/product/[slug]/_components/reviews.tsx
@@ -3,8 +3,8 @@ import { getFormatter, getTranslations } from 'next-intl/server';
 import { createLoader, parseAsString, SearchParams } from 'nuqs/server';
 import { cache } from 'react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Reviews as ReviewsSection } from '@/vibes/soul/sections/reviews';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Reviews as ReviewsSection } from '@/ui/sections/reviews';
 import { client } from '~/client';
 import { PaginationFragment } from '~/client/fragments/pagination';
 import { graphql } from '~/client/graphql';
diff --git a/core/app/[locale]/(default)/product/[slug]/page.tsx b/core/app/[locale]/(default)/product/[slug]/page.tsx
index 16e6a9cb1d..75d895e78e 100644
--- a/core/app/[locale]/(default)/product/[slug]/page.tsx
+++ b/core/app/[locale]/(default)/product/[slug]/page.tsx
@@ -4,9 +4,9 @@ import { notFound } from 'next/navigation';
 import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/server';
 import { SearchParams } from 'nuqs/server';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { FeaturedProductCarousel } from '@/vibes/soul/sections/featured-product-carousel';
-import { ProductDetail } from '@/vibes/soul/sections/product-detail';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { FeaturedProductCarousel } from '@/ui/sections/featured-product-carousel';
+import { ProductDetail } from '@/ui/sections/product-detail';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { pricesTransformer } from '~/data-transformers/prices-transformer';
 import { productCardTransformer } from '~/data-transformers/product-card-transformer';
diff --git a/core/app/[locale]/(default)/webpages/[id]/_components/web-page.tsx b/core/app/[locale]/(default)/webpages/[id]/_components/web-page.tsx
index c28d1af583..c755e5362c 100644
--- a/core/app/[locale]/(default)/webpages/[id]/_components/web-page.tsx
+++ b/core/app/[locale]/(default)/webpages/[id]/_components/web-page.tsx
@@ -1,5 +1,5 @@
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Breadcrumb, Breadcrumbs, BreadcrumbsSkeleton } from '@/vibes/soul/sections/breadcrumbs';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Breadcrumb, Breadcrumbs, BreadcrumbsSkeleton } from '@/ui/sections/breadcrumbs';
 
 export interface WebPage {
   title: string;
diff --git a/core/app/[locale]/(default)/webpages/[id]/contact/_actions/submit-contact-form.ts b/core/app/[locale]/(default)/webpages/[id]/contact/_actions/submit-contact-form.ts
index 350f578eed..58cac3fc86 100644
--- a/core/app/[locale]/(default)/webpages/[id]/contact/_actions/submit-contact-form.ts
+++ b/core/app/[locale]/(default)/webpages/[id]/contact/_actions/submit-contact-form.ts
@@ -6,7 +6,7 @@ import { parseWithZod } from '@conform-to/zod';
 import { getLocale, getTranslations } from 'next-intl/server';
 import { z } from 'zod';
 
-import { Field, FieldGroup, schema } from '@/vibes/soul/form/dynamic-form/schema';
+import { Field, FieldGroup, schema } from '@/ui/form/dynamic-form/schema';
 import { client } from '~/client';
 import { graphql, VariablesOf } from '~/client/graphql';
 import { redirect } from '~/i18n/routing';
diff --git a/core/app/[locale]/(default)/webpages/[id]/contact/page.tsx b/core/app/[locale]/(default)/webpages/[id]/contact/page.tsx
index 51b9f54ec9..d76624f898 100644
--- a/core/app/[locale]/(default)/webpages/[id]/contact/page.tsx
+++ b/core/app/[locale]/(default)/webpages/[id]/contact/page.tsx
@@ -3,11 +3,11 @@ import { notFound } from 'next/navigation';
 import { getTranslations, setRequestLocale } from 'next-intl/server';
 import { cache } from 'react';
 
-import { DynamicForm } from '@/vibes/soul/form/dynamic-form';
-import type { Field, FieldGroup } from '@/vibes/soul/form/dynamic-form/schema';
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import { Breadcrumb } from '@/vibes/soul/sections/breadcrumbs';
+import { DynamicForm } from '@/ui/form/dynamic-form';
+import type { Field, FieldGroup } from '@/ui/form/dynamic-form/schema';
+import { Streamable } from '@/ui/lib/streamable';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import { Breadcrumb } from '@/ui/sections/breadcrumbs';
 import {
   breadcrumbsTransformer,
   truncateBreadcrumbs,
diff --git a/core/app/[locale]/(default)/webpages/[id]/layout.tsx b/core/app/[locale]/(default)/webpages/[id]/layout.tsx
index cde3f40ea5..5140afb982 100644
--- a/core/app/[locale]/(default)/webpages/[id]/layout.tsx
+++ b/core/app/[locale]/(default)/webpages/[id]/layout.tsx
@@ -2,8 +2,8 @@ import { removeEdgesAndNodes } from '@bigcommerce/catalyst-client';
 import { setRequestLocale } from 'next-intl/server';
 import { cache } from 'react';
 
-import { SidebarMenu } from '@/vibes/soul/sections/sidebar-menu';
-import { StickySidebarLayout } from '@/vibes/soul/sections/sticky-sidebar-layout';
+import { SidebarMenu } from '@/ui/sections/sidebar-menu';
+import { StickySidebarLayout } from '@/ui/sections/sticky-sidebar-layout';
 import { client } from '~/client';
 import { graphql } from '~/client/graphql';
 import { revalidate } from '~/client/revalidate-target';
diff --git a/core/app/[locale]/(default)/webpages/[id]/normal/page.tsx b/core/app/[locale]/(default)/webpages/[id]/normal/page.tsx
index a923030446..d0c331f1d6 100644
--- a/core/app/[locale]/(default)/webpages/[id]/normal/page.tsx
+++ b/core/app/[locale]/(default)/webpages/[id]/normal/page.tsx
@@ -3,8 +3,8 @@ import { notFound } from 'next/navigation';
 import { getTranslations, setRequestLocale } from 'next-intl/server';
 import { cache } from 'react';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { Breadcrumb } from '@/vibes/soul/sections/breadcrumbs';
+import { Streamable } from '@/ui/lib/streamable';
+import { Breadcrumb } from '@/ui/sections/breadcrumbs';
 import {
   breadcrumbsTransformer,
   truncateBreadcrumbs,
diff --git a/core/app/[locale]/(default)/wishlist/[token]/page.tsx b/core/app/[locale]/(default)/wishlist/[token]/page.tsx
index 76e4005cee..1ba6f77adf 100644
--- a/core/app/[locale]/(default)/wishlist/[token]/page.tsx
+++ b/core/app/[locale]/(default)/wishlist/[token]/page.tsx
@@ -4,11 +4,11 @@ import { getFormatter, getTranslations, setRequestLocale } from 'next-intl/serve
 import { SearchParams } from 'nuqs';
 import { createSearchParamsCache, parseAsInteger, parseAsString } from 'nuqs/server';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Breadcrumb, Breadcrumbs } from '@/vibes/soul/sections/breadcrumbs';
-import { SectionLayout } from '@/vibes/soul/sections/section-layout';
-import { Wishlist, WishlistDetails } from '@/vibes/soul/sections/wishlist-details';
+import { Streamable } from '@/ui/lib/streamable';
+import { CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Breadcrumb, Breadcrumbs } from '@/ui/sections/breadcrumbs';
+import { SectionLayout } from '@/ui/sections/section-layout';
+import { Wishlist, WishlistDetails } from '@/ui/sections/wishlist-details';
 import { addWishlistItemToCart } from '~/app/[locale]/(default)/account/wishlists/[id]/_actions/add-to-cart';
 import {
   WishlistShareButton,
diff --git a/core/app/[locale]/error.tsx b/core/app/[locale]/error.tsx
index 55884514fc..acbd7170ca 100644
--- a/core/app/[locale]/error.tsx
+++ b/core/app/[locale]/error.tsx
@@ -2,7 +2,7 @@
 
 import { useTranslations } from 'next-intl';
 
-import { Error as ErrorSection } from '@/vibes/soul/sections/error';
+import { Error as ErrorSection } from '@/ui/sections/error';
 
 interface Props {
   error: Error & { digest?: string };
diff --git a/core/app/[locale]/maintenance/page.tsx b/core/app/[locale]/maintenance/page.tsx
index 6e179e4eb8..ae8b6d86fa 100644
--- a/core/app/[locale]/maintenance/page.tsx
+++ b/core/app/[locale]/maintenance/page.tsx
@@ -2,7 +2,7 @@ import { Metadata } from 'next';
 import { getTranslations, setRequestLocale } from 'next-intl/server';
 import { ReactNode } from 'react';
 
-import { Maintenance as MaintenanceSection } from '@/vibes/soul/sections/maintenance';
+import { Maintenance as MaintenanceSection } from '@/ui/sections/maintenance';
 import { client } from '~/client';
 import { graphql } from '~/client/graphql';
 import { StoreLogoFragment } from '~/components/store-logo/fragment';
diff --git a/core/app/[locale]/not-found.tsx b/core/app/[locale]/not-found.tsx
index 2c486b9b7f..aaccac9498 100644
--- a/core/app/[locale]/not-found.tsx
+++ b/core/app/[locale]/not-found.tsx
@@ -1,6 +1,6 @@
 import { getTranslations } from 'next-intl/server';
 
-import { NotFound as NotFoundSection } from '@/vibes/soul/sections/not-found';
+import { NotFound as NotFoundSection } from '@/ui/sections/not-found';
 import { Footer } from '~/components/footer';
 import { Header } from '~/components/header';
 
diff --git a/core/app/notifications.tsx b/core/app/notifications.tsx
index 8acfdc337f..785cc5e334 100644
--- a/core/app/notifications.tsx
+++ b/core/app/notifications.tsx
@@ -2,7 +2,7 @@
 
 import { useEffect, useRef } from 'react';
 
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { toast } from '@/ui/primitives/toaster';
 import { type ServerToastData } from '~/lib/server-toast';
 
 export const CookieNotifications = (notification: ServerToastData) => {
diff --git a/core/app/providers.tsx b/core/app/providers.tsx
index bb2a967657..c923c3b658 100644
--- a/core/app/providers.tsx
+++ b/core/app/providers.tsx
@@ -2,7 +2,7 @@
 
 import { PropsWithChildren } from 'react';
 
-import { Toaster } from '@/vibes/soul/primitives/toaster';
+import { Toaster } from '@/ui/primitives/toaster';
 
 export function Providers({ children }: PropsWithChildren) {
   return (
diff --git a/core/components/footer/index.tsx b/core/components/footer/index.tsx
index e58d8d54b9..0844ba9fc4 100644
--- a/core/components/footer/index.tsx
+++ b/core/components/footer/index.tsx
@@ -10,7 +10,7 @@ import { useTranslations } from 'next-intl';
 import { getTranslations } from 'next-intl/server';
 import { cache, JSX } from 'react';
 
-import { Footer as FooterSection } from '@/vibes/soul/sections/footer';
+import { Footer as FooterSection } from '@/ui/sections/footer';
 import { LayoutQuery } from '~/app/[locale]/(default)/query';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
diff --git a/core/components/header/_actions/search.ts b/core/components/header/_actions/search.ts
index 2918cfd556..bd6c361184 100644
--- a/core/components/header/_actions/search.ts
+++ b/core/components/header/_actions/search.ts
@@ -6,7 +6,7 @@ import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 import { z } from 'zod';
 
-import { SearchResult } from '@/vibes/soul/primitives/navigation';
+import { SearchResult } from '@/ui/primitives/navigation';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
 import { graphql } from '~/client/graphql';
diff --git a/core/components/header/index.tsx b/core/components/header/index.tsx
index 996c44a6a1..2df0aaa24e 100644
--- a/core/components/header/index.tsx
+++ b/core/components/header/index.tsx
@@ -1,8 +1,8 @@
 import { getLocale, getTranslations } from 'next-intl/server';
 import { cache } from 'react';
 
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { HeaderSection } from '@/vibes/soul/sections/header-section';
+import { Streamable } from '@/ui/lib/streamable';
+import { HeaderSection } from '@/ui/sections/header-section';
 import { LayoutQuery } from '~/app/[locale]/(default)/query';
 import { getSessionCustomerAccessToken } from '~/auth';
 import { client } from '~/client';
diff --git a/core/components/modal/index.tsx b/core/components/modal/index.tsx
index 229001ad14..50367032e1 100644
--- a/core/components/modal/index.tsx
+++ b/core/components/modal/index.tsx
@@ -7,11 +7,8 @@ import { useActionState, useEffect, useRef, useState } from 'react';
 import { useFormStatus } from 'react-dom';
 import { z } from 'zod';
 
-import { Button, ButtonProps } from '@/vibes/soul/primitives/button';
-import {
-  Modal as ModalPrimitive,
-  ModalProps as ModalPrimitiveProps,
-} from '@/vibes/soul/primitives/modal';
+import { Button, ButtonProps } from '@/ui/primitives/button';
+import { Modal as ModalPrimitive, ModalProps as ModalPrimitiveProps } from '@/ui/primitives/modal';
 
 import { ModalFormContext } from './modal-form-provider';
 
diff --git a/core/components/subscribe/_actions/subscribe.ts b/core/components/subscribe/_actions/subscribe.ts
index 0c44643b07..685b5149ff 100644
--- a/core/components/subscribe/_actions/subscribe.ts
+++ b/core/components/subscribe/_actions/subscribe.ts
@@ -4,7 +4,7 @@ import { SubmissionResult } from '@conform-to/react';
 import { parseWithZod } from '@conform-to/zod';
 import { getTranslations } from 'next-intl/server';
 
-import { schema } from '@/vibes/soul/primitives/inline-email-form/schema';
+import { schema } from '@/ui/primitives/inline-email-form/schema';
 
 export const subscribe = async (
   _lastResult: { lastResult: SubmissionResult | null },
diff --git a/core/components/subscribe/index.tsx b/core/components/subscribe/index.tsx
index 4c649a32ad..019c29bd81 100644
--- a/core/components/subscribe/index.tsx
+++ b/core/components/subscribe/index.tsx
@@ -1,6 +1,6 @@
 import { useTranslations } from 'next-intl';
 
-import { Subscribe as SubscribeSection } from '@/vibes/soul/sections/subscribe';
+import { Subscribe as SubscribeSection } from '@/ui/sections/subscribe';
 
 import { subscribe } from './_actions/subscribe';
 
diff --git a/core/data-transformers/breadcrumbs-transformer.ts b/core/data-transformers/breadcrumbs-transformer.ts
index 08b5a98081..51abca7295 100644
--- a/core/data-transformers/breadcrumbs-transformer.ts
+++ b/core/data-transformers/breadcrumbs-transformer.ts
@@ -1,11 +1,11 @@
 import { removeEdgesAndNodes } from '@bigcommerce/catalyst-client';
 import { ResultOf } from 'gql.tada';
 
+import { Breadcrumb } from '@/ui/sections/breadcrumbs';
 import {
   BreadcrumbsCategoryFragment,
   BreadcrumbsWebPageFragment,
 } from '~/components/breadcrumbs/fragment';
-import { Breadcrumb } from '~/vibes/soul/sections/breadcrumbs';
 
 type BreadcrumbsResult =
   | ResultOf<typeof BreadcrumbsWebPageFragment>
diff --git a/core/data-transformers/form-field-transformer/index.ts b/core/data-transformers/form-field-transformer/index.ts
index 9639f3a9ea..4f5e78f6e5 100644
--- a/core/data-transformers/form-field-transformer/index.ts
+++ b/core/data-transformers/form-field-transformer/index.ts
@@ -1,6 +1,6 @@
 import { FragmentOf } from 'gql.tada';
 
-import { Field } from '@/vibes/soul/form/dynamic-form/schema';
+import { Field } from '@/ui/form/dynamic-form/schema';
 
 import { FormFieldsFragment } from './fragment';
 import { FieldNameToFieldId } from './utils';
diff --git a/core/data-transformers/order-details-transformer.ts b/core/data-transformers/order-details-transformer.ts
index 73a1d2ddae..b34567486a 100644
--- a/core/data-transformers/order-details-transformer.ts
+++ b/core/data-transformers/order-details-transformer.ts
@@ -1,6 +1,6 @@
 import { getFormatter, getTranslations } from 'next-intl/server';
 
-import { Order } from '@/vibes/soul/sections/order-details-section';
+import { Order } from '@/ui/sections/order-details-section';
 import { ExistingResultType } from '~/client/util';
 
 import { getCustomerOrderDetails } from '../app/[locale]/(default)/account/orders/[id]/page-data';
diff --git a/core/data-transformers/orders-transformer.ts b/core/data-transformers/orders-transformer.ts
index 2126eeb27a..65686d43b7 100644
--- a/core/data-transformers/orders-transformer.ts
+++ b/core/data-transformers/orders-transformer.ts
@@ -1,6 +1,6 @@
 import { getFormatter } from 'next-intl/server';
 
-import { Order } from '@/vibes/soul/sections/order-list-section/order-list-item';
+import { Order } from '@/ui/sections/order-list-section/order-list-item';
 import { getCustomerOrders } from '~/app/[locale]/(default)/account/orders/page-data';
 import { ExistingResultType } from '~/client/util';
 
diff --git a/core/data-transformers/page-info-transformer.ts b/core/data-transformers/page-info-transformer.ts
index fc49d91956..3229034532 100644
--- a/core/data-transformers/page-info-transformer.ts
+++ b/core/data-transformers/page-info-transformer.ts
@@ -1,6 +1,6 @@
 import { ResultOf } from 'gql.tada';
 
-import { CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
+import { CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
 import { PaginationFragment } from '~/client/fragments/pagination';
 
 export const defaultPageInfo = {
diff --git a/core/data-transformers/prices-transformer.ts b/core/data-transformers/prices-transformer.ts
index b175f1b996..8c3e9dcb8e 100644
--- a/core/data-transformers/prices-transformer.ts
+++ b/core/data-transformers/prices-transformer.ts
@@ -1,7 +1,7 @@
 import { ResultOf } from 'gql.tada';
 import { getFormatter } from 'next-intl/server';
 
-import { Price } from '@/vibes/soul/primitives/price-label';
+import { Price } from '@/ui/primitives/price-label';
 import { PricingFragment } from '~/client/fragments/pricing';
 import { ExistingResultType } from '~/client/util';
 
diff --git a/core/data-transformers/product-card-transformer.ts b/core/data-transformers/product-card-transformer.ts
index effabf1585..eb4a0c401d 100644
--- a/core/data-transformers/product-card-transformer.ts
+++ b/core/data-transformers/product-card-transformer.ts
@@ -1,7 +1,7 @@
 import { ResultOf } from 'gql.tada';
 import { getFormatter } from 'next-intl/server';
 
-import { Product } from '@/vibes/soul/primitives/product-card';
+import { Product } from '@/ui/primitives/product-card';
 import { ExistingResultType } from '~/client/util';
 import { ProductCardFragment } from '~/components/product-card/fragment';
 
diff --git a/core/data-transformers/product-options-transformer.ts b/core/data-transformers/product-options-transformer.ts
index 05f793b41e..180c1a109e 100644
--- a/core/data-transformers/product-options-transformer.ts
+++ b/core/data-transformers/product-options-transformer.ts
@@ -2,7 +2,7 @@ import { removeEdgesAndNodes } from '@bigcommerce/catalyst-client';
 import { ResultOf } from 'gql.tada';
 import { getTranslations } from 'next-intl/server';
 
-import { Field } from '@/vibes/soul/sections/product-detail/schema';
+import { Field } from '@/ui/sections/product-detail/schema';
 import { ProductOptionsFragment } from '~/app/[locale]/(default)/product/[slug]/page-data';
 
 export const productOptionsTransformer = async (
diff --git a/core/data-transformers/search-results-transformer.ts b/core/data-transformers/search-results-transformer.ts
index c3832d5a8b..0da82baafd 100644
--- a/core/data-transformers/search-results-transformer.ts
+++ b/core/data-transformers/search-results-transformer.ts
@@ -1,7 +1,7 @@
 import { ResultOf } from 'gql.tada';
 import { getFormatter, getTranslations } from 'next-intl/server';
 
-import { SearchResult } from '@/vibes/soul/primitives/navigation';
+import { SearchResult } from '@/ui/primitives/navigation';
 import { SearchProductFragment } from '~/components/header/_actions/fragment';
 
 import { pricesTransformer } from './prices-transformer';
diff --git a/core/data-transformers/wishlists-transformer.ts b/core/data-transformers/wishlists-transformer.ts
index 6e0837e7dc..d4c2ac10b9 100644
--- a/core/data-transformers/wishlists-transformer.ts
+++ b/core/data-transformers/wishlists-transformer.ts
@@ -1,8 +1,8 @@
 import { removeEdgesAndNodes } from '@bigcommerce/catalyst-client';
 import { getFormatter, getTranslations } from 'next-intl/server';
 
-import { WishlistItem } from '@/vibes/soul/primitives/wishlist-item-card';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { WishlistItem } from '@/ui/primitives/wishlist-item-card';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 import { ResultOf } from '~/client/graphql';
 import { ExistingResultType } from '~/client/util';
 import {
diff --git a/core/globals.css b/core/globals.css
index d1db453db1..baca024fa1 100644
--- a/core/globals.css
+++ b/core/globals.css
@@ -7,46 +7,46 @@
 
 @source './app/**/*.{ts,tsx}';
 @source './components/**/*.{ts,tsx}';
-@source './vibes/**/*.{ts,tsx}';
+@source './ui/**/*.{ts,tsx}';
 
 @layer utilities {
   .prose {
-    :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(h1):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--foreground));
       font-family: var(--font-family-heading);
     }
 
-    :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(h2):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--foreground));
       font-family: var(--font-family-heading);
     }
 
-    :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(h3):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--foreground));
       font-family: var(--font-family-heading);
     }
 
-    :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(h4):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--foreground));
       font-family: var(--font-family-heading);
     }
 
-    :where(h5):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(h5):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--foreground));
       font-family: var(--font-family-heading);
     }
 
-    :where(h6):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(h6):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--foreground));
       font-family: var(--font-family-heading);
     }
 
-    :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(p):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--foreground));
       font-family: var(--font-family-body);
     }
 
-    :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(a):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: color-mix(in oklab, hsl(var(--primary)), black 15%);
       text-decoration: none;
 
@@ -55,21 +55,21 @@
       }
     }
 
-    :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(ul):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--contrast-500));
       font-family: var(--font-family-body);
     }
 
-    :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(ol):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--contrast-500));
       font-family: var(--font-family-body);
     }
 
-    :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(strong):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       font-weight: 600;
     }
 
-    :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(blockquote):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       border-left-color: hsl(var(--contrast-300));
 
       p {
@@ -79,12 +79,12 @@
       }
     }
 
-    :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(code):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--contrast-500));
       font-family: var(--font-family-mono);
     }
 
-    :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+    :where(pre):not(:where([class~='not-prose'], [class~='not-prose'] *)) {
       color: hsl(var(--background));
       background-color: hsl(var(--foreground));
       font-family: var(--font-family-mono);
@@ -260,7 +260,6 @@
   }
 
   @keyframes shake {
-
     10%,
     90% {
       transform: translate3d(-1px, 0, 0);
diff --git a/core/next.config.ts b/core/next.config.ts
index 02f9b00eeb..f66a567186 100644
--- a/core/next.config.ts
+++ b/core/next.config.ts
@@ -69,7 +69,7 @@ export default async (): Promise<NextConfig> => {
         'middlewares',
         'scripts',
         'tests',
-        'vibes',
+        'ui',
       ],
     },
     // default URL generation in BigCommerce uses trailing slash
diff --git a/core/tsconfig.json b/core/tsconfig.json
index ba1c5882a1..72ee6d714f 100644
--- a/core/tsconfig.json
+++ b/core/tsconfig.json
@@ -35,7 +35,7 @@
     ],
     "baseUrl": ".",
     "paths": {
-      "@/vibes/*": ["./vibes/*"],
+      "@/ui/*": ["./ui/*"],
       "~/*": ["./*"]
     },
     "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
diff --git a/core/vibes/soul/form/button-radio-group/index.tsx b/core/ui/form/button-radio-group/index.tsx
similarity index 98%
rename from core/vibes/soul/form/button-radio-group/index.tsx
rename to core/ui/form/button-radio-group/index.tsx
index e02e3efd12..62205f40a2 100644
--- a/core/vibes/soul/form/button-radio-group/index.tsx
+++ b/core/ui/form/button-radio-group/index.tsx
@@ -2,8 +2,8 @@ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
 import { clsx } from 'clsx';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 
 interface Option {
   value: string;
diff --git a/core/vibes/soul/form/card-radio-group/index.tsx b/core/ui/form/card-radio-group/index.tsx
similarity index 98%
rename from core/vibes/soul/form/card-radio-group/index.tsx
rename to core/ui/form/card-radio-group/index.tsx
index 3edfe47088..16ce24c928 100644
--- a/core/vibes/soul/form/card-radio-group/index.tsx
+++ b/core/ui/form/card-radio-group/index.tsx
@@ -2,8 +2,8 @@ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
 import { clsx } from 'clsx';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 import { Image } from '~/components/image';
 
 interface Option {
diff --git a/core/vibes/soul/form/checkbox-group/index.tsx b/core/ui/form/checkbox-group/index.tsx
similarity index 89%
rename from core/vibes/soul/form/checkbox-group/index.tsx
rename to core/ui/form/checkbox-group/index.tsx
index 70b8f48ffd..5c1e158fd8 100644
--- a/core/vibes/soul/form/checkbox-group/index.tsx
+++ b/core/ui/form/checkbox-group/index.tsx
@@ -1,9 +1,9 @@
 import { clsx } from 'clsx';
 import * as React from 'react';
 
-import { Checkbox } from '@/vibes/soul/form/checkbox';
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { Checkbox } from '@/ui/form/checkbox';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 
 interface Option {
   value: string;
diff --git a/core/vibes/soul/form/checkbox/index.tsx b/core/ui/form/checkbox/index.tsx
similarity index 98%
rename from core/vibes/soul/form/checkbox/index.tsx
rename to core/ui/form/checkbox/index.tsx
index f852523586..d348299100 100644
--- a/core/vibes/soul/form/checkbox/index.tsx
+++ b/core/ui/form/checkbox/index.tsx
@@ -6,7 +6,7 @@ import { clsx } from 'clsx';
 import { Check } from 'lucide-react';
 import { ComponentPropsWithoutRef, ReactNode, useId } from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
+import { FieldError } from '@/ui/form/field-error';
 
 export interface CheckboxProps extends ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {
   label?: ReactNode;
diff --git a/core/vibes/soul/form/date-picker/index.tsx b/core/ui/form/date-picker/index.tsx
similarity index 96%
rename from core/vibes/soul/form/date-picker/index.tsx
rename to core/ui/form/date-picker/index.tsx
index 8c45d37437..d8991bfd49 100644
--- a/core/vibes/soul/form/date-picker/index.tsx
+++ b/core/ui/form/date-picker/index.tsx
@@ -2,8 +2,8 @@ import * as PopoverPrimitive from '@radix-ui/react-popover';
 import { CalendarIcon } from 'lucide-react';
 import { ComponentPropsWithoutRef, ComponentRef, forwardRef, useState } from 'react';
 
-import { Input } from '@/vibes/soul/form/input';
-import { Calendar } from '@/vibes/soul/primitives/calendar';
+import { Input } from '@/ui/form/input';
+import { Calendar } from '@/ui/primitives/calendar';
 
 type CalendarProps = ComponentPropsWithoutRef<typeof Calendar>;
 
diff --git a/core/vibes/soul/form/dynamic-form/index.tsx b/core/ui/form/dynamic-form/index.tsx
similarity index 92%
rename from core/vibes/soul/form/dynamic-form/index.tsx
rename to core/ui/form/dynamic-form/index.tsx
index ad225c3138..730e03589f 100644
--- a/core/vibes/soul/form/dynamic-form/index.tsx
+++ b/core/ui/form/dynamic-form/index.tsx
@@ -15,19 +15,19 @@ import { MouseEvent, ReactNode, startTransition, useActionState } from 'react';
 import { useFormStatus } from 'react-dom';
 import { z } from 'zod';
 
-import { ButtonRadioGroup } from '@/vibes/soul/form/button-radio-group';
-import { CardRadioGroup } from '@/vibes/soul/form/card-radio-group';
-import { Checkbox } from '@/vibes/soul/form/checkbox';
-import { CheckboxGroup } from '@/vibes/soul/form/checkbox-group';
-import { DatePicker } from '@/vibes/soul/form/date-picker';
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Input } from '@/vibes/soul/form/input';
-import { NumberInput } from '@/vibes/soul/form/number-input';
-import { RadioGroup } from '@/vibes/soul/form/radio-group';
-import { Select } from '@/vibes/soul/form/select';
-import { SwatchRadioGroup } from '@/vibes/soul/form/swatch-radio-group';
-import { Textarea } from '@/vibes/soul/form/textarea';
-import { Button, ButtonProps } from '@/vibes/soul/primitives/button';
+import { ButtonRadioGroup } from '@/ui/form/button-radio-group';
+import { CardRadioGroup } from '@/ui/form/card-radio-group';
+import { Checkbox } from '@/ui/form/checkbox';
+import { CheckboxGroup } from '@/ui/form/checkbox-group';
+import { DatePicker } from '@/ui/form/date-picker';
+import { FormStatus } from '@/ui/form/form-status';
+import { Input } from '@/ui/form/input';
+import { NumberInput } from '@/ui/form/number-input';
+import { RadioGroup } from '@/ui/form/radio-group';
+import { Select } from '@/ui/form/select';
+import { SwatchRadioGroup } from '@/ui/form/swatch-radio-group';
+import { Textarea } from '@/ui/form/textarea';
+import { Button, ButtonProps } from '@/ui/primitives/button';
 
 import { Field, FieldGroup, schema } from './schema';
 
diff --git a/core/vibes/soul/form/dynamic-form/schema.ts b/core/ui/form/dynamic-form/schema.ts
similarity index 100%
rename from core/vibes/soul/form/dynamic-form/schema.ts
rename to core/ui/form/dynamic-form/schema.ts
diff --git a/core/vibes/soul/form/field-error/index.tsx b/core/ui/form/field-error/index.tsx
similarity index 100%
rename from core/vibes/soul/form/field-error/index.tsx
rename to core/ui/form/field-error/index.tsx
diff --git a/core/vibes/soul/form/form-status/index.tsx b/core/ui/form/form-status/index.tsx
similarity index 100%
rename from core/vibes/soul/form/form-status/index.tsx
rename to core/ui/form/form-status/index.tsx
diff --git a/core/vibes/soul/form/input/index.tsx b/core/ui/form/input/index.tsx
similarity index 96%
rename from core/vibes/soul/form/input/index.tsx
rename to core/ui/form/input/index.tsx
index 2ee792a4be..2ad389ddbe 100644
--- a/core/vibes/soul/form/input/index.tsx
+++ b/core/ui/form/input/index.tsx
@@ -1,8 +1,8 @@
 import { clsx } from 'clsx';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 
 /**
  * This component supports various CSS variables for theming. Here's a comprehensive list, along
diff --git a/core/vibes/soul/form/label/index.tsx b/core/ui/form/label/index.tsx
similarity index 100%
rename from core/vibes/soul/form/label/index.tsx
rename to core/ui/form/label/index.tsx
diff --git a/core/vibes/soul/form/number-input/index.tsx b/core/ui/form/number-input/index.tsx
similarity index 98%
rename from core/vibes/soul/form/number-input/index.tsx
rename to core/ui/form/number-input/index.tsx
index a54d99d95c..8aa35b576a 100644
--- a/core/vibes/soul/form/number-input/index.tsx
+++ b/core/ui/form/number-input/index.tsx
@@ -4,8 +4,8 @@ import { clsx } from 'clsx';
 import { Minus, Plus } from 'lucide-react';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 
 /**
  * This component supports various CSS variables for theming. Here's a comprehensive list, along
diff --git a/core/vibes/soul/form/radio-group/index.tsx b/core/ui/form/radio-group/index.tsx
similarity index 98%
rename from core/vibes/soul/form/radio-group/index.tsx
rename to core/ui/form/radio-group/index.tsx
index 0df8cffbd3..a16475c666 100644
--- a/core/vibes/soul/form/radio-group/index.tsx
+++ b/core/ui/form/radio-group/index.tsx
@@ -2,8 +2,8 @@ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
 import { clsx } from 'clsx';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 
 interface Option {
   value: string;
diff --git a/core/vibes/soul/form/range-input/index.tsx b/core/ui/form/range-input/index.tsx
similarity index 97%
rename from core/vibes/soul/form/range-input/index.tsx
rename to core/ui/form/range-input/index.tsx
index 30156bec84..aad45dcb72 100644
--- a/core/vibes/soul/form/range-input/index.tsx
+++ b/core/ui/form/range-input/index.tsx
@@ -3,8 +3,8 @@
 import { ArrowRight } from 'lucide-react';
 import { useEffect, useState } from 'react';
 
-import { Input } from '@/vibes/soul/form/input';
-import { Button } from '@/vibes/soul/primitives/button';
+import { Input } from '@/ui/form/input';
+import { Button } from '@/ui/primitives/button';
 
 interface Props {
   applyLabel?: string;
diff --git a/core/vibes/soul/form/select/index.tsx b/core/ui/form/select/index.tsx
similarity index 98%
rename from core/vibes/soul/form/select/index.tsx
rename to core/ui/form/select/index.tsx
index 9581e17ded..fe3c554565 100644
--- a/core/vibes/soul/form/select/index.tsx
+++ b/core/ui/form/select/index.tsx
@@ -5,8 +5,8 @@ import { clsx } from 'clsx';
 import { ChevronDown, ChevronUp } from 'lucide-react';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 
 type Props = {
   colorScheme?: 'light' | 'dark';
diff --git a/core/vibes/soul/form/swatch-radio-group/index.tsx b/core/ui/form/swatch-radio-group/index.tsx
similarity index 98%
rename from core/vibes/soul/form/swatch-radio-group/index.tsx
rename to core/ui/form/swatch-radio-group/index.tsx
index 50a620aaa0..c26b1106d3 100644
--- a/core/vibes/soul/form/swatch-radio-group/index.tsx
+++ b/core/ui/form/swatch-radio-group/index.tsx
@@ -3,8 +3,8 @@ import { clsx } from 'clsx';
 import { X } from 'lucide-react';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 import { Image } from '~/components/image';
 
 type SwatchOption =
diff --git a/core/vibes/soul/form/switch/index.tsx b/core/ui/form/switch/index.tsx
similarity index 98%
rename from core/vibes/soul/form/switch/index.tsx
rename to core/ui/form/switch/index.tsx
index ce298c5cad..44def448cc 100644
--- a/core/vibes/soul/form/switch/index.tsx
+++ b/core/ui/form/switch/index.tsx
@@ -3,7 +3,7 @@ import { clsx } from 'clsx';
 import { Loader2 } from 'lucide-react';
 import { useId } from 'react';
 
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
+import * as Skeleton from '@/ui/primitives/skeleton';
 
 interface Props {
   name?: string;
diff --git a/core/vibes/soul/form/textarea/index.tsx b/core/ui/form/textarea/index.tsx
similarity index 96%
rename from core/vibes/soul/form/textarea/index.tsx
rename to core/ui/form/textarea/index.tsx
index ca1d3676f0..60eab7cbd9 100644
--- a/core/vibes/soul/form/textarea/index.tsx
+++ b/core/ui/form/textarea/index.tsx
@@ -1,8 +1,8 @@
 import { clsx } from 'clsx';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 
 /**
  * This component supports various CSS variables for theming. Here's a comprehensive list, along
diff --git a/core/vibes/soul/form/toggle-group/index.tsx b/core/ui/form/toggle-group/index.tsx
similarity index 97%
rename from core/vibes/soul/form/toggle-group/index.tsx
rename to core/ui/form/toggle-group/index.tsx
index 5cf696642e..e73e6c77f9 100644
--- a/core/vibes/soul/form/toggle-group/index.tsx
+++ b/core/ui/form/toggle-group/index.tsx
@@ -4,8 +4,8 @@ import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
 import { clsx } from 'clsx';
 import * as React from 'react';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Label } from '@/vibes/soul/form/label';
+import { FieldError } from '@/ui/form/field-error';
+import { Label } from '@/ui/form/label';
 
 interface Option {
   value: string;
diff --git a/core/vibes/soul/lib/streamable.tsx b/core/ui/lib/streamable.tsx
similarity index 100%
rename from core/vibes/soul/lib/streamable.tsx
rename to core/ui/lib/streamable.tsx
diff --git a/core/vibes/soul/primitives/accordion/index.tsx b/core/ui/primitives/accordion/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/accordion/index.tsx
rename to core/ui/primitives/accordion/index.tsx
diff --git a/core/vibes/soul/primitives/alert/index.tsx b/core/ui/primitives/alert/index.tsx
similarity index 96%
rename from core/vibes/soul/primitives/alert/index.tsx
rename to core/ui/primitives/alert/index.tsx
index d457a5bbc0..958175a89b 100644
--- a/core/vibes/soul/primitives/alert/index.tsx
+++ b/core/ui/primitives/alert/index.tsx
@@ -2,7 +2,7 @@ import { clsx } from 'clsx';
 import { X } from 'lucide-react';
 import { ReactNode } from 'react';
 
-import { Button } from '@/vibes/soul/primitives/button';
+import { Button } from '@/ui/primitives/button';
 
 interface Props {
   variant: 'success' | 'warning' | 'error' | 'info';
diff --git a/core/vibes/soul/primitives/animated-link/index.tsx b/core/ui/primitives/animated-link/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/animated-link/index.tsx
rename to core/ui/primitives/animated-link/index.tsx
diff --git a/core/vibes/soul/primitives/badge/index.tsx b/core/ui/primitives/badge/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/badge/index.tsx
rename to core/ui/primitives/badge/index.tsx
diff --git a/core/vibes/soul/primitives/banner/index.tsx b/core/ui/primitives/banner/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/banner/index.tsx
rename to core/ui/primitives/banner/index.tsx
diff --git a/core/vibes/soul/primitives/blog-post-card/index.tsx b/core/ui/primitives/blog-post-card/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/blog-post-card/index.tsx
rename to core/ui/primitives/blog-post-card/index.tsx
diff --git a/core/vibes/soul/primitives/button-link/index.tsx b/core/ui/primitives/button-link/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/button-link/index.tsx
rename to core/ui/primitives/button-link/index.tsx
diff --git a/core/vibes/soul/primitives/button/index.tsx b/core/ui/primitives/button/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/button/index.tsx
rename to core/ui/primitives/button/index.tsx
diff --git a/core/vibes/soul/primitives/calendar/index.tsx b/core/ui/primitives/calendar/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/calendar/index.tsx
rename to core/ui/primitives/calendar/index.tsx
diff --git a/core/vibes/soul/primitives/carousel/index.tsx b/core/ui/primitives/carousel/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/carousel/index.tsx
rename to core/ui/primitives/carousel/index.tsx
diff --git a/core/vibes/soul/primitives/chip/index.tsx b/core/ui/primitives/chip/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/chip/index.tsx
rename to core/ui/primitives/chip/index.tsx
diff --git a/core/vibes/soul/primitives/compare-card/add-to-cart-form.tsx b/core/ui/primitives/compare-card/add-to-cart-form.tsx
similarity index 93%
rename from core/vibes/soul/primitives/compare-card/add-to-cart-form.tsx
rename to core/ui/primitives/compare-card/add-to-cart-form.tsx
index 042340d8b4..3d4b14820f 100644
--- a/core/vibes/soul/primitives/compare-card/add-to-cart-form.tsx
+++ b/core/ui/primitives/compare-card/add-to-cart-form.tsx
@@ -3,8 +3,8 @@
 import { SubmissionResult, useForm } from '@conform-to/react';
 import { ReactNode, useActionState, useEffect } from 'react';
 
-import { Button } from '@/vibes/soul/primitives/button';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { Button } from '@/ui/primitives/button';
+import { toast } from '@/ui/primitives/toaster';
 import { useRouter } from '~/i18n/routing';
 
 type Action<S, P> = (state: Awaited<S>, payload: P) => S | Promise<S>;
diff --git a/core/vibes/soul/primitives/compare-card/index.tsx b/core/ui/primitives/compare-card/index.tsx
similarity index 95%
rename from core/vibes/soul/primitives/compare-card/index.tsx
rename to core/ui/primitives/compare-card/index.tsx
index 79723ad15d..2752fadb86 100644
--- a/core/vibes/soul/primitives/compare-card/index.tsx
+++ b/core/ui/primitives/compare-card/index.tsx
@@ -1,9 +1,9 @@
 import { clsx } from 'clsx';
 
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import { Product, ProductCard, ProductCardSkeleton } from '@/vibes/soul/primitives/product-card';
-import { Rating } from '@/vibes/soul/primitives/rating';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import { Product, ProductCard, ProductCardSkeleton } from '@/ui/primitives/product-card';
+import { Rating } from '@/ui/primitives/rating';
+import * as Skeleton from '@/ui/primitives/skeleton';
 
 import { AddToCartForm, CompareAddToCartAction } from './add-to-cart-form';
 
diff --git a/core/vibes/soul/primitives/compare-card/schema.ts b/core/ui/primitives/compare-card/schema.ts
similarity index 100%
rename from core/vibes/soul/primitives/compare-card/schema.ts
rename to core/ui/primitives/compare-card/schema.ts
diff --git a/core/vibes/soul/primitives/compare-drawer/index.tsx b/core/ui/primitives/compare-drawer/index.tsx
similarity index 98%
rename from core/vibes/soul/primitives/compare-drawer/index.tsx
rename to core/ui/primitives/compare-drawer/index.tsx
index 73a23bf933..d0291f4e84 100644
--- a/core/vibes/soul/primitives/compare-drawer/index.tsx
+++ b/core/ui/primitives/compare-drawer/index.tsx
@@ -12,8 +12,8 @@ import {
   useOptimistic,
 } from 'react';
 
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import { toast } from '@/ui/primitives/toaster';
 import { Image } from '~/components/image';
 import { Link } from '~/components/link';
 
diff --git a/core/vibes/soul/primitives/compare-drawer/loader.tsx b/core/ui/primitives/compare-drawer/loader.tsx
similarity index 100%
rename from core/vibes/soul/primitives/compare-drawer/loader.tsx
rename to core/ui/primitives/compare-drawer/loader.tsx
diff --git a/core/vibes/soul/primitives/cursor-pagination/index.tsx b/core/ui/primitives/cursor-pagination/index.tsx
similarity index 98%
rename from core/vibes/soul/primitives/cursor-pagination/index.tsx
rename to core/ui/primitives/cursor-pagination/index.tsx
index 7a892ffe78..2aa4f4496b 100644
--- a/core/vibes/soul/primitives/cursor-pagination/index.tsx
+++ b/core/ui/primitives/cursor-pagination/index.tsx
@@ -6,7 +6,7 @@ import { useSearchParams } from 'next/navigation';
 import { createSerializer, parseAsString } from 'nuqs';
 import { Suspense } from 'react';
 
-import { Streamable, useStreamable } from '@/vibes/soul/lib/streamable';
+import { Streamable, useStreamable } from '@/ui/lib/streamable';
 import { Link } from '~/components/link';
 
 export interface CursorPaginationInfo {
diff --git a/core/vibes/soul/primitives/drawer/index.tsx b/core/ui/primitives/drawer/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/drawer/index.tsx
rename to core/ui/primitives/drawer/index.tsx
diff --git a/core/vibes/soul/primitives/dropdown-menu/index.tsx b/core/ui/primitives/dropdown-menu/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/dropdown-menu/index.tsx
rename to core/ui/primitives/dropdown-menu/index.tsx
diff --git a/core/vibes/soul/primitives/inline-email-form/index.tsx b/core/ui/primitives/inline-email-form/index.tsx
similarity index 95%
rename from core/vibes/soul/primitives/inline-email-form/index.tsx
rename to core/ui/primitives/inline-email-form/index.tsx
index 98d79a5832..0ee6bc4c68 100644
--- a/core/vibes/soul/primitives/inline-email-form/index.tsx
+++ b/core/ui/primitives/inline-email-form/index.tsx
@@ -6,8 +6,8 @@ import { clsx } from 'clsx';
 import { ArrowRight } from 'lucide-react';
 import { useActionState } from 'react';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Button } from '@/vibes/soul/primitives/button';
+import { FormStatus } from '@/ui/form/form-status';
+import { Button } from '@/ui/primitives/button';
 
 import { schema } from './schema';
 
diff --git a/core/vibes/soul/primitives/inline-email-form/schema.ts b/core/ui/primitives/inline-email-form/schema.ts
similarity index 100%
rename from core/vibes/soul/primitives/inline-email-form/schema.ts
rename to core/ui/primitives/inline-email-form/schema.ts
diff --git a/core/vibes/soul/primitives/logo/index.tsx b/core/ui/primitives/logo/index.tsx
similarity index 96%
rename from core/vibes/soul/primitives/logo/index.tsx
rename to core/ui/primitives/logo/index.tsx
index 7e9279c440..5385fb187a 100644
--- a/core/vibes/soul/primitives/logo/index.tsx
+++ b/core/ui/primitives/logo/index.tsx
@@ -1,6 +1,6 @@
 import { clsx } from 'clsx';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
+import { Stream, Streamable } from '@/ui/lib/streamable';
 import { Image } from '~/components/image';
 import { Link } from '~/components/link';
 
diff --git a/core/vibes/soul/primitives/modal/index.tsx b/core/ui/primitives/modal/index.tsx
similarity index 98%
rename from core/vibes/soul/primitives/modal/index.tsx
rename to core/ui/primitives/modal/index.tsx
index f469a60916..34663d6380 100644
--- a/core/vibes/soul/primitives/modal/index.tsx
+++ b/core/ui/primitives/modal/index.tsx
@@ -2,7 +2,7 @@ import * as Dialog from '@radix-ui/react-dialog';
 import { clsx } from 'clsx';
 import { XIcon } from 'lucide-react';
 
-import { Button } from '@/vibes/soul/primitives/button';
+import { Button } from '@/ui/primitives/button';
 
 export interface ModalProps extends React.PropsWithChildren {
   className?: string;
diff --git a/core/vibes/soul/primitives/navigation/index.tsx b/core/ui/primitives/navigation/index.tsx
similarity index 99%
rename from core/vibes/soul/primitives/navigation/index.tsx
rename to core/ui/primitives/navigation/index.tsx
index 11d68c4d8b..abd0e49340 100644
--- a/core/vibes/soul/primitives/navigation/index.tsx
+++ b/core/ui/primitives/navigation/index.tsx
@@ -20,12 +20,12 @@ import React, {
 } from 'react';
 import { useFormStatus } from 'react-dom';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Button } from '@/vibes/soul/primitives/button';
-import { Logo } from '@/vibes/soul/primitives/logo';
-import { Price } from '@/vibes/soul/primitives/price-label';
-import { ProductCard } from '@/vibes/soul/primitives/product-card';
+import { FormStatus } from '@/ui/form/form-status';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Button } from '@/ui/primitives/button';
+import { Logo } from '@/ui/primitives/logo';
+import { Price } from '@/ui/primitives/price-label';
+import { ProductCard } from '@/ui/primitives/product-card';
 import { Link } from '~/components/link';
 import { usePathname, useRouter } from '~/i18n/routing';
 
diff --git a/core/vibes/soul/primitives/navigation/schema.ts b/core/ui/primitives/navigation/schema.ts
similarity index 100%
rename from core/vibes/soul/primitives/navigation/schema.ts
rename to core/ui/primitives/navigation/schema.ts
diff --git a/core/vibes/soul/primitives/price-label/index.tsx b/core/ui/primitives/price-label/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/price-label/index.tsx
rename to core/ui/primitives/price-label/index.tsx
diff --git a/core/vibes/soul/primitives/product-card/compare.tsx b/core/ui/primitives/product-card/compare.tsx
similarity index 87%
rename from core/vibes/soul/primitives/product-card/compare.tsx
rename to core/ui/primitives/product-card/compare.tsx
index bdd5496144..65ce67f238 100644
--- a/core/vibes/soul/primitives/product-card/compare.tsx
+++ b/core/ui/primitives/product-card/compare.tsx
@@ -3,9 +3,9 @@
 import { useQueryState } from 'nuqs';
 import { startTransition } from 'react';
 
-import { Checkbox } from '@/vibes/soul/form/checkbox';
-import { useCompareDrawer } from '@/vibes/soul/primitives/compare-drawer';
-import { compareParser } from '@/vibes/soul/primitives/compare-drawer/loader';
+import { Checkbox } from '@/ui/form/checkbox';
+import { useCompareDrawer } from '@/ui/primitives/compare-drawer';
+import { compareParser } from '@/ui/primitives/compare-drawer/loader';
 
 interface CompareDrawerItem {
   id: string;
diff --git a/core/vibes/soul/primitives/product-card/index.tsx b/core/ui/primitives/product-card/index.tsx
similarity index 97%
rename from core/vibes/soul/primitives/product-card/index.tsx
rename to core/ui/primitives/product-card/index.tsx
index 3be1f8b28f..28ec521bc7 100644
--- a/core/vibes/soul/primitives/product-card/index.tsx
+++ b/core/ui/primitives/product-card/index.tsx
@@ -1,8 +1,8 @@
 import { clsx } from 'clsx';
 
-import { Badge } from '@/vibes/soul/primitives/badge';
-import { Price, PriceLabel } from '@/vibes/soul/primitives/price-label';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
+import { Badge } from '@/ui/primitives/badge';
+import { Price, PriceLabel } from '@/ui/primitives/price-label';
+import * as Skeleton from '@/ui/primitives/skeleton';
 import { Image } from '~/components/image';
 import { Link } from '~/components/link';
 
diff --git a/core/vibes/soul/primitives/rating/index.tsx b/core/ui/primitives/rating/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/rating/index.tsx
rename to core/ui/primitives/rating/index.tsx
diff --git a/core/vibes/soul/primitives/side-panel/index.tsx b/core/ui/primitives/side-panel/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/side-panel/index.tsx
rename to core/ui/primitives/side-panel/index.tsx
diff --git a/core/vibes/soul/primitives/skeleton/index.tsx b/core/ui/primitives/skeleton/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/skeleton/index.tsx
rename to core/ui/primitives/skeleton/index.tsx
diff --git a/core/vibes/soul/primitives/spinner/index.tsx b/core/ui/primitives/spinner/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/spinner/index.tsx
rename to core/ui/primitives/spinner/index.tsx
diff --git a/core/vibes/soul/primitives/toaster/index.tsx b/core/ui/primitives/toaster/index.tsx
similarity index 97%
rename from core/vibes/soul/primitives/toaster/index.tsx
rename to core/ui/primitives/toaster/index.tsx
index cb7b167bf5..56f54d17f2 100644
--- a/core/vibes/soul/primitives/toaster/index.tsx
+++ b/core/ui/primitives/toaster/index.tsx
@@ -3,7 +3,7 @@
 import { ReactNode } from 'react';
 import { Toaster as Sonner, toast as SonnerToast } from 'sonner';
 
-import { Alert } from '@/vibes/soul/primitives/alert';
+import { Alert } from '@/ui/primitives/alert';
 
 type ToasterProps = React.ComponentProps<typeof Sonner>;
 
diff --git a/core/vibes/soul/primitives/tooltip/index.tsx b/core/ui/primitives/tooltip/index.tsx
similarity index 100%
rename from core/vibes/soul/primitives/tooltip/index.tsx
rename to core/ui/primitives/tooltip/index.tsx
diff --git a/core/vibes/soul/primitives/wishlist-item-card/index.tsx b/core/ui/primitives/wishlist-item-card/index.tsx
similarity index 95%
rename from core/vibes/soul/primitives/wishlist-item-card/index.tsx
rename to core/ui/primitives/wishlist-item-card/index.tsx
index 3b68121414..50741e43a1 100644
--- a/core/vibes/soul/primitives/wishlist-item-card/index.tsx
+++ b/core/ui/primitives/wishlist-item-card/index.tsx
@@ -5,8 +5,8 @@ import {
   ProductCard,
   ProductCardProps,
   ProductCardSkeleton,
-} from '@/vibes/soul/primitives/product-card';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
+} from '@/ui/primitives/product-card';
+import * as Skeleton from '@/ui/primitives/skeleton';
 
 import { RemoveWishlistItemAction, RemoveWishlistItemButton } from './remove-wishlist-item';
 import { AddWishlistItemToCartAction, WishlistItemAddToCart } from './wishlist-item-add-to-cart';
diff --git a/core/vibes/soul/primitives/wishlist-item-card/remove-wishlist-item.tsx b/core/ui/primitives/wishlist-item-card/remove-wishlist-item.tsx
similarity index 92%
rename from core/vibes/soul/primitives/wishlist-item-card/remove-wishlist-item.tsx
rename to core/ui/primitives/wishlist-item-card/remove-wishlist-item.tsx
index d1a6a811f1..9e948635fe 100644
--- a/core/vibes/soul/primitives/wishlist-item-card/remove-wishlist-item.tsx
+++ b/core/ui/primitives/wishlist-item-card/remove-wishlist-item.tsx
@@ -4,8 +4,8 @@ import { SubmissionResult } from '@conform-to/react';
 import { XIcon } from 'lucide-react';
 import { useActionState, useEffect, useTransition } from 'react';
 
-import { Button } from '@/vibes/soul/primitives/button';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { Button } from '@/ui/primitives/button';
+import { toast } from '@/ui/primitives/toaster';
 
 type Action<State, Payload> = (state: Awaited<State>, payload: Payload) => State | Promise<State>;
 
diff --git a/core/vibes/soul/primitives/wishlist-item-card/wishlist-item-add-to-cart.tsx b/core/ui/primitives/wishlist-item-card/wishlist-item-add-to-cart.tsx
similarity index 93%
rename from core/vibes/soul/primitives/wishlist-item-card/wishlist-item-add-to-cart.tsx
rename to core/ui/primitives/wishlist-item-card/wishlist-item-add-to-cart.tsx
index 7dccbe1b68..fc2906501f 100644
--- a/core/vibes/soul/primitives/wishlist-item-card/wishlist-item-add-to-cart.tsx
+++ b/core/ui/primitives/wishlist-item-card/wishlist-item-add-to-cart.tsx
@@ -4,8 +4,8 @@ import { SubmissionResult } from '@conform-to/react';
 import { useActionState, useEffect } from 'react';
 import { useFormStatus } from 'react-dom';
 
-import { Button } from '@/vibes/soul/primitives/button';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { Button } from '@/ui/primitives/button';
+import { toast } from '@/ui/primitives/toaster';
 
 import { WishlistItem } from '.';
 
diff --git a/core/vibes/soul/sections/account-settings-section/change-password-form.tsx b/core/ui/sections/account-settings-section/change-password-form.tsx
similarity index 95%
rename from core/vibes/soul/sections/account-settings-section/change-password-form.tsx
rename to core/ui/sections/account-settings-section/change-password-form.tsx
index b89db1180a..11bb676e16 100644
--- a/core/vibes/soul/sections/account-settings-section/change-password-form.tsx
+++ b/core/ui/sections/account-settings-section/change-password-form.tsx
@@ -5,8 +5,8 @@ import { getZodConstraint, parseWithZod } from '@conform-to/zod';
 import { useActionState, useEffect } from 'react';
 import { useFormStatus } from 'react-dom';
 
-import { Input } from '@/vibes/soul/form/input';
-import { Button } from '@/vibes/soul/primitives/button';
+import { Input } from '@/ui/form/input';
+import { Button } from '@/ui/primitives/button';
 
 import { changePasswordSchema } from './schema';
 
diff --git a/core/vibes/soul/sections/account-settings-section/index.tsx b/core/ui/sections/account-settings-section/index.tsx
similarity index 100%
rename from core/vibes/soul/sections/account-settings-section/index.tsx
rename to core/ui/sections/account-settings-section/index.tsx
diff --git a/core/vibes/soul/sections/account-settings-section/schema.ts b/core/ui/sections/account-settings-section/schema.ts
similarity index 100%
rename from core/vibes/soul/sections/account-settings-section/schema.ts
rename to core/ui/sections/account-settings-section/schema.ts
diff --git a/core/vibes/soul/sections/account-settings-section/update-account-form.tsx b/core/ui/sections/account-settings-section/update-account-form.tsx
similarity index 95%
rename from core/vibes/soul/sections/account-settings-section/update-account-form.tsx
rename to core/ui/sections/account-settings-section/update-account-form.tsx
index 05df32e0e3..ea84a21833 100644
--- a/core/vibes/soul/sections/account-settings-section/update-account-form.tsx
+++ b/core/ui/sections/account-settings-section/update-account-form.tsx
@@ -5,9 +5,9 @@ import { getZodConstraint, parseWithZod } from '@conform-to/zod';
 import { useActionState, useEffect, useOptimistic, useTransition } from 'react';
 import { z } from 'zod';
 
-import { Input } from '@/vibes/soul/form/input';
-import { Button } from '@/vibes/soul/primitives/button';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { Input } from '@/ui/form/input';
+import { Button } from '@/ui/primitives/button';
+import { toast } from '@/ui/primitives/toaster';
 
 import { updateAccountSchema } from './schema';
 
diff --git a/core/vibes/soul/sections/address-list-section/index.tsx b/core/ui/sections/address-list-section/index.tsx
similarity index 97%
rename from core/vibes/soul/sections/address-list-section/index.tsx
rename to core/ui/sections/address-list-section/index.tsx
index 772b46942b..5dee89e64c 100644
--- a/core/vibes/soul/sections/address-list-section/index.tsx
+++ b/core/ui/sections/address-list-section/index.tsx
@@ -6,12 +6,12 @@ import { startTransition, useActionState, useEffect, useOptimistic, useState } f
 import { useFormStatus } from 'react-dom';
 import { z } from 'zod';
 
-import { DynamicForm } from '@/vibes/soul/form/dynamic-form';
-import { Field, FieldGroup } from '@/vibes/soul/form/dynamic-form/schema';
-import { Badge } from '@/vibes/soul/primitives/badge';
-import { Button } from '@/vibes/soul/primitives/button';
-import { Spinner } from '@/vibes/soul/primitives/spinner';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { DynamicForm } from '@/ui/form/dynamic-form';
+import { Field, FieldGroup } from '@/ui/form/dynamic-form/schema';
+import { Badge } from '@/ui/primitives/badge';
+import { Button } from '@/ui/primitives/button';
+import { Spinner } from '@/ui/primitives/spinner';
+import { toast } from '@/ui/primitives/toaster';
 
 import { schema } from './schema';
 
diff --git a/core/vibes/soul/sections/address-list-section/schema.ts b/core/ui/sections/address-list-section/schema.ts
similarity index 100%
rename from core/vibes/soul/sections/address-list-section/schema.ts
rename to core/ui/sections/address-list-section/schema.ts
diff --git a/core/vibes/soul/sections/blog-post-content/index.tsx b/core/ui/sections/blog-post-content/index.tsx
similarity index 96%
rename from core/vibes/soul/sections/blog-post-content/index.tsx
rename to core/ui/sections/blog-post-content/index.tsx
index a394ca1d98..26edb68440 100644
--- a/core/vibes/soul/sections/blog-post-content/index.tsx
+++ b/core/ui/sections/blog-post-content/index.tsx
@@ -1,8 +1,8 @@
 import { clsx } from 'clsx';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import { Breadcrumb, Breadcrumbs, BreadcrumbsSkeleton } from '@/vibes/soul/sections/breadcrumbs';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import { Breadcrumb, Breadcrumbs, BreadcrumbsSkeleton } from '@/ui/sections/breadcrumbs';
 import { Image } from '~/components/image';
 
 interface Tag {
diff --git a/core/vibes/soul/sections/blog-post-list/index.tsx b/core/ui/sections/blog-post-list/index.tsx
similarity index 96%
rename from core/vibes/soul/sections/blog-post-list/index.tsx
rename to core/ui/sections/blog-post-list/index.tsx
index d27e6e80a8..149f350c93 100644
--- a/core/vibes/soul/sections/blog-post-list/index.tsx
+++ b/core/ui/sections/blog-post-list/index.tsx
@@ -1,11 +1,11 @@
 import { clsx } from 'clsx';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
+import { Stream, Streamable } from '@/ui/lib/streamable';
 import {
   BlogPostCard,
   BlogPostCardBlogPost,
   BlogPostCardSkeleton,
-} from '@/vibes/soul/primitives/blog-post-card';
+} from '@/ui/primitives/blog-post-card';
 
 interface Props {
   posts: Streamable<BlogPostCardBlogPost[]>;
diff --git a/core/vibes/soul/sections/breadcrumbs/index.tsx b/core/ui/sections/breadcrumbs/index.tsx
similarity index 95%
rename from core/vibes/soul/sections/breadcrumbs/index.tsx
rename to core/ui/sections/breadcrumbs/index.tsx
index 6ffa12875f..5c6be2e414 100644
--- a/core/vibes/soul/sections/breadcrumbs/index.tsx
+++ b/core/ui/sections/breadcrumbs/index.tsx
@@ -1,9 +1,9 @@
 import { clsx } from 'clsx';
 import { ChevronRight } from 'lucide-react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { AnimatedLink } from '@/vibes/soul/primitives/animated-link';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { AnimatedLink } from '@/ui/primitives/animated-link';
+import * as Skeleton from '@/ui/primitives/skeleton';
 
 export interface Breadcrumb {
   label: string;
diff --git a/core/vibes/soul/sections/cart/client.tsx b/core/ui/sections/cart/client.tsx
similarity index 98%
rename from core/vibes/soul/sections/cart/client.tsx
rename to core/ui/sections/cart/client.tsx
index 1940718cdf..82eb047921 100644
--- a/core/vibes/soul/sections/cart/client.tsx
+++ b/core/ui/sections/cart/client.tsx
@@ -13,9 +13,9 @@ import {
 } from 'react';
 import { useFormStatus } from 'react-dom';
 
-import { Button } from '@/vibes/soul/primitives/button';
-import { toast } from '@/vibes/soul/primitives/toaster';
-import { StickySidebarLayout } from '@/vibes/soul/sections/sticky-sidebar-layout';
+import { Button } from '@/ui/primitives/button';
+import { toast } from '@/ui/primitives/toaster';
+import { StickySidebarLayout } from '@/ui/sections/sticky-sidebar-layout';
 import { Image } from '~/components/image';
 
 import { CouponCodeForm, CouponCodeFormState } from './coupon-code-form';
diff --git a/core/vibes/soul/sections/cart/coupon-code-form/coupon-chip.tsx b/core/ui/sections/cart/coupon-code-form/coupon-chip.tsx
similarity index 95%
rename from core/vibes/soul/sections/cart/coupon-code-form/coupon-chip.tsx
rename to core/ui/sections/cart/coupon-code-form/coupon-chip.tsx
index 7b9dd327cb..ae0b8d5b92 100644
--- a/core/vibes/soul/sections/cart/coupon-code-form/coupon-chip.tsx
+++ b/core/ui/sections/cart/coupon-code-form/coupon-chip.tsx
@@ -1,7 +1,7 @@
 import { getFormProps, getInputProps, useForm } from '@conform-to/react';
 import { parseWithZod } from '@conform-to/zod';
 
-import { Chip } from '@/vibes/soul/primitives/chip';
+import { Chip } from '@/ui/primitives/chip';
 
 import { couponCodeActionFormDataSchema } from '../schema';
 
diff --git a/core/vibes/soul/sections/cart/coupon-code-form/index.tsx b/core/ui/sections/cart/coupon-code-form/index.tsx
similarity index 96%
rename from core/vibes/soul/sections/cart/coupon-code-form/index.tsx
rename to core/ui/sections/cart/coupon-code-form/index.tsx
index b40ef1ee4b..b4807593d2 100644
--- a/core/vibes/soul/sections/cart/coupon-code-form/index.tsx
+++ b/core/ui/sections/cart/coupon-code-form/index.tsx
@@ -5,9 +5,9 @@ import { parseWithZod } from '@conform-to/zod';
 import { startTransition, useActionState, useOptimistic } from 'react';
 import { useFormStatus } from 'react-dom';
 
-import { FieldError } from '@/vibes/soul/form/field-error';
-import { Input } from '@/vibes/soul/form/input';
-import { Button } from '@/vibes/soul/primitives/button';
+import { FieldError } from '@/ui/form/field-error';
+import { Input } from '@/ui/form/input';
+import { Button } from '@/ui/primitives/button';
 
 import { couponCodeActionFormDataSchema } from '../schema';
 
diff --git a/core/vibes/soul/sections/cart/index.tsx b/core/ui/sections/cart/index.tsx
similarity index 93%
rename from core/vibes/soul/sections/cart/index.tsx
rename to core/ui/sections/cart/index.tsx
index de667c9dee..ab2f074b9a 100644
--- a/core/vibes/soul/sections/cart/index.tsx
+++ b/core/ui/sections/cart/index.tsx
@@ -1,8 +1,8 @@
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
-import { SectionLayout } from '@/vibes/soul/sections/section-layout';
-import { StickySidebarLayout } from '@/vibes/soul/sections/sticky-sidebar-layout';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import * as Skeleton from '@/ui/primitives/skeleton';
+import { SectionLayout } from '@/ui/sections/section-layout';
+import { StickySidebarLayout } from '@/ui/sections/sticky-sidebar-layout';
 
 import { CartClient, Cart as CartData, CartLineItem, CartProps } from './client';
 
diff --git a/core/vibes/soul/sections/cart/schema.ts b/core/ui/sections/cart/schema.ts
similarity index 100%
rename from core/vibes/soul/sections/cart/schema.ts
rename to core/ui/sections/cart/schema.ts
diff --git a/core/vibes/soul/sections/cart/shipping-form/index.tsx b/core/ui/sections/cart/shipping-form/index.tsx
similarity index 97%
rename from core/vibes/soul/sections/cart/shipping-form/index.tsx
rename to core/ui/sections/cart/shipping-form/index.tsx
index b3f50d33ea..e048a975f6 100644
--- a/core/vibes/soul/sections/cart/shipping-form/index.tsx
+++ b/core/ui/sections/cart/shipping-form/index.tsx
@@ -12,12 +12,12 @@ import { clsx } from 'clsx';
 import { startTransition, useActionState, useEffect, useMemo, useState } from 'react';
 import { useFormStatus } from 'react-dom';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Input } from '@/vibes/soul/form/input';
-import { Label } from '@/vibes/soul/form/label';
-import { RadioGroup } from '@/vibes/soul/form/radio-group';
-import { Select } from '@/vibes/soul/form/select';
-import { Button } from '@/vibes/soul/primitives/button';
+import { FormStatus } from '@/ui/form/form-status';
+import { Input } from '@/ui/form/input';
+import { Label } from '@/ui/form/label';
+import { RadioGroup } from '@/ui/form/radio-group';
+import { Select } from '@/ui/form/select';
+import { Button } from '@/ui/primitives/button';
 
 import { shippingActionFormDataSchema } from '../schema';
 
diff --git a/core/vibes/soul/sections/compare-section/index.tsx b/core/ui/sections/compare-section/index.tsx
similarity index 94%
rename from core/vibes/soul/sections/compare-section/index.tsx
rename to core/ui/sections/compare-section/index.tsx
index 49712509d4..dabfabde99 100644
--- a/core/vibes/soul/sections/compare-section/index.tsx
+++ b/core/ui/sections/compare-section/index.tsx
@@ -1,19 +1,10 @@
 import { clsx } from 'clsx';
 import { ArrowLeft, ArrowRight } from 'lucide-react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import {
-  Carousel,
-  CarouselButtons,
-  CarouselContent,
-  CarouselItem,
-} from '@/vibes/soul/primitives/carousel';
-import {
-  CompareCard,
-  CompareCardSkeleton,
-  CompareCardWithId,
-} from '@/vibes/soul/primitives/compare-card';
-import { CompareAddToCartAction } from '@/vibes/soul/primitives/compare-card/add-to-cart-form';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Carousel, CarouselButtons, CarouselContent, CarouselItem } from '@/ui/primitives/carousel';
+import { CompareCard, CompareCardSkeleton, CompareCardWithId } from '@/ui/primitives/compare-card';
+import { CompareAddToCartAction } from '@/ui/primitives/compare-card/add-to-cart-form';
 
 interface Props {
   className?: string;
diff --git a/core/vibes/soul/sections/dynamic-form-section/index.tsx b/core/ui/sections/dynamic-form-section/index.tsx
similarity index 81%
rename from core/vibes/soul/sections/dynamic-form-section/index.tsx
rename to core/ui/sections/dynamic-form-section/index.tsx
index 3c22aae6d7..f2fbd1b170 100644
--- a/core/vibes/soul/sections/dynamic-form-section/index.tsx
+++ b/core/ui/sections/dynamic-form-section/index.tsx
@@ -1,8 +1,8 @@
 import { clsx } from 'clsx';
 
-import { DynamicForm, DynamicFormAction } from '@/vibes/soul/form/dynamic-form';
-import { Field, FieldGroup } from '@/vibes/soul/form/dynamic-form/schema';
-import { SectionLayout } from '@/vibes/soul/sections/section-layout';
+import { DynamicForm, DynamicFormAction } from '@/ui/form/dynamic-form';
+import { Field, FieldGroup } from '@/ui/form/dynamic-form/schema';
+import { SectionLayout } from '@/ui/sections/section-layout';
 
 interface Props<F extends Field> {
   title?: string;
diff --git a/core/vibes/soul/sections/error/index.tsx b/core/ui/sections/error/index.tsx
similarity index 94%
rename from core/vibes/soul/sections/error/index.tsx
rename to core/ui/sections/error/index.tsx
index 3cc8d0491b..25b4fcb5a5 100644
--- a/core/vibes/soul/sections/error/index.tsx
+++ b/core/ui/sections/error/index.tsx
@@ -1,4 +1,4 @@
-import { Button } from '@/vibes/soul/primitives/button';
+import { Button } from '@/ui/primitives/button';
 
 interface Props {
   title: string;
diff --git a/core/vibes/soul/sections/featured-blog-post-list/index.tsx b/core/ui/sections/featured-blog-post-list/index.tsx
similarity index 74%
rename from core/vibes/soul/sections/featured-blog-post-list/index.tsx
rename to core/ui/sections/featured-blog-post-list/index.tsx
index e5b616ff29..d44c26153c 100644
--- a/core/vibes/soul/sections/featured-blog-post-list/index.tsx
+++ b/core/ui/sections/featured-blog-post-list/index.tsx
@@ -1,9 +1,9 @@
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { BlogPostCardBlogPost } from '@/vibes/soul/primitives/blog-post-card';
-import { CursorPagination, CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { BlogPostList } from '@/vibes/soul/sections/blog-post-list';
-import { Breadcrumb, Breadcrumbs } from '@/vibes/soul/sections/breadcrumbs';
-import { SectionLayout } from '@/vibes/soul/sections/section-layout';
+import { Streamable } from '@/ui/lib/streamable';
+import { BlogPostCardBlogPost } from '@/ui/primitives/blog-post-card';
+import { CursorPagination, CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { BlogPostList } from '@/ui/sections/blog-post-list';
+import { Breadcrumb, Breadcrumbs } from '@/ui/sections/breadcrumbs';
+import { SectionLayout } from '@/ui/sections/section-layout';
 
 interface Props {
   title: string;
diff --git a/core/vibes/soul/sections/featured-product-carousel/index.tsx b/core/ui/sections/featured-product-carousel/index.tsx
similarity index 90%
rename from core/vibes/soul/sections/featured-product-carousel/index.tsx
rename to core/ui/sections/featured-product-carousel/index.tsx
index 585cfab0f5..7b9144d132 100644
--- a/core/vibes/soul/sections/featured-product-carousel/index.tsx
+++ b/core/ui/sections/featured-product-carousel/index.tsx
@@ -1,7 +1,7 @@
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { AnimatedLink } from '@/vibes/soul/primitives/animated-link';
-import { CarouselProduct, ProductCarousel } from '@/vibes/soul/sections/product-carousel';
-import { SectionLayout } from '@/vibes/soul/sections/section-layout';
+import { Streamable } from '@/ui/lib/streamable';
+import { AnimatedLink } from '@/ui/primitives/animated-link';
+import { CarouselProduct, ProductCarousel } from '@/ui/sections/product-carousel';
+import { SectionLayout } from '@/ui/sections/section-layout';
 
 interface Link {
   label: string;
diff --git a/core/vibes/soul/sections/featured-product-list/index.tsx b/core/ui/sections/featured-product-list/index.tsx
similarity index 86%
rename from core/vibes/soul/sections/featured-product-list/index.tsx
rename to core/ui/sections/featured-product-list/index.tsx
index a39d49da46..474e4ce5ec 100644
--- a/core/vibes/soul/sections/featured-product-list/index.tsx
+++ b/core/ui/sections/featured-product-list/index.tsx
@@ -1,8 +1,8 @@
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import { Product } from '@/vibes/soul/primitives/product-card';
-import { ProductList } from '@/vibes/soul/sections/product-list';
-import { StickySidebarLayout } from '@/vibes/soul/sections/sticky-sidebar-layout';
+import { Streamable } from '@/ui/lib/streamable';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import { Product } from '@/ui/primitives/product-card';
+import { ProductList } from '@/ui/sections/product-list';
+import { StickySidebarLayout } from '@/ui/sections/sticky-sidebar-layout';
 
 interface Link {
   label: string;
diff --git a/core/vibes/soul/sections/footer/index.tsx b/core/ui/sections/footer/index.tsx
similarity index 99%
rename from core/vibes/soul/sections/footer/index.tsx
rename to core/ui/sections/footer/index.tsx
index c7c3f68f78..035dbd2df4 100644
--- a/core/vibes/soul/sections/footer/index.tsx
+++ b/core/ui/sections/footer/index.tsx
@@ -1,8 +1,8 @@
 import { clsx } from 'clsx';
 import { forwardRef, ReactNode, type Ref } from 'react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Logo } from '@/vibes/soul/primitives/logo';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Logo } from '@/ui/primitives/logo';
 import { Link } from '~/components/link';
 
 interface Image {
diff --git a/core/vibes/soul/sections/footer/payment-icons.tsx b/core/ui/sections/footer/payment-icons.tsx
similarity index 100%
rename from core/vibes/soul/sections/footer/payment-icons.tsx
rename to core/ui/sections/footer/payment-icons.tsx
diff --git a/core/vibes/soul/sections/footer/social-icons.tsx b/core/ui/sections/footer/social-icons.tsx
similarity index 100%
rename from core/vibes/soul/sections/footer/social-icons.tsx
rename to core/ui/sections/footer/social-icons.tsx
diff --git a/core/vibes/soul/sections/forgot-password-section/forgot-password-form.tsx b/core/ui/sections/forgot-password-section/forgot-password-form.tsx
similarity index 92%
rename from core/vibes/soul/sections/forgot-password-section/forgot-password-form.tsx
rename to core/ui/sections/forgot-password-section/forgot-password-form.tsx
index 2230db995d..2875754fa1 100644
--- a/core/vibes/soul/sections/forgot-password-section/forgot-password-form.tsx
+++ b/core/ui/sections/forgot-password-section/forgot-password-form.tsx
@@ -5,9 +5,9 @@ import { getZodConstraint, parseWithZod } from '@conform-to/zod';
 import { useActionState } from 'react';
 import { useFormStatus } from 'react-dom';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Input } from '@/vibes/soul/form/input';
-import { Button } from '@/vibes/soul/primitives/button';
+import { FormStatus } from '@/ui/form/form-status';
+import { Input } from '@/ui/form/input';
+import { Button } from '@/ui/primitives/button';
 
 import { schema } from './schema';
 
diff --git a/core/vibes/soul/sections/forgot-password-section/index.tsx b/core/ui/sections/forgot-password-section/index.tsx
similarity index 100%
rename from core/vibes/soul/sections/forgot-password-section/index.tsx
rename to core/ui/sections/forgot-password-section/index.tsx
diff --git a/core/vibes/soul/sections/forgot-password-section/schema.ts b/core/ui/sections/forgot-password-section/schema.ts
similarity index 100%
rename from core/vibes/soul/sections/forgot-password-section/schema.ts
rename to core/ui/sections/forgot-password-section/schema.ts
diff --git a/core/vibes/soul/sections/header-section/index.tsx b/core/ui/sections/header-section/index.tsx
similarity index 92%
rename from core/vibes/soul/sections/header-section/index.tsx
rename to core/ui/sections/header-section/index.tsx
index aa0d34e02e..0fcd77bfee 100644
--- a/core/vibes/soul/sections/header-section/index.tsx
+++ b/core/ui/sections/header-section/index.tsx
@@ -3,8 +3,8 @@
 import { forwardRef, useEffect, useState } from 'react';
 import Headroom from 'react-headroom';
 
-import { Banner } from '@/vibes/soul/primitives/banner';
-import { Navigation } from '@/vibes/soul/primitives/navigation';
+import { Banner } from '@/ui/primitives/banner';
+import { Navigation } from '@/ui/primitives/navigation';
 
 interface Props {
   navigation: React.ComponentPropsWithoutRef<typeof Navigation>;
diff --git a/core/vibes/soul/sections/maintenance/index.tsx b/core/ui/sections/maintenance/index.tsx
similarity index 95%
rename from core/vibes/soul/sections/maintenance/index.tsx
rename to core/ui/sections/maintenance/index.tsx
index 04dd70dc09..82243d1991 100644
--- a/core/vibes/soul/sections/maintenance/index.tsx
+++ b/core/ui/sections/maintenance/index.tsx
@@ -1,7 +1,7 @@
 import { MailIcon, PhoneIcon } from 'lucide-react';
 
-import { Logo } from '@/vibes/soul/primitives/logo';
-import { SectionLayout } from '@/vibes/soul/sections/section-layout';
+import { Logo } from '@/ui/primitives/logo';
+import { SectionLayout } from '@/ui/sections/section-layout';
 import { Link } from '~/components/link';
 
 interface Image {
diff --git a/core/vibes/soul/sections/not-found/index.tsx b/core/ui/sections/not-found/index.tsx
similarity index 100%
rename from core/vibes/soul/sections/not-found/index.tsx
rename to core/ui/sections/not-found/index.tsx
diff --git a/core/vibes/soul/sections/order-details-section/index.tsx b/core/ui/sections/order-details-section/index.tsx
similarity index 99%
rename from core/vibes/soul/sections/order-details-section/index.tsx
rename to core/ui/sections/order-details-section/index.tsx
index 9155a275f5..46924e72c4 100644
--- a/core/vibes/soul/sections/order-details-section/index.tsx
+++ b/core/ui/sections/order-details-section/index.tsx
@@ -1,6 +1,6 @@
 import { ArrowLeft } from 'lucide-react';
 
-import { Badge } from '@/vibes/soul/primitives/badge';
+import { Badge } from '@/ui/primitives/badge';
 import { Image } from '~/components/image';
 import { Link } from '~/components/link';
 
diff --git a/core/vibes/soul/sections/order-list-section/index.tsx b/core/ui/sections/order-list-section/index.tsx
similarity index 89%
rename from core/vibes/soul/sections/order-list-section/index.tsx
rename to core/ui/sections/order-list-section/index.tsx
index 14bea22236..a55b9ffaa3 100644
--- a/core/vibes/soul/sections/order-list-section/index.tsx
+++ b/core/ui/sections/order-list-section/index.tsx
@@ -1,4 +1,4 @@
-import { CursorPagination, CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
+import { CursorPagination, CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
 
 import { OrderList } from './order-list';
 import { Order } from './order-list-item';
diff --git a/core/vibes/soul/sections/order-list-section/order-list-item.tsx b/core/ui/sections/order-list-section/order-list-item.tsx
similarity index 93%
rename from core/vibes/soul/sections/order-list-section/order-list-item.tsx
rename to core/ui/sections/order-list-section/order-list-item.tsx
index 6c412790b6..8acdfc5557 100644
--- a/core/vibes/soul/sections/order-list-section/order-list-item.tsx
+++ b/core/ui/sections/order-list-section/order-list-item.tsx
@@ -1,7 +1,7 @@
 import { clsx } from 'clsx';
 
-import { Badge } from '@/vibes/soul/primitives/badge';
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
+import { Badge } from '@/ui/primitives/badge';
+import { ButtonLink } from '@/ui/primitives/button-link';
 
 import { OrderListLineItem } from './order-list-line-item';
 
diff --git a/core/vibes/soul/sections/order-list-section/order-list-line-item.tsx b/core/ui/sections/order-list-section/order-list-line-item.tsx
similarity index 97%
rename from core/vibes/soul/sections/order-list-section/order-list-line-item.tsx
rename to core/ui/sections/order-list-section/order-list-line-item.tsx
index cb8cc97dcb..959ef0a666 100644
--- a/core/vibes/soul/sections/order-list-section/order-list-line-item.tsx
+++ b/core/ui/sections/order-list-section/order-list-line-item.tsx
@@ -1,6 +1,6 @@
 import { clsx } from 'clsx';
 
-import { PriceLabel } from '@/vibes/soul/primitives/price-label';
+import { PriceLabel } from '@/ui/primitives/price-label';
 import { Image } from '~/components/image';
 import { Link } from '~/components/link';
 
diff --git a/core/vibes/soul/sections/order-list-section/order-list.tsx b/core/ui/sections/order-list-section/order-list.tsx
similarity index 100%
rename from core/vibes/soul/sections/order-list-section/order-list.tsx
rename to core/ui/sections/order-list-section/order-list.tsx
diff --git a/core/vibes/soul/sections/product-carousel/index.tsx b/core/ui/sections/product-carousel/index.tsx
similarity index 96%
rename from core/vibes/soul/sections/product-carousel/index.tsx
rename to core/ui/sections/product-carousel/index.tsx
index 61005b449b..d7da8d64ae 100644
--- a/core/vibes/soul/sections/product-carousel/index.tsx
+++ b/core/ui/sections/product-carousel/index.tsx
@@ -1,20 +1,16 @@
 import { clsx } from 'clsx';
 import { ArrowLeft, ArrowRight } from 'lucide-react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
+import { Stream, Streamable } from '@/ui/lib/streamable';
 import {
   Carousel,
   CarouselButtons,
   CarouselContent,
   CarouselItem,
   CarouselScrollbar,
-} from '@/vibes/soul/primitives/carousel';
-import {
-  type Product,
-  ProductCard,
-  ProductCardSkeleton,
-} from '@/vibes/soul/primitives/product-card';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
+} from '@/ui/primitives/carousel';
+import { type Product, ProductCard, ProductCardSkeleton } from '@/ui/primitives/product-card';
+import * as Skeleton from '@/ui/primitives/skeleton';
 
 export type CarouselProduct = Product;
 
diff --git a/core/vibes/soul/sections/product-detail/index.tsx b/core/ui/sections/product-detail/index.tsx
similarity index 96%
rename from core/vibes/soul/sections/product-detail/index.tsx
rename to core/ui/sections/product-detail/index.tsx
index ab230e81b1..cb85dbd9a7 100644
--- a/core/vibes/soul/sections/product-detail/index.tsx
+++ b/core/ui/sections/product-detail/index.tsx
@@ -1,12 +1,12 @@
 import { ReactNode } from 'react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Accordion, AccordionItem } from '@/vibes/soul/primitives/accordion';
-import { Price, PriceLabel } from '@/vibes/soul/primitives/price-label';
-import { Rating } from '@/vibes/soul/primitives/rating';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
-import { type Breadcrumb, Breadcrumbs } from '@/vibes/soul/sections/breadcrumbs';
-import { ProductGallery } from '@/vibes/soul/sections/product-detail/product-gallery';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Accordion, AccordionItem } from '@/ui/primitives/accordion';
+import { Price, PriceLabel } from '@/ui/primitives/price-label';
+import { Rating } from '@/ui/primitives/rating';
+import * as Skeleton from '@/ui/primitives/skeleton';
+import { type Breadcrumb, Breadcrumbs } from '@/ui/sections/breadcrumbs';
+import { ProductGallery } from '@/ui/sections/product-detail/product-gallery';
 
 import { ProductDetailForm, ProductDetailFormAction } from './product-detail-form';
 import { Field } from './schema';
diff --git a/core/vibes/soul/sections/product-detail/product-detail-form.tsx b/core/ui/sections/product-detail/product-detail-form.tsx
similarity index 93%
rename from core/vibes/soul/sections/product-detail/product-detail-form.tsx
rename to core/ui/sections/product-detail/product-detail-form.tsx
index 8d9716e8f3..95fbd6368b 100644
--- a/core/vibes/soul/sections/product-detail/product-detail-form.tsx
+++ b/core/ui/sections/product-detail/product-detail-form.tsx
@@ -15,17 +15,17 @@ import { ReactNode, useActionState, useCallback, useEffect } from 'react';
 import { useFormStatus } from 'react-dom';
 import { z } from 'zod';
 
-import { ButtonRadioGroup } from '@/vibes/soul/form/button-radio-group';
-import { CardRadioGroup } from '@/vibes/soul/form/card-radio-group';
-import { Checkbox } from '@/vibes/soul/form/checkbox';
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Input } from '@/vibes/soul/form/input';
-import { NumberInput } from '@/vibes/soul/form/number-input';
-import { RadioGroup } from '@/vibes/soul/form/radio-group';
-import { Select } from '@/vibes/soul/form/select';
-import { SwatchRadioGroup } from '@/vibes/soul/form/swatch-radio-group';
-import { Button } from '@/vibes/soul/primitives/button';
-import { toast } from '@/vibes/soul/primitives/toaster';
+import { ButtonRadioGroup } from '@/ui/form/button-radio-group';
+import { CardRadioGroup } from '@/ui/form/card-radio-group';
+import { Checkbox } from '@/ui/form/checkbox';
+import { FormStatus } from '@/ui/form/form-status';
+import { Input } from '@/ui/form/input';
+import { NumberInput } from '@/ui/form/number-input';
+import { RadioGroup } from '@/ui/form/radio-group';
+import { Select } from '@/ui/form/select';
+import { SwatchRadioGroup } from '@/ui/form/swatch-radio-group';
+import { Button } from '@/ui/primitives/button';
+import { toast } from '@/ui/primitives/toaster';
 import { usePathname, useRouter } from '~/i18n/routing';
 
 import { Field, schema, SchemaRawShape } from './schema';
diff --git a/core/vibes/soul/sections/product-detail/product-gallery.tsx b/core/ui/sections/product-detail/product-gallery.tsx
similarity index 100%
rename from core/vibes/soul/sections/product-detail/product-gallery.tsx
rename to core/ui/sections/product-detail/product-gallery.tsx
diff --git a/core/vibes/soul/sections/product-detail/schema.ts b/core/ui/sections/product-detail/schema.ts
similarity index 100%
rename from core/vibes/soul/sections/product-detail/schema.ts
rename to core/ui/sections/product-detail/schema.ts
diff --git a/core/vibes/soul/sections/product-list/index.tsx b/core/ui/sections/product-list/index.tsx
similarity index 94%
rename from core/vibes/soul/sections/product-list/index.tsx
rename to core/ui/sections/product-list/index.tsx
index f825bdc051..be2f296c74 100644
--- a/core/vibes/soul/sections/product-list/index.tsx
+++ b/core/ui/sections/product-list/index.tsx
@@ -1,13 +1,9 @@
 import { clsx } from 'clsx';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { CompareDrawer, CompareDrawerProvider } from '@/vibes/soul/primitives/compare-drawer';
-import {
-  type Product,
-  ProductCard,
-  ProductCardSkeleton,
-} from '@/vibes/soul/primitives/product-card';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { CompareDrawer, CompareDrawerProvider } from '@/ui/primitives/compare-drawer';
+import { type Product, ProductCard, ProductCardSkeleton } from '@/ui/primitives/product-card';
+import * as Skeleton from '@/ui/primitives/skeleton';
 
 interface ProductListProps {
   products: Streamable<Product[]>;
diff --git a/core/vibes/soul/sections/products-list-section/filter-parsers.ts b/core/ui/sections/products-list-section/filter-parsers.ts
similarity index 100%
rename from core/vibes/soul/sections/products-list-section/filter-parsers.ts
rename to core/ui/sections/products-list-section/filter-parsers.ts
diff --git a/core/vibes/soul/sections/products-list-section/filters-panel.tsx b/core/ui/sections/products-list-section/filters-panel.tsx
similarity index 95%
rename from core/vibes/soul/sections/products-list-section/filters-panel.tsx
rename to core/ui/sections/products-list-section/filters-panel.tsx
index 46953e72f0..d4ad199e9d 100644
--- a/core/vibes/soul/sections/products-list-section/filters-panel.tsx
+++ b/core/ui/sections/products-list-section/filters-panel.tsx
@@ -8,14 +8,14 @@ import { clsx } from 'clsx';
 import { parseAsString, useQueryStates } from 'nuqs';
 import { Suspense, useOptimistic, useState, useTransition } from 'react';
 
-import { Checkbox } from '@/vibes/soul/form/checkbox';
-import { RangeInput } from '@/vibes/soul/form/range-input';
-import { ToggleGroup } from '@/vibes/soul/form/toggle-group';
-import { Streamable, useStreamable } from '@/vibes/soul/lib/streamable';
-import { Accordion, AccordionItem } from '@/vibes/soul/primitives/accordion';
-import { Button } from '@/vibes/soul/primitives/button';
-import { CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Rating } from '@/vibes/soul/primitives/rating';
+import { Checkbox } from '@/ui/form/checkbox';
+import { RangeInput } from '@/ui/form/range-input';
+import { ToggleGroup } from '@/ui/form/toggle-group';
+import { Streamable, useStreamable } from '@/ui/lib/streamable';
+import { Accordion, AccordionItem } from '@/ui/primitives/accordion';
+import { Button } from '@/ui/primitives/button';
+import { CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Rating } from '@/ui/primitives/rating';
 import { Link } from '~/components/link';
 
 import { getFilterParsers } from './filter-parsers';
diff --git a/core/vibes/soul/sections/products-list-section/index.tsx b/core/ui/sections/products-list-section/index.tsx
similarity index 91%
rename from core/vibes/soul/sections/products-list-section/index.tsx
rename to core/ui/sections/products-list-section/index.tsx
index b62b8be950..43be9ede17 100644
--- a/core/vibes/soul/sections/products-list-section/index.tsx
+++ b/core/ui/sections/products-list-section/index.tsx
@@ -1,19 +1,19 @@
 import { Sliders } from 'lucide-react';
 import { Suspense } from 'react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Button } from '@/vibes/soul/primitives/button';
-import { CursorPagination, CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Product } from '@/vibes/soul/primitives/product-card';
-import * as SidePanel from '@/vibes/soul/primitives/side-panel';
-import { Breadcrumb, Breadcrumbs, BreadcrumbsSkeleton } from '@/vibes/soul/sections/breadcrumbs';
-import { ProductList } from '@/vibes/soul/sections/product-list';
-import { Filter, FiltersPanel } from '@/vibes/soul/sections/products-list-section/filters-panel';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Button } from '@/ui/primitives/button';
+import { CursorPagination, CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Product } from '@/ui/primitives/product-card';
+import * as SidePanel from '@/ui/primitives/side-panel';
+import { Breadcrumb, Breadcrumbs, BreadcrumbsSkeleton } from '@/ui/sections/breadcrumbs';
+import { ProductList } from '@/ui/sections/product-list';
+import { Filter, FiltersPanel } from '@/ui/sections/products-list-section/filters-panel';
 import {
   Sorting,
   SortingSkeleton,
   Option as SortOption,
-} from '@/vibes/soul/sections/products-list-section/sorting';
+} from '@/ui/sections/products-list-section/sorting';
 
 interface Props {
   breadcrumbs?: Streamable<Breadcrumb[]>;
diff --git a/core/vibes/soul/sections/products-list-section/sorting.tsx b/core/ui/sections/products-list-section/sorting.tsx
similarity index 92%
rename from core/vibes/soul/sections/products-list-section/sorting.tsx
rename to core/ui/sections/products-list-section/sorting.tsx
index c6b2a246ca..313b58cc87 100644
--- a/core/vibes/soul/sections/products-list-section/sorting.tsx
+++ b/core/ui/sections/products-list-section/sorting.tsx
@@ -3,8 +3,8 @@
 import { parseAsString, useQueryState } from 'nuqs';
 import { useOptimistic, useTransition } from 'react';
 
-import { Select } from '@/vibes/soul/form/select';
-import { Streamable, useStreamable } from '@/vibes/soul/lib/streamable';
+import { Select } from '@/ui/form/select';
+import { Streamable, useStreamable } from '@/ui/lib/streamable';
 
 export interface Option {
   label: string;
diff --git a/core/vibes/soul/sections/reset-password-section/index.tsx b/core/ui/sections/reset-password-section/index.tsx
similarity index 100%
rename from core/vibes/soul/sections/reset-password-section/index.tsx
rename to core/ui/sections/reset-password-section/index.tsx
diff --git a/core/vibes/soul/sections/reset-password-section/reset-password-form.tsx b/core/ui/sections/reset-password-section/reset-password-form.tsx
similarity index 92%
rename from core/vibes/soul/sections/reset-password-section/reset-password-form.tsx
rename to core/ui/sections/reset-password-section/reset-password-form.tsx
index 5e553b82ce..008bae4fab 100644
--- a/core/vibes/soul/sections/reset-password-section/reset-password-form.tsx
+++ b/core/ui/sections/reset-password-section/reset-password-form.tsx
@@ -4,9 +4,9 @@ import { getFormProps, getInputProps, SubmissionResult, useForm } from '@conform
 import { getZodConstraint, parseWithZod } from '@conform-to/zod';
 import { useActionState } from 'react';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Input } from '@/vibes/soul/form/input';
-import { Button } from '@/vibes/soul/primitives/button';
+import { FormStatus } from '@/ui/form/form-status';
+import { Input } from '@/ui/form/input';
+import { Button } from '@/ui/primitives/button';
 
 import { schema } from './schema';
 
diff --git a/core/vibes/soul/sections/reset-password-section/schema.ts b/core/ui/sections/reset-password-section/schema.ts
similarity index 100%
rename from core/vibes/soul/sections/reset-password-section/schema.ts
rename to core/ui/sections/reset-password-section/schema.ts
diff --git a/core/vibes/soul/sections/reviews/index.tsx b/core/ui/sections/reviews/index.tsx
similarity index 94%
rename from core/vibes/soul/sections/reviews/index.tsx
rename to core/ui/sections/reviews/index.tsx
index 6fd22af521..519ae7d9c9 100644
--- a/core/vibes/soul/sections/reviews/index.tsx
+++ b/core/ui/sections/reviews/index.tsx
@@ -1,7 +1,7 @@
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { CursorPagination, CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Rating } from '@/vibes/soul/primitives/rating';
-import { StickySidebarLayout } from '@/vibes/soul/sections/sticky-sidebar-layout';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { CursorPagination, CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Rating } from '@/ui/primitives/rating';
+import { StickySidebarLayout } from '@/ui/sections/sticky-sidebar-layout';
 
 interface Review {
   id: string;
diff --git a/core/vibes/soul/sections/section-layout/index.tsx b/core/ui/sections/section-layout/index.tsx
similarity index 100%
rename from core/vibes/soul/sections/section-layout/index.tsx
rename to core/ui/sections/section-layout/index.tsx
diff --git a/core/vibes/soul/sections/sidebar-menu/index.tsx b/core/ui/sections/sidebar-menu/index.tsx
similarity index 96%
rename from core/vibes/soul/sections/sidebar-menu/index.tsx
rename to core/ui/sections/sidebar-menu/index.tsx
index dfdc374651..bc99e3b745 100644
--- a/core/vibes/soul/sections/sidebar-menu/index.tsx
+++ b/core/ui/sections/sidebar-menu/index.tsx
@@ -1,6 +1,6 @@
 import { ComponentPropsWithoutRef } from 'react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
+import { Stream, Streamable } from '@/ui/lib/streamable';
 
 import { SidebarMenuLink } from './sidebar-menu-link';
 import { SidebarMenuSelect } from './sidebar-menu-select';
diff --git a/core/vibes/soul/sections/sidebar-menu/sidebar-menu-link.tsx b/core/ui/sections/sidebar-menu/sidebar-menu-link.tsx
similarity index 100%
rename from core/vibes/soul/sections/sidebar-menu/sidebar-menu-link.tsx
rename to core/ui/sections/sidebar-menu/sidebar-menu-link.tsx
diff --git a/core/vibes/soul/sections/sidebar-menu/sidebar-menu-select.tsx b/core/ui/sections/sidebar-menu/sidebar-menu-select.tsx
similarity index 90%
rename from core/vibes/soul/sections/sidebar-menu/sidebar-menu-select.tsx
rename to core/ui/sections/sidebar-menu/sidebar-menu-select.tsx
index 3d0407c00a..36b4f9b113 100644
--- a/core/vibes/soul/sections/sidebar-menu/sidebar-menu-select.tsx
+++ b/core/ui/sections/sidebar-menu/sidebar-menu-select.tsx
@@ -1,6 +1,6 @@
 'use client';
 
-import { Select } from '@/vibes/soul/form/select';
+import { Select } from '@/ui/form/select';
 import { usePathname, useRouter } from '~/i18n/routing';
 
 export function SidebarMenuSelect({ links }: { links: Array<{ href: string; label: string }> }) {
diff --git a/core/vibes/soul/sections/sign-in-section/index.tsx b/core/ui/sections/sign-in-section/index.tsx
similarity index 100%
rename from core/vibes/soul/sections/sign-in-section/index.tsx
rename to core/ui/sections/sign-in-section/index.tsx
diff --git a/core/vibes/soul/sections/sign-in-section/schema.ts b/core/ui/sections/sign-in-section/schema.ts
similarity index 100%
rename from core/vibes/soul/sections/sign-in-section/schema.ts
rename to core/ui/sections/sign-in-section/schema.ts
diff --git a/core/vibes/soul/sections/sign-in-section/sign-in-form.tsx b/core/ui/sections/sign-in-section/sign-in-form.tsx
similarity index 92%
rename from core/vibes/soul/sections/sign-in-section/sign-in-form.tsx
rename to core/ui/sections/sign-in-section/sign-in-form.tsx
index 2d380a4503..09364985ee 100644
--- a/core/vibes/soul/sections/sign-in-section/sign-in-form.tsx
+++ b/core/ui/sections/sign-in-section/sign-in-form.tsx
@@ -5,9 +5,9 @@ import { getZodConstraint, parseWithZod } from '@conform-to/zod';
 import { useActionState } from 'react';
 import { useFormStatus } from 'react-dom';
 
-import { FormStatus } from '@/vibes/soul/form/form-status';
-import { Input } from '@/vibes/soul/form/input';
-import { Button } from '@/vibes/soul/primitives/button';
+import { FormStatus } from '@/ui/form/form-status';
+import { Input } from '@/ui/form/input';
+import { Button } from '@/ui/primitives/button';
 
 import { schema } from './schema';
 
diff --git a/core/vibes/soul/sections/slideshow/index.tsx b/core/ui/sections/slideshow/index.tsx
similarity index 99%
rename from core/vibes/soul/sections/slideshow/index.tsx
rename to core/ui/sections/slideshow/index.tsx
index b542ae4d4b..2f285924d3 100644
--- a/core/vibes/soul/sections/slideshow/index.tsx
+++ b/core/ui/sections/slideshow/index.tsx
@@ -8,7 +8,7 @@ import useEmblaCarousel from 'embla-carousel-react';
 import { Pause, Play } from 'lucide-react';
 import { ComponentPropsWithoutRef, useCallback, useEffect, useState } from 'react';
 
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
+import { ButtonLink } from '@/ui/primitives/button-link';
 import { Image } from '~/components/image';
 
 type ButtonLinkProps = ComponentPropsWithoutRef<typeof ButtonLink>;
diff --git a/core/vibes/soul/sections/sticky-sidebar-layout/index.tsx b/core/ui/sections/sticky-sidebar-layout/index.tsx
similarity index 100%
rename from core/vibes/soul/sections/sticky-sidebar-layout/index.tsx
rename to core/ui/sections/sticky-sidebar-layout/index.tsx
diff --git a/core/vibes/soul/sections/subscribe/index.tsx b/core/ui/sections/subscribe/index.tsx
similarity index 95%
rename from core/vibes/soul/sections/subscribe/index.tsx
rename to core/ui/sections/subscribe/index.tsx
index 7bd0d21bd6..1fa74e13ee 100644
--- a/core/vibes/soul/sections/subscribe/index.tsx
+++ b/core/ui/sections/subscribe/index.tsx
@@ -1,7 +1,7 @@
 import { SubmissionResult } from '@conform-to/react';
 import { clsx } from 'clsx';
 
-import { InlineEmailForm } from '@/vibes/soul/primitives/inline-email-form';
+import { InlineEmailForm } from '@/ui/primitives/inline-email-form';
 import { Image } from '~/components/image';
 
 type Action<State, Payload> = (state: Awaited<State>, payload: Payload) => State | Promise<State>;
diff --git a/core/vibes/soul/sections/wishlist-details/index.tsx b/core/ui/sections/wishlist-details/index.tsx
similarity index 92%
rename from core/vibes/soul/sections/wishlist-details/index.tsx
rename to core/ui/sections/wishlist-details/index.tsx
index 6103011ce0..9dc9bd5aee 100644
--- a/core/vibes/soul/sections/wishlist-details/index.tsx
+++ b/core/ui/sections/wishlist-details/index.tsx
@@ -1,17 +1,17 @@
 import { clsx } from 'clsx';
 import { ArrowLeft } from 'lucide-react';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import { CursorPagination, CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import { CursorPagination, CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import * as Skeleton from '@/ui/primitives/skeleton';
 import {
   WishlistItem,
   WishlistItemCard,
   WishlistItemSkeleton,
-} from '@/vibes/soul/primitives/wishlist-item-card';
-import { RemoveWishlistItemAction } from '@/vibes/soul/primitives/wishlist-item-card/remove-wishlist-item';
-import { AddWishlistItemToCartAction } from '@/vibes/soul/primitives/wishlist-item-card/wishlist-item-add-to-cart';
+} from '@/ui/primitives/wishlist-item-card';
+import { RemoveWishlistItemAction } from '@/ui/primitives/wishlist-item-card/remove-wishlist-item';
+import { AddWishlistItemToCartAction } from '@/ui/primitives/wishlist-item-card/wishlist-item-add-to-cart';
 
 export interface Wishlist {
   id: string;
diff --git a/core/vibes/soul/sections/wishlist-list-item/index.tsx b/core/ui/sections/wishlist-list-item/index.tsx
similarity index 92%
rename from core/vibes/soul/sections/wishlist-list-item/index.tsx
rename to core/ui/sections/wishlist-list-item/index.tsx
index 0d220eb4d2..6e47ff24b3 100644
--- a/core/vibes/soul/sections/wishlist-list-item/index.tsx
+++ b/core/ui/sections/wishlist-list-item/index.tsx
@@ -1,12 +1,12 @@
 import { clsx } from 'clsx';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Badge } from '@/vibes/soul/primitives/badge';
-import { ButtonLink } from '@/vibes/soul/primitives/button-link';
-import { ProductCard, ProductCardSkeleton } from '@/vibes/soul/primitives/product-card';
-import * as Skeleton from '@/vibes/soul/primitives/skeleton';
-import { WishlistItem } from '@/vibes/soul/primitives/wishlist-item-card';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Badge } from '@/ui/primitives/badge';
+import { ButtonLink } from '@/ui/primitives/button-link';
+import { ProductCard, ProductCardSkeleton } from '@/ui/primitives/product-card';
+import * as Skeleton from '@/ui/primitives/skeleton';
+import { WishlistItem } from '@/ui/primitives/wishlist-item-card';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 
 export interface WishlistItemActions {
   component: (wishlist?: Wishlist) => React.ReactNode;
diff --git a/core/vibes/soul/sections/wishlist-list/index.tsx b/core/ui/sections/wishlist-list/index.tsx
similarity index 94%
rename from core/vibes/soul/sections/wishlist-list/index.tsx
rename to core/ui/sections/wishlist-list/index.tsx
index c3c5140472..babe20fc39 100644
--- a/core/vibes/soul/sections/wishlist-list/index.tsx
+++ b/core/ui/sections/wishlist-list/index.tsx
@@ -1,12 +1,12 @@
 import { clsx } from 'clsx';
 
-import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
+import { Stream, Streamable } from '@/ui/lib/streamable';
+import { Wishlist } from '@/ui/sections/wishlist-details';
 import {
   WishlistItemActions,
   WishlistListItem,
   WishlistListItemSkeleton,
-} from '@/vibes/soul/sections/wishlist-list-item';
+} from '@/ui/sections/wishlist-list-item';
 
 interface Props {
   wishlists: Streamable<Wishlist[]>;
diff --git a/core/vibes/soul/sections/wishlists-section/index.tsx b/core/ui/sections/wishlists-section/index.tsx
similarity index 79%
rename from core/vibes/soul/sections/wishlists-section/index.tsx
rename to core/ui/sections/wishlists-section/index.tsx
index 418e6fad8c..65bacfac28 100644
--- a/core/vibes/soul/sections/wishlists-section/index.tsx
+++ b/core/ui/sections/wishlists-section/index.tsx
@@ -1,8 +1,8 @@
-import { Streamable } from '@/vibes/soul/lib/streamable';
-import { CursorPagination, CursorPaginationInfo } from '@/vibes/soul/primitives/cursor-pagination';
-import { Wishlist } from '@/vibes/soul/sections/wishlist-details';
-import { WishlistList } from '@/vibes/soul/sections/wishlist-list';
-import { WishlistItemActions } from '@/vibes/soul/sections/wishlist-list-item';
+import { Streamable } from '@/ui/lib/streamable';
+import { CursorPagination, CursorPaginationInfo } from '@/ui/primitives/cursor-pagination';
+import { Wishlist } from '@/ui/sections/wishlist-details';
+import { WishlistList } from '@/ui/sections/wishlist-list';
+import { WishlistItemActions } from '@/ui/sections/wishlist-list-item';
 
 interface Props {
   title: string;