Portable Playdate Game Architecture?

I am programming in Rust, but the architectural discussion should be the same as writing a game in C. If the goal is to write a game that runs on Playdate that can be easily ported to other systems, what general architecture should it have?

I am thinking that everything related to IO should live in the Playdate client, and everything else should be live in a portable client core. Then a separate SDL2 client would cover most other platforms. (In theory, SDL2 could even cover the Playdate, but development on the Playdate port seems to have stalled.)

Am I missing anything important?