first commit
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
# LabNetHub — сайт компании
|
||||
|
||||
Сайт на Next.js 14 (App Router) + TypeScript + Tailwind CSS для компании
|
||||
LabNetHub: разработка сайтов, ботов для соцсетей, настройка CRM, хостинг
|
||||
и IT-поддержка.
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
```bash
|
||||
npm install
|
||||
cp .env.local.example .env.local # заполните реальными значениями
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Сайт откроется на http://localhost:3000
|
||||
|
||||
Сборка для продакшена:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
npm run start
|
||||
```
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```
|
||||
app/ — страницы (App Router)
|
||||
page.tsx — Главная
|
||||
websites/ — Сайты
|
||||
bots/ — Боты
|
||||
crm/ — CRM
|
||||
hosting/ — Хостинг и серверы
|
||||
support/ — IT-поддержка
|
||||
contacts/ — Контакты
|
||||
api/contact/ — API-роут формы обратной связи (→ Telegram)
|
||||
components/ — переиспользуемые компоненты (Header, Footer, карточки и т.д.)
|
||||
config/
|
||||
contacts.ts — все контакты и ссылки на соцсети в одном месте
|
||||
services.ts — данные для карточек услуг и навигации
|
||||
```
|
||||
|
||||
## Что нужно заполнить перед публикацией
|
||||
|
||||
1. **Контакты** — откройте `config/contacts.ts` и замените placeholder-ссылки
|
||||
на реальные: Telegram, VK, WhatsApp, email, город.
|
||||
|
||||
2. **Telegram-уведомления формы** — в `.env.local` укажите:
|
||||
- `TELEGRAM_BOT_TOKEN` — токен бота, полученный у [@BotFather](https://t.me/BotFather)
|
||||
- `TELEGRAM_CHAT_ID` — ID чата/канала для приёма заявок.
|
||||
Узнать свой ID можно, написав боту [@userinfobot](https://t.me/userinfobot),
|
||||
либо через метод `getUpdates` вашего бота.
|
||||
|
||||
3. **Домен** — в `app/layout.tsx` поле `metadataBase` укажите на ваш реальный домен.
|
||||
|
||||
## Форма обратной связи
|
||||
|
||||
Форма на странице `/contacts` отправляет данные на `POST /api/contact`.
|
||||
Роут проверяет обязательные поля, убирает HTML-теги (защита от инъекций),
|
||||
экранирует спецсимволы Markdown и пересылает сообщение в Telegram через
|
||||
Bot API. В форме также есть скрытое honeypot-поле для защиты от простых ботов.
|
||||
|
||||
## Безопасность
|
||||
|
||||
В `next.config.mjs` включены базовые защитные HTTP-заголовки:
|
||||
`Strict-Transport-Security`, `X-Frame-Options`, `X-Content-Type-Options`,
|
||||
`Referrer-Policy`, `Permissions-Policy`.
|
||||
|
||||
Рекомендации для сервера при деплое:
|
||||
|
||||
- Раздавайте сайт только по HTTPS (например, сертификат Let's Encrypt через certbot).
|
||||
- На уровне nginx настройте `limit_req` для `/api/contact`, чтобы ограничить
|
||||
количество запросов от одного адреса в минуту.
|
||||
- Храните `.env.local` вне репозитория — файл уже добавлен в `.gitignore`.
|
||||
- Регулярно обновляйте зависимости (`npm outdated` / `npm audit`).
|
||||
|
||||
## Деплой на свой сервер (LabNetHub VDS/VPS)
|
||||
|
||||
Пример запуска через PM2 за nginx как обратным прокси:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
pm2 start npm --name labnethub -- start
|
||||
```
|
||||
|
||||
В конфиге nginx проксируйте запросы на `http://127.0.0.1:3000` и подключите
|
||||
SSL-сертификат. При желании сайт также можно собрать в статику
|
||||
(`output: "export"` в `next.config.mjs`) — тогда `/api/contact` работать не будет,
|
||||
и форму нужно будет переключить на внешний сервис отправки писем.
|
||||
|
||||
## Цветовая тема
|
||||
|
||||
Токены дизайна заданы в `tailwind.config.ts`:
|
||||
|
||||
- `base` — тёмно-синий фон (`base.950` — основной фон страницы)
|
||||
- `blue` — основной акцент бренда
|
||||
- `green` — акцент раздела «Хостинг и серверы»
|
||||
- `ink` — оттенки текста
|
||||
|
||||
Шрифты (`Unbounded`, `Manrope`, `JetBrains Mono`) подключены через
|
||||
`next/font/google` в `app/layout.tsx` — при сборке скачиваются один раз
|
||||
и дальше работают без обращений к Google Fonts во время выполнения.
|
||||
Reference in New Issue
Block a user