use API-only for data + add hashchange support