scaffolded from generator-full-stack