13 KiB
13 KiB
Руководство по контрибьюции
Спасибо за интерес к проекту Phantom Protocol Landing! 🎉
Мы рады любому вкладу — от исправления опечаток до новых функций.
📋 Содержание
- Кодекс поведения
- Как я могу помочь?
- Процесс разработки
- Стандарты кода
- Коммиты
- Pull Requests
- Сообщения об ошибках
- Предложения функций
🤝 Кодекс поведения
Этот проект придерживается Contributor Covenant Code of Conduct. Участвуя, вы соглашаетесь соблюдать этот кодекс.
💡 Как я могу помочь?
Типы контрибьюций
- 🐛 Исправление багов - Найдите открытые issues с меткой
bug - ✨ Новые функции - Issues с меткой
enhancement - 📝 Документация - Улучшение README, комментариев, гайдов
- 🎨 Дизайн - Улучшение UI/UX, анимации, стили
- ♿ Доступность - ARIA метки, keyboard navigation
- 🌍 Переводы - Добавление новых языков
- ⚡ Производительность - Оптимизация загрузки, анимаций
- 🧪 Тестирование - Cross-browser тестирование
Хорошие первые задачи
Ищите issues с метками:
good first issue- Легкие задачи для новичковhelp wanted- Задачи, где нужна помощьdocumentation- Улучшение документации
🔧 Процесс разработки
1. Fork репозитория
Нажмите кнопку "Fork" в правом верхнем углу GitHub.
2. Клонируйте свой fork
git clone https://github.com/YOUR_USERNAME/phantom-protocol-landing.git
cd phantom-protocol-landing
3. Создайте ветку
git checkout -b feature/your-feature-name
# или
git checkout -b fix/bug-description
Соглашение об именовании веток:
feature/- новые функцииfix/- исправления баговdocs/- документацияstyle/- стили, форматированиеrefactor/- рефакторинг кодаtest/- добавление тестовperf/- улучшение производительности
4. Внесите изменения
- Следуйте стандартам кода
- Добавьте комментарии для сложной логики
- Обновите документацию при необходимости
- Тестируйте в разных браузерах
5. Закоммитьте изменения
git add .
git commit -m "feat: добавить новую функцию X"
6. Push в свой fork
git push origin feature/your-feature-name
7. Создайте Pull Request
Откройте Pull Request на GitHub с подробным описанием изменений.
📐 Стандарты кода
HTML
<!-- Хорошо: семантический, с комментариями -->
<!-- Hero Section -->
<section id="hero" class="hero-section">
<div class="container">
<h1 class="hero-title">Title</h1>
</div>
</section>
<!-- Плохо: div-суп без семантики -->
<div class="section1">
<div class="title">Title</div>
</div>
Правила:
- ✅ Используйте семантические теги (
<section>,<article>,<nav>) - ✅ Добавляйте комментарии для секций
- ✅ Используйте значащие ID и классы
- ✅ Закрывайте все теги
- ✅ Отступы: 4 пробела
CSS
/* Хорошо: организованный, с комментариями */
/* === Hero Section === */
.hero-section {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
}
.hero-title {
font-size: clamp(2rem, 5vw, 4rem);
font-weight: 700;
}
/* Плохо: без структуры */
.hero{min-height:100vh;display:flex;}
Правила:
- ✅ Используйте CSS переменные для цветов и размеров
- ✅ Группируйте связанные стили
- ✅ Комментируйте секции
- ✅ Mobile-first подход
- ✅ Используйте
clamp()для fluid typography - ✅ Отступы: 4 пробела
- ✅ Один селектор на строку
JavaScript
// Хорошо: понятное, с комментариями
/**
* Инициализация системы тем
* Загружает сохраненную тему из localStorage
*/
function initTheme() {
const savedTheme = localStorage.getItem('phantom-theme') || 'dark';
setTheme(savedTheme);
}
// Плохо: непонятное, без комментариев
function init(){let t=localStorage.getItem('t')||'d';set(t);}
Правила:
- ✅ Используйте
'use strict' - ✅ Документируйте функции JSDoc комментариями
- ✅ Используйте
constиlet, избегайтеvar - ✅ Значащие имена переменных
- ✅ Обрабатывайте ошибки (
try/catch) - ✅ Отступы: 4 пробела
- ✅ Точка с запятой обязательна
Адаптивность
Тестируйте на всех breakpoints:
- ✅ Mobile: 320px - 575px
- ✅ Tablet: 576px - 991px
- ✅ Desktop: 992px+
- ✅ Large Desktop: 1400px+
Производительность
- ✅ Оптимизируйте изображения (WebP, srcset)
- ✅ Минифицируйте CSS/JS для production
- ✅ Используйте
deferдля скриптов - ✅ Lazy loading для изображений
- ✅ Избегайте layout thrashing
- ✅ Используйте
requestAnimationFrameдля анимаций
Доступность
- ✅ Добавляйте
altдля изображений - ✅ Используйте ARIA метки
- ✅ Keyboard navigation (Tab, Enter, Esc)
- ✅ Контрастность WCAG AA (минимум)
- ✅ Поддержка
prefers-reduced-motion - ✅ Focus states для интерактивных элементов
📝 Коммиты
Используем Conventional Commits:
<type>(<scope>): <subject>
<body>
<footer>
Типы коммитов
feat:- Новая функцияfix:- Исправление багаdocs:- Документацияstyle:- Форматирование, пробелы (не CSS!)refactor:- Рефакторинг кодаperf:- Улучшение производительностиtest:- Добавление тестовchore:- Обновление зависимостей, конфигурации
Примеры
# Хорошо
feat(demo): добавить паузу в демо-анимацию
fix(navbar): исправить прозрачность на мобильных
docs(readme): обновить инструкцию по установке
style(css): форматирование файла style.css
refactor(js): упростить логику копирования
# Плохо
update
fixed stuff
changes
Breaking Changes
Для breaking changes добавьте !:
feat!: изменить структуру CSS переменных
BREAKING CHANGE: Переименованы CSS переменные для тем
🔍 Pull Requests
Чеклист перед созданием PR
- Код соответствует стандартам
- Добавлены комментарии для сложной логики
- Обновлена документация (если нужно)
- Протестировано в Chrome, Firefox, Safari
- Протестировано на мобильных устройствах
- Нет console.log в production коде
- Lighthouse Score не ухудшился
- Работает в Dark и Light темах
Шаблон Pull Request
## Описание
Краткое описание изменений
## Тип изменений
- [ ] Новая функция (feat)
- [ ] Исправление бага (fix)
- [ ] Документация (docs)
- [ ] Рефакторинг (refactor)
- [ ] Другое: _____
## Мотивация и контекст
Почему это изменение необходимо? Какую проблему оно решает?
Ссылка на issue: #123
## Скриншоты (если применимо)
До | После
----|-----
 | 
