Heat the oil in a large pot or cast iron pan.
Add the diced onion and fry it gently until almost translucent, 5-7 minutes, stirring regularly.
Add the minced garlic. Continue frying gently for a few minutes until the garlic softens.
If using a cast iron pan, transfer the onion-garlic mixture to a large pot. Stir in all the ground spices and heat them on a very low heat for 1-2 minutes, stirring constantly so they don't burn.
Add the tomatoes, 800 ml water (or 2 tins), tomato paste, cardamom pods, bay leaves, preserved lemon, saffron, dates/raisins, salt and pepper to the pot. Simmer, covered, until the tomato chunks soften and fall apart (about 45 minutes).
Remove the lid and continue cooking the tagine on low-medium heat to allow excess water to evaporate so that it thickens.
Taste, and add date syrup/maple syrup if you find the flavour too acidic. Season with more salt and pepper if desired.
Add the chopped kale or spinach for the final 10 minutes and cover the pot with a lid to allow the greens to cook in the sauce.
Stir in the cooked chickpeas or beans.
Serve over rice, couscous or quinoa. Top with pomegranate seeds, almond flakes, chopped nuts, fresh herbs, avocado slices and/or yogourt.
Once cooled, store leftovers in a sealed container in the fridge for 2-3 days, or freeze.