Remote firmware upgrade
1) Buy more flash.

2) If it's just over the limit, make the code smaller (configure compiler options for minimum size, remove duplicate strings, check for dead code and unused functions)

3) Compress the firmware while downloading. Then the staging area can be smaller than the primary partition, which can then be made larger.