Add localStorage-based persistence