diff --git a/README.md b/README.md
index 3bd7d85af9c..6ce1619c608 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,40 @@
-
+
![Continuous Integration](https://github.com/GoogleCloudPlatform/microservices-demo/workflows/Continuous%20Integration%20-%20Main/Release/badge.svg)
**Online Boutique** is a cloud-first microservices demo application. The application is a
-web-based e-commerce app where users can browse items,
-add them to the cart, and purchase them.
+web-based e-commerce app where users can browse items, add them to the cart, and purchase them.
-Google uses this application to demonstrate the use of technologies like
-Kubernetes, GKE, Istio, Stackdriver, and gRPC. This application
-works on any Kubernetes cluster, like Google
-Kubernetes Engine (GKE). It’s **easy to deploy with little to no configuration**.
+Google uses this application to demonstrate how developers can modernize enterprise applications using Google Cloud products, including: [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine), [Anthos Service Mesh (ASM)](https://cloud.google.com/service-mesh), [gRPC](https://grpc.io/), [Cloud Operations](https://cloud.google.com/products/operations), [Spanner](https://cloud.google.com/spanner), [Memorystore](https://cloud.google.com/memorystore), [AlloyDB](https://cloud.google.com/alloydb), and [Gemini](https://ai.google.dev/). This application works on any Kubernetes cluster.
If you’re using this demo, please **★Star** this repository to show your interest!
-**Note to Googlers (Google employees):** Please fill out the form at [go/microservices-demo](http://go/microservices-demo).
+**Note to Googlers:** Please fill out the form at [go/microservices-demo](http://go/microservices-demo).
+
+## Architecture
+
+**Online Boutique** is composed of 11 microservices written in different
+languages that talk to each other over gRPC.
+
+[![Architecture of
+microservices](/docs/img/architecture-diagram.png)](/docs/img/architecture-diagram.png)
+
+Find **Protocol Buffers Descriptions** at the [`./protos` directory](/protos).
+
+| Service | Language | Description |
+| ---------------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------- |
+| [frontend](/src/frontend) | Go | Exposes an HTTP server to serve the website. Does not require signup/login and generates session IDs for all users automatically. |
+| [cartservice](/src/cartservice) | C# | Stores the items in the user's shopping cart in Redis and retrieves it. |
+| [productcatalogservice](/src/productcatalogservice) | Go | Provides the list of products from a JSON file and ability to search products and get individual products. |
+| [currencyservice](/src/currencyservice) | Node.js | Converts one money amount to another currency. Uses real values fetched from European Central Bank. It's the highest QPS service. |
+| [paymentservice](/src/paymentservice) | Node.js | Charges the given credit card info (mock) with the given amount and returns a transaction ID. |
+| [shippingservice](/src/shippingservice) | Go | Gives shipping cost estimates based on the shopping cart. Ships items to the given address (mock) |
+| [emailservice](/src/emailservice) | Python | Sends users an order confirmation email (mock). |
+| [checkoutservice](/src/checkoutservice) | Go | Retrieves user cart, prepares order and orchestrates the payment, shipping and the email notification. |
+| [recommendationservice](/src/recommendationservice) | Python | Recommends other products based on what's given in the cart. |
+| [adservice](/src/adservice) | Java | Provides text ads based on given context words. |
+| [loadgenerator](/src/loadgenerator) | Python/Locust | Continuously sends requests imitating realistic user shopping flows to the frontend. |
## Screenshots
@@ -46,15 +65,8 @@ If you’re using this demo, please **★Star** this repository to show your int
```
Substitute `` with the ID of your Google Cloud project.
-
-4. Confirm the services have been enabled for your project.
-
- ```sh
- gcloud services list --enabled --project=${PROJECT_ID}
- ```
-
-5. Create a GKE cluster and get the credentials for it.
+4. Create a GKE cluster and get the credentials for it.
```sh
gcloud container clusters create-auto online-boutique \
@@ -63,13 +75,13 @@ If you’re using this demo, please **★Star** this repository to show your int
Creating the cluster may take a few minutes.
-6. Deploy Online Boutique to the cluster.
+5. Deploy Online Boutique to the cluster.
```sh
kubectl apply -f ./release/kubernetes-manifests.yaml
```
-7. Wait for the pods to be ready.
+6. Wait for the pods to be ready.
```sh
kubectl get pods
@@ -93,7 +105,7 @@ If you’re using this demo, please **★Star** this repository to show your int
shippingservice-6ccc89f8fd-v686r 1/1 Running 0 2m58s
```
-8. Access the web frontend in a browser using the frontend's external IP.
+7. Access the web frontend in a browser using the frontend's external IP.
```sh
kubectl get service frontend-external | awk '{print $4}'
@@ -101,9 +113,9 @@ If you’re using this demo, please **★Star** this repository to show your int
Visit `http://EXTERNAL_IP` in a web browser to access your instance of Online Boutique.
-9. Congrats! You've deployed the default Online Boutique. To deploy a different variation of Online Boutique (e.g., with Google Cloud Operations tracing, Istio, etc.), see [Deploy Online Boutique variations with Kustomize](#deploy-online-boutique-variations-with-kustomize).
+8. Congrats! You've deployed the default Online Boutique. To deploy a different variation of Online Boutique (e.g., with Google Cloud Operations tracing, Istio, etc.), see [Deploy Online Boutique variations with Kustomize](#deploy-online-boutique-variations-with-kustomize).
-10. Once you are done with it, delete the GKE cluster.
+9. Once you are done with it, delete the GKE cluster.
```sh
gcloud container clusters delete online-boutique \
@@ -112,68 +124,17 @@ If you’re using this demo, please **★Star** this repository to show your int
Deleting the cluster may take a few minutes.
-## Use Terraform to provision a GKE cluster and deploy Online Boutique
+## Additional deployment options
-The [`/terraform` folder](/terraform) contains instructions for using [Terraform](https://www.terraform.io/intro) to replicate the steps from [**Quickstart (GKE)**](#quickstart-gke) above.
+- **Terraform**: [See these instructions](/terraform) to learn how to deploy Online Boutique using [Terraform](https://www.terraform.io/intro).
+- **Istio / Anthos Service Mesh**: [See these instructions](/kustomize/components/service-mesh-istio/README.md) to deploy Online Boutique alongside an Istio-backed service mesh.
+- **Non-GKE clusters (Minikube, Kind, etc)**: See the [Development guide](/docs/development-guide.md) to learn how you can deploy Online Boutique on non-GKE clusters.
+- **AI assistant using Gemini**: [See these instructions](/kustomize/components/shopping-assistant/README.md) to deploy a Gemini-powered AI assistant that suggests products to purchase based on an image.
+- **And more**: The [`/kustomize` directory](/kustomize) contains instructions for customizing the deployment of Online Boutique with other variations.
-## Other deployment variations
+## Documentation
-- **Istio/Anthos Service Mesh**: [See these instructions.](/kustomize/components/service-mesh-istio/README.md)
-- **non-GKE clusters (Minikube, Kind)**: see the [Development Guide](/docs/development-guide.md)
-
-## Deploy Online Boutique variations with Kustomize
-
-The [`/kustomize` folder](/kustomize) contains instructions for customizing the deployment of Online Boutique with different variations such as:
-* integrating with [Google Cloud Operations](/kustomize/components/google-cloud-operations/)
-* replacing the in-cluster Redis cache with [Google Cloud Memorystore (Redis)](/kustomize/components/memorystore), [AlloyDB](/kustomize/components/alloydb) or [Google Cloud Spanner](/kustomize/components/spanner)
-* etc.
-
-## Architecture
-
-**Online Boutique** is composed of 11 microservices written in different
-languages that talk to each other over gRPC.
-
-[![Architecture of
-microservices](/docs/img/architecture-diagram.png)](/docs/img/architecture-diagram.png)
-
-Find **Protocol Buffers Descriptions** at the [`./protos` directory](/protos).
-
-| Service | Language | Description |
-| ---------------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------- |
-| [frontend](/src/frontend) | Go | Exposes an HTTP server to serve the website. Does not require signup/login and generates session IDs for all users automatically. |
-| [cartservice](/src/cartservice) | C# | Stores the items in the user's shopping cart in Redis and retrieves it. |
-| [productcatalogservice](/src/productcatalogservice) | Go | Provides the list of products from a JSON file and ability to search products and get individual products. |
-| [currencyservice](/src/currencyservice) | Node.js | Converts one money amount to another currency. Uses real values fetched from European Central Bank. It's the highest QPS service. |
-| [paymentservice](/src/paymentservice) | Node.js | Charges the given credit card info (mock) with the given amount and returns a transaction ID. |
-| [shippingservice](/src/shippingservice) | Go | Gives shipping cost estimates based on the shopping cart. Ships items to the given address (mock) |
-| [emailservice](/src/emailservice) | Python | Sends users an order confirmation email (mock). |
-| [checkoutservice](/src/checkoutservice) | Go | Retrieves user cart, prepares order and orchestrates the payment, shipping and the email notification. |
-| [recommendationservice](/src/recommendationservice) | Python | Recommends other products based on what's given in the cart. |
-| [adservice](/src/adservice) | Java | Provides text ads based on given context words. |
-| [loadgenerator](/src/loadgenerator) | Python/Locust | Continuously sends requests imitating realistic user shopping flows to the frontend. |
-
-## Features
-
-- **[Kubernetes](https://kubernetes.io)/[GKE](https://cloud.google.com/kubernetes-engine/):**
- The app is designed to run on Kubernetes (both locally on "Docker for
- Desktop", as well as on the cloud with GKE).
-- **[gRPC](https://grpc.io):** Microservices use a high volume of gRPC calls to
- communicate to each other.
-- **[Istio](https://istio.io):** Application works on Istio service mesh.
-- **[Cloud Operations (Stackdriver)](https://cloud.google.com/products/operations):** Many services
- are instrumented with **Profiling** and **Tracing**. In
- addition to these, using Istio enables features like Request/Response
- **Metrics** and **Context Graph** out of the box. When it is running out of
- Google Cloud, this code path remains inactive.
-- **[Skaffold](https://skaffold.dev):** Application
- is deployed to Kubernetes with a single command using Skaffold.
-- **Synthetic Load Generation:** The application demo comes with a background
- job that creates realistic usage patterns on the website using
- [Locust](https://locust.io/) load generator.
-
-## Development
-
-See the [Development guide](/docs/development-guide.md) to learn how to run and develop this app locally.
+- [Development](/docs/development-guide.md) to learn how to run and develop this app locally.
## Demos featuring Online Boutique
@@ -200,7 +161,3 @@ See the [Development guide](/docs/development-guide.md) to learn how to run and
- [Introduction to Service Management with Istio](https://www.youtube.com/watch?v=wCJrdKdD6UM&feature=youtu.be&t=586)
- [Google Cloud Next'18 London – Keynote](https://youtu.be/nIq2pkNcfEI?t=3071)
showing Stackdriver Incident Response Management
-
----
-
-This is not an official Google project.