import React, { useRef, useState } from "react"; import SVG from "react-inlinesvg"; import { AuthHeader } from "@components/Common/AuthHeader/AuthHeader"; import { Footer } from "@components/Common/Footer/Footer"; import arrowReviewsLeft from "assets/icons/arrows/arrowReviewsLeft.png"; import arrowReviewsRight from "assets/icons/arrows/arrowReviewsRight.png"; import fileUploadIcon from "assets/icons/fileUploadIcon.svg"; import Ellipse from "assets/images/EllipseIntro.svg"; import backgroundOpp from "assets/images/backgroundOpportunity.png"; import bagITguild from "assets/images/bagITguild.png"; import cat from "assets/images/cat.png"; import clue from "assets/images/clue.png"; import code from "assets/images/landingBackgroundCode.png"; import codeWhite from "assets/images/landingBackgroundCodeWhite.png"; import reviewsImgMok from "assets/images/reviewsImgMok.png"; import flag from "assets/images/stackProjectsFlag.png"; import fly from "assets/images/stackProjectsFly.png"; import hand from "assets/images/stackProjectsHand.png"; import rabota from "assets/images/stackProjectsRabota.png"; import portfolio from "assets/images/stackSteptsPortfolio.png"; import "./stack.scss"; export const Stack = () => { const subjects = [ { name: "Backend", skills: [ "php", "yii2", "laravel", "symfony", "django", "nodejs", "fastAPI", "flask", "python", "exspress", "adonis" ] }, { name: "Front", skills: [ "react", "next.js", "typescript", "redux", "angular", "vue", "jquery", "css (sass/scss, tailwind, bootstrap, БЭМ)" ] } ]; const projects = [ { description: "Импортозамещение в управлении проектами таск-трекер ITGuild", img: flag, name: "flag" }, { description: "Работа Тудей - это сервис, который специализируется на поиске работы на новых территориях Российской Федерации.", img: rabota, name: "rabota" }, { description: "Внедрение искусственного интеллекта (ИИ) в IT-проекты. Интеграции любых популярных сервисов.", img: hand, name: "hand" }, { description: "Новостной портал и удобный каталог компаний DaInfo.pro предоставляющих различные услуги и товары.", img: fly, name: "fly" } ]; const steps = [ { miniInfo: "Окунитесь в экосистему ITGUIL", info: "уточнение деталей и обсуждение условий с менеджером ITGUILD" }, { miniInfo: "Окунитесь в экосистему ITGUIL", info: "подписание договора без обязательств оплаты на данном этапе" }, { miniInfo: "Окунитесь в экосистему ITGUIL", info: "формирование команды или подбор отдельных специалистов под требования клиентов" }, { miniInfo: "Окунитесь в экосистему ITGUIL", info: "интеграция специалистов в команду клиента, ежедневная отчетность под контролем менеджера ITGUILD" } ]; const [error, setError] = useState({ name: false, companyName: false, email: { state: false, text: "" }, phoneNumber: { state: false, text: "" }, requestDescription: false, agreement: false }); const [formData, setFormData] = useState({ name: "", companyName: "", email: "", phoneNumber: "", requestDescription: "", file: null, agreement: false }); // Создаем ссылку на скрытый элемент input для файла const hiddenFileInput = useRef(null); // Программно нажимаем на скрытый элемент input для файла // когда компонент Button будет нажат const handleClick = () => { hiddenFileInput.current.click(); }; // Вызываем функцию для обработки выбранного пользователем файла const handleChangeFile = (event) => { const fileUploaded = event.target.files[0]; setFormData((prevState) => ({ ...prevState, file: fileUploaded })); }; const handleChange = (e) => { const { name, value, type, checked } = e.target; setFormData((prevState) => ({ ...prevState, [name]: type === "checkbox" ? checked : value })); }; const handleSubmit = (e) => { e.preventDefault(); const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; const phoneRegex = /^\+?\d+$/; const newError = { name: !formData.name.trim(), companyName: !formData.companyName.trim(), email: { state: !formData.email.trim() || !emailRegex.test(formData.email), text: !formData.email.trim() ? "поле обязательно для заполнения" : !emailRegex.test(formData.email) ? "e-mail не соответствует формату" : "" }, phoneNumber: { state: !formData.phoneNumber.trim() || !phoneRegex.test(formData.phoneNumber), text: !formData.phoneNumber.trim() ? "поле обязательно для заполнения" : !phoneRegex.test(formData.phoneNumber) ? "введите корректный номер телефона" : "" }, requestDescription: !formData.requestDescription.trim(), agreement: !formData.agreement }; setError(newError); const isValid = Object.values(newError).every((err) => { if (typeof err === "object") { return !err.state; } return !err; }); if (isValid) { // Данные формы валидны, можно отправлять форму console.log("Форма отправлена", formData); setFormData({ name: "", companyName: "", email: "", phoneNumber: "", requestDescription: "", file: null, agreement: false }); } else { // Данные формы невалидны, показываем ошибки console.log("Форма содержит ошибки", newError); } }; return (
Все еще пытаетесь
пасти котов?*

Аутстаф
финг

IT-специалистов

Все для решения конкретных задач в области информационных технологий, обеспечивая оперативное усиление команды и гибкое управление персоналом.

Мы выделяем на проект как отдельных специалистов, так и целые команды, в зависимости от потребностей и объема работы.

Окунитесь в
экосистему ITGUIL

ITGu ild

clue

Каждый день база специалистов пополняется на{" "} +15 резюме

cat

Stack

Окунитесь в экосистему ITGUIL

Вы получаете полное управление над сотрудниками,{" "} имея возможность контролировать и заменять IT штат.

clue

Можем подготовить специалиста конкретно под ваш проект и используемый стек.
Таким образом вы сможете сэкономить ресурсы на поиск кандидата.

{subjects.map((subject) => { return (

{subject.name}

{subject.skills.map((skill) => { return {skill}; })}
); })}

Stack

code

ITGUILD

Наши проекты

{projects.map((project, index) => { return (
img

); })}

Мы обеспечиваем финансовые, юридические и кадровые гарантии, предоставляем SLA и берем на себя ответственность за работу команды.

Вам не требуется заниматься поиском, оформлением или увольнением сотрудников —{" "} мы берем на себя все хлопоты.

как это работает?

Аутстаффинг представляет собой специфическую модель найма персонала, отличающуюся от аутсорсинга.

В контексте аутстаффинга вы нанимаете специалистов в области ИТ, {" "} оплачивая их по их конкретным навыкам, и берете на себя организацию их работы.

{steps.map((step, index) => { return (

{`${index + 1}.`}

{step.miniInfo}

); })}
portfolio
portfolio
code code
375
Довольных клиентов

Предоставляем на аутстаффинг frontend- и backend - разработчиков уровня от junior до middle+

Можем сделать оценку проекта, ревью кода, составить коммерческое предложение, рекомендации касаемо стека технологий и организации архитектуры разрабатываемого проекта.

Что о нас говорят

reviewsImgMok Александр Гузеев

Руководитель проекта ООО “ЭЛАР”

Команда ITGUILD берется за решение широкого круга задач, не боясь при этом ни сжатых сроков, ни сложной специфики проектов, и успешно доводит их ло решения.

Разаработчики Кирилла смогли не только усилить существующую команду разработки, став ее полноценной частью, но и привести в проект новые идеи, свои знания и опыт.

code code
clue

ПОИСК

Заполните, пожалуйста, форму и
наш менеджер обязательно с вами свяжется

Нужен специалист?

Посмотрите и другие продукты ITGUILD
Окунитесь в экосистему ITGUIL

Пожалуйста, заполните форму и наш менеджер обязательно с вами свяжется

{error.name && ( поле обязательно для заполнения )}
{error.companyName && ( поле обязательно для заполнения )}
{error.email.state && ( {error.email.text} )}
{error.phoneNumber.state && ( {error.phoneNumber.text} )}