I think `seen` can be a `cached_property`:

```python
@cached_property
def seen(self):
    return self.seen_at is not None
```