feat(articles): add layout system