← Back to Blog

White Bean Soup with Meatballs — The Soft Landing After the Perfect Day

The bridal shop. Rosa in a white dress. Mami in her chair. Carmen in tears. This is the scene and it is everything.

We went on Saturday — me, Rosa, Mami, Ana who drove up from Bridgeport, and Jenny who came because she is Rosa sister-in-law now and sisters-in-law come to bridal shops. Rosa tried on six dresses. She stood on the little platform in front of the mirror and she turned, slowly, and each dress was beautiful and none of them were right until the sixth one. The sixth one was simple — not plain, simple — with clean lines and a bodice that fit like it was made for Rosa body, and when she turned around and we saw her face, we knew. Rosa knew. The dress knew. Some things are right the way my sofrito is right — you do not need someone to tell you. You taste it. You feel it. You know.

Mami felt the fabric. She ran her fingers along the seam of the bodice and she said, This is good fabric. This is the right weight. And then she said something that made Rosa cry: Your grandfather Miguel would have loved to see this. She remembered. She remembered Miguel, who died in 2010, who she sometimes asks about as if he is still alive. But today she remembered he is gone. And the remembering was clear and precise and it carried love and loss in the same sentence, the way all good sentences do, the way all Delgado sentences do.

After the shop, we went to a restaurant for lunch. I ordered for everyone because ordering is my jurisdiction, the way the kitchen is my jurisdiction, the way love is my jurisdiction. We ate and we laughed and Mami told a story about making her own wedding dress in 1959 — white cotton, hand-sewn, the prettiest dress in Bayamon, she said, and I believe her because Mami hands made beautiful things and beautiful things come from beautiful hands.

Came home and made caldo de pollo. Chicken soup. Because the day was big and emotional and full of white dresses and memories and the chicken soup was the soft landing after the height of the day. Eduardo met me at the door and said, How was it? I said, She looked like an angel, Eduardo. Our daughter looked like an angel. He said, She always does. Two words. He always does. Two-word Eduardo. My two-word man. The soup was good. The dress was right. The day was perfect. The words were enough.

The day was so full — Rosa on that platform, Mami’s fingers on the fabric, the remembering of Miguel — that by the time I was back in my own kitchen I needed something that asked nothing of me and gave everything back. Not sofrito, not a project, just warmth and weight in a pot. White bean soup with meatballs is that. It is the soup that holds a big day gently, the way Eduardo’s two words hold me — quietly, completely, without needing to explain itself.

White Bean Soup with Meatballs

Prep Time: 20 min | Cook Time: 40 min | Total Time: 1 hr | Servings: 6

Ingredients

  • For the meatballs:
  • 1 lb ground beef (or a mix of beef and pork)
  • 1/4 cup plain breadcrumbs
  • 1 egg
  • 2 cloves garlic, minced
  • 2 tablespoons fresh parsley, chopped
  • 1/2 teaspoon salt
  • 1/4 teaspoon black pepper
  • For the soup:
  • 2 tablespoons olive oil
  • 1 medium onion, diced
  • 3 cloves garlic, minced
  • 2 medium carrots, sliced into rounds
  • 2 stalks celery, sliced
  • 1 can (14.5 oz) diced tomatoes
  • 2 cans (15 oz each) white beans (cannellini), drained and rinsed
  • 6 cups chicken broth
  • 1 teaspoon dried Italian seasoning
  • 1/2 teaspoon smoked paprika
  • Salt and pepper to taste
  • 2 cups fresh baby spinach (optional)
  • Parmesan rind, for simmering (optional but deeply good)

Instructions

  1. Make the meatballs. Combine ground meat, breadcrumbs, egg, garlic, parsley, salt, and pepper in a bowl. Mix gently — do not overwork the meat. Roll into small balls, about 1 inch each. Set aside on a plate.
  2. Brown the meatballs. Heat 1 tablespoon of olive oil in a large heavy pot or Dutch oven over medium-high heat. Brown the meatballs in batches, turning to color all sides, about 4–5 minutes. They do not need to be cooked through. Remove and set aside.
  3. Build the base. Add the remaining tablespoon of olive oil to the same pot. Sauté the onion over medium heat until soft and translucent, about 5 minutes. Add the garlic, carrots, and celery and cook another 3 minutes, stirring occasionally.
  4. Add the tomatoes and seasoning. Pour in the diced tomatoes with their juices. Stir in the Italian seasoning and smoked paprika. Let it cook together for 2 minutes so the flavors have a chance to speak to each other.
  5. Add broth and beans. Pour in the chicken broth and add the white beans. If using a Parmesan rind, add it now. Bring to a gentle boil, then reduce heat to medium-low.
  6. Return the meatballs. Nestle the browned meatballs back into the soup. Cover partially and simmer for 20–25 minutes, until the meatballs are cooked through and the carrots are tender.
  7. Finish and serve. Remove the Parmesan rind if used. Stir in baby spinach, if using, and let it wilt for 1–2 minutes. Taste and adjust salt and pepper. Serve hot with crusty bread and someone you love sitting across from you.

Nutrition (per serving)

Calories: 380 | Protein: 26g | Fat: 14g | Carbs: 34g | Fiber: 8g | Sodium: 820mg

How Would You Spin It?

Put your own twist on this recipe — what would you add, remove, or swap?