Thinly slice the onions into 1/8-inch strips using a sharp knife.
Heat the heavy-bottomed pot over medium heat and melt the butter with a tablespoon of olive oil until it starts to foam.
Add the sliced onions to the pot, stirring to coat them in the butter and oil. Cook for about 10 minutes until they soften and begin to turn translucent.
Reduce the heat to medium-low and cook the onions slowly, stirring every 5-8 minutes. Continue this process for about 40-50 minutes until they develop a deep amber color and smell sweet and smoky.
While the onions caramelize, preheat your oven to 180°C (350°F). Slice the baguette into 1-2 cm thick slices and arrange them on a baking sheet.
Toast the baguette slices in the oven for about 10 minutes until golden brown, then set aside.
Once the onions are caramelized, pour in the wine to deglaze the pan, scraping up any browned bits from the bottom. Let the wine cook off for 2-3 minutes until slightly reduced.
Add the beef broth and a bundle of thyme into the pot. Bring to a gentle simmer and cook uncovered for 20 minutes to meld the flavors.
Remove the thyme bundle and season the soup with salt if needed. Ladle the hot soup into oven-proof bowls, placing a toasted baguette slice on top of each.
Sprinkle a generous handful of shredded Gruyère cheese over each baguette slice. Place the bowls on a baking sheet and broil on high for 3-5 minutes until the cheese is bubbly and golden.
Carefully remove the bowls from the oven, let them rest for a couple of minutes, then serve immediately. The cheese should be melty and crisp at the edges, with a fragrant, steaming bowl of onion goodness.