+
+
+
diff --git a/packages/x-components/src/x-modules/related-prompts/components/related-prompts-list.vue b/packages/x-components/src/x-modules/related-prompts/components/related-prompts-list.vue
new file mode 100644
index 0000000000..e8eb1fbf01
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/components/related-prompts-list.vue
@@ -0,0 +1,185 @@
+
diff --git a/packages/x-components/src/x-modules/related-prompts/events.types.ts b/packages/x-components/src/x-modules/related-prompts/events.types.ts
new file mode 100644
index 0000000000..12d8c1f126
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/events.types.ts
@@ -0,0 +1,16 @@
+import { RelatedPromptsRequest } from '@empathyco/x-types';
+
+/**
+ * Dictionary of the events of RelatedPrompts XModule, where each key is the event name,
+ * and the value is the event payload type or `void` if it has no payload.
+ *
+ * @public
+ */
+export interface RelatedPromptsXEvents {
+ /**
+ * Any property of the related-prompts request has changed
+ * Payload: The new related-prompts request or `null` if there is not enough data in the state
+ * to conform a valid request.
+ */
+ RelatedPromptsRequestUpdated: RelatedPromptsRequest | null;
+}
diff --git a/packages/x-components/src/x-modules/related-prompts/index.ts b/packages/x-components/src/x-modules/related-prompts/index.ts
new file mode 100644
index 0000000000..0baeb1b99e
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/index.ts
@@ -0,0 +1,5 @@
+export * from './components';
+export * from './events.types';
+export * from './store';
+export * from './wiring';
+export * from './x-module';
diff --git a/packages/x-components/src/x-modules/related-prompts/store/actions/fetch-and-save-related-prompts.action.ts b/packages/x-components/src/x-modules/related-prompts/store/actions/fetch-and-save-related-prompts.action.ts
new file mode 100644
index 0000000000..7c515cee7e
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/store/actions/fetch-and-save-related-prompts.action.ts
@@ -0,0 +1,34 @@
+import { RelatedPrompt, RelatedPromptsRequest } from '@empathyco/x-types';
+import { createFetchAndSaveActions } from '../../../../store/utils/fetch-and-save-action.utils';
+import { RelatedPromptsActionContext } from '../types';
+
+const { fetchAndSave, cancelPrevious } = createFetchAndSaveActions<
+ RelatedPromptsActionContext,
+ RelatedPromptsRequest | null,
+ RelatedPrompt[] | null
+>({
+ fetch({ dispatch }, request) {
+ return dispatch('fetchRelatedPrompts', request);
+ },
+ onSuccess({ commit }, relatedPrompts) {
+ if (relatedPrompts) {
+ commit('setRelatedPromptsProducts', relatedPrompts);
+ }
+ }
+});
+
+/**
+ * Default implementation for
+ * {@link RelatedPromptsActions.fetchAndSaveRelatedPrompts} action.
+ *
+ * @public
+ */
+export const fetchAndSaveRelatedPrompts = fetchAndSave;
+
+/**
+ * Default implementation for
+ * {@link RelatedPromptsActions.cancelFetchAndSaveRelatedPrompts} action.
+ *
+ * @public
+ */
+export const cancelFetchAndSaveRelatedPrompts = cancelPrevious;
diff --git a/packages/x-components/src/x-modules/related-prompts/store/actions/fetch-related-prompts.action.ts b/packages/x-components/src/x-modules/related-prompts/store/actions/fetch-related-prompts.action.ts
new file mode 100644
index 0000000000..01471c0518
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/store/actions/fetch-related-prompts.action.ts
@@ -0,0 +1,21 @@
+import { XPlugin } from '../../../../plugins/x-plugin';
+import { RelatedPromptsXStoreModule } from '../types';
+
+/**
+ * Default implementation for the {@link RelatedPromptsActions.fetchRelatedPrompts}.
+ *
+ * @param _ - The {@link https://vuex.vuejs.org/guide/actions.html | context} of the actions,
+ * provided by Vuex.
+ * @param request - The related prompts request to make.
+ * @returns The related prompts response.
+ *
+ * @public
+ */
+export const fetchRelatedPrompts: RelatedPromptsXStoreModule['actions']['fetchRelatedPrompts'] = (
+ _,
+ request
+) => {
+ return request
+ ? XPlugin.adapter.relatedPrompts(request).then(({ relatedPrompts }) => relatedPrompts)
+ : null;
+};
diff --git a/packages/x-components/src/x-modules/related-prompts/store/emitters.ts b/packages/x-components/src/x-modules/related-prompts/store/emitters.ts
new file mode 100644
index 0000000000..ac53143aa3
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/store/emitters.ts
@@ -0,0 +1,11 @@
+import { createStoreEmitters } from '../../../store';
+import { relatedPromptsXStoreModule } from './module';
+
+/**
+ * {@link StoreEmitters} For the related-prompts module.
+ *
+ * @internal
+ */
+export const relatedPromptsStoreEmitters = createStoreEmitters(relatedPromptsXStoreModule, {
+ RelatedPromptsRequestUpdated: (_, getters) => getters.request
+});
diff --git a/packages/x-components/src/x-modules/related-prompts/store/getters/request.getter.ts b/packages/x-components/src/x-modules/related-prompts/store/getters/request.getter.ts
new file mode 100644
index 0000000000..ca76032a0b
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/store/getters/request.getter.ts
@@ -0,0 +1,15 @@
+import { RelatedPromptsXStoreModule } from '../types';
+
+/**
+ * Default implementation for the {@link RelatedPromptsGetters.request} getter.
+ *
+ * @param state - Current {@link https://vuex.vuejs.org/guide/state.html | state} of the related
+ * prompts module.
+ *
+ * @returns The related prompts request to fetch data from the API.
+ *
+ * @public
+ */
+export const request: RelatedPromptsXStoreModule['getters']['request'] = ({ params, query }) => {
+ return query ? { query, extraParams: params } : null;
+};
diff --git a/packages/x-components/src/x-modules/related-prompts/store/index.ts b/packages/x-components/src/x-modules/related-prompts/store/index.ts
new file mode 100644
index 0000000000..5b601e6469
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/store/index.ts
@@ -0,0 +1,6 @@
+export * from './actions/fetch-and-save-related-prompts.action';
+export * from './actions/fetch-related-prompts.action';
+export { request as relatedPromptRequest } from './getters/request.getter';
+export * from './emitters';
+export * from './module';
+export * from './types';
diff --git a/packages/x-components/src/x-modules/related-prompts/store/module.ts b/packages/x-components/src/x-modules/related-prompts/store/module.ts
new file mode 100644
index 0000000000..91d4a6d614
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/store/module.ts
@@ -0,0 +1,44 @@
+import { setStatus } from '../../../store/utils/status-store.utils';
+import { setQuery } from '../../../store/utils/query.utils';
+import { RelatedPromptsXStoreModule } from './types';
+import {
+ cancelFetchAndSaveRelatedPrompts,
+ fetchAndSaveRelatedPrompts
+} from './actions/fetch-and-save-related-prompts.action';
+import { fetchRelatedPrompts } from './actions/fetch-related-prompts.action';
+import { request } from './getters/request.getter';
+
+/**
+ * {@link XStoreModule} For the related prompt module.
+ *
+ * @internal
+ */
+export const relatedPromptsXStoreModule: RelatedPromptsXStoreModule = {
+ state: () => ({
+ query: '',
+ relatedPrompts: [],
+ status: 'initial',
+ params: {}
+ }),
+ getters: {
+ request
+ },
+ mutations: {
+ setStatus,
+ setQuery,
+ setParams(state, params) {
+ state.params = params;
+ },
+ setRelatedPromptsProducts(state, products) {
+ state.relatedPrompts = products;
+ },
+ resetRelatedPromptsState(state) {
+ state.relatedPrompts = [];
+ }
+ },
+ actions: {
+ fetchRelatedPrompts,
+ fetchAndSaveRelatedPrompts,
+ cancelFetchAndSaveRelatedPrompts
+ }
+};
diff --git a/packages/x-components/src/x-modules/related-prompts/store/types.ts b/packages/x-components/src/x-modules/related-prompts/store/types.ts
new file mode 100644
index 0000000000..6de258ab1d
--- /dev/null
+++ b/packages/x-components/src/x-modules/related-prompts/store/types.ts
@@ -0,0 +1,103 @@
+import { RelatedPrompt, RelatedPromptsRequest } from '@empathyco/x-types';
+import { Dictionary } from '@empathyco/x-utils';
+import { QueryMutations, QueryState } from '../../../store/utils/query.utils';
+import { StatusMutations, StatusState } from '../../../store/utils/status-store.utils';
+import { XActionContext, XStoreModule } from '../../../store';
+
+/**
+ * Related prompts module state.
+ *
+ * @public
+ */
+export interface RelatedPromptsState extends StatusState, QueryState {
+ /** The list of the related-prompts, related to the `query` property of the state. */
+ relatedPrompts: RelatedPrompt[];
+ /** The extra params property of the state. */
+ params: Dictionary