split campaign into its own namespace/file