-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhire-laravel-developer.html
More file actions
459 lines (430 loc) · 52.8 KB
/
hire-laravel-developer.html
File metadata and controls
459 lines (430 loc) · 52.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
<!DOCTYPE html>
<html lang="uk">
<head>
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Найняти Laravel розробника з України — від $25/год | Roman Matviy</title>
<meta name="description" content="Найняти senior Laravel розробника з України. 6+ років, 50+ проєктів, $25–35/год. REST API, Filament, Vue.js, WooCommerce, Docker. Доступний зараз.">
<meta name="keywords" content="найняти laravel розробника, laravel розробник україна, hire laravel developer ukraine, фріланс laravel розробник, senior laravel developer">
<meta name="author" content="Roman Matviy"><meta name="robots" content="index,follow">
<link rel="canonical" href="https://hirewebdeveloper.pp.ua/hire-laravel-developer.html">
<link rel="alternate" hreflang="uk" href="https://hirewebdeveloper.pp.ua/hire-laravel-developer.html">
<link rel="alternate" hreflang="en" href="https://hirewebdeveloper.pp.ua/en/hire-laravel-developer.html">
<link rel="alternate" hreflang="x-default" href="https://hirewebdeveloper.pp.ua/en/hire-laravel-developer.html">
<meta property="og:title" content="Найняти Laravel розробника з України — від $25/год | Roman Matviy">
<meta property="og:description" content="Найняти senior Laravel розробника з України. 6+ років, 50+ проєктів, $25–35/год. REST API, Filament, Vue.js, WooCommerce, Docker. Доступний зараз.">
<meta property="og:url" content="https://hirewebdeveloper.pp.ua/hire-laravel-developer.html">
<meta property="og:type" content="profile">
<meta property="og:locale" content="uk_UA">
<meta name="twitter:card" content="summary_large_image">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"ProfilePage","mainEntity":{"@type":"Person","name":"Roman Matviy","url":"https://hirewebdeveloper.pp.ua","jobTitle":"Senior Laravel Developer","description":"Найняти senior Laravel розробника з України. 6+ років, 50+ проєктів, $25–35/год. REST API, Filament, Vue.js, WooCommerce, Docker. Доступний зараз.","address":{"@type":"PostalAddress","addressLocality":"Lviv","addressCountry":"UA"},"knowsAbout":["Laravel","PHP","Vue.js","WooCommerce","Docker","REST API"],"offers":{"@type":"Offer","price":"25","priceCurrency":"USD","description":"Hourly Laravel development rate"}}}</script>
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">
<meta name="theme-color" content="#00f5d4">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;600;700;800&family=JetBrains+Mono:wght@300;400;600&display=swap" rel="stylesheet">
<style> :root {
--bg: #03050d; --bg2: #070d1a; --bg3: #0a1428;
--cyan: #00f5d4; --orange: #ff6b35; --blue: #3b82f6;
--purple: #8b5cf6; --green: #22c55e;
--text: #e8edf5; --muted: #5a6a85;
--card: rgba(255,255,255,0.04);
--border: rgba(0,245,212,0.12);
--font-display: 'Syne', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
}
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { background: var(--bg); color: var(--text); font-family: var(--font-mono); overflow-x: hidden; line-height: 1.7; cursor: none; }
a { color: inherit; text-decoration: none; } ul { list-style: none; }
/* CURSOR */
.cur { width: 8px; height: 8px; background: var(--cyan); border-radius: 50%; position: fixed; top: 0; left: 0; pointer-events: none; z-index: 9999; mix-blend-mode: screen; transition: transform 0.08s ease; }
.cur-ring { width: 36px; height: 36px; border: 1.5px solid var(--cyan); border-radius: 50%; position: fixed; top: 0; left: 0; pointer-events: none; z-index: 9998; transition: all 0.18s ease; opacity: 0.4; }
.cur-ring.hovered { transform: scale(2) !important; opacity: 0.15; }
/* SCROLL PROGRESS */
.scroll-progress { position: fixed; top: 0; left: 0; height: 2px; z-index: 600; background: linear-gradient(90deg, var(--cyan), var(--orange)); transition: width 0.1s linear; }
/* GRID BG */
.bg-grid { position: fixed; inset: 0; z-index: 0; pointer-events: none; background-image: linear-gradient(rgba(0,245,212,0.025) 1px, transparent 1px), linear-gradient(90deg, rgba(0,245,212,0.025) 1px, transparent 1px); background-size: 70px 70px; }
/* BLOBS */
.bg-blob { position: fixed; pointer-events: none; z-index: 0; border-radius: 50%; filter: blur(130px); }
@keyframes floatBlob { 0%,100%{transform:translate(0,0) scale(1)} 33%{transform:translate(40px,-60px) scale(1.1)} 66%{transform:translate(-30px,40px) scale(0.95)} }
/* NAV */
nav.main-nav { position: fixed; top: 0; inset-inline: 0; z-index: 500; display: flex; align-items: center; justify-content: space-between; padding: 1.1rem 5vw; background: rgba(3,5,13,0.88); backdrop-filter: blur(24px) saturate(1.4); border-bottom: 1px solid var(--border); }
.nav-logo { font-family: var(--font-display); font-weight: 800; font-size: 1.15rem; color: var(--text); letter-spacing: -0.03em; }
.nav-logo em { color: var(--cyan); font-style: normal; }
.nav-links { display: flex; gap: 2rem; align-items: center; }
.nav-links a { font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); transition: color 0.3s; }
.nav-links a:hover, .nav-links a.active { color: var(--cyan); }
.nav-btn { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.6rem 1.6rem; background: linear-gradient(135deg, var(--cyan), var(--blue)); color: var(--bg); font-family: var(--font-display); font-weight: 700; font-size: 0.78rem; border-radius: 2px; clip-path: polygon(10px 0%, 100% 0%, calc(100% - 10px) 100%, 0% 100%); transition: all 0.3s; white-space: nowrap; }
.nav-btn:hover { filter: brightness(1.15); transform: translateY(-1px); }
.nav-menu-btn { display: none; background: none; border: none; cursor: pointer; color: var(--text); }
/* MOBILE NAV */
.mobile-nav { position: fixed; inset: 0; z-index: 400; background: var(--bg); padding: 5rem 2rem 2rem; display: none; flex-direction: column; gap: 2rem; }
.mobile-nav.open { display: flex; }
.mobile-nav a { font-family: var(--font-display); font-size: 1.8rem; font-weight: 700; color: var(--text); }
.mobile-nav a:hover { color: var(--cyan); }
.mobile-close { position: absolute; top: 1.5rem; right: 1.5rem; background: none; border: none; color: var(--text); font-size: 1.5rem; cursor: pointer; }
/* BREADCRUMB */
.breadcrumb { position: relative; z-index: 1; padding: 6.5rem 5vw 0; display: flex; align-items: center; gap: 0.5rem; font-size: 0.68rem; color: var(--muted); }
.breadcrumb a { color: var(--muted); transition: color 0.2s; }
.breadcrumb a:hover, .breadcrumb span { color: var(--cyan); }
/* PAGE HERO */
.page-hero { position: relative; z-index: 1; padding: 2.5rem 5vw 5rem; overflow: hidden; }
.page-badge { display: inline-flex; align-items: center; gap: 0.6rem; border: 1px solid var(--border); padding: 0.4rem 1rem; border-radius: 100px; font-size: 0.68rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--cyan); margin-bottom: 1.2rem; }
.page-badge::before { content: ''; width: 6px; height: 6px; background: var(--green); border-radius: 50%; animation: blink 2s ease infinite; }
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:0.3} }
.page-h1 { font-family: var(--font-display); font-weight: 800; font-size: clamp(2.4rem, 5vw, 4.8rem); line-height: 1.02; letter-spacing: -0.04em; margin-bottom: 0.5rem; }
.page-tagline { font-family: var(--font-display); font-size: clamp(0.9rem, 2vw, 1.2rem); color: var(--orange); font-weight: 600; margin-bottom: 1.5rem; }
.page-desc { font-size: 0.88rem; color: var(--muted); max-width: 680px; line-height: 1.9; margin-bottom: 2.5rem; }
.page-desc strong { color: var(--text); }
.hero-split { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: start; }
/* BUTTONS */
.hero-ctas { display: flex; gap: 1rem; flex-wrap: wrap; }
.btn-p { display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.85rem 2rem; font-family: var(--font-display); font-weight: 700; font-size: 0.85rem; border-radius: 2px; transition: all 0.3s; letter-spacing: 0.03em; }
.btn-primary { background: linear-gradient(135deg, var(--cyan), var(--blue)); color: var(--bg); clip-path: polygon(12px 0%, 100% 0%, calc(100% - 12px) 100%, 0% 100%); }
.btn-primary:hover { filter: brightness(1.12); transform: translateY(-2px); box-shadow: 0 12px 28px rgba(0,245,212,0.25); }
.btn-secondary { border: 1px solid rgba(255,107,53,0.35); color: var(--orange); clip-path: polygon(12px 0%, 100% 0%, calc(100% - 12px) 100%, 0% 100%); }
.btn-secondary:hover { background: rgba(255,107,53,0.08); transform: translateY(-2px); }
/* STATS */
.stats-row { display: flex; flex-wrap: wrap; gap: 2.5rem; margin-top: 3rem; padding-top: 2.5rem; border-top: 1px solid var(--border); }
.stat-val { font-family: var(--font-display); font-weight: 800; font-size: 2.2rem; color: var(--cyan); line-height: 1; }
.stat-label { font-size: 0.66rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.1em; margin-top: 0.25rem; }
/* SECTIONS */
section { position: relative; z-index: 1; padding: 5.5rem 5vw; }
section.dark { background: var(--bg2); }
.section-label { font-size: 0.68rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--orange); margin-bottom: 0.8rem; }
.section-label::before { content: '// '; color: var(--muted); }
.section-h2 { font-family: var(--font-display); font-weight: 800; font-size: clamp(1.8rem, 3.5vw, 3rem); letter-spacing: -0.03em; line-height: 1.1; margin-bottom: 1rem; }
.section-h2 em { color: var(--cyan); font-style: normal; }
.section-sub { font-size: 0.86rem; color: var(--muted); max-width: 580px; line-height: 1.85; margin-bottom: 3.5rem; }
/* REVEAL */
.reveal { opacity: 0; transform: translateY(36px); transition: all 0.65s ease; }
.reveal.visible { opacity: 1; transform: translateY(0); }
/* FEATURES GRID */
.features-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 1.2rem; }
.feat-card { background: var(--bg2); border: 1px solid var(--border); border-radius: 3px; padding: 2rem 1.8rem; transition: all 0.35s; position: relative; overflow: hidden; }
.feat-card::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, var(--cyan), transparent); transform: scaleX(0); transform-origin: left; transition: transform 0.4s; }
.feat-card:hover { border-color: rgba(0,245,212,0.25); }
.feat-card:hover::after { transform: scaleX(1); }
.feat-icon { width: 44px; height: 44px; background: rgba(0,245,212,0.07); border: 1px solid var(--border); border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; margin-bottom: 1.2rem; }
.feat-title { font-family: var(--font-display); font-weight: 700; font-size: 0.95rem; margin-bottom: 0.5rem; }
.feat-desc { font-size: 0.78rem; color: var(--muted); line-height: 1.8; }
/* TECH GRID */
.tech-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 0.8rem; }
.tech-item { background: var(--card); border: 1px solid var(--border); border-radius: 3px; padding: 1.2rem 1rem; text-align: center; transition: all 0.3s; cursor: default; }
.tech-item:hover { border-color: var(--cyan); background: rgba(0,245,212,0.05); transform: translateY(-3px); box-shadow: 0 8px 20px rgba(0,0,0,0.3); }
.tech-icon { font-size: 1.8rem; margin-bottom: 0.5rem; }
.tech-name { font-size: 0.72rem; font-weight: 600; color: var(--text); }
.tech-sub { font-size: 0.62rem; color: var(--muted); margin-top: 0.2rem; }
/* PROCESS */
.process-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 1.5px; background: var(--border); border: 1px solid var(--border); }
.process-step { background: var(--bg2); padding: 2.2rem 1.8rem; position: relative; transition: background 0.3s; }
.process-step:hover { background: var(--bg3); }
.step-num { font-family: var(--font-display); font-weight: 800; font-size: 3.5rem; line-height: 1; color: rgba(0,245,212,0.07); position: absolute; top: 1.2rem; right: 1.5rem; }
.step-icon { font-size: 1.6rem; margin-bottom: 1rem; }
.step-title { font-family: var(--font-display); font-weight: 700; font-size: 1rem; margin-bottom: 0.5rem; }
.step-desc { font-size: 0.78rem; color: var(--muted); line-height: 1.8; }
/* FAQ */
.faq-list { display: grid; gap: 0; border: 1px solid var(--border); border-radius: 3px; overflow: hidden; }
.faq-item { border-bottom: 1px solid var(--border); }
.faq-item:last-child { border-bottom: none; }
.faq-q { display: flex; justify-content: space-between; align-items: center; padding: 1.4rem 1.8rem; cursor: pointer; background: var(--bg2); transition: background 0.2s; font-family: var(--font-display); font-weight: 600; font-size: 0.92rem; gap: 1rem; }
.faq-q:hover { background: var(--bg3); }
.faq-toggle { width: 24px; height: 24px; border: 1px solid var(--border); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 0.8rem; flex-shrink: 0; color: var(--cyan); transition: transform 0.3s, background 0.3s; }
.faq-item.open .faq-toggle { transform: rotate(45deg); background: rgba(0,245,212,0.1); }
.faq-a { max-height: 0; overflow: hidden; transition: max-height 0.4s ease, padding 0.3s; padding: 0 1.8rem; }
.faq-item.open .faq-a { max-height: 400px; padding: 1rem 1.8rem 1.6rem; }
.faq-a p { font-size: 0.82rem; color: var(--muted); line-height: 1.85; }
/* SERVICES MEGA GRID */
.services-mega { display: grid; grid-template-columns: repeat(auto-fill, minmax(310px, 1fr)); gap: 1.5px; background: var(--border); border: 1px solid var(--border); margin-top: 3rem; }
.svc-card { background: var(--bg2); padding: 2.5rem 2rem; display: flex; flex-direction: column; gap: 0.8rem; position: relative; transition: background 0.3s; overflow: hidden; }
.svc-card:hover { background: var(--bg3); }
.svc-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, var(--cyan), var(--blue)); transform: scaleX(0); transform-origin: left; transition: transform 0.4s; }
.svc-card:hover::before { transform: scaleX(1); }
.svc-icon { width: 52px; height: 52px; background: rgba(0,245,212,0.07); border: 1px solid var(--border); border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 1.4rem; }
.svc-title { font-family: var(--font-display); font-weight: 800; font-size: 1.15rem; }
.svc-desc { font-size: 0.8rem; color: var(--muted); line-height: 1.85; flex: 1; }
.svc-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.svc-tag { font-size: 0.62rem; padding: 0.22rem 0.6rem; background: rgba(0,245,212,0.06); border: 1px solid rgba(0,245,212,0.14); border-radius: 2px; color: var(--cyan); }
.svc-price { font-family: var(--font-display); font-size: 0.75rem; color: var(--muted); margin-top: auto; padding-top: 1rem; border-top: 1px solid var(--border); }
.svc-price span { color: var(--cyan); font-weight: 700; }
.svc-link { display: inline-flex; align-items: center; gap: 0.4rem; color: var(--cyan); font-size: 0.76rem; transition: gap 0.2s; }
.svc-link:hover { gap: 0.7rem; }
/* RELATED */
.related-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 1rem; }
.related-card { display: flex; flex-direction: column; gap: 0.5rem; background: var(--bg2); border: 1px solid var(--border); border-radius: 3px; padding: 1.5rem; transition: all 0.3s; }
.related-card:hover { border-color: rgba(0,245,212,0.3); transform: translateY(-3px); }
.related-icon { font-size: 1.4rem; }
.related-title { font-family: var(--font-display); font-weight: 700; font-size: 0.9rem; }
.related-desc { font-size: 0.72rem; color: var(--muted); line-height: 1.7; flex: 1; }
.related-link { font-size: 0.7rem; color: var(--cyan); margin-top: 0.3rem; }
/* CTA SECTION */
.cta-section { position: relative; z-index: 1; background: linear-gradient(135deg, var(--bg3) 0%, rgba(0,245,212,0.04) 50%, var(--bg3) 100%); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); padding: 6rem 5vw; text-align: center; overflow: hidden; }
.cta-bg { position: absolute; width: 600px; height: 600px; border-radius: 50%; background: var(--cyan); filter: blur(160px); opacity: 0.04; top: 50%; left: 50%; transform: translate(-50%,-50%); }
.cta-title { font-family: var(--font-display); font-weight: 800; font-size: clamp(1.8rem, 3.5vw, 3.2rem); letter-spacing: -0.03em; margin-bottom: 1rem; position: relative; }
.cta-sub { font-size: 0.88rem; color: var(--muted); max-width: 520px; margin: 0 auto 2.5rem; line-height: 1.85; position: relative; }
.cta-btns { display: flex; justify-content: center; gap: 1rem; flex-wrap: wrap; position: relative; }
.promo-pill { display: inline-flex; align-items: center; gap: 0.6rem; border: 1px dashed rgba(0,245,212,0.3); padding: 0.5rem 1.2rem; border-radius: 100px; font-size: 0.72rem; color: var(--cyan); margin-bottom: 2rem; position: relative; }
/* CODE WINDOW */
.code-window { background: var(--bg3); border: 1px solid var(--border); border-radius: 6px; overflow: hidden; font-size: 0.78rem; }
.code-bar { display: flex; align-items: center; gap: 0.5rem; padding: 0.7rem 1rem; background: rgba(255,255,255,0.03); border-bottom: 1px solid var(--border); }
.code-dot { width: 10px; height: 10px; border-radius: 50%; }
.code-body { padding: 1.5rem; line-height: 2; overflow-x: auto; white-space: pre; }
.kw{color:#ff79c6} .fn{color:#50fa7b} .str{color:#f1fa8c} .cm{color:#6272a4;font-style:italic} .cl{color:#00f5d4} .vr{color:#bd93f9} .tg{color:#ff6b6b} .at{color:#50fa7b}
/* QUICK FORM */
.quick-form { display: grid; gap: 0.9rem; }
.qf-row { display: grid; grid-template-columns: 1fr 1fr; gap: 0.9rem; }
.qf-label { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--muted); display: block; margin-bottom: 0.3rem; }
.qf-input, .qf-textarea { width: 100%; background: var(--card); border: 1px solid var(--border); color: var(--text); font-family: var(--font-mono); font-size: 0.8rem; padding: 0.75rem; border-radius: 2px; outline: none; transition: border 0.3s; }
.qf-input:focus, .qf-textarea:focus { border-color: var(--cyan); }
.qf-textarea { resize: none; min-height: 110px; }
.qf-btn { padding: 0.85rem; background: linear-gradient(135deg, var(--cyan), var(--blue)); color: var(--bg); font-family: var(--font-display); font-weight: 700; font-size: 0.85rem; border: none; border-radius: 2px; cursor: pointer; clip-path: polygon(12px 0%,100% 0%,calc(100% - 12px) 100%,0% 100%); transition: all 0.3s; width: 100%; }
.qf-btn:hover { filter: brightness(1.1); transform: translateY(-1px); }
.qf-ok { display: none; text-align: center; color: var(--green); font-size: 0.8rem; padding: 0.5rem; }
/* FOOTER */
footer.main-footer { position: relative; z-index: 1; border-top: 1px solid var(--border); padding: 1.8rem 5vw; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; }
.footer-copy { font-size: 0.7rem; color: var(--muted); }
.footer-copy a { color: var(--cyan); }
.footer-nav { display: flex; gap: 2rem; flex-wrap: wrap; }
.footer-nav a { font-size: 0.68rem; color: var(--muted); transition: color 0.2s; }
.footer-nav a:hover { color: var(--cyan); }
/* RESPONSIVE */
@media (max-width: 900px) { .hero-split { grid-template-columns: 1fr; } }
@media (max-width: 768px) { nav.main-nav .nav-links { display: none; } .nav-menu-btn { display: flex; } section { padding: 4rem 5vw; } .qf-row { grid-template-columns: 1fr; } }
/* ─── HIRE LANDING ──────────────────────────────────────────────── */
/* hero */
.hire-hero{position:relative;z-index:1;padding:5.5rem 5vw 0;max-width:1280px;margin:0 auto;display:grid;grid-template-columns:1fr 420px;gap:4rem;align-items:start;padding-bottom:3rem;}
.hero-left{}
.avail-pill{display:inline-flex;align-items:center;gap:.55rem;border:1px solid rgba(34,197,94,.3);background:rgba(34,197,94,.06);color:#22c55e;font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;padding:.32rem .9rem;border-radius:100px;margin-bottom:1.2rem;}
.avail-dot{width:7px;height:7px;border-radius:50%;background:#22c55e;animation:pulse 2s infinite;}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(34,197,94,.5)}50%{box-shadow:0 0 0 6px rgba(34,197,94,0)}}
.hire-h1{font-family:var(--font-display);font-weight:900;font-size:clamp(2.2rem,4.5vw,3.6rem);line-height:1.05;letter-spacing:-.03em;margin-bottom:1rem;}
.hire-h1 em{color:var(--cyan);font-style:normal;display:block;}
.hire-lead{font-size:.87rem;color:var(--muted);line-height:1.95;max-width:560px;margin-bottom:1.6rem;}
.hero-btns{display:flex;flex-wrap:wrap;gap:.9rem;margin-bottom:2rem;}
.hero-proof{display:flex;align-items:center;gap:1.4rem;flex-wrap:wrap;}
.proof-item{display:flex;align-items:center;gap:.45rem;font-size:.68rem;color:var(--muted);}
.proof-val{font-family:var(--font-display);font-weight:800;color:var(--text);}
/* hero card (right) */
.hero-card{background:var(--bg2);border:1px solid var(--border);border-radius:4px;padding:1.8rem;position:sticky;top:5.5rem;}
.hc-title{font-family:var(--font-display);font-weight:800;font-size:.95rem;margin-bottom:1.2rem;color:var(--cyan);}
.hc-row{display:flex;align-items:flex-start;gap:.8rem;margin-bottom:1rem;font-size:.76rem;}
.hc-icon{font-size:1.1rem;flex-shrink:0;margin-top:.05rem;}
.hc-label{font-size:.62rem;color:var(--muted);margin-bottom:.15rem;letter-spacing:.06em;text-transform:uppercase;}
.hc-val{color:var(--text);}
.hc-divider{border:none;border-top:1px solid var(--border);margin:1.2rem 0;}
.hc-cta{display:block;background:linear-gradient(135deg,var(--cyan),var(--blue));color:var(--bg);font-family:var(--font-display);font-weight:700;font-size:.82rem;padding:.9rem 1.2rem;text-align:center;border-radius:2px;text-decoration:none;transition:filter .3s;margin-bottom:.65rem;}
.hc-cta:hover{filter:brightness(1.1);}
.hc-cta-sec{display:block;border:1px solid var(--border);color:var(--muted);font-size:.76rem;padding:.75rem 1.2rem;text-align:center;border-radius:2px;text-decoration:none;transition:all .2s;}
.hc-cta-sec:hover{border-color:var(--cyan);color:var(--cyan);}
.hc-note{font-size:.62rem;color:var(--muted);text-align:center;margin-top:.7rem;line-height:1.6;}
/* section wrapper */
.hire-section{position:relative;z-index:1;max-width:1280px;margin:0 auto;padding:0 5vw 4rem;}
.sep{display:flex;align-items:center;gap:1rem;margin-bottom:2rem;}
.sep-lbl{font-size:.61rem;letter-spacing:.18em;text-transform:uppercase;color:var(--orange);white-space:nowrap;}
.sep-line{flex:1;height:1px;background:var(--border);}
/* why hire me */
.why-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5px;background:var(--border);border:1px solid var(--border);margin-bottom:3.5rem;}
.why-card{background:var(--bg2);padding:1.8rem 1.6rem;transition:background .25s;}
.why-card:hover{background:var(--bg3);}
.why-icon{font-size:1.6rem;margin-bottom:.8rem;}
.why-title{font-family:var(--font-display);font-weight:700;font-size:.95rem;margin-bottom:.5rem;color:var(--text);}
.why-desc{font-size:.76rem;color:var(--muted);line-height:1.85;}
/* rate comparison table */
.rate-table{width:100%;border-collapse:collapse;font-size:.78rem;margin-bottom:2.5rem;}
.rate-table th{background:var(--bg3);color:var(--cyan);font-family:var(--font-display);font-weight:700;padding:.85rem 1rem;text-align:left;border:1px solid var(--border);}
.rate-table td{padding:.8rem 1rem;border:1px solid var(--border);color:var(--muted);vertical-align:middle;}
.rate-table tr.highlight td{background:rgba(0,245,212,.04);color:var(--text);}
.rate-table tr.highlight td:first-child{border-left:3px solid var(--cyan);}
.rate-table .tag-win{display:inline-block;background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.3);color:#22c55e;font-size:.6rem;padding:.12rem .45rem;border-radius:100px;margin-left:.4rem;vertical-align:middle;}
/* skills grid */
.skills-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1.5px;background:var(--border);border:1px solid var(--border);margin-bottom:3.5rem;}
.skill-group{background:var(--bg2);padding:1.8rem 1.6rem;}
.sg-title{font-family:var(--font-display);font-weight:700;font-size:.88rem;margin-bottom:1rem;display:flex;align-items:center;gap:.6rem;}
.sg-icon{font-size:1.1rem;}
.skill-pills{display:flex;flex-wrap:wrap;gap:.4rem;}
.spill{font-size:.67rem;font-family:var(--font-mono);padding:.22rem .65rem;border:1px solid var(--border);color:var(--muted);border-radius:2px;transition:all .2s;}
.spill.hot{border-color:rgba(0,245,212,.3);color:var(--cyan);}
/* cases */
.cases-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5px;background:var(--border);border:1px solid var(--border);margin-bottom:3.5rem;}
.case-card{background:var(--bg2);padding:1.8rem 1.6rem;display:flex;flex-direction:column;transition:background .25s;}
.case-card:hover{background:var(--bg3);}
.case-num{font-family:var(--font-display);font-weight:900;font-size:2rem;color:var(--border);line-height:1;margin-bottom:.6rem;}
.case-title{font-family:var(--font-display);font-weight:700;font-size:.92rem;color:var(--text);margin-bottom:.5rem;}
.case-stack{font-size:.62rem;color:var(--cyan);letter-spacing:.08em;margin-bottom:.7rem;font-family:var(--font-mono);}
.case-desc{font-size:.75rem;color:var(--muted);line-height:1.85;flex:1;}
.case-result{margin-top:1rem;padding-top:.9rem;border-top:1px solid var(--border);font-size:.7rem;color:var(--green);font-family:var(--font-mono);}
/* testimonials */
.test-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5px;background:var(--border);border:1px solid var(--border);margin-bottom:3.5rem;}
.test-card{background:var(--bg2);padding:1.7rem 1.5rem;display:flex;flex-direction:column;transition:background .25s;}
.test-card:hover{background:var(--bg3);}
.test-header{display:flex;align-items:center;gap:.9rem;margin-bottom:1rem;}
.test-av{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:800;font-size:1rem;color:var(--bg);flex-shrink:0;}
.test-name{font-family:var(--font-display);font-weight:700;font-size:.85rem;}
.test-role{font-size:.65rem;color:var(--muted);margin-top:.12rem;}
.test-stars{color:#fbbf24;font-size:.72rem;margin-bottom:.55rem;}
.test-text{font-size:.76rem;color:var(--muted);line-height:1.88;flex:1;}
.test-platform{margin-top:.9rem;font-size:.61rem;color:var(--muted);padding-top:.7rem;border-top:1px solid var(--border);}
/* process */
.process-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1.5px;background:var(--border);border:1px solid var(--border);margin-bottom:3.5rem;}
.proc-card{background:var(--bg2);padding:1.6rem 1.4rem;position:relative;}
.proc-num{font-family:var(--font-display);font-weight:900;font-size:2.5rem;color:var(--border);line-height:1;margin-bottom:.6rem;}
.proc-title{font-family:var(--font-display);font-weight:700;font-size:.88rem;margin-bottom:.45rem;color:var(--text);}
.proc-desc{font-size:.73rem;color:var(--muted);line-height:1.8;}
/* faq */
.faq-list{border:1px solid var(--border);margin-bottom:3.5rem;}
.faq-item{border-bottom:1px solid var(--border);}
.faq-item:last-child{border-bottom:none;}
.faq-q{width:100%;background:none;border:none;color:var(--text);font-family:var(--font-display);font-weight:700;font-size:.88rem;padding:1.3rem 1.5rem;text-align:left;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:1rem;transition:background .2s;}
.faq-q:hover{background:var(--bg2);}
.faq-arrow{color:var(--cyan);font-size:.8rem;transition:transform .25s;flex-shrink:0;}
.faq-item.open .faq-arrow{transform:rotate(45deg);}
.faq-a{max-height:0;overflow:hidden;transition:max-height .35s ease;}
.faq-item.open .faq-a{max-height:300px;}
.faq-a-inner{padding:.2rem 1.5rem 1.3rem;font-size:.78rem;color:var(--muted);line-height:1.9;}
.faq-a-inner a{color:var(--cyan);border-bottom:1px solid rgba(0,245,212,.25);}
.faq-a-inner strong{color:var(--text);}
/* final cta */
.final-cta{background:var(--bg2);border:1px solid var(--border);border-radius:4px;padding:3rem;text-align:center;margin-bottom:4rem;position:relative;overflow:hidden;}
.final-cta::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at center,rgba(0,245,212,.04) 0%,transparent 70%);pointer-events:none;}
.fcta-label{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:var(--cyan);margin-bottom:.8rem;}
.fcta-h2{font-family:var(--font-display);font-weight:900;font-size:clamp(1.5rem,3vw,2.4rem);margin-bottom:.7rem;letter-spacing:-.02em;}
.fcta-p{font-size:.82rem;color:var(--muted);max-width:520px;margin:0 auto 1.8rem;line-height:1.9;}
.fcta-btns{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center;margin-bottom:1.4rem;}
.fcta-note{font-size:.68rem;color:var(--muted);}
.fcta-note strong{color:var(--cyan);}
/* ua / en toggle link */
.ua-en-bar{background:var(--bg3);border-bottom:1px solid var(--border);padding:.55rem 5vw;display:flex;justify-content:flex-end;align-items:center;gap:.6rem;font-size:.65rem;color:var(--muted);position:relative;z-index:1;}
.ua-en-bar a{color:var(--cyan);border:1px solid rgba(0,245,212,.2);padding:.18rem .6rem;border-radius:100px;text-decoration:none;transition:border-color .2s;}
.ua-en-bar a:hover{border-color:var(--cyan);}
@media(max-width:1024px){.hire-hero{grid-template-columns:1fr;}.hero-card{position:static;}.why-grid,.cases-grid,.test-grid{grid-template-columns:1fr 1fr;}.process-grid{grid-template-columns:1fr 1fr;}.skills-grid{grid-template-columns:1fr;}}
@media(max-width:640px){.why-grid,.cases-grid,.test-grid,.process-grid{grid-template-columns:1fr;}.rate-table{font-size:.68rem;}}
</style>
</head>
<body>
<div class="scroll-progress" id="sp"></div>
<div class="cur" id="cur"></div><div class="cur-ring" id="curRing"></div>
<div class="bg-grid"></div>
<div class="bg-blob" style="width:800px;height:800px;top:-250px;right:-200px;background:var(--cyan);opacity:.04;animation:floatBlob 28s ease-in-out infinite;"></div>
<div class="bg-blob" style="width:500px;height:500px;bottom:-100px;left:-150px;background:var(--purple);opacity:.05;animation:floatBlob 34s ease-in-out infinite reverse;"></div>
<nav class="mobile-nav" id="mobileNav">
<button class="mobile-close" id="mobileClose">✕</button>
<a href="/">Головна</a><a href="/about.html">Про мене</a>
<a href="/services/">Послуги</a><a href="/pricing.html">Ціни</a>
<a href="/portfolio.html">Портфоліо</a><a href="/blog/">Блог</a>
<a href="/en/hire-laravel-developer.html" style="color:var(--muted);font-size:1.1rem;">EN 🇬🇧</a>
</nav>
<nav class="main-nav">
<a href="/" class="nav-logo">Roman<em>Dev</em></a>
<ul class="nav-links">
<li><a href="/">Головна</a></li>
<li><a href="/about.html">Про мене</a></li>
<li><a href="/services/">Послуги</a></li>
<li><a href="/pricing.html">Ціни</a></li>
<li><a href="/portfolio.html">Портфоліо</a></li>
<li><a href="/blog/">Блог</a></li>
</ul>
<a href="https://t.me/RomanMatviy" class="nav-btn" target="_blank" rel="noopener">⚡ Найняти</a>
<button class="nav-menu-btn" id="menuBtn"><svg width="22" height="16" viewBox="0 0 22 16"><rect y="0" width="22" height="2" rx="1" fill="currentColor"/><rect y="7" width="16" height="2" rx="1" fill="currentColor"/><rect y="14" width="22" height="2" rx="1" fill="currentColor"/></svg></button>
</nav>
<div class="ua-en-bar">
<span>EN version:</span>
<a href="/en/hire-laravel-developer.html">🇬🇧 English</a>
</div>
<nav class="breadcrumb"><a href="/">Головна</a> › <span>Найняти Laravel розробника</span></nav>
<!-- ═══ HERO ════════════════════════════════════════════════════════ -->
<div class="hire-hero">
<div class="hero-left">
<div class="avail-pill"><span class="avail-dot"></span>Доступний для нових проєктів</div>
<h1 class="hire-h1">
Найняти Senior<br>
<em>Laravel Розробника</em>
з України — від $25/год
</h1>
<p class="hire-lead">Я Roman Matviy — FullStack розробник зі Львова з 6+ роками досвіду побудови Laravel API, SaaS продуктів, адмін-панелей, WooCommerce магазинів і Docker-інфраструктури для клієнтів з Німеччини, UK, Нідерландів, Швеції і Франції.</p>
<div class="hero-btns">
<a href="https://t.me/RomanMatviy" class="btn-p btn-primary" target="_blank" rel="noopener">💬 Написати в Telegram</a>
<a href="/pricing.html" class="btn-p btn-secondary">📄 Ціни</a>
</div>
<div class="hero-proof"><div class="proof-item"><span class="proof-val">6+</span> Років досвіду</div><div class="proof-item"><span class="proof-val">50+</span> Проєктів</div><div class="proof-item"><span class="proof-val">4.9★</span> Рейтинг</div><div class="proof-item"><span class="proof-val">від $25/год</span> Ставка</div></div>
</div>
<div class="hero-card">
<div class="hc-title">Коротко про мене</div>
<div class="hc-row"><span class="hc-icon">⏰</span><div><div class="hc-label">Доступність</div><div class="hc-val">Відкритий для нових проєктів</div></div></div><div class="hc-row"><span class="hc-icon">💰</span><div><div class="hc-label">Ставка</div><div class="hc-val">$25–$35/год або фікс. ціна</div></div></div><div class="hc-row"><span class="hc-icon">🌍</span><div><div class="hc-label">Локація</div><div class="hc-val">Львів, Україна · UTC+2</div></div></div><div class="hc-row"><span class="hc-icon">🗣️</span><div><div class="hc-label">Англійська</div><div class="hc-val">B2–C1 · письмова відмінна</div></div></div><div class="hc-row"><span class="hc-icon">📦</span><div><div class="hc-label">Стек</div><div class="hc-val">Laravel · Vue.js · Docker</div></div></div><div class="hc-row"><span class="hc-icon">✍️</span><div><div class="hc-label">Договір</div><div class="hc-val">NDA + передача IP</div></div></div>
<hr class="hc-divider">
<a href="https://t.me/RomanMatviy" class="hc-cta" target="_blank" rel="noopener">💬 Написати в Telegram</a>
<a href="/pricing.html" class="hc-cta-sec">📄 Ціни</a>
<div class="hc-note">Безкоштовний 30-хв дзвінок · Без зобов'язань</div>
</div>
</div>
<!-- ═══ SECTIONS ════════════════════════════════════════════════════ -->
<div class="hire-section">
<div class="sep reveal"><span class="sep-lbl">Чому я</span><span class="sep-line"></span></div>
<div class="why-grid"><div class="why-card reveal"><div class="why-icon">💰</div><div class="why-title">Senior якість, стартап ціна</div><div class="why-desc">Senior Laravel розробник за $25–35/год. Аналоги з US/UK коштують $80–150/год за той самий рівень. Однаковий рівень коду, швидша здача, у 3–4 рази дешевше.</div></div><div class="why-card reveal"><div class="why-icon">⏰</div><div class="why-title">Європейський часовий пояс</div><div class="why-desc">UTC+2 — 7–8 годин перетину з Захід. Європою, 3–4 з Східним узбережжям США. Щоденні апдейти, відповідь того ж дня. Ніяких затримок через часові зони.</div></div><div class="why-card reveal"><div class="why-icon">🧠</div><div class="why-title">Думає про ваш продукт</div><div class="why-desc">Не просто закриває задачі. Ставить запитання перед стартом, пропонує кращі підходи, вчасно попереджає про проблеми. 6 років накопиченого контексту.</div></div><div class="why-card reveal"><div class="why-icon">✅</div><div class="why-title">Чистий, покритий тестами, задокументований код</div><div class="why-desc">PSR-12, PHPStan level 8, Pest тести, API документація. Код який можна передати іншому розробнику без 3-годинного пояснення.</div></div><div class="why-card reveal"><div class="why-icon">🚀</div><div class="why-title">50+ здано проєктів</div><div class="why-desc">Від MVP до enterprise CRM. REST API, SaaS, WooCommerce магазини, PrestaShop, адмін-панелі, Docker. Широкий досвід = швидше вирішення проблем.</div></div><div class="why-card reveal"><div class="why-icon">🔒</div><div class="why-title">NDA, договір, передача IP</div><div class="why-desc">Проф. фріланс-підхід. NDA з першого дня, IP ваш з першого коміту, письмова пропозиція з ціною і строками до початку роботи.</div></div></div>
<div class="sep reveal"><span class="sep-lbl">Порівняння ставок</span><span class="sep-line"></span></div>
<table class="rate-table"><thead><tr><th>Локація</th><th>Погодинна ставка</th><th>Еквівалент full-time</th><th></th></tr></thead><tbody><tr class=""><td>🇺🇸 Senior Laravel Dev (США)</td><td>$80–$150/год</td><td>$14k–$26k/міс</td><td></td></tr><tr class=""><td>🇬🇧 Senior Laravel Dev (UK)</td><td>$70–$120/год</td><td>$12k–$20k/міс</td><td></td></tr><tr class=""><td>🇵🇱 Senior Laravel Dev (Польща)</td><td>$40–$65/год</td><td>$7k–$11k/міс</td><td></td></tr><tr class=""><td>🇮🇳 Senior Laravel Dev (Індія)</td><td>$15–$30/год</td><td>$2.5k–$5k/міс</td><td></td></tr><tr class="highlight"><td>🇺🇦 Roman Matviy (Україна) <span class="tag-win">Best value</span></td><td>$25–$35/год</td><td>$4k–$6k/міс</td><td></td></tr></tbody></table><p style="font-size:.68rem;color:var(--muted);margin-bottom:2.5rem;">* Ставка Романа поєднує східноєвропейські ціни зі стандартами якості та комунікації Захід. Європи.</p>
<div class="sep reveal"><span class="sep-lbl">Технічні навички</span><span class="sep-line"></span></div>
<div class="skills-grid"><div class="skill-group reveal"><div class="sg-title"><span class="sg-icon">⚙️</span>Backend</div><div class="skill-pills"><span class="spill hot">Laravel 11</span><span class="spill hot">PHP 8.2</span><span class="spill hot">REST API</span><span class="spill">Sanctum</span><span class="spill">Queues</span><span class="spill">Events</span><span class="spill">Policies</span></div></div><div class="skill-group reveal"><div class="sg-title"><span class="sg-icon">🎨</span>Frontend</div><div class="skill-pills"><span class="spill hot">Vue.js 3</span><span class="spill hot">Livewire 3</span><span class="spill hot">Alpine.js</span><span class="spill">Blade</span><span class="spill">Vite</span><span class="spill">TailwindCSS</span><span class="spill">Inertia.js</span></div></div><div class="skill-group reveal"><div class="sg-title"><span class="sg-icon">🏥</span>Admin Panels</div><div class="skill-pills"><span class="spill hot">Filament PHP 3</span><span class="spill hot">Multi-tenancy</span><span class="spill hot">Spatie Roles</span><span class="spill">Custom Widgets</span><span class="spill">PDF Reports</span></div></div><div class="skill-group reveal"><div class="sg-title"><span class="sg-icon">🛒</span>E-commerce</div><div class="skill-pills"><span class="spill hot">WooCommerce</span><span class="spill hot">PrestaShop</span><span class="spill hot">LiqPay</span><span class="spill">Monobank</span><span class="spill">Stripe</span><span class="spill">Nova Poshta</span></div></div><div class="skill-group reveal"><div class="sg-title"><span class="sg-icon">🐳</span>DevOps</div><div class="skill-pills"><span class="spill hot">Docker</span><span class="spill hot">GitHub Actions</span><span class="spill hot">Nginx</span><span class="spill">Linux VPS</span><span class="spill">CI/CD</span><span class="spill">Redis</span><span class="spill">SSL</span></div></div><div class="skill-group reveal"><div class="sg-title"><span class="sg-icon">🗄️</span>Databases</div><div class="skill-pills"><span class="spill hot">MySQL 8</span><span class="spill hot">PostgreSQL</span><span class="spill hot">Redis</span><span class="spill">Eloquent ORM</span><span class="spill">Doctrine</span><span class="spill">Query Builder</span></div></div></div>
<div class="sep reveal"><span class="sep-lbl">Кейс-стаді</span><span class="sep-line"></span></div>
<div class="cases-grid"><div class="case-card reveal"><div class="case-num">01</div><div class="case-title">SaaS Task Manager REST API</div><div class="case-stack">Laravel 11 · Sanctum · MySQL · Docker</div><div class="case-desc">Повноцінний REST API для німецького SaaS стартапу. Sanctum auth, CRUD з route model binding, API Resources, Policies, feature tests, Swagger документація. Здано за 3 тижні.</div><div class="case-result">✓ 3 тижні · $1,800 · 100% test coverage</div></div><div class="case-card reveal"><div class="case-num">02</div><div class="case-title">Multi-tenant CRM на Filament PHP</div><div class="case-stack">Laravel · Filament 3 · Spatie · Redis</div><div class="case-desc">CRM для французького агентства — ізоляція даних per-tenant, власні піддомени, брендований адмін для кожного клієнта, Spatie ролі, Excel/PDF звіти, live дашборд.</div><div class="case-result">✓ 6 тижнів · $4,200 · 5 клієнтів на старті</div></div><div class="case-card reveal"><div class="case-num">03</div><div class="case-title">Міграція WooCommerce + Оптимізація</div><div class="case-stack">WooCommerce · PHP · Redis · Nginx</div><div class="case-desc">Міграція магазину 15,000 товарів з OpenCart на WooCommerce. Кастомна Figma тема, LiqPay + Nova Poshta, Redis object cache, WebP зображення, Nginx тюнінг.</div><div class="case-result">✓ PageSpeed 42 → 91 · нуль втрат замовлень</div></div></div>
<p style="text-align:right;margin-top:-.5rem;margin-bottom:3.5rem;">
<a href="/portfolio.html" style="font-size:.72rem;color:var(--cyan);border-bottom:1px solid rgba(0,245,212,.3);">Переглянути повне портфоліо →</a>
</p>
<div class="sep reveal"><span class="sep-lbl">Що кажуть клієнти</span><span class="sep-line"></span></div>
<div class="test-grid"><div class="test-card reveal"><div class="test-header"><div class="test-av" style="background:var(--orange);">T</div><div><div class="test-name">Thomas B.</div><div class="test-role">Власник SaaS стартапу · 🇩🇪 Німеччина</div></div></div><div class="test-stars">★★★★★</div><div class="test-text">“Роман побудував наш повний Laravel 11 REST API з Filament адмінкою за 3 тижні. Чистий код, задокументований, покритий тестами. Завжди на зв'язку і розуміє задачу ще до старту.”</div><div class="test-platform">Upwork</div></div><div class="test-card reveal"><div class="test-header"><div class="test-av" style="background:var(--cyan);">S</div><div><div class="test-name">Sarah K.</div><div class="test-role">Product Manager · 🇬🇧 Велика Британія</div></div></div><div class="test-stars">★★★★★</div><div class="test-text">“Наймайте Романа якщо хочете розробника який думає про продукт. Наш Laravel + Vue.js проєкт отримав архітектурні рекомендації яких ми не просили — і вони були слушними.”</div><div class="test-platform">Upwork</div></div><div class="test-card reveal"><div class="test-header"><div class="test-av" style="background:var(--green);">L</div><div><div class="test-name">Lars M.</div><div class="test-role">CTO стартапу · 🇸🇪 Швеція</div></div></div><div class="test-stars">★★★★★</div><div class="test-text">“Наймали Романа для налаштування Docker і GitHub Actions CI/CD. Отримали продуманий стек, автодеплой через SSH, rollback однією командою. Документація настільки детальна, що новий девелопер розібрався за годину.”</div><div class="test-platform">Upwork</div></div></div>
<div class="sep reveal"><span class="sep-lbl">Як ми працюємо</span><span class="sep-line"></span></div>
<div class="process-grid"><div class="proc-card reveal"><div class="proc-num">01</div><div class="proc-title">Брифінг (безкоштовно)</div><div class="proc-desc">30 хвилин дзвінку або чату — розбираємо проєкт, дедлайни і бюджет. Без продажних pitch-ів.</div></div><div class="proc-card reveal"><div class="proc-num">02</div><div class="proc-title">Пропозиція і кошторис</div><div class="proc-desc">Надсилаю письмову пропозицію зі скоупом, строками, ціною і технічним підходом протягом 24 годин.</div></div><div class="proc-card reveal"><div class="proc-num">03</div><div class="proc-title">Розробка</div><div class="proc-desc">Регулярні оновлення, чисті Git коміти, доступ до staging. Бачите прогрес щодня або щотижня.</div></div><div class="proc-card reveal"><div class="proc-num">04</div><div class="proc-title">Здача та підтримка</div><div class="proc-desc">Код задокументований, задеплоєний, готовий до review. 30 днів безкоштовних виправлень багів.</div></div></div>
<div class="sep reveal"><span class="sep-lbl">FAQ</span><span class="sep-line"></span></div>
<div class="faq-list"><div class="faq-item"><button class="faq-q">Яка ваша погодинна ставка? <span class="faq-arrow">+</span></button><div class="faq-a"><div class="faq-a-inner">Моя ставка <strong>$25–$35/год</strong> залежно від типу і складності проєкту. Для чітко визначених задач доступна фіксована ціна. Деталі на <a href="/pricing.html">сторінці цін</a>.</div></div></div><div class="faq-item"><button class="faq-q">Чи можна найняти вас на повний або неповний день? <span class="faq-arrow">+</span></button><div class="faq-a"><div class="faq-a-inner">Так. Я працюю <strong>по годинах</strong> (від 10 год/тиждень), <strong>part-time</strong> (20 год/тиждень) або <strong>по проєктах</strong> з фіксованою ціною. На довгострокові ретейнери — знижка.</div></div></div><div class="faq-item"><button class="faq-q">В якому часовому поясі ви знаходитесь? <span class="faq-arrow">+</span></button><div class="faq-a"><div class="faq-a-inner"><strong>Львів, Україна — UTC+2 (EET)</strong>, UTC+3 влітку. Це 7–8 годин перетину з Західною Європою і 3–4 години з Східним узбережжям США. Гнучкий до будь-якого часу зустрічей.</div></div></div><div class="faq-item"><button class="faq-q">Чи підписуєте NDA? <span class="faq-arrow">+</span></button><div class="faq-a"><div class="faq-a-inner">Так, обов'язково. Підписую NDA клієнта або надаю власний стандартний фріланс-договір з передачею IP.</div></div></div><div class="faq-item"><button class="faq-q">Як розпочати співпрацю? <span class="faq-arrow">+</span></button><div class="faq-a"><div class="faq-a-inner">Напишіть у <a href="https://t.me/RomanMatviy" target="_blank">Telegram</a> або email з коротким описом проєкту. Відповідаю протягом кількох годин і домовляємось на безкоштовний 30-хвилинний дзвінок.</div></div></div></div>
<div class="final-cta reveal">
<div class="fcta-label">Готові до старту?</div>
<h2 class="fcta-h2">Давайте побудуємо щось разом</h2>
<p class="fcta-p">Напишіть короткий опис проєкту — відповім протягом кількох годин. Безкоштовний 30-хв дзвінок включено.</p>
<div class="fcta-btns">
<a href="https://t.me/RomanMatviy" class="btn-p btn-primary" target="_blank" rel="noopener">💬 Написати в Telegram</a>
<a href="mailto:roman@hirewebdeveloper.pp.ua" class="btn-p btn-secondary">📧 Написати email</a>
<a href="/pricing.html" class="btn-p btn-secondary">📄 Ціни</a>
</div>
<div class="fcta-note">Промокод <strong>HireRomanDev</strong> — 10% знижка на перший проєкт</div>
</div>
</div>
<footer class="main-footer">
<div class="footer-copy">© 2018–2026 <a href="/">Roman Matviy</a> · Laravel Розробник · Львів, Україна 🇺🇦</div>
<nav class="footer-nav">
<a href="/">Головна</a><a href="/about.html">Про мене</a>
<a href="/services/">Послуги</a><a href="/pricing.html">Ціни</a>
<a href="/portfolio.html">Портфоліо</a><a href="/blog/">Блог</a>
<a href="/hire-laravel-developer.html">Найняти мене</a>
</nav>
</footer>
<script>
(function(){
var c=document.getElementById('cur'),r=document.getElementById('curRing');
if(c&&r){var mx=0,my=0,rx=0,ry=0;
document.addEventListener('mousemove',function(e){mx=e.clientX;my=e.clientY;c.style.transform='translate('+(mx-4)+'px,'+(my-4)+'px)';});
(function lp(){rx+=(mx-rx)*.12;ry+=(my-ry)*.12;r.style.transform='translate('+(rx-18)+'px,'+(ry-18)+'px)';requestAnimationFrame(lp);})();
document.querySelectorAll('a,button').forEach(function(el){
el.addEventListener('mouseenter',function(){r.classList.add('hovered');});
el.addEventListener('mouseleave',function(){r.classList.remove('hovered');});
});}
var sp=document.getElementById('sp');
if(sp)window.addEventListener('scroll',function(){sp.style.width=(window.scrollY/(document.documentElement.scrollHeight-window.innerHeight)*100)+'%';});
var obs=new IntersectionObserver(function(e){e.forEach(function(x){if(x.isIntersecting)x.target.classList.add('visible');});},{threshold:0.06,rootMargin:'0px 0px -30px 0px'});
document.querySelectorAll('.reveal').forEach(function(el){obs.observe(el);});
var mb=document.getElementById('menuBtn'),mn=document.getElementById('mobileNav'),mc=document.getElementById('mobileClose');
if(mb&&mn&&mc){mb.addEventListener('click',function(){mn.classList.add('open');});mc.addEventListener('click',function(){mn.classList.remove('open');});mn.querySelectorAll('a').forEach(function(a){a.addEventListener('click',function(){mn.classList.remove('open');});});}
/* FAQ accordion */
document.querySelectorAll('.faq-q').forEach(function(btn){
btn.addEventListener('click',function(){
var item=btn.parentElement;
var isOpen=item.classList.contains('open');
document.querySelectorAll('.faq-item').forEach(function(i){i.classList.remove('open');});
if(!isOpen)item.classList.add('open');
});
});
})();
</script>
</body>
</html>