add nginx stop build and run to Makefile

This commit is contained in:
2025-10-16 02:03:51 +05:00
parent 6ab25eb073
commit d16b1cd1e7
131 changed files with 14 additions and 17960 deletions
-150
View File
@@ -1,150 +0,0 @@
Статьи и ссылки Аминев Загир
https://dzen.ru/a/aERuJ032L0xbRLzl
https://www.bashinform.ru/news/social/2023-02-22/uchitel-fizkultury-iz-bashkirii-prinyal-uchastie-v-teleshou-supernindzya-3151135
https://kurultai.ru/ru/content/3785-ufimskij-mnogoborecz--bashkirskij-nindzya/?tag%5B1%5D=news
https://utmb.world/runner/2146339.zagir.aminev
https://vk.com/bashkort_run?from=search
<br />
### Фундамент: Техническое SEO и Базовая оптимизация
Без этого все остальные усилия будут малоэффективны.
Скорость загрузки сайта: Бегуны ценят скорость, и Google тоже. Используйте Google PageSpeed Insights.
Оптимизируйте изображения: Сжимайте фотографии с пробегов, трейлов, тренировок (инструменты: Squoosh, TinyPNG).
Включите кэширование: Это ускорит загрузку для повторных посетителей.
Выберите качественный хостинг: Быстрый и надежный.
Мобильная версия (Mobile-First): Большинство пользователей будут искать вас с телефонов. Убедитесь, что сайт идеально отображается на всех устройствах (адаптивный дизайн).
Безопасность (HTTPS): Обязательно используйте SSL-сертификат. Это не только фактор ранжирования, но и доверие пользователей (особенно при оплате членских взносов онлайн).
Структура URL: Читаемые и понятные адреса страниц.
Плохо: .../p=123
Хорошо: .../begovoy-klub-moskva/marafonskaya-podgotovka
Файлы Robots.txt и Sitemap.xml: Помогите поисковым роботам правильно просканировать и проиндексировать ваш сайт.
Структурированные данные (Schema.org): Разметка для поисковых систем.
Организация (LocalBusiness): Укажите название, адрес, телефон, часы работы, ссылки на соцсети.
События (Event): Для каждого забега или тренировки — дата, место, название, описание.
Вопросы и ответы (QAPage): Для раздела FAQ.
Это поможет получить расширенные сниппеты в поисковой выдаче.
Контент: Ваше главное оружие
Создавайте полезный, уникальный и релевантный контент, который будут искать ваши будущие участники.
Главные страницы (Must-Have):
Главная: Кто вы, чем занимаетесь, преимущества, призыв к действию (CTA - "Записаться на пробную тренировку", "Посмотреть расписание").
О нас: История клуба, тренеры (с фото и описанием заслуг!), философия, достижения.
Направления/Услуги: Детальные страницы для каждой группы.
Для новичков (с нуля до 5км)
Подготовка к марафону/полумарафону
Спринтерский бег
Трейлраннинг
Индивидуальные тренировки
Расписание и место встреч: Всегда актуальная информация. Укажите адрес с картой (Google Maps/Yandex.Карты).
Цены и оплата: Прозрачность рождает доверие.
Контакты: Телефон, email, адрес (должен совпадать с указанным в Google Мой бизнес и соцсетях), форма обратной связи.
Блог — сердце SEO:
Ответы на вопросы новичков: "Как начать бегать", "Как правильно дышать при беге", "Выбор первых беговых кроссок".
Обзоры: Обзор мест для бега в вашем городе (парки, набережные), обзор стартов (местных марафонов).
Мотивация и история: Интервью с успешными учениками, отчеты с забегов, личные блоги тренеров.
Полезные руководства: "План подготовки к полумарафону за 3 месяца", "Как избежать травм при беге".
Ключевые слова (Keywords):
Ядро: [беговой клуб москва], [школа бега спб], [тренер по бегу].
Тематические: [как правильно бегать], [подготовка к марафону], [техника бега].
Локальные + тематические: [бег для начинающих москва], [группа по бегу в парке горького], [марафонская подготовка санкт-петербург].
Коммерческие: [цена занятий в беговом клубе], [запись в секцию бега].
Включайте их естественно в заголовки (H1-H3), тексты, мета-теги.
Локальное SEO (Самое важное!)
Люди ищут "беговой клуб рядом со мной".
Google Мой бизнес (Google My Business - GMB) и Yandex.Справочник:
Заполните профиль на 100%: Фото (лого, обложка, фото команды, тренировок), актуальные часы работы, телефон, сайт, категории ("Беговой клуб", "Спортивная школа", "Тренер по фитнесу").
Регулярные посты: Анонсы тренировок, отчеты с забегов, полезные советы. Это оживляет ваш профиль.
Стимулируйте отзывы: Вежливо просите участников оставлять отзывы после успешных стартов или тренировок. Отвечайте на ВСЕ отзывы (и положительные, и отрицательные).
Отвечайте на вопросы: В GMB есть раздел "Вопросы и ответы".
Упоминания в интернете (Листинги):
Убедитесь, что ваш клуб есть в онлайн-справочниках (Яндекс.Карты, 2GIS), на спортивных агрегаторах, в городских пабликах. Название, адрес и телефон (NAP) должны быть единообразны везде.
Внешние факторы (Linkbuilding)
Получение ссылок с других сайтов.
Партнерства: Договаривайтесь с парками (места тренировок), спортивными магазинами, организаторами забегов о взаимных упоминаниях.
Гостевые посты: Пишите статьи для популярных городских или спортивных блогов.
Упоминания в СМИ: Если участвуете в крупных забегах или организуете свои, отправляйте пресс-релизы в местные издания.
Участие в рейтингах: "Лучшие беговые клубы [вашего города]".
Аналитика и мониторинг
Установите цели в Google Аналитике (Google Analytics 4):
Отслеживайте ключевые действия: отправка форм заявок, клики по телефону, переходы в расписание.
Подключите Яндекс.Вебмастер и Google Search Console:
Смотрите, по каким запросам вас находят, какие страницы в индексе, исправляйте ошибки.
Чек-лист для старта:
Проверить и ускорить сайт (PageSpeed Insights).
Настроить и полностью заполнить Google Мой бизнес и Yandex.Справочник.
Провести аудит контента: есть ли страницы для всех ключевых услуг? Запустить блог.
Внедрить структурированную разметку (Schema.org) для организации и событий.
Написать план контента на 2-3 месяца вперед для блога и соцсетей.
Настроить цели и отслеживание в Google Analytics.
Проанализировать сайты конкурентов: что у них хорошо, чего нет у вас?
Успехов в продвижении вашего бегового клуба
Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 616 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 511 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 706 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

