Fields, labels, required flags and validation all come from Drupal's form config. Emails are not sent from the demo, but everything else runs.
DruxtEntityForm reads the contact_message form display and renders a component per field type. None of this is hand-written markup: override a field component only when you want to.
entity-form/contact-message/Feedback.vue Blocks, menus, views, breadcrumbs, entity forms and search all come straight from Drupal's JSON:API. You override a component only when you want to.
Or open this site in DevPod, with its backend, frontend and demo content.