refactor: move most content generation into a specific contentlib