feat: optional articles

Resolves #2