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