Chop, onions, garlic, and ginger, into fine, thin slices.
Heat, butter/oil/ghee in a deep frying pan, pot, or wok, Once the oil has heated, add the onions, garlic, ginger, and whole chilies. Season with salt, and fry stirring occasionally for 8-10 minutes until the onions begin to brown. Add oil as needed to prevent burning.
Make a well to expose the bottom of the pot and add, garam masala, cardamom pods, whole cloves, and coriander powder. Stir to combine and cook the spices for around 1 minute to toast. Don't let them burn.
Add the water to the pan 2 tablespoons as a time, stir and fry everything until the water has evaporated. Once evaporated add another 2 tablespoons of water and water fry again. Repeat the water frying until the onions and spices have formed a smooth paste.
Add a full (13.5 oz) can of full fat coconut milk to the pot and turn the temperature down to maintain a steady simmer. Cover with a lid and let simmer for 15-20 minutes, or until the milk has caramelized into a browner colour. Stir occasionally to prevent burning.
In a small bowl, mix together plain yogurt and coconut flour. Stir yogurt mixture into the pot and lower temperature to a gentle simmer.
Add butter, raw whitefish, and cleaned shrimp, stir to coat in the gravy and cover with a lid, the steam helps cook the fish. Simmer over medium-low heat for 8-10 minutes or until shrimp and fish are just cooked through.
Remove from heat and squeeze in the juice of one lime, serve garnished with fresh cilantro, chopped chilies, and toasted coconut flakes.