## Как протестировано?
- [ ] Desktop Chrome
- [ ] Desktop Firefox
- [ ] Desktop Safari
- [ ] Mobile Chrome
- [ ] Mobile Safari
- [ ] Dark theme
- [ ] Light theme
## Checklist
- [ ] Код соответствует стандартам проекта
- [ ] Документация обновлена
- [ ] Lighthouse Score: Performance ≥ 90
🐛 Сообщения об ошибках
Перед созданием issue
- Проверьте, нет ли уже похожего issue
- Обновите до последней версии
- Проверьте, воспроизводится ли баг в другом браузере
Шаблон Bug Report
## Описание бага
Четкое описание проблемы
## Шаги для воспроизведения
1. Перейти на '...'
2. Кликнуть на '...'
3. Прокрутить до '...'
4. Увидеть ошибку
## Ожидаемое поведение
Что должно происходить
## Актуальное поведение
Что происходит на самом деле
## Скриншоты
Если применимо, добавьте скриншоты
## Окружение
- ОС: [например, macOS 14.0]
- Браузер: [например, Chrome 120.0]
- Разрешение экрана: [например, 1920x1080]
- Тема: [Dark/Light]
## Дополнительный контекст
Любая другая информация о проблеме
✨ Предложения функций
Шаблон Feature Request
## Описание функции
Четкое описание желаемой функции
## Мотивация
Почему эта функция будет полезна?
## Предлагаемое решение
Как вы видите реализацию?
## Альтернативы
Рассматривали ли вы альтернативные решения?
## Дополнительный контекст
Скриншоты, mockups, примеры
🎨 Рекомендации по дизайну
При добавлении новых UI элементов:
-
Следуйте цветовой схеме:
- Акцент:
#00f0ff(неоново-циан) - Вторичный:
#7a3eff(фиолетовый) - Успех:
#00ff9d - Ошибка:
#ff2a6d
- Акцент:
-
Используйте существующие компоненты:
.glass-cardдля карточек.btn-primaryдля кнопок.section-paddingдля отступов секций
-
Соблюдайте spacing:
- Используйте Bootstrap spacing utilities
- Консистентные отступы (rem units)
-
Анимации:
- Плавные переходы (cubic-bezier)
- Используйте AOS для scroll animations
- Уважайте
prefers-reduced-motion
📚 Полезные ресурсы
🙏 Благодарности
Спасибо всем контрибьюторам проекта!
📞 Контакты
Вопросы? Пишите:
- GitHub Discussions
- Issues
- Email: contact@phantom.protocol
Спасибо за ваш вклад! 🚀