Ah, understood! :)
You're right, my initial suggestion would be problematic because you're basically dealing not with one ordered list of items/houses, but with many sub-lists based on the users location. To avoid having to download an item only to find that it already has been seen by the user, you could change the structure around, and store for each user the IDs of items he has already seen:
users
- ID_user1
- name
...
- seenItems
- ID_item23: true
- ID_item42: true
- ID_item1701: true
- ID_user2
...
items
- ID_item0 //probably use auto-generated IDs here via push()
...
- ID_item1
...
I haven't used GeoFire myself, yet - but as I understand it, it creates and uses a structure separate from the rest of your DB, and only returns a list of IDs that match a certain location. Your app logic could then be something like this:
1. Detect user location
2. Get a list of IDs of items near the user from Firebase
3. For each ID on that list, check if it exists as a key in seenItems of your user object
a. if true, skip
b. if false, get individual item from FIrebase and display it to the user
The "seenItems" map could also double as your list of liked items (true for liked, false for seen but not liked?).