Designing River's hooks and middleware for change resistance and extensibility | Hacker News Reader