Simplify rendering code, drop dependency on core.async