firechat re-write from scratch