Chat module (second pass)