Assembly for anything that HAS to be assembly: bootloader, GDT/IDT setup, interrupt handlers, context switching, and port I/O wrappers.
C for everything else: window manager, apps, drivers, GUI rendering.
Some parts I probably could have done in C with inline assembly but I found writing pure ASM for the low-level stuff helped me understand exactly what was happening at the hardware level.
What choices looked different to you? I'd love to hear your perspective always looking to improve!
I think AI is a great learning tool when you're trying to understand low-level concepts for the first time.