@mashka818/exam-de-template 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/exam-guides/COMMENTS_GUIDE.md +53 -0
  2. package/exam-guides/EXAM_COMMANDS.txt +47 -0
  3. package/exam-guides/GUIDE_PAGES.md +529 -0
  4. package/exam-guides/NPM_PACKAGE.md +206 -0
  5. package/exam-guides/README.md +40 -0
  6. package/exam-guides/RESPONSIVE.md +224 -0
  7. package/exam-guides/TECH_STACK.txt +142 -0
  8. package/exam-guides/THEME_BANQUETAM_NET.md +106 -0
  9. package/exam-guides/commented-code/README.txt +5 -0
  10. package/exam-guides/commented-code/client/index.html +14 -0
  11. package/exam-guides/commented-code/client/package-lock.json +2298 -0
  12. package/exam-guides/commented-code/client/package.json +21 -0
  13. package/exam-guides/commented-code/client/public/images/README.txt +26 -0
  14. package/exam-guides/commented-code/client/public/images/about-cleaning.svg +4 -0
  15. package/exam-guides/commented-code/client/public/images/admin-banner.svg +1 -0
  16. package/exam-guides/commented-code/client/public/images/empty-requests.svg +1 -0
  17. package/exam-guides/commented-code/client/public/images/footer-photo-1.svg +4 -0
  18. package/exam-guides/commented-code/client/public/images/footer-photo-2.svg +4 -0
  19. package/exam-guides/commented-code/client/public/images/footer-photo-3.svg +4 -0
  20. package/exam-guides/commented-code/client/public/images/home-hero.svg +4 -0
  21. package/exam-guides/commented-code/client/public/images/login-banner.svg +1 -0
  22. package/exam-guides/commented-code/client/public/images/logo.svg +4 -0
  23. package/exam-guides/commented-code/client/public/images/new-request-banner.svg +1 -0
  24. package/exam-guides/commented-code/client/public/images/register-banner.svg +1 -0
  25. package/exam-guides/commented-code/client/public/images/requests-banner.svg +1 -0
  26. package/exam-guides/commented-code/client/public/images/slide-1.svg +6 -0
  27. package/exam-guides/commented-code/client/public/images/slide-2.svg +5 -0
  28. package/exam-guides/commented-code/client/public/images/slide-3.svg +5 -0
  29. package/exam-guides/commented-code/client/src/App.jsx +72 -0
  30. package/exam-guides/commented-code/client/src/api.js +71 -0
  31. package/exam-guides/commented-code/client/src/components/FormField.jsx +25 -0
  32. package/exam-guides/commented-code/client/src/components/Layout.jsx +83 -0
  33. package/exam-guides/commented-code/client/src/components/PageImage.jsx +38 -0
  34. package/exam-guides/commented-code/client/src/components/ProtectedRoute.jsx +35 -0
  35. package/exam-guides/commented-code/client/src/components/UserNav.jsx +33 -0
  36. package/exam-guides/commented-code/client/src/components/landing/HeroSlider.jsx +103 -0
  37. package/exam-guides/commented-code/client/src/components/landing/LandingLayout.jsx +76 -0
  38. package/exam-guides/commented-code/client/src/components/landing/SiteFooter.jsx +74 -0
  39. package/exam-guides/commented-code/client/src/config/images.js +104 -0
  40. package/exam-guides/commented-code/client/src/constants/services.js +19 -0
  41. package/exam-guides/commented-code/client/src/context/AuthContext.jsx +72 -0
  42. package/exam-guides/commented-code/client/src/index.css +73 -0
  43. package/exam-guides/commented-code/client/src/main.jsx +28 -0
  44. package/exam-guides/commented-code/client/src/pages/AdminPage.jsx +151 -0
  45. package/exam-guides/commented-code/client/src/pages/LandingPage.jsx +131 -0
  46. package/exam-guides/commented-code/client/src/pages/LoginPage.jsx +81 -0
  47. package/exam-guides/commented-code/client/src/pages/RegisterPage.jsx +117 -0
  48. package/exam-guides/commented-code/client/src/pages/RequestFormPage.jsx +196 -0
  49. package/exam-guides/commented-code/client/src/pages/RequestsPage.jsx +112 -0
  50. package/exam-guides/commented-code/client/src/utils/validation.js +71 -0
  51. package/exam-guides/commented-code/client/vite.config.js +31 -0
  52. package/exam-guides/commented-code/server/db/init.js +67 -0
  53. package/exam-guides/commented-code/server/db/pool.js +23 -0
  54. package/exam-guides/commented-code/server/db/schema.sql +53 -0
  55. package/exam-guides/commented-code/server/db/seed.sql +15 -0
  56. package/exam-guides/commented-code/server/index.js +45 -0
  57. package/exam-guides/commented-code/server/middleware/auth.js +38 -0
  58. package/exam-guides/commented-code/server/package-lock.json +1084 -0
  59. package/exam-guides/commented-code/server/package.json +17 -0
  60. package/exam-guides/commented-code/server/routes/admin.js +96 -0
  61. package/exam-guides/commented-code/server/routes/auth.js +128 -0
  62. package/exam-guides/commented-code/server/routes/requests.js +115 -0
  63. package/exam-guides/commented-code/server/routes/services.js +31 -0
  64. package/exam-guides/commented-code/server/utils/validation.js +81 -0
  65. package/exam-guides/exam-starter/README.txt +22 -0
  66. package/exam-guides/exam-starter/package.json +13 -0
  67. package/exam-guides//320/243/320/224/320/220/320/233/320/230/320/242/320/254-/320/237/320/225/320/240/320/225/320/224-/320/241/320/224/320/220/320/247/320/225/320/231.txt +9 -0
  68. package/exam-project/README.md +16 -0
  69. package/exam-project/client/index.html +14 -0
  70. package/exam-project/client/package-lock.json +2298 -0
  71. package/exam-project/client/package.json +21 -0
  72. package/exam-project/client/public/images/README.txt +26 -0
  73. package/exam-project/client/public/images/about-cleaning.svg +4 -0
  74. package/exam-project/client/public/images/admin-banner.svg +1 -0
  75. package/exam-project/client/public/images/empty-requests.svg +1 -0
  76. package/exam-project/client/public/images/footer-photo-1.svg +4 -0
  77. package/exam-project/client/public/images/footer-photo-2.svg +4 -0
  78. package/exam-project/client/public/images/footer-photo-3.svg +4 -0
  79. package/exam-project/client/public/images/home-hero.svg +4 -0
  80. package/exam-project/client/public/images/login-banner.svg +1 -0
  81. package/exam-project/client/public/images/logo.svg +4 -0
  82. package/exam-project/client/public/images/new-request-banner.svg +1 -0
  83. package/exam-project/client/public/images/register-banner.svg +1 -0
  84. package/exam-project/client/public/images/requests-banner.svg +1 -0
  85. package/exam-project/client/public/images/slide-1.svg +6 -0
  86. package/exam-project/client/public/images/slide-2.svg +5 -0
  87. package/exam-project/client/public/images/slide-3.svg +5 -0
  88. package/exam-project/client/src/App.jsx +52 -0
  89. package/exam-project/client/src/api.js +50 -0
  90. package/exam-project/client/src/components/FormField.jsx +11 -0
  91. package/exam-project/client/src/components/Layout.jsx +61 -0
  92. package/exam-project/client/src/components/PageImage.jsx +22 -0
  93. package/exam-project/client/src/components/ProtectedRoute.jsx +20 -0
  94. package/exam-project/client/src/components/UserNav.jsx +20 -0
  95. package/exam-project/client/src/components/landing/HeroSlider.jsx +89 -0
  96. package/exam-project/client/src/components/landing/LandingLayout.jsx +61 -0
  97. package/exam-project/client/src/components/landing/SiteFooter.jsx +61 -0
  98. package/exam-project/client/src/config/images.js +83 -0
  99. package/exam-project/client/src/constants/services.js +7 -0
  100. package/exam-project/client/src/context/AuthContext.jsx +55 -0
  101. package/exam-project/client/src/index.css +54 -0
  102. package/exam-project/client/src/main.jsx +17 -0
  103. package/exam-project/client/src/pages/AdminPage.jsx +128 -0
  104. package/exam-project/client/src/pages/LandingPage.jsx +115 -0
  105. package/exam-project/client/src/pages/LoginPage.jsx +63 -0
  106. package/exam-project/client/src/pages/RegisterPage.jsx +97 -0
  107. package/exam-project/client/src/pages/RequestFormPage.jsx +178 -0
  108. package/exam-project/client/src/pages/RequestsPage.jsx +94 -0
  109. package/exam-project/client/src/utils/validation.js +54 -0
  110. package/exam-project/client/vite.config.js +17 -0
  111. package/exam-project/package.json +18 -0
  112. package/exam-project/scripts/init-project.js +86 -0
  113. package/exam-project/scripts/prepack.js +27 -0
  114. package/exam-project/scripts/unpack-template.js +105 -0
  115. package/exam-project/server/db/init.js +50 -0
  116. package/exam-project/server/db/pool.js +11 -0
  117. package/exam-project/server/db/schema.sql +41 -0
  118. package/exam-project/server/db/seed.sql +12 -0
  119. package/exam-project/server/index.js +29 -0
  120. package/exam-project/server/middleware/auth.js +24 -0
  121. package/exam-project/server/package-lock.json +1084 -0
  122. package/exam-project/server/package.json +17 -0
  123. package/exam-project/server/routes/admin.js +76 -0
  124. package/exam-project/server/routes/auth.js +109 -0
  125. package/exam-project/server/routes/requests.js +99 -0
  126. package/exam-project/server/routes/services.js +18 -0
  127. package/exam-project/server/utils/validation.js +63 -0
  128. package/package.json +25 -0
  129. package/scripts/init-project.js +86 -0
  130. package/scripts/prepack.js +27 -0
  131. package/scripts/unpack-template.js +105 -0
