First, rinse and soak the rice: cover rice with water in a large bowl, swish around, then drain the water. Repeat twice more for a total of three rinses. The water should be mostly clear by the third rinse. Cover with water a fourth time and let soak for 30 minutes. Drain rice and set aside until you need it.
Heat oil or ghee in a large pot with a lid.
Add the sliced onions and fry on high heat for around 12 minutes until the onions are light brown.
Add the ginger garlic paste and fry on low heat for 2 minutes.
Add the chicken pieces, mix and fry on high heat for 2–3 minutes.
Add the ready-made biryani masala, mix and fry on medium heat for 3 minutes. Add a splash of water if things stick to the bottom of the pan.
Add the diced tomatoes and chilis if using. Mix well and cook on medium heat for 4–5 minutes until the tomatoes are soft.
Keep the heat on medium and add the yogurt and potatoes. Give a mix and then add the ¾ cup each of chopped cilantro and mint leaves.
Once it boils, lower the temperature to medium-low and cook uncovered for 2 minutes until the oil separates (you will see the oil or ghee rise to the top at the edges of the sauce).
Cover the pot and simmer on medium-low heat for around 20–25 minutes until the chicken is tender and the potatoes are cooked through (10 minutes if using boneless chicken pieces). Stir several times while the chicken is simmering.
Uncover and increase heat to high. Boil about 5–10 minutes to thicken the sauce. You want it to be a rich, thick sauce that coats the chicken, not watery.
Parboil the rice (while the chicken is simmering):
In a second large pot, bring 10 cups of water to a boil over high heat.
Add the cardamom, cloves, cinnamon stick, bay leaf, and salt to the boiling water. Then add the rinsed, strained rice.
Boil for 5 minutes over medium heat until the rice is almost cooked (a grain of rice should break when you pinch it).
Strain the partially cooked rice with a fine mesh strainer (keep the spices with the rice). Set aside until the chicken is cooked through.
Layer the chicken and rice:
In a large, wide, heavy-bottom pot with a lid, spread half the partially cooked rice across the bottom.
Spread the cooked chicken with sauce and potatoes over the rice uniformly.
Spread the remaining rice over the chicken.
Sprinkle with reserved ¼ cup of chopped mint leaves and a handful of crispy fried onions (optional).
Cover and cook over low heat for 7–8 minutes.
Remove from heat and let the biryani rest for 10 minutes.
Open the lid and very gently mix the chicken and rice. Empty onto a platter and garnish with quartered hard-boiled eggs (optional), cilantro leaves, and crispy fried onions (optional).