Heat a non-stick pan over medium heat and add the butter, allowing it to melt and smell sweet and caramelized.
Add the finely chopped onions and sauté for 5-7 minutes, stirring occasionally until they turn golden and translucent, filling the kitchen with a warm aroma.
Stir in the minced garlic and grated ginger, cooking for about 1 minute until fragrant and slightly golden.
Add the garam masala, turmeric, and coriander powder, cooking for another 1-2 minutes while stirring constantly until the spices release their aroma and the mixture darkens slightly.
Pour in the crushed or pureed tomatoes and simmer on low heat for 10-15 minutes, stirring occasionally until the sauce thickens, deepens in color, and oil begins to separate at the edges.
Gently fold in the cubed paneer, coating each piece with the rich tomato gravy, and cook for another 5 minutes to let the paneer soak up the flavors.
Stir in the heavy cream, blending it into the sauce until silky and velvety, and simmer for an additional 2-3 minutes, checking for a glossy, vibrant red color and fragrant aroma.
Season with salt to taste, then remove from heat and let sit for 5 minutes to allow flavors to meld and deepen.
Garnish with a pinch of kasuri methi if using, and serve hot with naan or rice, enjoying the creamy, comforting texture with every bite.