А в чем проблема со сторжем? Он, вроде, без подводных камней.
Вот вам простой пример:
интерактивчик на codepen и сам код ниже.
<span id="total">0</span> <button id="action">+1</button>
const action = document.querySelector('#action');
const total = document.querySelector('#total');
let counter = readCounterFromStorage();
updateStorageAndElement();
action.addEventListener('click', () => {
counter++;
updateStorageAndElement();
})
function readCounterFromStorage() {
return parseInt(localStorage.getItem('counter')) || 0;
}
function updateStorageAndElement() {
total.innerText = counter;
localStorage.setItem('counter', counter);
}
И заодно почитать теорию:
localstorage