What is the best way to change the intro on a Contribution page based on URL?
One way (if I understand correctly what you are after) would be to create a view that displays the node (or node's fields -- image, first_name, description) as you want it using a Block display for the view. Set up a contextual argument for the node's nid which provides a default value using PHP code and pull the appeal variable from the URL, something like this:

check_plain($_GET['appeal');


Then simply display this block at the top of the content region in your default theme for the civicrm/contribute/transact path.