Marked as helpful by the asker
The schema is fine for the size you're at. One thing that will bite you: streaks has a current_streak column you update from the client on every check-in. That will drift out of sync the moment two devices check in close together.
Compute it instead with a Postgres function that counts consecutive days from checkins, called from a trigger after insert. Slightly more setup, never wrong.