-8
View File
@@ -1,8 +0,0 @@
[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
charset = utf-8
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
max_line_length = 100
-2
View File
@@ -1,2 +0,0 @@
VITE_APP_DEBUG=true
VITE_API_BASE_URL=https://begushiybashkir.ru/api/v1
-1
View File
@@ -1 +0,0 @@
* text=auto eol=lf
-6
View File
@@ -1,6 +0,0 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"semi": false,
"singleQuote": true,
"printWidth": 100
}
-8
View File
@@ -1,8 +0,0 @@
{
"recommendations": [
"Vue.volar",
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
"esbenp.prettier-vscode"
]
}
-13
View File
@@ -1,13 +0,0 @@
{
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"tsconfig.json": "tsconfig.*.json, env.d.ts",
"vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*",
"package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .oxlint*, oxlint*, .prettier*, prettier*, .editorconfig"
},
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
-44
View File
@@ -1,44 +0,0 @@
# bbvue
This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
## Recommended Browser Setup
- Chromium-based browsers (Chrome, Edge, Brave, etc.):
- [Vue.js devtools](https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd)
- [Turn on Custom Object Formatter in Chrome DevTools](http://bit.ly/object-formatters)
- Firefox:
- [Vue.js devtools](https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/)
- [Turn on Custom Object Formatter in Firefox DevTools](https://fxdx.dev/firefox-devtools-custom-object-formatters/)
## Customize configuration
See [Vite Configuration Reference](https://vite.dev/config/).
## Project Setup
```sh
npm install
```
### Compile and Hot-Reload for Development
```sh
npm run dev
```
### Compile and Minify for Production
```sh
npm run build
```
### Lint with [ESLint](https://eslint.org/)
```sh
npm run lint
```
-26
View File
@@ -1,26 +0,0 @@
import { defineConfig, globalIgnores } from 'eslint/config'
import globals from 'globals'
import js from '@eslint/js'
import pluginVue from 'eslint-plugin-vue'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'
export default defineConfig([
{
name: 'app/files-to-lint',
files: ['**/*.{js,mjs,jsx,vue}'],
},
globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']),
{
languageOptions: {
globals: {
...globals.browser,
},
},
},
js.configs.recommended,
...pluginVue.configs['flat/essential'],
skipFormatting,
])
-40
View File
@@ -1,40 +0,0 @@
<!doctype html>
<html lang="">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="src/assets/logo/Logo.png" />
<title>Бегущий Башкир | Беговой клуб в Уфе</title>
<meta
name="description"
content="Беговой клуб 'Бегущий Башкир' в Уфе: тренировки на свежем воздухе, профессиональный тренер, участие в марафонах. Запишитесь на занятия!"
/>
<meta
name="keywords"
content="беговой клуб,
беговая школа Уфы,
беговая академия Башкортостана,
тренировки на свежем воздухе,
марафон Уфа,
полумарафон,
трейловый бег,
Аминев Загир,
Мастер спорта по полиатлону,
КМС по скайраннингу,
беговые достижения,
беговая команда,
спорт в Уфе,
здоровый образ жизни,
беговые тренировки,
беговые клубы Башкортостана,
бег в Уфе,
беговой клуб Уфа,
ультрамарафон"
/>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
-8
View File
@@ -1,8 +0,0 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
},
"exclude": ["node_modules", "dist"]
}
File diff suppressed because it is too large Load Diff
-33
View File
@@ -1,33 +0,0 @@
{
"name": "bbvue",
"version": "0.0.13",
"private": true,
"type": "module",
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"lint": "eslint . --fix",
"format": "prettier --write src/"
},
"dependencies": {
"axios": "^1.12.2",
"pinia": "^3.0.3",
"vue": "^3.5.22",
"vue-router": "^4.5.1"
},
"devDependencies": {
"@eslint/js": "^9.33.0",
"@vitejs/plugin-vue": "^6.0.1",
"@vue/eslint-config-prettier": "^10.2.0",
"eslint": "^9.33.0",
"eslint-plugin-vue": "~10.4.0",
"globals": "^16.3.0",
"prettier": "3.6.2",
"vite": "^7.1.7",
"vite-plugin-vue-devtools": "^8.0.2"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

-224
View File
@@ -1,224 +0,0 @@
<template>
<div id="app">
<header class="app-header">
<div class="container header-container">
<!-- Логотип -->
<router-link to="/" class="logo-link">
<div class="logo">
<div class="logo-box">
<img src="./assets/logo/Logo.png" alt="Little logo begushiy bashkir" class="little-logo">
</div>
<div class="logo-box">
<span><i>Бегущий Башкир</i></span>
</div>
<div class="logo-box team">
<span>team</span>
</div>
</div>
</router-link>
<!-- Используем компонент меню -->
<NavigationMenu />
</div>
</header>
<main class="main-content">
<router-view />
</main>
<footer class="app-footer">
<div class="container">
<p>© 2025 Беговой клуб "Бегущий Башкир". Все права защищены.</p>
<p>Уфа, Республика Башкортостан</p>
</div>
</footer>
</div>
</template>
<script>
import NavigationMenu from './components/NavigationMenu.vue'
export default {
name: 'App',
components: {
NavigationMenu
}
}
</script>
<style>
/* Остальные стили остаются без изменений */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
a {
text-decoration: none;
color: inherit;
}
body {
font-family: 'Arial', sans-serif;
line-height: 1.6;
color: #333;
overflow-x: hidden;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
/* Header Styles */
.app-header {
background-color: #2e8b56;
color: white;
padding: 1rem 0;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
position: sticky;
top: 0;
z-index: 1000;
}
.header-container {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
font-size: 2em;
}
/* Logo Styles */
.logo-link {
text-decoration: none;
color: inherit;
}
.logo {
display: flex;
align-items: center;
gap: 0.5rem;
flex-shrink: 0;
z-index: 1002;
}
.logo-box {
display: flex;
align-items: center;
}
.little-logo {
width: 2.5rem;
height: 2.5rem;
object-fit: contain;
}
.team {
font-size: 0.8rem;
opacity: 0.8;
align-self: flex-end;
margin-bottom: 0.2rem;
}
/* Main Content */
.main-content {
min-height: calc(100vh - 140px);
padding: 2rem 0;
}
/* Footer */
.app-footer {
background-color: #1a3e23;
color: white;
text-align: center;
padding: 1.5rem 0;
margin-top: 2rem;
}
.app-footer p {
margin-bottom: 0.5rem;
}
/* Responsive Design */
@media (max-width: 1023px) and (min-width: 768px) {
.team {
display: none;
}
}
@media (max-width: 767px) {
.logo {
font-size: 1.1rem;
}
.team {
display: none;
}
.little-logo {
width: 2rem;
height: 2rem;
}
.container {
padding: 0 15px;
}
}
@media (max-width: 360px) {
.logo-box:nth-child(2) {
display: none;
}
}
/* Button Styles */
.btn {
display: inline-block;
background-color: #ffd700;
color: #333;
padding: 12px 30px;
border-radius: 5px;
text-decoration: none;
font-weight: bold;
border: none;
cursor: pointer;
transition: background-color 0.3s;
margin: 0.5rem;
}
.btn:hover {
background-color: #e6c200;
}
.btn-secondary {
background-color: #6c757d;
color: white;
}
.btn-secondary:hover {
background-color: #545b62;
}
/* Page Styles */
.page {
max-width: 800px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
.page h1 {
color: #2e8b57;
margin-bottom: 1rem;
font-size: 2.5rem;
}
.page p {
font-size: 1.1rem;
margin-bottom: 1.5rem;
color: #666;
}
</style>
-10
View File
@@ -1,10 +0,0 @@
@font-face {
font-family: 'LogoFont';
src: url('./fonts/Lobster-Regular.ttf');
font-weight: normal;
font-style: normal;
}
html, body {
margin: 0;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Some files were not shown because too many files have changed in this diff Show More