Heat the olive oil in a large pot over medium heat. Once shimmering, add the diced onion, carrots, and celery together—this combination, known as a mirepoix, forms the flavor foundation of the soup. Sauté for about 4 minutes, stirring occasionally, until the vegetables begin to soften and release their natural sweetness. Add the minced garlic, bay leaf, and a pinch of salt, then cook for another minute until fragrant. This brief head start on the vegetables ensures they'll be tender by the time the soup finishes cooking.
Pour in the vegetable broth and increase the heat to bring the mixture to a boil. Once boiling, add the Italian seasoning, fresh thyme sprigs, and black pepper. Reduce the heat to medium and let the broth simmer for a minute or two so the seasonings can fully infuse into the liquid. I like to use Better Than Bouillon for a more concentrated flavor that really shines through in the finished soup.
Add the gnocchi to the simmering broth and stir gently to prevent them from sticking together. The gnocchi will initially sink, then float to the surface as they cook—this is your visual cue they're nearly done. Continue simmering for about 4-5 minutes until they're cooked through and tender. I use DeLallo gnocchi because they maintain a pillowy texture without becoming mushy during cooking.
Add the red pepper flakes to give the soup a subtle heat, then stir in the fresh spinach until completely wilted, about 1-2 minutes. Reduce the heat to low and slowly pour in the room-temperature half and half while stirring constantly—keeping it at room temperature prevents the cream from curdling when it hits the hot soup. Let the soup simmer gently for 2-3 more minutes until everything is well combined and heated through.
Remove the bay leaf and thyme sprigs from the pot using a slotted spoon or tongs. Taste the soup and adjust seasoning as needed—a squeeze of lemon juice or extra salt can brighten the flavors beautifully. Ladle the soup into bowls and serve immediately while hot and creamy.