My response (which I was drafting when he deleted the question):
Every situation is different, but it is even possible to reuse a lot of code in both scenarios.
Now to address your interfaces…
Your Submission Page — I could be wrong, but this sounds like a shopping cart to me (at least in essence). You are on the right track with query parameters, but you could also store info about the cart (and the user’s capabilities) in a session or cookie.
Your Messaging App — This can seem like a daunting challenge, but before we had web sockets and even Ajax, we relied on a small form which posts messages to the back end and a running feed of messages being sent from the back-end. One of the most common way to handle this involved frames and a “meta refresh” like this one:
<meta http-equiv="refresh" content="30">
That simple meta tag will make any browser refresh the page every 30 seconds. Now if you put that in an iframe to keep it from causing a refresh of the entire interface, any new messages would be picked up and displayed automatically at that interval (which you should tune to be appropriate for your app).
Once that is in place the page itself could even post to that frame by using the non-standard but well-supported _target attribute on the form.
I hope this helps. Progressive enhancement may seem like a huge challenge, but when you take a few moments to think about how we handled these challenges in the past, the way forward becomes clear.
This post originally appeared on my blog.