There are pages of tutorials on creating templates via the web using crx/de ui or the template console and the "templates author" role.
However, we need to create page templates which are versioned and distributed as part of the code, and they need to contain custom properties.
Does anyone have a handy resource which describes how to new templates via code?
You can create your own set of templates in the project structure under /app/<project>/components/page.
You can commit this code in the code repository, in the ui.apps. Whenever you will deploy the code, these templates will be deployed in the AEM. Here you can maintain multiple versioned templates as per your requirement.
it will give you better understanding to fulfill your requirement.