Reorganize project structure and cleanup root directory
All checks were successful
continuous-integration/drone/push Build is passing
✨ Major improvements: - Created organized folder structure with utils/, scripts/, backups/, temp/ - Moved Python scripts to scripts/ folder for better organization - Moved utility files (start, stop, update, cli, logs, drone) to utils/ folder - Moved backup files to backups/ folder for cleaner root directory - Added comprehensive README.md files for each new folder - Updated main README.md with new project structure documentation - Enhanced .gitignore with rules for new folders - Added real-time career vacancy counter on homepage - Improved homepage career stats styling with better visibility 🗂️ New folder structure: - utils/ - Project management utilities and tools - scripts/ - Python helper scripts for banners and data - backups/ - Configuration and file backups - temp/ - Temporary files and development data 🎨 UI improvements: - Fixed white text visibility issues on homepage career section - Added dynamic vacancy count from database - Implemented glassmorphism design for career stats card - Better color contrast and hover effects This reorganization makes the project more maintainable and professional.
12
.gitignore
vendored
@@ -110,6 +110,11 @@ sent_emails/
|
||||
# 🌍 Translation files
|
||||
*.pot
|
||||
|
||||
# 📋 Temporary files and folders
|
||||
temp/
|
||||
*.tmp
|
||||
*.temp
|
||||
|
||||
# 🚫 Exclude test files from root
|
||||
response_*.json
|
||||
test_*.html
|
||||
@@ -121,4 +126,9 @@ qr_success_animation_demo.html
|
||||
# 📋 Temporary documentation files that moved to docs/
|
||||
BACKUP_SETUP_COMPLETE.md
|
||||
COMMIT_SUMMARY.md
|
||||
SCRIPTS_README.md
|
||||
SCRIPTS_README.md
|
||||
|
||||
# 🔧 Utils and scripts (keep tracked but ignore development versions)
|
||||
utils/*.log
|
||||
scripts/*.log
|
||||
backups/*.tmp
|
||||
33
README.md
@@ -1,6 +1,6 @@
|
||||
# 🚀 SmartSolTech
|
||||
|
||||
[](https://drone.smartsoltech.kr/smartsoltech/smartsoltech.kr)
|
||||
[](https://drone.smartsoltech.kr/trevor/smartsoltech_site)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://www.python.org/downloads/release/python-3100/)
|
||||
[](https://docs.djangoproject.com/en/4.2/)
|
||||
@@ -71,7 +71,7 @@ cd smartsoltech.kr
|
||||
### Основные команды
|
||||
|
||||
```bash
|
||||
./cli shell # Django shell
|
||||
.utils/cli shell # Django shell
|
||||
./cli migrate # Применить миграции
|
||||
./update # Полное обновление проекта
|
||||
./stop # Остановка сервисов
|
||||
@@ -181,6 +181,35 @@ pip install -r requirements.txt
|
||||
./cli status
|
||||
```
|
||||
|
||||
## 📂 Структура проекта
|
||||
|
||||
```
|
||||
smartsoltech/
|
||||
├── 🐍 smartsoltech/ # Основное Django приложение
|
||||
├── 🎨 frontend/ # Статические фронтенд файлы
|
||||
├── 🐳 bin/ # Скрипты развертывания
|
||||
├── 📋 docs/ # Документация проекта
|
||||
├── 🧩 patch/ # Патчи и исправления
|
||||
├── 🛠️ utils/ # Утилиты и инструменты
|
||||
│ ├── start # Запуск проекта
|
||||
│ ├── stop # Остановка сервисов
|
||||
│ ├── update # Обновление проекта
|
||||
│ ├── cli # CLI интерфейс
|
||||
│ ├── logs # Просмотр логов
|
||||
│ └── drone # CI/CD бинарий
|
||||
├── 🐍 scripts/ # Вспомогательные скрипты
|
||||
│ ├── create_hero_banner.py # Создание баннеров
|
||||
│ └── hero_script.py # Скрипты для баннеров
|
||||
├── 💾 backups/ # Резервные копии
|
||||
│ ├── .drone.yml.backup # Бэкап CI конфигурации
|
||||
│ └── original_home_modern.html # Оригинал главной страницы
|
||||
├── 🗂️ temp/ # Временные файлы
|
||||
├── 🐳 docker-compose.yml # Docker конфигурация
|
||||
├── 🚀 .drone.yml # CI/CD конфигурация
|
||||
├── 📄 requirements.txt # Python зависимости
|
||||
└── 📖 README.md # Этот файл
|
||||
```
|
||||
|
||||
### Мониторинг
|
||||
|
||||
- **Веб-сайт**: http://localhost:8000
|
||||
|
||||
19
backups/README.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# 💾 Backups
|
||||
|
||||
Папка для хранения резервных копий конфигурационных файлов и важных данных.
|
||||
|
||||
## Содержимое:
|
||||
|
||||
- `.drone.yml.backup` - Резервная копия конфигурации CI/CD
|
||||
- `original_home_modern.html` - Оригинальная версия главной страницы
|
||||
|
||||
## Правила:
|
||||
|
||||
1. Все файлы в этой папке не должны влиять на работу проекта
|
||||
2. Файлы служат для восстановления при необходимости
|
||||
3. Регулярно очищайте старые файлы
|
||||
4. Добавляйте дату к именам файлов при создании бэкапов
|
||||
|
||||
## Автоматические бэкапы:
|
||||
|
||||
Система CI/CD автоматически создает бэкапы перед деплоем в продакшн.
|
||||
1
frontend/assets/css/styles.min.css
vendored
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 56 KiB |
1
frontend/assets/js/script.min.js
vendored
@@ -1 +0,0 @@
|
||||
!function(){"use strict";var e=document.querySelector("#mainNav");if(e){var o=e.querySelector(".navbar-collapse");if(o){var n=new bootstrap.Collapse(o,{toggle:!1}),t=o.querySelectorAll("a");for(var a of t)a.addEventListener("click",(function(e){n.hide()}))}var r=function(){(void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop)>100?e.classList.add("navbar-shrink"):e.classList.remove("navbar-shrink")};r(),document.addEventListener("scroll",r);var d=document.querySelectorAll(".portfolio-modal");for(var s of d)s.addEventListener("shown.bs.modal",(function(o){e.classList.add("d-none")})),s.addEventListener("hidden.bs.modal",(function(o){e.classList.remove("d-none")}))}}();
|
||||
@@ -1,75 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>Home - Brand</title>
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="500x500" href="/assets/img/photo_2024-10-06_10-06-15.jpg" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="500x500" href="/assets/img/photo_2024-10-06_10-06-15.jpg" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials">
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css">
|
||||
<link rel="stylesheet" href="/assets/css/styles.min.css">
|
||||
</head>
|
||||
|
||||
<body id="page-top" data-bs-spy="scroll" data-bs-target="#mainNav" data-bs-offset="54">
|
||||
<!-- Start: footer -->
|
||||
<footer class="text-light bg-dark pt-5 pb-4">
|
||||
<div class="container text-md-left">
|
||||
<div class="row text-md-left">
|
||||
<div class="col-md-3 col-lg-3 col-xl-3 mx-auto mt-3">
|
||||
<h5 class="text-uppercase text-warning mb-4 font-weight-bold">Company Name</h5>
|
||||
<p>Here you can use rows and columns to organize your footer content. Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
|
||||
</div>
|
||||
<div class="col-md-2 col-lg-2 col-xl-2 mx-auto mt-3">
|
||||
<h5 class="text-uppercase text-warning mb-4 font-weight-bold">Products</h5>
|
||||
<p><a href="#" class="text-light" style="text-decoration:none;">Product 1</a></p>
|
||||
<p><a href="#" class="text-light" style="text-decoration:none;">Product 2</a></p>
|
||||
<p><a href="#" class="text-light" style="text-decoration:none;">Product 3</a></p>
|
||||
<p><a href="#" class="text-light" style="text-decoration:none;">Product 4</a></p>
|
||||
</div>
|
||||
<div class="col-md-3 col-lg-2 col-xl-2 mx-auto mt-3">
|
||||
<h5 class="text-uppercase text-warning mb-4 font-weight-bold">Useful Links</h5>
|
||||
<p><a href="#" class="text-light" style="text-decoration:none;">Your Account</a></p>
|
||||
<p><a href="#" class="text-light" style="text-decoration:none;">Become an Affiliate</a></p>
|
||||
<p><a href="#" class="text-light" style="text-decoration:none;">Shipping Rates</a></p>
|
||||
<p><a href="#" class="text-light" style="text-decoration:none;">Help</a></p>
|
||||
</div>
|
||||
<div class="col-md-4 col-lg-3 col-xl-3 mx-auto mt-3">
|
||||
<h5 class="text-uppercase text-warning mb-4 font-weight-bold">Contact</h5>
|
||||
<p><i class="fas fa-home mr-3"></i> 123 Street, City, State</p>
|
||||
<p><i class="fas fa-envelope mr-3"></i> info@example.com</p>
|
||||
<p><i class="fas fa-phone mr-3"></i> + 01 234 567 88</p>
|
||||
<p><i class="fas fa-print mr-3"></i> + 01 234 567 89</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="mb-4">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-7 col-lg-8">
|
||||
<p class="text-md-left">© 2024 Company Name. All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-md-5 col-lg-4">
|
||||
<div class="text-md-right">
|
||||
<ul class="list-unstyled list-inline">
|
||||
<li class="list-inline-item"><a href="#" class="btn-floating btn-sm text-light" style="font-size:23px;"><i class="fab fa-facebook"></i></a></li>
|
||||
<li class="list-inline-item"><a href="#" class="btn-floating btn-sm text-light" style="font-size:23px;"><i class="fab fa-twitter"></i></a></li>
|
||||
<li class="list-inline-item"><a href="#" class="btn-floating btn-sm text-light" style="font-size:23px;"><i class="fab fa-google-plus"></i></a></li>
|
||||
<li class="list-inline-item"><a href="#" class="btn-floating btn-sm text-light" style="font-size:23px;"><i class="fab fa-linkedin-in"></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer><!-- End: footer -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/assets/js/script.min.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,41 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>Home - Brand</title>
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="500x500" href="/assets/img/photo_2024-10-06_10-06-15.jpg" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="500x500" href="/assets/img/photo_2024-10-06_10-06-15.jpg" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials">
|
||||
<link rel="stylesheet" href="/assets/css/styles.min.css">
|
||||
</head>
|
||||
|
||||
<body id="page-top" data-bs-spy="scroll" data-bs-target="#mainNav" data-bs-offset="54">
|
||||
<!-- Start: Navbar Right Links (Dark) -->
|
||||
<nav class="navbar navbar-expand-md bg-dark py-3" data-bs-theme="dark">
|
||||
<div class="container"><a class="navbar-brand d-flex align-items-center" href="#"><span class="bs-icon-sm bs-icon-rounded bs-icon-primary d-flex justify-content-center align-items-center me-2 bs-icon"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-bezier">
|
||||
<path fill-rule="evenodd" d="M0 10.5A1.5 1.5 0 0 1 1.5 9h1A1.5 1.5 0 0 1 4 10.5v1A1.5 1.5 0 0 1 2.5 13h-1A1.5 1.5 0 0 1 0 11.5zm1.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zm10.5.5A1.5 1.5 0 0 1 13.5 9h1a1.5 1.5 0 0 1 1.5 1.5v1a1.5 1.5 0 0 1-1.5 1.5h-1a1.5 1.5 0 0 1-1.5-1.5zm1.5-.5a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5zM6 4.5A1.5 1.5 0 0 1 7.5 3h1A1.5 1.5 0 0 1 10 4.5v1A1.5 1.5 0 0 1 8.5 7h-1A1.5 1.5 0 0 1 6 5.5zM7.5 4a.5.5 0 0 0-.5.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5z"></path>
|
||||
<path d="M6 4.5H1.866a1 1 0 1 0 0 1h2.668A6.517 6.517 0 0 0 1.814 9H2.5c.123 0 .244.015.358.043a5.517 5.517 0 0 1 3.185-3.185A1.503 1.503 0 0 1 6 5.5zm3.957 1.358A1.5 1.5 0 0 0 10 5.5v-1h4.134a1 1 0 1 1 0 1h-2.668a6.517 6.517 0 0 1 2.72 3.5H13.5c-.123 0-.243.015-.358.043a5.517 5.517 0 0 0-3.185-3.185z"></path>
|
||||
</svg></span><span>Brand</span></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navcol-5"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
|
||||
<div class="collapse navbar-collapse" id="navcol-5">
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item"><a class="nav-link active" href="#">First Item</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#">Second Item</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="#">Third Item</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav><!-- End: Navbar Right Links (Dark) -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/assets/js/script.min.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1 +0,0 @@
|
||||
{"short_name":"sst","name":"smartsoltech","icons":[{"src":"/assets/img/photo_2024-10-06_10-06-08.jpg","type":"image/jpeg","sizes":"1011x702"},{"src":"/assets/img/photo_2024-10-06_10-06-08.jpg","type":"image/jpeg","sizes":"1011x702"}],"start_url":"smartsoltech.kr","display":"fullscreen"}
|
||||
@@ -1,82 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-bs-theme="light" lang="ru">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||
<title>SmartSoltech</title>
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="500x500" href="/assets/img/photo_2024-10-06_10-06-15.jpg" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="500x500" href="/assets/img/photo_2024-10-06_10-06-15.jpg" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="icon" type="image/jpeg" sizes="1011x702" href="/assets/img/photo_2024-10-06_10-06-08.jpg">
|
||||
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||
<link rel="manifest" href="/manifest.json" crossorigin="use-credentials">
|
||||
<link rel="stylesheet" href="/assets/css/styles.min.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- Start: Articles Cards -->
|
||||
<div class="container py-4 py-xl-5">
|
||||
<div class="row mb-5">
|
||||
<div class="col-md-8 col-xl-6 text-center mx-auto">
|
||||
<h2>Heading</h2>
|
||||
<p class="w-lg-50">Curae hendrerit donec commodo hendrerit egestas tempus, turpis facilisis nostra nunc. Vestibulum dui eget ultrices.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row gy-4 row-cols-1 row-cols-md-2 row-cols-xl-3">
|
||||
<div class="col">
|
||||
<div class="card"><img class="card-img-top w-100 d-block fit-cover" style="height: 200px;" src="https://cdn.bootstrapstudio.io/placeholders/1400x800.png">
|
||||
<div class="card-body p-4">
|
||||
<p class="text-primary card-text mb-0">Article</p>
|
||||
<h4 class="card-title">Lorem libero donec</h4>
|
||||
<p class="card-text">Nullam id dolor id nibh ultricies vehicula ut id elit. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus.</p>
|
||||
<div class="d-flex"><img class="rounded-circle flex-shrink-0 me-3 fit-cover" width="50" height="50" src="https://cdn.bootstrapstudio.io/placeholders/1400x800.png">
|
||||
<div>
|
||||
<p class="fw-bold mb-0">John Smith</p>
|
||||
<p class="text-muted mb-0">Erat netus</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="card"><img class="card-img-top w-100 d-block fit-cover" style="height: 200px;" src="https://cdn.bootstrapstudio.io/placeholders/1400x800.png">
|
||||
<div class="card-body p-4">
|
||||
<p class="text-primary card-text mb-0">Article</p>
|
||||
<h4 class="card-title">Lorem libero donec</h4>
|
||||
<p class="card-text">Nullam id dolor id nibh ultricies vehicula ut id elit. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus.</p>
|
||||
<div class="d-flex"><img class="rounded-circle flex-shrink-0 me-3 fit-cover" width="50" height="50" src="https://cdn.bootstrapstudio.io/placeholders/1400x800.png">
|
||||
<div>
|
||||
<p class="fw-bold mb-0">John Smith</p>
|
||||
<p class="text-muted mb-0">Erat netus</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="card"><img class="card-img-top w-100 d-block fit-cover" style="height: 200px;" src="https://cdn.bootstrapstudio.io/placeholders/1400x800.png">
|
||||
<div class="card-body p-4">
|
||||
<p class="text-primary card-text mb-0">Article</p>
|
||||
<h4 class="card-title">Lorem libero donec</h4>
|
||||
<p class="card-text">Nullam id dolor id nibh ultricies vehicula ut id elit. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus.</p>
|
||||
<div class="d-flex"><img class="rounded-circle flex-shrink-0 me-3 fit-cover" width="50" height="50" src="https://cdn.bootstrapstudio.io/placeholders/1400x800.png">
|
||||
<div>
|
||||
<p class="fw-bold mb-0">John Smith</p>
|
||||
<p class="text-muted mb-0">Erat netus</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- End: Articles Cards -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="/assets/js/script.min.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
23
scripts/README.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# 🐍 Scripts
|
||||
|
||||
Папка содержит вспомогательные скрипты для проекта SmartSolTech.
|
||||
|
||||
## Файлы:
|
||||
|
||||
- `create_hero_banner.py` - Скрипт для создания героических баннеров
|
||||
- `hero_script.py` - Дополнительный скрипт для работы с баннерами
|
||||
|
||||
## Использование:
|
||||
|
||||
Запуск скриптов должен производиться из корневой директории проекта:
|
||||
|
||||
```bash
|
||||
cd smartsoltech/
|
||||
python ../scripts/create_hero_banner.py
|
||||
```
|
||||
|
||||
или через Django management команды из папки smartsoltech/:
|
||||
|
||||
```bash
|
||||
python manage.py shell < ../scripts/script_name.py
|
||||
```
|
||||
@@ -538,10 +538,10 @@
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<div class="career-stats bg-gradient rounded-4 p-4 text-white mb-4" style="max-width: 300px; margin: 0 auto;">
|
||||
<h3 class="display-4 fw-bold mb-2">0</h3>
|
||||
<h6 class="mb-2">Открыто вакансий</h6>
|
||||
<p class="small mb-0 opacity-75">Найдите свою идеальную позицию</p>
|
||||
<div class="career-stats-home bg-white rounded-4 p-4 shadow-lg mb-4" style="max-width: 320px; margin: 0 auto; border: 2px solid #667eea;">
|
||||
<h3 class="display-4 fw-bold mb-2 text-primary">{{ total_open_positions|default:0 }}</h3>
|
||||
<h6 class="mb-2 text-dark fw-semibold">Открыто вакансий</h6>
|
||||
<p class="small mb-0 text-muted">Найдите свою идеальную позицию</p>
|
||||
</div>
|
||||
|
||||
<a href="{% url 'career' %}" class="btn btn-primary-modern btn-lg me-3">
|
||||
@@ -1112,6 +1112,66 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
display: inline-block;
|
||||
margin: 0.5rem;
|
||||
}
|
||||
|
||||
.career-stats-home {
|
||||
max-width: 280px !important;
|
||||
padding: 1.5rem !important;
|
||||
}
|
||||
|
||||
.career-stats-home h3 {
|
||||
font-size: 2.5rem !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Career Stats Home Styles */
|
||||
.career-stats-home {
|
||||
background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%);
|
||||
border: 2px solid #667eea !important;
|
||||
box-shadow: 0 10px 30px rgba(102, 126, 234, 0.15) !important;
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.career-stats-home::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: linear-gradient(45deg, rgba(102, 126, 234, 0.05) 0%, rgba(118, 75, 162, 0.05) 100%);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.career-stats-home:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 20px 50px rgba(102, 126, 234, 0.25) !important;
|
||||
border-color: #5a67d8;
|
||||
}
|
||||
|
||||
.career-stats-home > * {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.career-stats-home h3 {
|
||||
color: #667eea !important;
|
||||
text-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);
|
||||
font-size: 3rem;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.career-stats-home h6 {
|
||||
color: #2d3748 !important;
|
||||
font-weight: 600;
|
||||
font-size: 1.1rem;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.career-stats-home p {
|
||||
color: #6b7280 !important;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
@@ -45,6 +45,9 @@ def home(request):
|
||||
team_members = Team.objects.filter(is_active=True, show_on_about=True).order_by('display_order')[:4] # Показываем топ-4 участников команды
|
||||
featured_careers = Career.objects.filter(status='active', is_featured=True).order_by('-created_at')[:3] # Топ-3 рекомендуемые вакансии
|
||||
|
||||
# Подсчет открытых вакансий
|
||||
total_open_positions = Career.objects.filter(status='active').count()
|
||||
|
||||
return render(request, 'web/home_modern.html', {
|
||||
'services': services,
|
||||
'hero_banners': hero_banners,
|
||||
@@ -53,6 +56,7 @@ def home(request):
|
||||
'reviews': reviews,
|
||||
'team_members': team_members,
|
||||
'featured_careers': featured_careers,
|
||||
'total_open_positions': total_open_positions,
|
||||
})
|
||||
|
||||
def service_detail(request, pk):
|
||||
|
||||
40
utils/README.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 🛠️ Utils
|
||||
|
||||
Папка содержит утилиты и вспомогательные инструменты для управления проектом.
|
||||
|
||||
## Файлы:
|
||||
|
||||
- `start` - Запуск проекта в режиме разработки
|
||||
- `stop` - Остановка всех сервисов проекта
|
||||
- `update` - Обновление и перезапуск проекта
|
||||
- `cli` - Интерфейс командной строки
|
||||
- `logs` - Просмотр логов системы
|
||||
- `drone` - Бинарный файл CI/CD системы Drone
|
||||
|
||||
## Использование:
|
||||
|
||||
Все утилиты должны запускаться из корневой директории проекта:
|
||||
|
||||
```bash
|
||||
# Запуск проекта
|
||||
./utils/start
|
||||
|
||||
# Остановка проекта
|
||||
./utils/stop
|
||||
|
||||
# Обновление проекта
|
||||
./utils/update
|
||||
|
||||
# Просмотр логов
|
||||
./utils/logs
|
||||
|
||||
# CLI интерфейс
|
||||
./utils/cli
|
||||
```
|
||||
|
||||
## Важно:
|
||||
|
||||
Убедитесь что файлы имеют права на выполнение:
|
||||
```bash
|
||||
chmod +x utils/*
|
||||
```
|
||||