Preheat and prep: Place a large, deep skillet over medium-high heat. Dice the onion, bell pepper, and zucchini. Rinse the rice if using rice; pat potatoes dry if using potatoes.
Brown the beef: Add the ground beef to the dry skillet (use 1 tablespoon olive oil if your beef is very lean).
Break it up and cook until well browned, 5–7 minutes. Season lightly with salt and pepper. Don’t rush this step—browning builds flavor.
Sauté aromatics: Push beef to the edges. If there’s more than 1 tablespoon fat, spoon off excess; if it’s dry, add a bit of oil.
Add onion and bell pepper to the center. Cook 3 minutes, then stir in garlic and zucchini for 1–2 minutes until fragrant.
Spice it up: Stir in chili powder, smoked paprika, oregano, cumin, and red pepper flakes. Toast the spices for 30 seconds so they bloom.
Tomato base: Add tomato paste and cook 1 minute, stirring.
Pour in the diced tomatoes with their juices and the beef broth. Scrape up browned bits from the pan. Taste the liquid and season with salt and pepper.
Add the starch: If using rice: Stir in the rinsed rice.
Bring to a gentle simmer, then reduce heat to low, cover, and cook 15–18 minutes until rice is tender and liquid is mostly absorbed. Stir once midway if needed.
If using potatoes: Add potatoes, cover, and simmer on medium-low 18–22 minutes, stirring occasionally, until tender. Add a splash more broth if the pan looks dry.
Finish and melt: When the starch is done, uncover and let excess moisture steam off for 1–2 minutes, stirring gently.
Taste and adjust seasoning. If using cheese, sprinkle over the top, cover, and let it melt for 1–2 minutes.
Brighten and serve: Off heat, add a squeeze of lime or a teaspoon of vinegar for pop. Sprinkle with cilantro or parsley.
Serve hot straight from the skillet.