@@ -0,0 +1,206 @@
1
+ # Шаблон на npm (экзамен **без флешки**)
2
+
3
+ На экзамене нужны **интернет** и заранее опубликованный пакет на https://www.npmjs.com/
4
+
5
+ Вы создаёте папку → `npm install` или `npx … init` → шаблон скачивается в `node_modules` → распаковка в проект (или работа из `node_modules`).
6
+
7
+ Краткая шпаргалка команд: **EXAM_COMMANDS.txt**
8
+
9
+ ---
10
+
11
+ ## 1. Один раз дома: опубликовать пакет
12
+
13
+ ### 1.1. Регистрация
14
+
15
+ 1. Аккаунт: https://www.npmjs.com/~mashka818 (логин `mashka818`)
16
+ 2. Подтвердите email
17
+
18
+ ### 1.2. Имя пакета (обязательно scoped)
19
+
20
+ В корне `examTemplate` откройте **`package.json`** и замените `name`:
21
+
22
+ ```json
23
+ "name": "@mashka818/exam-de-template",
24
+ ```
25
+
26
+ Формат: `@ваш-логин-npm/любое-имя` — так имя почти всегда свободно.
27
+
28
+ Добавьте (если ещё нет):
29
+
30
+ ```json
31
+ "publishConfig": {
32
+ "access": "public"
33
+ }
34
+ ```
35
+
36
+ ### 1.3. Публикация
37
+
38
+ **Не** из папки `exam-project` (там другой `package.json`). Из **корня** репозитория:
39
+
40
+ ```powershell
41
+ cd C:\Users\Masha\Desktop\examTemplate
42
+ npm login
43
+ npm run publish:npm
44
+ ```
45
+
46
+ Если включена 2FA на npm — код из приложения:
47
+
48
+ ```powershell
49
+ npm run publish:npm -- --otp=123456
50
+ ```
51
+
52
+ Проверка в браузере: `https://www.npmjs.com/package/@mashka818/exam-de-template`
53
+
54
+ После правок шаблона увеличьте `"version": "1.0.1"` и снова `npm publish`.
55
+
56
+ ### 1.4. Что запомнить на экзамен
57
+
58
+ - Полное имя пакета: `@mashka818/exam-de-template`
59
+ - Версия: `1.0.0` (или актуальная)
60
+
61
+ ---
62
+
63
+ ## 2. На экзамене — одна команда
64
+
65
+ ```powershell
66
+ mkdir C:\DE\work
67
+ cd C:\DE\work
68
+ npx @mashka818/exam-de-template@1.0.0 init
69
+ ```
70
+
71
+ Появятся две папки:
72
+
73
+ ```
74
+ C:\DE\work\
75
+ exam-project\ ← правите и запускаете
76
+ exam-guides\ ← шпоры (удалить перед сдачей)
77
+ ```
78
+
79
+ `init` ставит зависимости в **exam-project**.
80
+
81
+ Дальше:
82
+
83
+ ```powershell
84
+ cd exam-project
85
+ copy server\.env.example server\.env
86
+ notepad server\.env
87
+ npm run db:init
88
+ npm run dev
89
+ ```
90
+
91
+ Перед сдачей: удалите папку **exam-guides** (уровнем выше: `cd ..` → `rmdir /s /q exam-guides`).
92
+
93
+ ---
94
+
95
+ ## 3. На экзамене — через `npm install` (как вы просили)
96
+
97
+ ### Вариант А: без своего package.json
98
+
99
+ ```powershell
100
+ mkdir C:\DE\work
101
+ cd C:\DE\work
102
+ npm install @mashka818/exam-de-template@1.0.0
103
+ npx exam-de-unpack --here
104
+ npm install
105
+ npm run install:all
106
+ ```
107
+
108
+ После первой строки пакет лежит в `node_modules/@mashka818/exam-de-template`.
109
+ `exam-de-unpack` копирует файлы в текущую папку — удобно сдавать проект не из `node_modules`.
110
+
111
+ ### Вариант Б: свой минимальный `package.json`
112
+
113
+ Скопируйте смысл из **`exam-starter/package.json`** (подставьте свой логин):
114
+
115
+ ```json
116
+ {
117
+ "name": "de-exam-work",
118
+ "private": true,
119
+ "dependencies": {
120
+ "@mashka818/exam-de-template": "1.0.0"
121
+ },
122
+ "scripts": {
123
+ "postinstall": "exam-de-unpack --here"
124
+ }
125
+ }
126
+ ```
127
+
128
+ ```powershell
129
+ cd C:\DE\work
130
+ npm install
131
+ npm install
132
+ npm run install:all
133
+ ```
134
+
135
+ Два раза `npm install`: после первого `postinstall` подменяет `package.json` полным шаблоном.
136
+
137
+ ### Вариант В: только `node_modules` (как у одногруппника)
138
+
139
+ ```powershell
140
+ mkdir C:\DE\work
141
+ cd C:\DE\work
142
+ npm install @mashka818/exam-de-template@1.0.0
143
+ cd node_modules\@mashka818\exam-de-template
144
+ npm install
145
+ npm run install:all
146
+ npm run dev
147
+ ```
148
+
149
+ Работает, но правки и сдача — внутри `node_modules` (менее удобно).
150
+
151
+ ---
152
+
153
+ ## 4. Команды в пакете (после установки)
154
+
155
+ | Команда | Действие |
156
+ |---------|----------|
157
+ | `npx exam-de-init` | Распаковать + `npm install` + `install:all` |
158
+ | `npx exam-de-unpack --here` | Только скопировать файлы в папку |
159
+ | `npm run install:all` | Зависимости server + client |
160
+ | `npm run db:init` | Таблицы и админ |
161
+ | `npm run dev` | Сайт + API |
162
+
163
+ ---
164
+
165
+ ## 5. Что на ПК экзамена всё равно нужно
166
+
167
+ | Программа | Не ставится через npm |
168
+ |-----------|------------------------|
169
+ | Node.js 18+ | да |
170
+ | PostgreSQL | да |
171
+ | Интернет | для `npm install` / `npx` |
172
+
173
+ См. **TECH_STACK.txt**
174
+
175
+ ---
176
+
177
+ ## 6. Локальная проверка перед экзаменом
178
+
179
+ ```powershell
180
+ mkdir C:\temp\de-test
181
+ cd C:\temp\de-test
182
+ npx @mashka818/exam-de-template@1.0.0 init
183
+ ```
184
+
185
+ Если открывается http://localhost:5173 — на экзамене будет то же самое.
186
+
187
+ ---
188
+
189
+ ## 7. Сборка .tgz (флешка не нужна)
190
+
191
+ `npm run pack:template` — только для архива/резервной копии, на экзамене **не обязательно**.
192
+
193
+ ---
194
+
195
+ ## 8. Если `npm publish` ругается
196
+
197
+ | Ошибка | Решение |
198
+ |--------|---------|
199
+ | 402 / scope | `"publishConfig": { "access": "public" }` и `npm publish --access public` |
200
+ | имя занято | используйте `@логин/имя`, не голое `exam-template-...` |
201
+ | не залогинены | `npm login` |
202
+ | 403 | подтвердите email на npm |
203
+
204
+ ---
205
+
206
+ **Пакет:** `@mashka818/exam-de-template`
@@ -0,0 +1,40 @@
1
+ # exam-guides — удалить перед сдачей
2
+
3
+ **Всю эту папку `exam-guides` удалите в конце экзамена** (ПКМ → Удалить).
4
+ На проверку остаётся только соседняя папка **`exam-project`**.
5
+
6
+ ---
7
+
8
+ ## Что здесь лежит
9
+
10
+ | Раздел | Зачем |
11
+ |--------|--------|
12
+ | **commented-code/** | Ваш `client/` и `server/` **с комментариями** — подсматривать при работе |
13
+ | **GUIDE_PAGES.md** и др. | Тексты, кнопки, картинки, БД, «Банкетам.Нет» |
14
+ | **EXAM_COMMANDS.txt** | Команды npm на экзамене |
15
+ | **NPM_PACKAGE.md** | Публикация шаблона на npm |
16
+ | **exam-starter/** | Пример `package.json` для `npm install` |
17
+
18
+ ---
19
+
20
+ ## Как работать на экзамене
21
+
22
+ 1. Открыть в редакторе **две папки** рядом: `exam-project` и `exam-guides`.
23
+ 2. **Править и запускать** только **`exam-project`** (`npm run dev` из неё).
24
+ 3. Если забыли подсказку — смотреть **`exam-guides/commented-code`** или `.md` файлы.
25
+ 4. **Закончили задание** → удалить папку **`exam-guides`** целиком.
26
+ 5. Сдаёте / показываете только **`exam-project`**.
27
+
28
+ ---
29
+
30
+ ## Дома
31
+
32
+ Правки с комментариями — в **`client/`** и **`server/`** в корне репозитория (рядом с этими папками).
33
+
34
+ Потом:
35
+
36
+ ```powershell
37
+ npm run sync:project
38
+ ```
39
+
40
+ Обновятся и чистый `exam-project`, и `exam-guides/commented-code`.
@@ -0,0 +1,224 @@
1
+ # Адаптив: мобильный (390px) и ПК
2
+
3
+ Сейчас проект заточен под **мобильный макет** (как в задании модуля 2: 390×844).
4
+ На большом экране контент **не растягивается на всю ширину** — остаётся узкой колонкой по центру.
5
+
6
+ Ниже — как это устроено и как добавить **версию под ПК**.
7
+
8
+ ---
9
+
10
+ ## 1. Почему на ПК выглядит «как телефон»
11
+
12
+ Главное ограничение — класс Tailwind **`max-w-lg`** в `client/src/components/Layout.jsx`:
13
+
14
+ | Класс | Ширина | Смысл |
15
+ |-------|--------|--------|
16
+ | `max-w-lg` | ~512px | узкая колонка (мобильный макет + поля по бокам) |
17
+ | `max-w-xl` | ~576px | чуть шире |
18
+ | `max-w-4xl` | ~896px | комфортно для ПК |
19
+ | `max-w-6xl` | ~1152px | широкий десктоп |
20
+ | `max-w-full` | 100% | на всю ширину окна |
21
+
22
+ Строки в Layout:
23
+
24
+ ```jsx
25
+ <div className="mx-auto max-w-lg ..."> {/* шапка */}
26
+ <main className="... max-w-lg ..."> {/* контент */}
27
+ ```
28
+
29
+ Пока стоит только `max-w-lg`, на мониторе сайт будет узкой «полоской» по центру — это **ожидаемо** для сдачи мобильного дизайна.
30
+
31
+ ---
32
+
33
+ ## 2. Брейкпоинты Tailwind (кратко)
34
+
35
+ Tailwind использует **mobile-first**: сначала стили для телефона, потом с префиксом — для больших экранов.
36
+
37
+ | Префикс | Минимальная ширина | Обычно |
38
+ |---------|-------------------|--------|
39
+ | *(нет)* | 0px | телефон |
40
+ | `sm:` | 640px | большой телефон |
41
+ | `md:` | 768px | планшет |
42
+ | `lg:` | 1024px | ноутбук / ПК |
43
+ | `xl:` | 1280px | широкий монитор |
44
+
45
+ Пример:
46
+
47
+ ```html
48
+ <div class="max-w-lg lg:max-w-4xl">
49
+ ```
50
+
51
+ - до 1024px — колонка как сейчас (`max-w-lg`);
52
+ - от 1024px — шире (`max-w-4xl`).
53
+
54
+ Проверка: откройте сайт → `F12` → иконка телефона / изменение ширины окна.
55
+
56
+ ---
57
+
58
+ ## 3. Шаг 1 — расширить Layout под ПК
59
+
60
+ Файл: **`client/src/components/Layout.jsx`**
61
+
62
+ **Было (только мобильный):**
63
+
64
+ ```jsx
65
+ <div className="mx-auto max-w-lg px-4 py-3 ...">
66
+ <main className="flex-1 mx-auto w-full max-w-lg px-4 py-6">
67
+ ```
68
+
69
+ **Стало (мобильный + ПК):**
70
+
71
+ ```jsx
72
+ <div className="mx-auto w-full max-w-lg lg:max-w-5xl px-4 lg:px-8 py-3 ...">
73
+ <main className="flex-1 mx-auto w-full max-w-lg lg:max-w-5xl px-4 lg:px-8 py-6 lg:py-10">
74
+ ```
75
+
76
+ Что меняется на ПК:
77
+ - `lg:max-w-5xl` — шире контент;
78
+ - `lg:px-8` — больше отступы;
79
+ - `lg:py-10` — больше воздуха по вертикали.
80
+
81
+ Для экзамена по модулю 2/3 **мобильную версию не убирайте** — добавляйте `lg:` **дополнительно**.
82
+
83
+ ---
84
+
85
+ ## 4. Шаг 2 — картинки на ПК
86
+
87
+ Файлы страниц, например `HomePage.jsx`:
88
+
89
+ ```jsx
90
+ <PageImage imageKey="homeHero" className="w-full h-40 object-cover ..." />
91
+ ```
92
+
93
+ Для ПК увеличьте высоту:
94
+
95
+ ```jsx
96
+ className="w-full h-40 lg:h-56 object-cover rounded-2xl mb-6 shadow"
97
+ ```
98
+
99
+ Логотип в Layout:
100
+
101
+ ```jsx
102
+ className="h-9 lg:h-11 w-auto shrink-0"
103
+ ```
104
+
105
+ ---
106
+
107
+ ## 5. Шаг 3 — формы (п.1, п.4)
108
+
109
+ На ПК форму часто делают в **две колонки**.
110
+
111
+ `RegisterPage.jsx` / `RequestFormPage.jsx` — оберните поля:
112
+
113
+ ```jsx
114
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-x-4">
115
+ <FormField label="ФИО" ...>...</FormField>
116
+ <FormField label="Телефон" ...>...</FormField>
117
+ ```
118
+
119
+ `grid-cols-1` — на телефоне одна колонка.
120
+ `md:grid-cols-2` — с планшета/ПК два поля в ряд.
121
+
122
+ Кнопку «Отправить» лучше на всю ширину оставить:
123
+
124
+ ```jsx
125
+ <div className="md:col-span-2">
126
+ <button className="w-full ...">...</button>
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 6. Шаг 4 — п.3 история заявок
132
+
133
+ `RequestsPage.jsx` — список карточек в сетку на ПК:
134
+
135
+ ```jsx
136
+ <ul className="space-y-3 lg:grid lg:grid-cols-2 lg:gap-4 lg:space-y-0">
137
+ ```
138
+
139
+ Карточка «Оставить новую заявку»:
140
+
141
+ ```jsx
142
+ className="block mb-8 ... lg:mb-10 lg:p-8"
143
+ ```
144
+
145
+ ---
146
+
147
+ ## 7. Шаг 5 — п.5 админ-панель
148
+
149
+ `AdminPage.jsx` — заявки в 2–3 колонки:
150
+
151
+ ```jsx
152
+ <div className="space-y-4 lg:grid lg:grid-cols-2 xl:grid-cols-3 lg:gap-6 lg:space-y-0">
153
+ ```
154
+
155
+ ---
156
+
157
+ ## 8. Шаг 6 — главная страница
158
+
159
+ `HomePage.jsx` — кнопки в ряд на ПК:
160
+
161
+ ```jsx
162
+ <div className="flex flex-col gap-3 sm:flex-row sm:justify-center sm:gap-4">
163
+ ```
164
+
165
+ ---
166
+
167
+ ## 9. Шаг 7 — навигация в шапке
168
+
169
+ `UserNav.jsx` — на очень узком экране подписи можно скрыть:
170
+
171
+ ```jsx
172
+ <NavLink ...>
173
+ <span className="lg:hidden">Заявки</span>
174
+ <span className="hidden lg:inline">Мои заявки</span>
175
+ </NavLink>
176
+ ```
177
+
178
+ (по желанию)
179
+
180
+ ---
181
+
182
+ ## 10. Глобальные настройки (опционально)
183
+
184
+ Файл: **`client/src/index.css`**
185
+
186
+ Можно задать свои брейкпоинты в `@theme` (Tailwind v4), но для экзамена **достаточно стандартных** `sm` / `md` / `lg`.
187
+
188
+ Фон на широком мониторе уже серый (`bg-slate-50` на `body`) — узкая колонка визуально отделяется от краёв.
189
+
190
+ ---
191
+
192
+ ## 11. Что сдавать на ДЭ
193
+
194
+ | Модуль | Что нужно |
195
+ |--------|-----------|
196
+ | Модуль 2 | Макеты **390×844** (Figma → PNG), в код не обязательно |
197
+ | Модуль 3 | **Интегрировать мобильный** дизайн + анимации |
198
+ | Модуль 1 | Рабочий UI, адаптив «не ломается» на ПК |
199
+
200
+ **Рекомендация:** оставить мобильную вёрстку как основную, для ПК добавить только `lg:max-w-*` и сетки — так выполнены оба требования.
201
+
202
+ ---
203
+
204
+ ## 12. Чек-лист перед сдачей
205
+
206
+ - [ ] В DevTools ширина **390px** — как макет Figma
207
+ - [ ] Ширина **1024px+** — контент читаемый, нет горизонтальной прокрутки
208
+ - [ ] Формы: все поля доступны, ошибки видны
209
+ - [ ] Картинки из `public/images/` не вылезают за экран (`w-full`, `object-cover`)
210
+
211
+ ---
212
+
213
+ ## 13. Файлы, которые чаще всего правят
214
+
215
+ | Файл | Задача |
216
+ |------|--------|
217
+ | `components/Layout.jsx` | ширина всего сайта |
218
+ | `pages/HomePage.jsx` | hero, кнопки |
219
+ | `pages/RegisterPage.jsx`, `RequestFormPage.jsx` | сетка полей |
220
+ | `pages/RequestsPage.jsx` | список заявок |
221
+ | `pages/AdminPage.jsx` | карточки админа |
222
+ | `index.css` | общий фон, анимации |
223
+
224
+ Подробнее по смене темы: `COMMENTS_GUIDE.md`.
@@ -0,0 +1,142 @@
1
+ ================================================================================
2
+ ТЕХНОЛОГИИ ПРОЕКТА — ЧТО УСТАНОВИТЬ НА ПК К ЭКЗАМЕНУ
3
+ ================================================================================
4
+ Шаблон ДЭ: портал заявок (Мой Не Сам / Банкетам.Нет)
5
+ Стек: Node.js, Express, PostgreSQL, React, Vite, Tailwind CSS
6
+
7
+ Подробная версия с таблицами: TECH_STACK.md
8
+ Пошаговый запуск: README.md
9
+
10
+ ================================================================================
11
+ 1. ОБЯЗАТЕЛЬНО УСТАНОВИТЬ НА ПК (ДО ЭКЗАМЕНА)
12
+ ================================================================================
13
+
14
+ Node.js .............. версия 18+ (лучше 20 LTS)
15
+ Зачем: сервер, фронт, npm
16
+ Проверка: node -v
17
+ Скачать: https://nodejs.org/
18
+
19
+ npm .................. идёт вместе с Node.js
20
+ Проверка: npm -v
21
+
22
+ PostgreSQL ........... версия 14+
23
+ Зачем: база данных
24
+ Служба postgresql должна быть запущена
25
+ Пароль postgres — для server/.env
26
+ Скачать: https://www.postgresql.org/download/windows/
27
+
28
+ Браузер .............. Chrome / Edge / Firefox
29
+ Адрес сайта: http://localhost:5173
30
+
31
+ ================================================================================
32
+ 2. РЕКОМЕНДУЕТСЯ (НЕ ОБЯЗАТЕЛЬНО)
33
+ ================================================================================
34
+
35
+ VS Code или Cursor .... редактирование кода
36
+ pgAdmin или psql ...... CREATE DATABASE имя_базы;
37
+ Git ................... если проект с репозитория
38
+
39
+ ================================================================================
40
+ 3. УСТАНАВЛИВАЕТСЯ КОМАНДОЙ В ПРОЕКТЕ (НЕ ВРУЧНУЮ С САЙТОВ)
41
+ ================================================================================
42
+
43
+ cd C:\путь\к\examTemplate
44
+ npm run install:all
45
+
46
+ --- Корень ---
47
+ concurrently .......... npm run dev (API + фронт вместе)
48
+
49
+ --- Сервер (server/) ---
50
+ Node.js ............... среда выполнения
51
+ Express 5 ............. API /api/...
52
+ pg .................... драйвер PostgreSQL
53
+ dotenv ................ server/.env
54
+ cors .................. запросы с фронта
55
+ bcryptjs .............. хеш паролей
56
+ jsonwebtoken .......... JWT после входа
57
+
58
+ --- Клиент (client/) ---
59
+ React 19 .............. интерфейс
60
+ react-dom ............. отрисовка в браузере
61
+ react-router-dom 7 .... маршруты страниц
62
+ Vite 6 ................ dev-сервер и сборка
63
+ @vitejs/plugin-react .. JSX
64
+ Tailwind CSS 4 ........ стили (className)
65
+ @tailwindcss/vite ..... Tailwind в Vite
66
+
67
+ ================================================================================
68
+ 4. ЯЗЫКИ (ОТДЕЛЬНО НЕ СТАВЯТСЯ)
69
+ ================================================================================
70
+
71
+ JavaScript (ES modules) ... .js, .jsx, import/export
72
+ JSX ....................... React-компоненты
73
+ HTML ...................... client/index.html
74
+ CSS + Tailwind ............ client/src/index.css
75
+ SQL ....................... server/db/schema.sql, seed.sql
76
+ JSON ...................... package.json, ответы API
77
+ REST API .................. GET, POST, PATCH /api/...
78
+ JWT ....................... токен в localStorage
79
+
80
+ ================================================================================
81
+ 5. ПОРТЫ
82
+ ================================================================================
83
+
84
+ Фронт (Vite) ........... 5173 http://localhost:5173
85
+ API (Express) ............ 3001 http://localhost:3001
86
+ PostgreSQL ............... 5432 localhost (по умолчанию)
87
+
88
+ Порт API: server/.env (PORT) и client/vite.config.js (proxy)
89
+
90
+ ================================================================================
91
+ 6. ЧЕК-ЛИСТ НА ЭКЗАМЕНЕ
92
+ ================================================================================
93
+
94
+ [ ] Node.js и PostgreSQL установлены, PostgreSQL запущен
95
+ [ ] Создана БД (moy_ne_sam или banketam_net)
96
+ [ ] Настроен server/.env (DATABASE_URL, JWT_SECRET)
97
+ [ ] npm run install:all
98
+ [ ] npm run db:init
99
+ [ ] npm run dev
100
+ [ ] Браузер: http://localhost:5173
101
+
102
+ ================================================================================
103
+ 7. ЧТО НЕ НУЖНО УСТАНАВЛИВАТЬ
104
+ ================================================================================
105
+
106
+ React, Express, Tailwind — только через npm в проекте
107
+ Apache, Nginx, IIS — не нужны
108
+ Docker, Redis, MongoDB — не используются
109
+ TypeScript — проект на JavaScript
110
+
111
+ ================================================================================
112
+ 8. КОМАНДЫ NPM
113
+ ================================================================================
114
+
115
+ npm run install:all ... установить зависимости
116
+ npm run db:init ....... таблицы + seed + админ
117
+ npm run dev ........... API + фронт
118
+ npm run dev:server .... только API
119
+ npm run dev:client .... только фронт
120
+ npm run build ......... сборка client/dist
121
+
122
+ ================================================================================
123
+ 9. ЛОГИН АДМИНА (ШАБЛОН)
124
+ ================================================================================
125
+
126
+ Логин: adminka Пароль: password
127
+ Файл: server/db/init.js
128
+
129
+ Банкетам.Нет: Admin26 / Demo20 — см. THEME_BANQUETAM_NET.md
130
+
131
+ ================================================================================
132
+ 10. ДОКУМЕНТАЦИЯ В ПРОЕКТЕ
133
+ ================================================================================
134
+
135
+ README.md ................ запуск, .env
136
+ GUIDE_PAGES.md ............. страницы, кнопки, картинки
137
+ THEME_BANQUETAM_NET.md ..... тема Банкетам.Нет
138
+ COMMENTS_GUIDE.md .......... что менять в коде
139
+ RESPONSIVE.md .............. мобильная и ПК вёрстка
140
+ TECH_STACK.md .............. этот список (формат Markdown)
141
+
142
+ ================================================================================