И почему же, если проект на PHP? Что же вы тогда используете для управления зависимостями? Если сторонними библиотеками вообще не планируете пользоваться, то не нужен ни composer, ни папка vendor.
В public только index.php и статика: css, js, js шаблоны, картинки, шрифты и т. п. Шаблоны php модулей в папках view модулей.
Нет, что должно быть в public перечислил выше. Остальные PHP файлы только в /module/<Имя модуля>/src или где угодно, но только не в public. Всё запросы, за исключением запросов статических файлов, идут в index.php, в конечном итоге роутер направляет их в нужный контроллер, который лежит всё там же где-то в недрах /src.
Это папка для сторонних библиотек, используемых в вашем проекте. Используется composer'ом. Внутрь лезть особо причин нет, composer сам решит как ему там всё разложить. Свои классы вы туда тоже не должны писать.
src и lib - скажем так, синонимы. Кому как больше нравится. Главное, что внутри лежат сами PHP файлы проекта, следующие стандарту PSR-4. Лежат там только файлы, написанные авторами проекта. Поэтому нет смысла класть vendor внутрь src (или lib).
test - каталог для тестов проекта.
В папке vendor имя поставщика и имя проекта могут совпадать, вот они и дублируются.
<путь к проекту>/<путь к папке с библиотеками>/<Наименование производителя>/(<Пространство имен>/)<Название класса>.php
<Наименование производителя>\(<Пространство имен>\)<Название класса>
что в целом совпадает с той структурой которую я использую