JavaScript
Идеи приложений на JavaScript для портфолио
Хороший проект для портфолио на JavaScript должен показывать не просто «я написал код», а конкретные навыки: работа с DOM, формами, состоянием, хранением данных, фильтрацией, запросами, адаптивной версткой и аккуратным интерфейсом. Работодателю или заказчику важно увидеть законченную маленькую систему, а не набор случайных кнопок
Лучше сделать 2-3 крепких проекта, чем 15 недоделанных демо. У каждого проекта должны быть понятная задача, README, скриншоты, деплой и список решений, которые вы приняли сами
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Создание динамических форм в React и Next.js, чтобы расширить контекст и сравнить подходы
Трекер задач
Первая идея — трекер задач с фильтрами. В минимальной версии пользователь добавляет задачу, отмечает выполнение, удаляет лишнее и фильтрует список
Что показать в коде:
- массив объектов задач
- добавление через форму
- обработку пустого ввода
- фильтры
все,активные,готовые - сохранение в
localStorage
const tasks = JSON.parse(localStorage.getItem('tasks') || '[]')
function saveTasks() {
localStorage.setItem('tasks', JSON.stringify(tasks))
}
function addTask(title) {
tasks.push({ id: Date.now(), title, done: false })
saveTasks()
}
Такой проект хорошо показывает базовую работу с состоянием без фреймворка
Калькулятор бюджета
Второй сильный вариант — учет доходов и расходов. Пользователь добавляет операцию, выбирает тип, категорию и дату, а приложение считает итог
В первой версии достаточно:
- форма операции
- список операций
- общий баланс
- сумма доходов и расходов отдельно
- фильтр по категории
Усложнение для портфолио: диаграмма по категориям, экспорт в JSON, редактирование операции и сохранение темы интерфейса
Мини-CRM для заявок
Если вы хотите показать более прикладной проект, сделайте маленькую CRM: имя клиента, контакт, статус, комментарий, дата следующего шага
Статусы могут быть такими:
- новая заявка
- написал
- договорились
- отказ
- оплата
Такой проект выглядит ближе к реальным задачам фриланса и бизнеса. В README можно объяснить, как бы вы подключили backend, авторизацию и базу данных во второй версии
Каталог товаров с фильтрами
Каталог показывает умение работать со списками, поиском и сортировкой
Минимальный набор:
- карточки товаров
- поиск по названию
- фильтр по категории
- сортировка по цене
- счетчик найденных товаров
function filterProducts(products, query, category) {
return products.filter(product => {
const matchesText = product.title.toLowerCase().includes(query.toLowerCase())
const matchesCategory = category === 'all' || product.category === category
return matchesText && matchesCategory
})
}
Для портфолио важно не только написать фильтр, но и показать пустое состояние: что видит пользователь, если ничего не найдено
Приложение погоды
Погода хороша для тренировки запросов к внешнему API. Но не ограничивайтесь одним выводом температуры. Сделайте нормальный интерфейс: город, загрузка, ошибка, повтор запроса, история последних городов
Что будет смотреться сильнее:
- состояние загрузки
- обработка неверного города
- сохранение последнего запроса
- переключение Цельсий/Фаренгейт
- адаптивная карточка прогноза
Не храните API-ключ прямо в публичном репозитории. Для учебного проекта используйте безопасный тестовый ключ или объясните в README, как подключить переменные окружения
Игра на реакцию
Небольшая игра тоже хорошо работает в портфолио, если она аккуратно сделана. Например, пользователь нажимает на появляющиеся круги, а приложение считает очки, время и лучший результат
Что показать:
- таймер
- случайную позицию объекта
- подсчет очков
- экран старта и финала
- сохранение рекорда
Игра показывает работу с событиями, временем, состоянием и перерисовкой интерфейса
Как оформить проект для портфолио
У каждого проекта должны быть:
- ссылка на демо
- репозиторий
- скриншот первого экрана
- README с описанием задачи
- список функций первой версии
- раздел «что улучшу дальше»
В README не пишите общие фразы вроде «изучал JavaScript». Лучше написать конкретно: «реализовал фильтрацию, сохранение в localStorage, обработку пустого состояния и валидацию формы»
Как выбрать первую идею
Если вы только начинаете, берите трекер задач или бюджет. Если хотите показать работу с данными, берите каталог. Если хотите показать запросы, берите погоду. Если хотите выделиться визуально, берите игру или мини-CRM с приятным интерфейсом
Планировщик привычек
Еще одна удачная идея — habit tracker. Пользователь создает привычку, отмечает выполнение по дням и видит серию выполнений
Что показать:
- генерацию дней недели
- хранение отметок
- подсчет streak
- пустое состояние
- редактирование названия привычки
Такой проект хорошо демонстрирует работу с датами и состоянием интерфейса. Для усложнения можно добавить календарь за месяц и экспорт данных
Конвертер единиц
Конвертер валют, расстояний, веса или времени выглядит простым, но в нем удобно показать чистую архитектуру
const units = {
km: 1000,
m: 1,
cm: 0.01,
}
function convert(value, from, to) {
return value * units[from] / units[to]
}
Добавьте валидацию ввода, переключение направления, историю последних расчетов и тесты для функции convert. Такой проект особенно хорош, если вы хотите показать, что умеете отделять логику от интерфейса
Markdown-редактор
Markdown-редактор показывает работу с текстом, предпросмотром и состоянием
Первая версия:
- поле ввода
- предпросмотр
- кнопка очистки
- сохранение черновика
- счетчик символов и слов
Не обязательно писать полный Markdown-парсер. Можно поддержать заголовки, жирный текст, списки и переносы строк. В README честно напишите, какие элементы поддерживаются
Что делает проект убедительным
Проект выглядит сильнее, если в нем есть маленькие детали реального продукта: загрузка, ошибка, пустой список, подтверждение удаления, сохранение данных, адаптивность, понятные подписи кнопок. Именно такие детали отличают учебную заготовку от работы, которую можно показать заказчику
Какой стек выбрать
Для первого портфолио-проекта можно писать на чистом JavaScript. Это покажет, что вы понимаете DOM, события и состояние без магии фреймворка. Для второго или третьего проекта уже можно взять React, Vue или Svelte, если вы хотите претендовать на frontend-вакансии, где эти инструменты указаны в требованиях
Хорошая последовательность такая:
- один проект на чистом JavaScript
- один проект на фреймворке
- один проект с запросом к внешнему API или своим backend
Так портфолио показывает рост, а не десять одинаковых todo-list
Как не испортить хорошую идею
Даже сильную идею легко испортить небрежной подачей. Проверьте:
- нет ли ошибок в консоли
- работает ли проект на телефоне
- есть ли состояние загрузки
- понятно ли, что делать на первом экране
- сохраняются ли данные после перезагрузки
- есть ли ссылка на демо в README
Попросите другого человека открыть проект без объяснений. Если он не понимает, куда нажимать, проблема не в человеке, а в интерфейсе
Что написать в описании проекта
Вместо «проект для практики JavaScript» напишите конкретнее: «мини-CRM для учета заявок с фильтрацией по статусам, сохранением в localStorage и адаптивной версткой». Такая фраза сразу показывает задачу, функции и вашу роль