Client-side article renderer