Сделайте приложение по оптимизации и ресайзингу картинок, по типу tinypng.com
Пользователь может залить картинку любого размера, ваше приложение должно "сжать" эту картинку без потерь.
Пользователь также может выбрать фичу уменьшения размера изображения, допустим, до 50% от исходного изображения. То есть картинка 800х600 будет уменьшена до 400х300 и сжата без потерь.
Если усложнить задачу, то позволить пользователю заливать zip/rar архивы с изображениями, также указывает свою почту куда скинуть итоговый архив с обработанными изображениями.
То есть сначала делаем регистрацию с подтверждением почты, затем появляется фича пакетной загрузки картинок.
Но это может быть слишком сложно для новичка. Поэтому:
Поэтому простой блог с админ панелью (на bootstrap).
Усложняем:
В блоге есть посты, категории и теги. Пост может быть в нескольких категориях. У категорий могут быть родительские категории. Ajax комментарии и лайки к постам и комментариям, комментарии должны быть вложенными (как на хабре или vc.ru).
Еще усложняем:
Пост добавляется через WYSIWYG редактор, в редакторе можно добавлять картинки, которые будут сохраняться на сервере. Желательно, чтобы картинки можно было ресайзить прям на лету. Лучше использовать какой-нибудь filemanager.
Еще усложняем:
Регистрация/авторизация пользователей через соц. сети.
Еще усложняем:
Сделайте полнотекстовый поиск по блогу, в том числе и по комментариям. Освойте Sphinx или Elasticsearch, научитесь устанавливать и настраивать все это на фреймворке (Laravel или Symfony).
Познакомьтесь с Redis, научитесь кешировать данные из базы в redis'e. Обновляйте кэш, когда кто-то добавил комментарий/like или вы добавили пост.
Еще усложняем:
Познакомьтесь с Websocket'ами, научитесь делать так, что если кто-то ставит лайк под постом или комментарием, то все, кто онлайн, видят сразу, что кол-во лайков у поста/комментария увеличилось.
Чтобы со всем этим поиграться, освойте Docker.
Покройте приложение простейшими Unit тестами.
Ну и конечно же, коммитьте это всё на Github(Bitbucket).
Если всё это получилось, то вы уже почти готовый fullstack больше в сторону backend'a. Для middle backend'ера еще нужно подтянуть Rest API, чтобы умели api'шки пилить (с авторизацией), и желательно еще одну СУБД, лучше PostgreSQL, а также анализ запросов к БД (индексы, explain и т.д.). Для полноценного fullstack'a нужно освоить получше JS, верстку(БЭМ) и frontend framework'и: Vue.js, React, Angular, чтобы уметь в одиночку запилить SPA приложение, которое по api тащит данные с вашего же сервера.
Сейчас меня закидают помидорами потому, что сказал middle, и кто-то скажет, что middle это больше n лет реальной разработки. Но описанное выше решает большую часть всех повседневных задач в коммерческих проектах. Если научились делать это, значит научитесь решать и остальные задачи, пусть и немного (или много) погуглив. Здесь на тостере есть те, у кого 5 лет опыта в разработке, но по-прежнему junior'ы, потому что всё время пилили лендинги или сайты-визитки на 3-5 страниц.
Также следует сказать, что грейды (junior, middle, senior) сильно отличаются в разных компаниях
Всё описанное это дело в лучшем случае, полугода. В худшем случае может затянуться и на года.
Скорей всего такого не случится, что вы будете всё время заниматься только этим блогом. На протяжении обучения у вас появится желание сделать что-то еще, потестировать то или это, поиграться с какой-то технологией (Sphinx, Elasticsearch, Redis, RabbitMQ и т.д.) отдельно, или проштудировать верстку, js, возможности фреймворка отдельно. К проекту вы будете возвращаться время от времени, почерпнув знания из промежуточных тестовых проектов.