Conditionally run jobs in workflow

Right now we have a CircleCI workflow that deploys frontend code, backend code, and a site that shows information about our product. We want to split this into a workflow that conditionally deploys only parts of the app so that if we’ve only changed our backend code, we can have a backend deployment without having to redeploy the frontend code, and so on. What is the best way to accomplish this in CircleCI?

I know I can put the build jobs behind different approval steps (‘deploy all’ vs. ‘deploy frontend’, ‘deploy backend’, etc.), but if I have a variable number of jobs that can be approved on each build and there’s a bit of deployment code that should not run until after all of the approved jobs are complete, I don’t think there’s a way to tell CircleCI to wait until all the approved jobs are done before running the shared code, is there? Also, is there a way to tell which jobs have been approved from within the CircleCI config code?