Adding finalized skeleton of web pipeline ready to be merged

Still can't show results or have a proper working wait page, as those are dependent on the job running working, but you can now go through the entire pipeline and see how it looks.
Why do we need to process the strings here directly, rather than having a rich representation in JSON?