Make the slaw: In a bowl, toss cabbage, cilantro, and red onion with lime juice, avocado oil, salt, and pepper. Set aside to soften slightly while you prepare the fish.
Mix the crema: In a small bowl, whisk sour cream, mayonnaise, lime juice, hot sauce (if using), garlic, and a pinch of salt.
Adjust lime and salt to taste. Chill until serving.
Season the fish: Pat fish dry. In a separate bowl, combine chili powder, smoked paprika, cumin, garlic powder, onion powder, salt, black pepper, and lime zest.
Sprinkle over the fish and gently rub to coat.
Cook the fish: Heat avocado oil in a large skillet over medium-high. Add fish in a single layer. Cook 2–3 minutes per side until opaque and flakes easily.
Avoid overcooking. Work in batches if needed.
Prep the lettuce: Separate and rinse the leaves. Pat dry well so they don’t slip or water down the fillings.
Assemble: Add a small handful of slaw to each lettuce leaf.
Top with a few pieces of fish, a drizzle of lime crema, avocado slices, and any extras like jalapeño or cilantro. Finish with a squeeze of lime.
Serve immediately: Lettuce wraps are best enjoyed right away while crisp and fresh.