docs: improve alt of images (#12998)
* docs: improve alt of images * fix vale errors
This commit is contained in:
@@ -13,7 +13,7 @@ A standard Medusa project is made up of:
|
||||
- Medusa application: The Medusa server and the Medusa Admin.
|
||||
- One or more storefronts
|
||||
|
||||

|
||||

|
||||
|
||||
You deploy the Medusa application, with the server and admin, separately from the storefront.
|
||||
|
||||
@@ -25,7 +25,7 @@ You must deploy the Medusa application before the storefront, as it connects to
|
||||
|
||||
The Medusa application must be deployed to a hosting provider supporting Node.js server deployments, such as Railway, DigitalOcean, AWS, Heroku, etc…
|
||||
|
||||

|
||||

|
||||
|
||||
Your server connects to a PostgreSQL database, Redis, and other services relevant for your setup. Most hosting providers support deploying and managing these databases along with your Medusa server (such as Railway and DigitalOcean).
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ A middleware is a function executed when a request is sent to an API Route. It's
|
||||
|
||||
Middlewares are used to guard API routes, parse request content types other than `application/json`, manipulate request data, and more.
|
||||
|
||||

|
||||

|
||||
|
||||
<Note title="Tip">
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ A data model represents a table in the database. You create data models using Me
|
||||
|
||||
You create a data model in a TypeScript or JavaScript file under the `models` directory of a module. So, to create a `Post` data model in the Blog Module, create the file `src/modules/blog/models/post.ts` with the following content:
|
||||
|
||||

|
||||

|
||||
|
||||
```ts title="src/modules/blog/models/post.ts"
|
||||
import { model } from "@medusajs/framework/utils"
|
||||
|
||||
@@ -45,7 +45,7 @@ After answering the prompts, the command installs the Medusa application in a di
|
||||
|
||||
If you chose to install the storefront with the Medusa application, the storefront is installed in a separate directory named `{project-name}-storefront`.
|
||||
|
||||

|
||||

|
||||
|
||||
### Successful Installation Result
|
||||
|
||||
@@ -57,7 +57,7 @@ If you also installed the Next.js Starter Storefront, it'll be running at `http:
|
||||
|
||||
You can stop the servers for the Medusa application and Next.js Starter Storefront by exiting the installation command. To run the server for the Medusa application again, refer to [this section](#run-medusa-application-in-development).
|
||||
|
||||

|
||||

|
||||
|
||||
### Troubleshooting Installation Errors
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ These layers of stack can be implemented within [plugins](../../fundamentals/plu
|
||||
|
||||
</Note>
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
@@ -43,7 +43,7 @@ Modules can be implemented within [plugins](../../fundamentals/plugins/page.mdx)
|
||||
|
||||
</Note>
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
@@ -89,4 +89,4 @@ All of the third-party services mentioned above can be replaced to help you buil
|
||||
|
||||
The following diagram illustrates Medusa's architecture including all its layers.
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -21,7 +21,7 @@ You don't need to set up different projects for each instance. Instead, you can
|
||||
|
||||
This separation ensures that the server instance remains responsive to incoming requests, while the worker instance processes tasks in the background.
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
export const generatedEditDates = {
|
||||
"app/learn/fundamentals/scheduled-jobs/page.mdx": "2024-12-09T10:51:40.570Z",
|
||||
"app/learn/fundamentals/workflows/page.mdx": "2024-12-09T14:45:17.837Z",
|
||||
"app/learn/deployment/page.mdx": "2025-06-20T08:36:29.097Z",
|
||||
"app/learn/deployment/page.mdx": "2025-07-18T15:25:33.249Z",
|
||||
"app/learn/page.mdx": "2025-06-27T11:39:15.941Z",
|
||||
"app/learn/fundamentals/modules/commerce-modules/page.mdx": "2025-04-17T08:51:32.723Z",
|
||||
"app/learn/fundamentals/workflows/retry-failed-steps/page.mdx": "2025-03-28T07:15:19.388Z",
|
||||
@@ -46,7 +46,7 @@ export const generatedEditDates = {
|
||||
"app/learn/fundamentals/admin/tips/page.mdx": "2025-05-26T14:58:56.390Z",
|
||||
"app/learn/fundamentals/api-routes/cors/page.mdx": "2025-03-11T08:54:26.281Z",
|
||||
"app/learn/fundamentals/admin/ui-routes/page.mdx": "2025-02-24T09:35:11.752Z",
|
||||
"app/learn/fundamentals/api-routes/middlewares/page.mdx": "2025-05-09T07:56:04.125Z",
|
||||
"app/learn/fundamentals/api-routes/middlewares/page.mdx": "2025-07-18T15:20:25.735Z",
|
||||
"app/learn/fundamentals/modules/isolation/page.mdx": "2025-05-21T15:10:15.499Z",
|
||||
"app/learn/fundamentals/data-models/index/page.mdx": "2025-03-18T07:59:07.798Z",
|
||||
"app/learn/fundamentals/custom-cli-scripts/page.mdx": "2024-10-23T07:08:55.898Z",
|
||||
@@ -68,7 +68,7 @@ export const generatedEditDates = {
|
||||
"app/learn/fundamentals/module-links/query/page.mdx": "2025-06-26T16:01:59.548Z",
|
||||
"app/learn/fundamentals/modules/db-operations/page.mdx": "2025-04-25T14:26:25.000Z",
|
||||
"app/learn/fundamentals/modules/multiple-services/page.mdx": "2025-03-18T15:11:44.632Z",
|
||||
"app/learn/fundamentals/modules/page.mdx": "2025-03-18T07:51:09.049Z",
|
||||
"app/learn/fundamentals/modules/page.mdx": "2025-07-18T15:31:32.371Z",
|
||||
"app/learn/debugging-and-testing/instrumentation/page.mdx": "2025-06-16T10:40:52.922Z",
|
||||
"app/learn/fundamentals/api-routes/additional-data/page.mdx": "2025-04-17T08:50:17.036Z",
|
||||
"app/learn/fundamentals/workflows/variable-manipulation/page.mdx": "2025-04-24T13:14:43.967Z",
|
||||
@@ -89,14 +89,14 @@ export const generatedEditDates = {
|
||||
"app/learn/customization/integrate-systems/service/page.mdx": "2024-12-09T11:02:39.594Z",
|
||||
"app/learn/customization/next-steps/page.mdx": "2025-04-17T08:50:17.036Z",
|
||||
"app/learn/fundamentals/modules/infrastructure-modules/page.mdx": "2025-05-21T14:31:51.644Z",
|
||||
"app/learn/introduction/architecture/page.mdx": "2025-05-21T14:31:51.644Z",
|
||||
"app/learn/introduction/architecture/page.mdx": "2025-07-18T15:52:35.513Z",
|
||||
"app/learn/fundamentals/data-models/infer-type/page.mdx": "2025-03-18T07:41:01.936Z",
|
||||
"app/learn/fundamentals/custom-cli-scripts/seed-data/page.mdx": "2024-12-09T14:38:06.385Z",
|
||||
"app/learn/fundamentals/environment-variables/page.mdx": "2025-05-26T15:06:07.800Z",
|
||||
"app/learn/build/page.mdx": "2025-04-25T12:34:33.914Z",
|
||||
"app/learn/deployment/general/page.mdx": "2025-06-20T08:36:05.063Z",
|
||||
"app/learn/fundamentals/workflows/multiple-step-usage/page.mdx": "2024-11-25T16:19:32.169Z",
|
||||
"app/learn/installation/page.mdx": "2025-05-16T13:44:27.118Z",
|
||||
"app/learn/installation/page.mdx": "2025-07-18T15:53:43.544Z",
|
||||
"app/learn/fundamentals/data-models/check-constraints/page.mdx": "2024-12-06T14:34:50.384Z",
|
||||
"app/learn/fundamentals/module-links/link/page.mdx": "2025-04-07T08:03:14.513Z",
|
||||
"app/learn/fundamentals/workflows/store-executions/page.mdx": "2025-04-17T08:29:10.166Z",
|
||||
@@ -113,7 +113,7 @@ export const generatedEditDates = {
|
||||
"app/learn/resources/usage/page.mdx": "2025-02-26T13:35:34.824Z",
|
||||
"app/learn/configurations/medusa-config/page.mdx": "2025-07-14T09:28:54.302Z",
|
||||
"app/learn/configurations/ts-aliases/page.mdx": "2025-07-18T15:06:59.037Z",
|
||||
"app/learn/production/worker-mode/page.mdx": "2025-03-11T15:21:50.906Z",
|
||||
"app/learn/production/worker-mode/page.mdx": "2025-07-18T15:19:45.352Z",
|
||||
"app/learn/fundamentals/module-links/read-only/page.mdx": "2025-05-13T15:04:12.107Z",
|
||||
"app/learn/fundamentals/data-models/properties/page.mdx": "2025-03-18T07:57:17.826Z",
|
||||
"app/learn/fundamentals/framework/page.mdx": "2025-06-26T14:26:22.120Z",
|
||||
|
||||
@@ -5133,7 +5133,7 @@ A standard Medusa project is made up of:
|
||||
- Medusa application: The Medusa server and the Medusa Admin.
|
||||
- One or more storefronts
|
||||
|
||||

|
||||

|
||||
|
||||
You deploy the Medusa application, with the server and admin, separately from the storefront.
|
||||
|
||||
@@ -5145,7 +5145,7 @@ You must deploy the Medusa application before the storefront, as it connects to
|
||||
|
||||
The Medusa application must be deployed to a hosting provider supporting Node.js server deployments, such as Railway, DigitalOcean, AWS, Heroku, etc…
|
||||
|
||||

|
||||

|
||||
|
||||
Your server connects to a PostgreSQL database, Redis, and other services relevant for your setup. Most hosting providers support deploying and managing these databases along with your Medusa server (such as Railway and DigitalOcean).
|
||||
|
||||
@@ -6562,7 +6562,7 @@ A middleware is a function executed when a request is sent to an API Route. It's
|
||||
|
||||
Middlewares are used to guard API routes, parse request content types other than `application/json`, manipulate request data, and more.
|
||||
|
||||

|
||||

|
||||
|
||||
As Medusa's server is based on Express, you can use any [Express middleware](https://expressjs.com/en/resources/middleware.html).
|
||||
|
||||
@@ -15103,7 +15103,7 @@ A data model represents a table in the database. You create data models using Me
|
||||
|
||||
You create a data model in a TypeScript or JavaScript file under the `models` directory of a module. So, to create a `Post` data model in the Blog Module, create the file `src/modules/blog/models/post.ts` with the following content:
|
||||
|
||||

|
||||

|
||||
|
||||
```ts title="src/modules/blog/models/post.ts"
|
||||
import { model } from "@medusajs/framework/utils"
|
||||
@@ -18807,7 +18807,7 @@ After answering the prompts, the command installs the Medusa application in a di
|
||||
|
||||
If you chose to install the storefront with the Medusa application, the storefront is installed in a separate directory named `{project-name}-storefront`.
|
||||
|
||||

|
||||

|
||||
|
||||
### Successful Installation Result
|
||||
|
||||
@@ -18819,7 +18819,7 @@ If you also installed the Next.js Starter Storefront, it'll be running at `http:
|
||||
|
||||
You can stop the servers for the Medusa application and Next.js Starter Storefront by exiting the installation command. To run the server for the Medusa application again, refer to [this section](#run-medusa-application-in-development).
|
||||
|
||||

|
||||

|
||||
|
||||
### Troubleshooting Installation Errors
|
||||
|
||||
@@ -18934,7 +18934,7 @@ In a common Medusa application, requests go through four layers in the stack. In
|
||||
|
||||
These layers of stack can be implemented within [plugins](https://docs.medusajs.com/learn/fundamentals/plugins/index.html.md).
|
||||
|
||||

|
||||

|
||||
|
||||
***
|
||||
|
||||
@@ -18944,7 +18944,7 @@ The Medusa application injects into each module, including your [custom modules]
|
||||
|
||||
Modules can be implemented within [plugins](https://docs.medusajs.com/learn/fundamentals/plugins/index.html.md).
|
||||
|
||||

|
||||

|
||||
|
||||
***
|
||||
|
||||
@@ -18986,7 +18986,7 @@ All of the third-party services mentioned above can be replaced to help you buil
|
||||
|
||||
The following diagram illustrates Medusa's architecture including all its layers.
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
# Build with AI Assistants and LLMs
|
||||
@@ -19131,7 +19131,7 @@ You don't need to set up different projects for each instance. Instead, you can
|
||||
|
||||
This separation ensures that the server instance remains responsive to incoming requests, while the worker instance processes tasks in the background.
|
||||
|
||||

|
||||

|
||||
|
||||
***
|
||||
|
||||
@@ -32900,7 +32900,7 @@ The Analytics Module exposes functionalities to track and analyze user interacti
|
||||
|
||||
In your Medusa application, you can use the Analytics Module to send data to third-party analytics services like PostHog or Segment, enabling you to gain insights into user behavior and system performance.
|
||||
|
||||

|
||||

|
||||
|
||||
***
|
||||
|
||||
@@ -39847,7 +39847,7 @@ By following this guide, you'll add the following features to Medusa:
|
||||
3. Customers can accept or reject a quote once it's been sent by the merchant.
|
||||
4. Once the customer accepts a quote, it's converted to an order in Medusa.
|
||||
|
||||

|
||||

|
||||
|
||||
To implement these features, you'll be customizing the Medusa server and the Medusa Admin dashboard.
|
||||
|
||||
@@ -41374,7 +41374,7 @@ Then, open the Medusa Admin dashboard at `http://localhost:9000/app` and login u
|
||||
|
||||
You'll find a "Quotes" sidebar item. If you click on it, it will show you the table of quotes.
|
||||
|
||||

|
||||

|
||||
|
||||
***
|
||||
|
||||
@@ -62803,11 +62803,11 @@ In addition, Resend allows you to send emails from the address `onboarding@resen
|
||||
1. Go to Domains from the sidebar.
|
||||
2. Click on Add Domain.
|
||||
|
||||

|
||||

|
||||
|
||||
3\. In the form that opens, enter your domain name and select a region close to your users, then click Add.
|
||||
|
||||

|
||||

|
||||
|
||||
4\. In the domain's details page that opens, you'll find DNS records to add to your DNS provider. After you add them, click on Verify DNS Records. You can start sending emails from your custom domain once it's verified.
|
||||
|
||||
@@ -68119,7 +68119,7 @@ By following this tutorial, you'll learn how to:
|
||||
|
||||
You can follow this tutorial whether you're new to Medusa or an advanced Medusa developer.
|
||||
|
||||

|
||||

|
||||
|
||||
[Example Repository](https://github.com/medusajs/examples/tree/main/slack-integration): Find the full code of the guide in this repository.
|
||||
|
||||
@@ -68508,27 +68508,27 @@ To set the webhook URL, you need to create a Slack application and configure a w
|
||||
1. Go to your [Slack Apps](https://api.slack.com/apps) page.
|
||||
2. Click the "Create New App" button.
|
||||
|
||||

|
||||

|
||||
|
||||
3. In the pop-up, choose "From scratch".
|
||||
4. Enter the app's name and select the workspace to install it in.
|
||||
5. Once you're done, click the "Create App" button.
|
||||
|
||||

|
||||

|
||||
|
||||
6. In the app's settings, go to the "Incoming Webhooks" section.
|
||||
7. Enable the "Activate Incoming Webhooks" toggle.
|
||||
|
||||

|
||||

|
||||
|
||||
8. In the "Webhook URLs for Your Workspace" section, click the "Add New Webhook" button.
|
||||
|
||||

|
||||

|
||||
|
||||
9. Select the channel or conversation to send notifications to and click the "Allow" button.
|
||||
10. Copy the generated webhook URL.
|
||||
|
||||

|
||||

|
||||
|
||||
Then, in the `.env` file of your Medusa application, set the `SLACK_WEBHOOK_URL` and `SLACK_ADMIN_URL` environment variables:
|
||||
|
||||
@@ -81528,7 +81528,7 @@ By following this tutorial, you'll learn how to:
|
||||
- Customize the add-to-cart flow to support bundled products.
|
||||
- Customize the Next.js Starter Storefront to display bundled products.
|
||||
|
||||

|
||||

|
||||
|
||||
- [Bundled Products Repository](https://github.com/medusajs/examples/tree/main/bundled-products): Find the full code for this guide in this repository.
|
||||
- [OpenApi Specs for Postman](https://res.cloudinary.com/dza7lstvk/raw/upload/v1746024108/OpenApi/Bundled_Products_vloupx.yaml): Import this OpenApi Specs file into tools like Postman.
|
||||
|
||||
@@ -37,7 +37,7 @@ To find the deployments for a project:
|
||||
|
||||
You'll find all deployments for the project's environments in the "Deployments" tab, sorted in descending order. For each deployment, you can see its branch, environment, status, and more.
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
@@ -51,7 +51,7 @@ For example, to find the deployments for the Production environment:
|
||||
1. [Go to its project's dashboard](../projects/page.mdx#open-project-dashboard).
|
||||
2. You can go to the latest Production deployment's details by clicking the "Latest Deployment" link in the Production environment card.
|
||||
|
||||

|
||||

|
||||
|
||||
3. To find a list of all deployments, click on the "Production" environment card to open the environment's dashboard.
|
||||
- The "Latest update" card shows details about the latest deployment.
|
||||
|
||||
@@ -25,7 +25,7 @@ You can also join an existing organization by [receiving an invite from a user i
|
||||
|
||||
When you open the Cloud dashboard and log in, you're viewing the projects, resources, and settings of a specific organization. You'll find the name of that organization at the top left of the dashboard.
|
||||
|
||||

|
||||

|
||||
|
||||
### Switch Organization
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ By following this guide, you'll add the following features to Medusa:
|
||||
3. Customers can accept or reject a quote once it's been sent by the merchant.
|
||||
4. Once the customer accepts a quote, it's converted to an order in Medusa.
|
||||
|
||||

|
||||

|
||||
|
||||
To implement these features, you'll be customizing the Medusa server and the Medusa Admin dashboard.
|
||||
|
||||
@@ -1772,7 +1772,7 @@ Then, open the Medusa Admin dashboard at `http://localhost:9000/app` and login u
|
||||
|
||||
You'll find a "Quotes" sidebar item. If you click on it, it will show you the table of quotes.
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ The Analytics Module exposes functionalities to track and analyze user interacti
|
||||
|
||||
In your Medusa application, you can use the Analytics Module to send data to third-party analytics services like PostHog or Segment, enabling you to gain insights into user behavior and system performance.
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -111,11 +111,11 @@ In addition, Resend allows you to send emails from the address `onboarding@resen
|
||||
1. Go to Domains from the sidebar.
|
||||
2. Click on Add Domain.
|
||||
|
||||

|
||||

|
||||
|
||||
3\. In the form that opens, enter your domain name and select a region close to your users, then click Add.
|
||||
|
||||

|
||||

|
||||
|
||||
4\. In the domain's details page that opens, you'll find DNS records to add to your DNS provider. After you add them, click on Verify DNS Records. You can start sending emails from your custom domain once it's verified.
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ By following this tutorial, you'll learn how to:
|
||||
|
||||
You can follow this tutorial whether you're new to Medusa or an advanced Medusa developer.
|
||||
|
||||

|
||||

|
||||
|
||||
<Card
|
||||
title="Example Repository"
|
||||
@@ -481,27 +481,27 @@ To set the webhook URL, you need to create a Slack application and configure a w
|
||||
1. Go to your [Slack Apps](https://api.slack.com/apps) page.
|
||||
2. Click the "Create New App" button.
|
||||
|
||||

|
||||

|
||||
|
||||
3. In the pop-up, choose "From scratch".
|
||||
4. Enter the app's name and select the workspace to install it in.
|
||||
5. Once you're done, click the "Create App" button.
|
||||
|
||||

|
||||

|
||||
|
||||
6. In the app's settings, go to the "Incoming Webhooks" section.
|
||||
7. Enable the "Activate Incoming Webhooks" toggle.
|
||||
|
||||

|
||||

|
||||
|
||||
8. In the "Webhook URLs for Your Workspace" section, click the "Add New Webhook" button.
|
||||
|
||||

|
||||

|
||||
|
||||
9. Select the channel or conversation to send notifications to and click the "Allow" button.
|
||||
10. Copy the generated webhook URL.
|
||||
|
||||

|
||||

|
||||
|
||||
Then, in the `.env` file of your Medusa application, set the `SLACK_WEBHOOK_URL` and `SLACK_ADMIN_URL` environment variables:
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ By following this tutorial, you'll learn how to:
|
||||
- Customize the add-to-cart flow to support bundled products.
|
||||
- Customize the Next.js Starter Storefront to display bundled products.
|
||||
|
||||

|
||||

|
||||
|
||||
<CardList items={[
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ In this guide, you'll learn how to implement the last step of the checkout flow,
|
||||
|
||||
The payment step requires implementing the following flow:
|
||||
|
||||

|
||||

|
||||
|
||||
1. Retrieve the payment providers using the [List Payment Providers API route](!api!/store#payment-providers_getpaymentproviders).
|
||||
2. Customer chooses the payment provider to use.
|
||||
|
||||
@@ -63,7 +63,7 @@ In this guide, you'll learn how to:
|
||||
- Install and set up Medusa.
|
||||
- Create a custom express checkout storefront with Next.js.
|
||||
|
||||

|
||||

|
||||
|
||||
You can follow this guide whether you're new to Medusa or an advanced Medusa developer.
|
||||
|
||||
@@ -212,7 +212,7 @@ Aside from the SDK, you also install the `@medusajs/types` package, which provid
|
||||
|
||||
Next, to use the SDK, you'll export a configured instance and re-use it across your application. So, create the file `lib/sdk.ts` with the following content:
|
||||
|
||||

|
||||

|
||||
|
||||
export const sdkHighlights = [
|
||||
["6", "NEXT_PUBLIC_MEDUSA_BACKEND_URL", "Set the backend URL from an environment variable."],
|
||||
@@ -240,7 +240,7 @@ This file exports a configured instance of the Medusa SDK that you can use to se
|
||||
- `NEXT_PUBLIC_MEDUSA_BACKEND_URL`: The URL of the Medusa application server. By default, it's set to `http://localhost:9000`.
|
||||
- `NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY`: The publishable API key of the Medusa application. You can find this key in the Medusa Admin dashboard under Settings -> Publishable API Keys.
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
@@ -257,7 +257,7 @@ To easily access and manage these resources, you'll wrap your storefront with tw
|
||||
|
||||
To create the region provider, create the file `providers/region.tsx` with the following content:
|
||||
|
||||

|
||||

|
||||
|
||||
export const regionProviderHighlights1 = [
|
||||
["9", "region", "The region selected by the customer."],
|
||||
|
||||
@@ -158,7 +158,7 @@ During cart-completion before placing the order, this method is used to authoriz
|
||||
third-party payment provider. The payment can later be captured
|
||||
using the [capturePayment](page.mdx#capturepayment) method.
|
||||
|
||||

|
||||

|
||||
|
||||
When authorized successfully, a `Payment` is created by the Payment
|
||||
Module, and it's associated with the order.
|
||||
|
||||
Reference in New Issue
Block a user