Думаю, вам понадобится что-то вроде:
AND us.first_post_created_at > NOW() - INTERVAL '7 DAYS'
(документация PostgreSQL по датам и времени)
Чтобы исключить личные сообщения, нужно выполнить соединение с таблицей topics (используя внешний ключ posts.topic_id) и проверить столбец archetype. Добавьте это перед предложением WHERE:
JOIN topics t ON p.topic_id = t.id
…и это перед предложением ORDER BY:
AND t.archetype = 'regular'