offline first, with subscription to events