Can automatic CiviDiscounts be contact-specific?
This is possible, but you need to know how to address the API using JSON.  Also, if you select contacts by name, you're going to need a different discount per contact.  Using a custom field might be better.

Also note that this requires that the person filling out the contribution form be logged in!

Attached please find an example of a CiviDiscount configuration that gives a 50% discount to anyone with a last name of "Smith".  Check out the API Explorer if you need help with field names or syntax.