How to customize the page /node/add?
Forms are manipulated in Drupal 8 predominantly by using services, twig templates and yaml files, rather than hooks. Hooks are still used, but the code in the hooks is limited in comparison with Drupal 7.

On the other hand, new D8 concepts such as Services and Event Subscribers have become much more important.

Here's a good tutorial showing how to alter the Drupal 8 login form:

https://www.foreach.be/blog/how-manipulate-forms-drupal-8

Follow the steps in the tutorial to create a simple form_overwrite module.

When you get to the step where you create the src/Routing/RouteSubscriber.php file, you'll diverge slightly from the tutorial.

Instead of altering the routeSubscriber for user.login, you'll want to alter the one for node.add:

&lt;?php

/**
 * @file
 * Contains \Drupal\form_overwrite\Routing\RouteSubscriber.
 */

namespace Drupal\form_overwrite\Routing;

use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;

/**
 * Listens to the dynamic route events.
 */
class RouteSubscriber extends RouteSubscriberBase {
  /**
   * {@inheritdoc}
   */
  protected function alterRoutes(RouteCollection $collection) {
    // This is the one from the linked article
    if ($route = $collection-&gt;get('user.login')) {
      $route-&gt;setDefault('_form', '\Drupal\form_overwrite\Form\NewUserLoginForm');
    }
    // This is the one you want to write
    if ($route = $collection-&gt;get('node.add')) {
      $route-&gt;setDefault('_form', '\Drupal\form_overwrite\Form\NewNodeAddForm');
    }
  }
}


Armed with this knowledge, you should be able to adapt the linked tutorial to suit your needs. Good luck!