Ver código fonte

merge

blog-new
Pavle Golubovic 3 anos atrás
pai
commit
36f657cfdc

+ 10
- 81
frontend/package-lock.json Ver arquivo

@@ -34,6 +34,7 @@
"react-ga4": "^1.4.1",
"react-google-recaptcha": "^2.1.0",
"react-helmet-async": "^1.3.0",
"react-intersection-observer": "^9.4.1",
"react-mailchimp-subscribe": "^2.1.3",
"react-markdown": "^8.0.0",
"react-router-dom": "^6.2.1",
@@ -14620,53 +14621,14 @@
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
},
"node_modules/react-ga": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz",
"integrity": "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==",
"peerDependencies": {
"prop-types": "^15.6.0",
"react": "^15.6.2 || ^16.0 || ^17 || ^18"
}
},
"node_modules/react-ga4": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/react-ga4/-/react-ga4-1.4.1.tgz",
"integrity": "sha512-ioBMEIxd4ePw4YtaloTUgqhQGqz5ebDdC4slEpLgy2sLx1LuZBC9iYCwDymTXzcntw6K1dHX183ulP32nNdG7w=="
},
"node_modules/react-google-recaptcha": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-2.1.0.tgz",
"integrity": "sha512-K9jr7e0CWFigi8KxC3WPvNqZZ47df2RrMAta6KmRoE4RUi7Ys6NmNjytpXpg4HI/svmQJLKR+PncEPaNJ98DqQ==",
"dependencies": {
"prop-types": "^15.5.0",
"react-async-script": "^1.1.1"
},
"node_modules/react-intersection-observer": {
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz",
"integrity": "sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw==",
"peerDependencies": {
"react": ">=16.4.1"
"react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/react-helmet-async": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz",
"integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==",
"dependencies": {
"@babel/runtime": "^7.12.5",
"invariant": "^2.2.4",
"prop-types": "^15.7.2",
"react-fast-compare": "^3.2.0",
"shallowequal": "^1.1.0"
},
"peerDependencies": {
"react": "^16.6.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/react-helmet-async/node_modules/react-fast-compare": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz",
"integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA=="
},
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -28417,45 +28379,12 @@
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
},
"react-ga": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz",
"integrity": "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==",
"react-intersection-observer": {
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.1.tgz",
"integrity": "sha512-IXpIsPe6BleFOEHKzKh5UjwRUaz/JYS0lT/HPsupWEQou2hDqjhLMStc5zyE3eQVT4Fk3FufM8Fw33qW1uyeiw==",
"requires": {}
},
"react-ga4": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/react-ga4/-/react-ga4-1.4.1.tgz",
"integrity": "sha512-ioBMEIxd4ePw4YtaloTUgqhQGqz5ebDdC4slEpLgy2sLx1LuZBC9iYCwDymTXzcntw6K1dHX183ulP32nNdG7w=="
},
"react-google-recaptcha": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-2.1.0.tgz",
"integrity": "sha512-K9jr7e0CWFigi8KxC3WPvNqZZ47df2RrMAta6KmRoE4RUi7Ys6NmNjytpXpg4HI/svmQJLKR+PncEPaNJ98DqQ==",
"requires": {
"prop-types": "^15.5.0",
"react-async-script": "^1.1.1"
}
},
"react-helmet-async": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz",
"integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==",
"requires": {
"@babel/runtime": "^7.12.5",
"invariant": "^2.2.4",
"prop-types": "^15.7.2",
"react-fast-compare": "^3.2.0",
"shallowequal": "^1.1.0"
},
"dependencies": {
"react-fast-compare": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz",
"integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA=="
}
}
},
"react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",

+ 1
- 0
frontend/package.json Ver arquivo

@@ -29,6 +29,7 @@
"react-ga4": "^1.4.1",
"react-google-recaptcha": "^2.1.0",
"react-helmet-async": "^1.3.0",
"react-intersection-observer": "^9.4.1",
"react-mailchimp-subscribe": "^2.1.3",
"react-markdown": "^8.0.0",
"react-router-dom": "^6.2.1",

+ 15
- 10
frontend/src/App.js Ver arquivo

@@ -14,6 +14,9 @@ const Home = lazy(() => import('./pages/Home'));
const Portfolio = lazy(() => import('./pages/Portfolio'));
const Services = lazy(() => import('./pages/Services'));
const Careers = lazy(() => import('./pages/Careers'));
const DiligentLife = lazy(() => import('./pages/DiligentLife'));
const DiligentMinds = lazy(() => import('./pages/DiligentMinds'));
const EventsTimeline = lazy(() => import('./pages/EventsTimeline'));
const About = lazy(() => import('./pages/About'));
const BlogPost = lazy(() => import('./components/BlogPost'));
const ProcessPage = lazy(() => import('./pages/ProcessPage'));
@@ -93,16 +96,18 @@ function App() {
<Route exact path="/workwithus" element={<WorkWithUs />} />
<Route exact path="/portfolio" element={<Portfolio />} />
<Route exact path="/process" element={<ProcessPage />} />
<Route exact path="/careers" element={<Careers />} />
<Route exact path="/about" element={<About />} />
<Route exact path="/contact" element={<ContactPage />} />
<Route exact path="/casestudybi" element={<CaseStudyBI />} />
<Route exact path="/casestudystrata" element={<CaseStudyStrata />} />
<Route exact path="/casestudyfinancial" element={<CaseStudyFinantial />} />
<Route exact path="/casestudycentralized" element={<CaseStudyCentralized />} />
<Route exact path="/casestudyresource" element={<CaseStudyResource />} />
<Route exact path="/casestudyticketing" element={<CaseStudyTicketing />} />
<Route exact path="/privacypolicy" element={<PrivacyPolicy />} />
<Route exact path="/diligentlife" element={<DiligentLife />}/>
<Route exact path="/diligentminds" element={<DiligentMinds />}/>
<Route exact path="/eventstimeline" element={<EventsTimeline />}/>
<Route exact path="/about" element={<About />}/>
<Route exact path="/contact" element={<ContactPage />}/>
<Route exact path="/casestudybi" element={<CaseStudyBI />}/>
<Route exact path="/casestudystrata" element={<CaseStudyStrata />}/>
<Route exact path="/casestudyfinancial" element={<CaseStudyFinantial />}/>
<Route exact path="/casestudycentralized" element={<CaseStudyCentralized />}/>
<Route exact path="/casestudyresource" element={<CaseStudyResource />}/>
<Route exact path="/casestudyticketing" element={<CaseStudyTicketing />}/>
<Route exact path="/privacypolicy" element={<PrivacyPolicy />}/>
</Routes>
</Suspense>


BIN
frontend/src/assets/images/Careers/events.png Ver arquivo


BIN
frontend/src/assets/images/Careers/img1.png Ver arquivo


BIN
frontend/src/assets/images/Careers/img2.png Ver arquivo


BIN
frontend/src/assets/images/Careers/img3.png Ver arquivo


BIN
frontend/src/assets/images/Careers/img4.png Ver arquivo


+ 1
- 1
frontend/src/components/CareerCardsTemplates/CardCareers2.jsx Ver arquivo

@@ -25,7 +25,7 @@ export default function CardCareers2({ cards }) {
{isComponentVisible ?
<ExpandedCard card={expandedCard} setExpanded={setIsComponentVisible} setExpandedCard={setExpandedCard}></ExpandedCard>
:
<div className='flex flex-col md:flex-row justify-center w-full gap-8'>
<div className='flex flex-col md:flex-row justify-center items-center w-full gap-8'>
{/* {
cards.map((item, index) => (
<CareerCard card={item} key={index} setExpanded={setIsComponentVisible} setExpandedCard={setExpandedCard} />

+ 5
- 0
frontend/src/index.css Ver arquivo

@@ -50,4 +50,9 @@ code {
monospace;
}

.no-scroll::-webkit-scrollbar {
width: 0;
background: transparent;
}

@import "./styles/import.styles.css";

+ 314
- 107
frontend/src/pages/Careers.jsx Ver arquivo

@@ -1,6 +1,20 @@
import { useState, useEffect } from 'react';
import { useState, useEffect, useRef } from 'react';
import axios from 'axios';

import ImgStep1 from '../assets/images/CaseStudy/CentralizedSmall.png';
import ImgStep2 from '../assets/images/Careers/events.png';
import ImgStep3 from '../assets/images/CaseStudy/CentralizedSmall.png';
import ImgStep4 from '../assets/images/Careers/events.png';
import ImgStep5 from '../assets/images/CaseStudy/CentralizedSmall.png';
import ImgEvents from '../assets/images/Careers/events.png';

import Care from './../assets/icons/values/care.svg';
import Doing from './../assets/icons/values/doing.svg';
import Culture from './../assets/icons/values/culture.svg';
import Ideas from './../assets/icons/values/ideas.svg';

import CardsGrid from '../components/CardsGrid';

import Animation_Diligent from '../assets/animation_diligent.webm';
import Wrapper from '../layout/Wrapper';
import PageTitle from '../components/shared/PageTitle';
@@ -12,7 +26,12 @@ import AboutUsSlider from '../components/shared/AboutUsSlider';
import CardCareers2 from '../components/CareerCardsTemplates/CardCareers2';
import OrbitOnScroll from '../components/shared/graphics/OrbitOnScroll';
import PageLayout from '../layout/PageLayout';
import useAnalytics from '../hooks/useAnalytics';
import TimelineCard from '../components/TimelineCard';

import { useNavigate } from 'react-router-dom';
import useAnalytics from './../hooks/useAnalytics';

const api_url = process.env.REACT_APP_API_URL;

// eslint-disable-next-line no-underscore-dangle
const _data = {
@@ -20,6 +39,33 @@ const _data = {
heading: 'Join Our Team of Diligent Minds',
subheading: 'Careers',
},
selectionProcess: {
stepOne: {
heading: 'Application',
paragraph:
'You consider Diligent to be the best fit for your professional growth? Send us your CV now! All open positions and information on how to apply are listed on our website. If you require additional details? For any questions, please contact us at hr@dilig.net.',
},
stepTwo: {
heading: 'Preselection',
paragraph:
'The HR team, as well as the team leader of the team for which you are applying, will check your CV. It is a top priority for the HR team! Following that, you will receive a phone call from us with the option to agree on the next stage of selection, which can be done online or in person at our office.',
},
stepThree: {
heading: 'HR interview',
paragraph:
'Let’s get to know each other! We will give you a brief introduction to our business, culture, and working environment during the interview with the recruiter. We will discuss your job history, interests, and ambitions for advancing your professional career together. We’ll also respond to any inquiries you might have for us.',
},
stepFour: {
heading: 'Technical interview',
paragraph:
'In order to better evaluate your level of technical expertise, you will discuss your project experiences with our experienced engineers, answer questions regarding the technology you worked on, and complete a task (depending on the role).',
},
stepFive: {
heading: 'Feedback',
paragraph:
'Feedback is the final step in our selection procedure. You will receive general feedback regarding your interview. If we are a match, we will send you an offer and specify the working conditions.',
},
},
job: {
NetDev: {
id: 1,
@@ -58,46 +104,46 @@ const _data = {
'Private health insurance',
],
},
},
// NetDevIntern: {
// id: 2,
// templateFlag: 2,
// role: '.Net Developer Internship',
// nugget: '.NetInernship',
// shortDetails:
// 'An idea solves a problem. We help you to create that idea, build a product and scale it to be successful in your business.',
// extended: {
// paragraph:
// 'Team Diligent is constantly growing! We are looking for a team player that will work with experienced engineers. If technology is your passion and you are ready to move the boundaries of your knowledge every day, then, Diligent is the right place for you. If you are not from Niš, we are offering a full remote position.',
// offer: [
// 'Paid internship',
// 'Full Remote position',
// 'A fast-growth company with stable projects and strong international clients',
// 'Experience of working in a team',
// 'Work on real project with real clients',
// 'Mentorship from industry leaders',
// 'Support in your personal and professional growth',
// 'Lots of team activities and perks',
// 'Modern working place with a positive and fun atmosphere',
// ],
// requirements: [
// 'Fundamentals of data structures ',
// 'Fundamentals and knowledge of .NET architecture concepts & patterns',
// 'Fundamentals of databases and database design',
// 'Team player and fast learner',
// 'Analytical and problem-solving skills',
// ],
// selectionProcess: [
// 'Application',
// 'CV Screening',
// 'HR Interview',
// 'Technical Interview',
// 'Internship - offer & contract',
// ],
// conslusionParagraph:
// 'At the end of the selection process, we will select interns able to join our team for a 3 months internship and arrange the beginning of the practice personally with you.',
// },
// },
},
NetDevIntern: {
id: 2,
templateFlag: 2,
role: '.Net Developer Internship',
nugget: '.NetInernship',
shortDetails:
'An idea solves a problem. We help you to create that idea, build a product and scale it to be successful in your business.',
extended: {
paragraph:
'Team Diligent is constantly growing! We are looking for a team player that will work with experienced engineers. If technology is your passion and you are ready to move the boundaries of your knowledge every day, then, Diligent is the right place for you. If you are not from Niš, we are offering a full remote position.',
offer: [
'Paid internship',
'Full Remote position',
'A fast-growth company with stable projects and strong international clients',
'Experience of working in a team',
'Work on real project with real clients',
'Mentorship from industry leaders',
'Support in your personal and professional growth',
'Lots of team activities and perks',
'Modern working place with a positive and fun atmosphere',
],
requirements: [
'Fundamentals of data structures ',
'Fundamentals and knowledge of .NET architecture concepts & patterns',
'Fundamentals of databases and database design',
'Team player and fast learner',
'Analytical and problem-solving skills',
],
selectionProcess: [
'Application',
'CV Screening',
'HR Interview',
'Technical Interview',
'Internship - offer & contract',
],
conslusionParagraph:
'At the end of the selection process, we will select interns able to join our team for a 3 months internship and arrange the beginning of the practice personally with you.',
},
},
},
life: {
heading: 'A Culture That’s Serious About Work and Fun',
@@ -135,6 +181,65 @@ const _data = {
},
],
},
values: {
heading: 'Benefits',
cards: [
{
id: 0,
iconUrl: Care,
title: 'Care',
paragraph:
'We believe that by working together and being kind to one another, we can make a difference. We care about work colleagues, ourselves, partnerships, but also the planet. We constantly strive to be helpful, kind, and inclusive in everything we do and looking for ways to be more sustainable. ',
},
{
id: 1,
iconUrl: Culture,
title: 'Culture',
paragraph:
'Our people love what they do. We provide a fun and supportive environment that empowers our staff to grow, learn, and thrive. We are consistent and transparent in our actions and committed to our clients and colleagues. We believe that together we can achieve more.',
},
{
id: 2,
iconUrl: Doing,
title: 'Learn by Doing',
paragraph:
'Our legacy is our impact on the people around us. By being kind and helping others, we can make a positive difference and leave a lasting impression. We grow as individuals, as well as we grow as a team.',
},
{
id: 3,
iconUrl: Ideas,
title: 'Ideas Over Hierarchy',
paragraph:
'We believe that the best ideas can come from anywhere, both inside and outside our company. Our job is to seek out those ideas, shape and improve them through candid debate, and take them from concept to action.',
},
],
},
cards: [
{
id: 0,
title: 'BI Healthcare Solution System',
imgUrl:
'https://lh6.googleusercontent.com/D7N87i3udAln4YBp5SbaSI-9r2pVnnT5K2VT6p0G3dQanVgTMC2tdgz71PWOYco-7yQ=w2400',
alt: 'BI Healthcare Solution System',
link: '/casestudybi',
},
{
id: 1,
title: 'Resource Planning System',
imgUrl:
'https://lh5.googleusercontent.com/HLOh5coHfcEgDuftj1pOA9f1865xiIom5vyxTWNMKqMiivxL8Lg4c9ACzbfYYUdeuqQ=w2400',
alt: 'Resource Planning System',
link: '/casestudyresource',
},
{
id: 2,
title: 'Ticketing System for Passengers',
imgUrl:
'https://lh5.googleusercontent.com/f_G0H0C_qLHhsU8PBj6uTkNigzKiXzd24B_pgJ6UqVmBKlU2Lyxv2r5lf6uvY9d_0PY=w2400',
alt: 'Ticketing System for Passengers',
link: '/casestudyticketing',
},
],
connect: {
heading: 'Connect and Grow With Us',
paragraph:
@@ -143,10 +248,9 @@ const _data = {
sliderImages: [],
},
ActionCard: {
heading: 'Contact Us and Step up Your Career!',
heading: 'Step up Your Career!',
paragraph:
'We are continuously on the lookout for talented people to grow our business.',
paragraph2: "Don't be shy - Apply!",
primaryBtn: 'Apply',
secondaryBtn: 'About Us',
},
@@ -157,7 +261,9 @@ export default function Careers({ forwardedRef }) {
const [cntCareers, setCntCareers] = useState('');
const [isLoaded, setIsLoaded] = useState('');

const api_url = process.env.REACT_APP_API_URL;
{/*const { ref: myRef, inView: elementIsVisible } = useInView();*/}



useEffect(() => {
document.title = 'Careers';
@@ -170,7 +276,7 @@ export default function Careers({ forwardedRef }) {
vid.playbackRate = 2;
axios
.get(
`${api_url}/api/careerspage?populate[0]=heading&populate[1]=info&populate[2]=job.icon`,
`${api_url}/api/n-careerspage?populate[0]=diligent_life&populate[1]=diligent_life.heading_section&populate[2]=diligent_life.CTO&populate[3]=diligent_life.media_text.media&populate[4]=selection_process.heading&populate[5]=selection_process.steps.media&populate[6]=positions_heading&populate[7]=positions_card.Image&populate[8]=benefits_heading&populate[9]=benefits_card.media`,
)
.then(res => {
//console.log(res.data.data.attributes);
@@ -183,6 +289,8 @@ export default function Careers({ forwardedRef }) {
});
}, []);

const link = useNavigate();

if (!isLoaded) {
return (
<div className="z-50 w-full h-screen bg-white dark:bg-dg-primary-1700 dark:text-white flex items-center justify-center text-3xl font-semibold">
@@ -196,45 +304,24 @@ export default function Careers({ forwardedRef }) {

return (
<PageLayout>
<div className="bg-white dark:bg-dg-primary-1700 w-full pt-90p overflow-hidden">
<div className="bg-white dark:bg-dg-primary-1700 w-full md:pt-90p overflow-hidden">
{/* Diligent Life */}
<Wrapper padding={' py-90p'}>
<h1 className="hidden">Careers - Join our Team</h1>
<PageTitle
heading={_data.heading.heading}
subheading={_data.heading.subheading}
left
color
/>
</Wrapper>
<Wrapper padding={' py-90p'}>
<div className="absolute hidden -ml-64 md:block">
<OrbitOnScroll />
</div>
<section
id="jobs"
className="flex items-center justify-center max-w-custom m-auto"
>
<div className="w-full">
<CardCareers2 cards={_data.job} />
</div>
</section>
</Wrapper>
<div className='mt-90p'>
<Wrapper bg padding={' py-90p'}>
<PageTitle
left
heading={_data.life.heading}
subheading={_data.life.subheading}
heading={cntCareers.diligent_life.heading_section.heading}
subheading={cntCareers.diligent_life.heading_section.subheading}
/>

<div className="my-90p">
<div className="my-90p">
<h3 className="title-italic">{_data.life.italic.heading}</h3>
<p className="paragraph">{_data.life.italic.paragraph}</p>
<div className="w-full py-90p">
<div className="mt-20p">
<div>
<p className="paragraph">
{cntCareers.diligent_life.heading_section.paragraph}
</p>
<div className="w-full py-48p lg:py-72p">
<iframe
className="m-auto w-[300px] h-[180px] md:w-[500px] md:h-[400px] lg:w-[800px] lg:h-[560px]"
src="https://www.youtube.com/embed/PFHIqqHRS4s?controls=0"
className="m-auto w-4/5 h-[250px] sm:w-[500px] sm:h-[350px] md:w-[600px] md:h-[450px] lg:w-[960px] lg:h-[540px]"
src={cntCareers.diligent_life.heading_section.link}
title="YouTube video player"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
@@ -242,43 +329,164 @@ export default function Careers({ forwardedRef }) {
></iframe>
</div>
</div>
<h3 className="title-italic">{_data.life.italic.heading2}</h3>
</div>

<div className="">
<section
id="life"
className="dark:bg-dg-primary-1700 flex flex-row items-center justify-center"
<div className="flex flex-col md:flex-row items-center justify-between lg:justify-center gap-8">
<p className="paragraph w-full lg:w-3/4">
{cntCareers.diligent_life.CTO.cto_paragraph}
</p>
<button
className="btn-secondary min-w-fit"
onClick={() => link('/diligentlife')}
>
<div className="flex flex-col justify-center items-start w-full max-w-custom m-auto px-8 xl:px-0">
<div className="grid grid-cols-1 md:grid-cols-2 gap-16 w-full">
{_data.life.cards.map((item, index) => (
<CardLife
key={index}
number={item.id}
heading={item.title}
paragraph={item.paragraph}
/>
))}
{cntCareers.diligent_life.CTO.cto_button}
</button>
</div>
</Wrapper>

{/* Selection Process */}
<Wrapper bg padding={' py-90p'}>
<PageTitle
left
heading={cntCareers.selection_process.heading.heading}
subheading={cntCareers.selection_process.heading.subheading}
/>
<div
id="steps-container"
className="no-scroll flex flex-col items-center justify-start overflow-auto h-[75vh] pt-72p pl-3"
>
{/* Dynamic Image */}
<img
id="steps-image"
src={ImgStep1}
alt="Image not found"
className="hidden sm:block absolute top-1/4 left-1/2 w-2/5 bg-fixed transition-all"
/>

{cntCareers.selection_process.steps.map((item, index) => (
<>
{/* Section */}
<div
id={item.id}
className="relative flex flex-col sm:flex-row items-start justify-center sm:gap-16 min-h-fit max-h[100vh] mb-28 md:mb-56"
>
{/* Line */}
<hr className="bg-gray-400 w-full absolute -left-1/2 rotate-90" />

{/* Dot */}
<div className="z-10 p-[0.36rem] rounded-full bg-white border-solid border border-dg-primary-900 absolute -left-[0.63%] top-[1%]"></div>

<div className="sm:w-1/2 ml-8">
<h3 className="h3-heading">{item.heading}</h3>
<p
className="text-sm text-dark-gray dark:text-white mt-4"
>
{item.paragraph}
</p>
{item.cto != null && (
<button className="btn-secondary mt-6 min-w-fit">{item.cto}</button>
)}
</div>
<div className="w-1/2"></div>
</div>
</div>
</section>
</>
))}
</div>
</Wrapper>
</div>
{/* Open Positions */}
<Wrapper padding={' py-90p'}>
<PageTitle heading={_data.connect.heading} color />
<p className="paragraph my-32p">{_data.connect.paragraph}</p>
<PageTitle
heading={cntCareers.positions_heading.heading}
subheading={cntCareers.positions_heading.subheading}
left
color
/>
<div className="pt-72p">
<div className="absolute hidden -ml-64 md:block">
<OrbitOnScroll />
</div>
<section
id="jobs"
className="flex items-center justify-center max-w-custom m-auto"
>
<div className="w-full">
<CardCareers2 cards={_data.job} />
</div>
</section>
</div>
</Wrapper>
<Wrapper>
<section id="highlight" className="flex flex-col items-center justify-center">
<HighlighedText text={_data.connect.subtitle} />

{/* Benefits Section */}
<Wrapper bg padding={' py-90p'}>
<section id="values" className="flex flex-row items-center justify-center">
<div className="my-8 flex flex-col justify-center items-start w-full max-w-custom m-auto">
<h2 className="heading text-dg-secondary">
{cntCareers.benefits_heading.heading}
</h2>
<div className="grid grid-cols-1 gap-16 w-full mt-8">
{cntCareers.benefits_card.map((item, index) => (
<CardValues
key={index}
image={api_url + item.media.data.attributes.url}
heading={item.heading}
paragraph={item.paragraph}
/>
))}
</div>
</div>
</section>
</Wrapper>
<Wrapper>
<AboutUsSlider />
</Wrapper>

{/* Diligent Minds */}
<div className="hidden">
<Wrapper padding={' py-90p'}>
<PageTitle
left
heading="Personal Development & Success Stories"
subheading="Diligent Minds"
/>
<Wrapper padding={' py-72p'}>
<CardsGrid data={_data.cards} />
</Wrapper>
<div className="flex flex-col md:flex-row items-center justify-center gap-8">
<p className="paragraph w-full md:w-1/2 lg:w-3/4">
If you have a mindset that is continuously focused on pushing through and
beyond your boundaries, conquering a whole new challenge every day in an
atmosphere where you constantly learn and improve, this is the place for
you. We'd love to learn more about you.
</p>
<button className="btn-secondary" onClick={() => link('/diligentminds')}>
Read More
</button>
</div>
</Wrapper>
</div>

{/* Event's Timeline */}
<div className="hidden">
<Wrapper padding={' py-90p'}>
<PageTitle left heading="Event's Timeline" subheading="Events" />
<div className="mt-20p flex flex-col gap-8 items-center justify-center">
<p className="paragraph">
The main objective is to create a solution that meets the requirements of
stakeholders while integrating with existing IT systems to get data
without impacting the system. The solution should use only an MS stack of
technologies while taking care of sensitive data, and maintaining and
providing up-to-date data. The solution should also be a comfortable and
reliable, user-friendly solution for everyday work.
</p>
<div className="w-screen">
<AboutUsSlider />
</div>
<button className="btn-secondary" onClick={() => link('/eventstimeline')}>
Find Out More
</button>
</div>
</Wrapper>
</div>

{/* Action Card */}
<Wrapper>
<div className="my-90p">
<ActionCard
@@ -288,7 +496,6 @@ export default function Careers({ forwardedRef }) {
btn2={_data.ActionCard.secondaryBtn}
link1={'/contact'}
link2={'/about'}
text2={_data.ActionCard.paragraph2}
/>
</div>
</Wrapper>

+ 253
- 0
frontend/src/pages/DiligentLife.jsx Ver arquivo

@@ -0,0 +1,253 @@
import { useState, useEffect } from 'react';
import axios from 'axios';

import Img1 from '../assets/images/Careers/img1.png';
import Img2 from '../assets/images/Careers/img2.png';
import Img3 from '../assets/images/Careers/img3.png';
import Img4 from '../assets/images/Careers/img4.png';

import CardsGrid from '../components/CardsGrid';

import Animation_Diligent from '../assets/animation_diligent.webm';
import Wrapper from '../layout/Wrapper';
import PageTitle from '../components/shared/PageTitle';
import HighlighedText from '../components/shared/HighlighedText';
import CardValues from '../components/shared/CardValues';
import CardLife from '../components/shared/CardLife';
import ActionCard from '../components/shared/ActionCard';
import AboutUsSlider from '../components/shared/AboutUsSlider';
import CardCareers2 from '../components/CareerCardsTemplates/CardCareers2';
import OrbitOnScroll from '../components/shared/graphics/OrbitOnScroll';
import PageLayout from '../layout/PageLayout';
import TimelineCard from '../components/TimelineCard';
//import useAnalytics from '../hooks/useAnalytics';

// eslint-disable-next-line no-underscore-dangle
const _data = {
heading: {
heading: 'Join Our Team of Diligent Minds',
subheading: 'Careers',
},
life: {
heading: 'A Culture That’s Serious About Work and Fun',
subheading: 'Diligent life',
italic: {
heading: 'Life At diligent',
paragraph:
'From the start, you can expect to be challenged and supported. We provide a encouraged atmosphere with knowledgeable mentors to help you advance in your career. To create an inspiring work life, we collaborate as a team both inside and outside of the office.',
heading2: 'What It Means to Work With Us',
},
cards: [
{
id: 1,
title: 'Shape the Future',
paragraph:
'We collaborate with business leaders and entrepreneurs to disrupt and push their industries forward. From startup ideas to enterprise-level product & software development, we work together as a team to transform our clients’ ideas into reality.',
},
{
id: 2,
title: 'Life-Long Learning',
paragraph:
'We believe that learning is a journey that never ends. With us, you will have the opportunity to continuously learn in an environment surrounded by other highly skilled professionals with decades of experience. Also, there are several chances for you to develop through the use of various technologies, involvement in the product definition process, conference attendance, and more.',
},
{
id: 3,
title: 'A Unique Culture',
paragraph:
'Everyone talks about a work-life balance, we do it - for two reasons. Firstly, we believe in an environment of happy people. Secondly, even if you’re highly productive, the only way to maintain productivity long-term is by taking time for the things that make you happy.',
},
{
id: 4,
title: 'Make the Impossible Better',
paragraph:
"If you have a mindset that is continuously focused on pushing through and beyond your boundaries, conquering a whole new challenge every day in an atmosphere where you constantly learn and improve, this is the place for you. We'd love to learn more about you.",
},
],
},
ActionCard: {
heading: 'Step up Your Career!',
paragraph:
'We are continuously on the lookout for talented people to grow our business.',
primaryBtn: 'Apply',
secondaryBtn: 'About Us',
},
};

export default function Careers({ forwardedRef }) {
const [clickedPosition, setClickedPosition] = useState('');
const [cntCareers, setCntCareers] = useState('');
const [isLoaded, setIsLoaded] = useState('');

const api_url = process.env.REACT_APP_API_URL;

useEffect(() => {
document.title = 'Careers';
}, []);

//useAnalytics();

useEffect(async () => {
var vid = document.getElementById('animation');
vid.playbackRate = 2;
axios
.get(
`${api_url}/api/careerspage?populate[0]=heading&populate[1]=info&populate[2]=job.icon`,
)
.then(res => {
//console.log(res.data.data.attributes);
setCntCareers(res.data.data.attributes);
setIsLoaded(true);
})
.catch(err => {
console.log(err);
setIsLoaded(false);
});
}, []);

if (!isLoaded) {
return (
<div className="z-50 w-full h-screen bg-white dark:bg-dg-primary-1700 dark:text-white flex items-center justify-center text-3xl font-semibold">
<video id="animation" width="540" height="540" autoPlay muted loop>
<source src={Animation_Diligent} type="video/webm" />
Loading...
</video>
</div>
);
}

return (
<PageLayout>
<div className="bg-white dark:bg-dg-primary-1700 w-full pt-90p overflow-hidden">
{/* Diligent Life */}
<Wrapper padding={' py-90p'}>
<PageTitle
left
heading={_data.life.heading}
subheading={_data.life.subheading}
/>

<div className="my-20p">
<div>
<p className="paragraph">{_data.life.italic.paragraph}</p>
<div className="w-full pt-72p">
<iframe
className="m-auto w-[300px] h-[180px] md:w-[500px] md:h-[400px] lg:w-[960px] lg:h-[540px]"
src="https://www.youtube.com/embed/PFHIqqHRS4s?controls=0&autoplay=0&mute=1"
title="YouTube video player"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
></iframe>
</div>
</div>
</div>
</Wrapper>

{/* Left-Right Content */}
<Wrapper bg padding={' py-90p'}>
{/* Shape The Future */}
<section
id="challanges_solution"
className="flex flex-col items-center justify-center mt-16"
>
<div className="my-8 flex flex-col md:flex-row justify-center items-center w-full max-w-custom m-auto px-8 xl:px-0">
<div className="w-full md:w-1/2 md:pr-16">
<div>
<h3 className="h3-heading">{_data.life.cards[0].title}</h3>
<p className="text-sm text-dark-gray dark:text-white mt-4">
{_data.life.cards[0].paragraph}
</p>
</div>
</div>
<img
src={Img1}
alt="Case Study main image"
className="text-center w-full md:w-1/2"
/>
</div>
</section>

{/* Shape The Future */}
<section
id="challanges_solution"
className="flex flex-col items-center justify-center mt-16"
>
<div className="my-8 flex flex-col md:flex-row justify-center items-center w-full max-w-custom m-auto px-8 xl:px-0">
<img
src={Img2}
alt="Case Study main image"
className="text-center w-full md:w-1/2"
/>
<div className="w-full md:w-1/2 md:pl-16">
<div>
<h3 className="h3-heading">{_data.life.cards[1].title}</h3>
<p className="text-sm text-dark-gray dark:text-white mt-4">
{_data.life.cards[1].paragraph}
</p>
</div>
</div>
</div>
</section>

{/* Shape The Future */}
<section
id="challanges_solution"
className="flex flex-col items-center justify-center mt-16"
>
<div className="my-8 flex flex-col md:flex-row justify-center items-center w-full max-w-custom m-auto px-8 xl:px-0">
<div className="w-full md:w-1/2 md:pr-16">
<div>
<h3 className="h3-heading">{_data.life.cards[2].title}</h3>
<p className="text-sm text-dark-gray dark:text-white mt-4">
{_data.life.cards[2].paragraph}
</p>
</div>
</div>
<img
src={Img3}
alt="Case Study main image"
className="text-center w-full md:w-1/2"
/>
</div>
</section>

{/* Shape The Future */}
<section
id="challanges_solution"
className="flex flex-col items-center justify-center mt-16"
>
<div className="my-8 flex flex-col md:flex-row justify-center items-center w-full max-w-custom m-auto px-8 xl:px-0">
<img
src={Img4}
alt="Case Study main image"
className="text-center w-full md:w-1/2"
/>
<div className="w-full md:w-1/2 md:pl-16">
<div>
<h3 className="h3-heading">{_data.life.cards[3].title}</h3>
<p className="text-sm text-dark-gray dark:text-white mt-4">
{_data.life.cards[3].paragraph}
</p>
</div>
</div>
</div>
</section>
</Wrapper>

{/* Action Card */}
<Wrapper>
<div className="my-90p">
<ActionCard
title={_data.ActionCard.heading}
text={_data.ActionCard.paragraph}
btn1={_data.ActionCard.primaryBtn}
btn2={_data.ActionCard.secondaryBtn}
link1={'/contact'}
link2={'/about'}
/>
</div>
</Wrapper>
</div>
</PageLayout>
);
}

+ 307
- 0
frontend/src/pages/DiligentMinds.jsx Ver arquivo

@@ -0,0 +1,307 @@
import { useState, useEffect } from 'react';
import axios from 'axios';

import ImgStep1 from '../assets/images/CaseStudy/CentralizedSmall.png';

import Care from './../assets/icons/values/care.svg';
import Doing from './../assets/icons/values/doing.svg';
import Culture from './../assets/icons/values/culture.svg';
import Ideas from './../assets/icons/values/ideas.svg';

import CardsGrid from '../components/CardsGrid';

import Animation_Diligent from '../assets/animation_diligent.webm';
import Wrapper from '../layout/Wrapper';
import PageTitle from '../components/shared/PageTitle';
import HighlighedText from '../components/shared/HighlighedText';
import CardValues from '../components/shared/CardValues';
import CardLife from '../components/shared/CardLife';
import ActionCard from '../components/shared/ActionCard';
import AboutUsSlider from '../components/shared/AboutUsSlider';
import CardCareers2 from '../components/CareerCardsTemplates/CardCareers2';
import OrbitOnScroll from '../components/shared/graphics/OrbitOnScroll';
import PageLayout from '../layout/PageLayout';
import TimelineCard from '../components/TimelineCard';
//import useAnalytics from '../hooks/useAnalytics';

// eslint-disable-next-line no-underscore-dangle
const _data = {
heading: {
heading: 'Join Our Team of Diligent Minds',
subheading: 'Careers',
},
job: {
NetDev: {
id: 1,
templateFlag: 1,
role: '.Net Developer',
nugget: '.Net',
shortDetails:
'An idea solves a problem. We help you to create that idea, build a product and scale it to be successful in your business.',
extended: {
paragraph:
'Team Diligent is constantly growing! We are looking for a team player that will work with experienced engineers. If technology is your passion and you are ready to move the boundaries of your knowledge every day, then, Diligent is the right place for you. If you are not from Niš, we are offering a full remote position.',
requirements: [
'Good software development fundamentals and knowledge of .NET architecture concepts & patterns',
'Good knowledge of software design patterns',
'Good knowledge of databases and database design',
'Experience in working with microservices is a big plus',
'The ability to work in a big team but also to work independently',
'Excellent communication skills',
],
key: [
'Working as a full-stack developer on various project and products',
'Working with 3rd-party APIs',
'Working on different integration scenarios',
'Setting up project structure and architecture',
'Being involved in full project development, from writing a specification to deploying a finished product',
],
offer: [
'Full Remote position',
'A fast-growth company with stable projects and strong international clients',
'Opportunity to work in teams with experienced engineers',
'Competitive employment conditions',
'An environment that will make you feel good about your job',
'Challenging and diverse projects',
'Support in your personal and professional growth',
'Flexible working hours',
'Private health insurance',
],
},
},
NetDevIntern: {
id: 2,
templateFlag: 2,
role: '.Net Developer Internship',
nugget: '.NetInernship',
shortDetails:
'An idea solves a problem. We help you to create that idea, build a product and scale it to be successful in your business.',
extended: {
paragraph:
'Team Diligent is constantly growing! We are looking for a team player that will work with experienced engineers. If technology is your passion and you are ready to move the boundaries of your knowledge every day, then, Diligent is the right place for you. If you are not from Niš, we are offering a full remote position.',
offer: [
'Paid internship',
'Full Remote position',
'A fast-growth company with stable projects and strong international clients',
'Experience of working in a team',
'Work on real project with real clients',
'Mentorship from industry leaders',
'Support in your personal and professional growth',
'Lots of team activities and perks',
'Modern working place with a positive and fun atmosphere',
],
requirements: [
'Fundamentals of data structures ',
'Fundamentals and knowledge of .NET architecture concepts & patterns',
'Fundamentals of databases and database design',
'Team player and fast learner',
'Analytical and problem-solving skills',
],
selectionProcess: [
'Application',
'CV Screening',
'HR Interview',
'Technical Interview',
'Internship - offer & contract',
],
conslusionParagraph:
'At the end of the selection process, we will select interns able to join our team for a 3 months internship and arrange the beginning of the practice personally with you.',
},
},
},
life: {
heading: 'A Culture That’s Serious About Work and Fun',
subheading: 'Diligent life',
italic: {
heading: 'Life At diligent',
paragraph:
'From the start, you can expect to be challenged and supported. We provide a encouraged atmosphere with knowledgeable mentors to help you advance in your career. To create an inspiring work life, we collaborate as a team both inside and outside of the office.',
heading2: 'What It Means to Work With Us',
},
cards: [
{
id: 1,
title: 'Shape the Future',
paragraph:
'We collaborate with business leaders and entrepreneurs to disrupt and push their industries forward. From startup ideas to enterprise-level product & software development, we work together as a team to transform our clients’ ideas into reality.',
},
{
id: 2,
title: 'Life-Long Learning',
paragraph:
'We believe that learning is a journey that never ends. With us, you will have the opportunity to continuously learn in an environment surrounded by other highly skilled professionals with decades of experience. Also, there are several chances for you to develop through the use of various technologies, involvement in the product definition process, conference attendance, and more.',
},
{
id: 3,
title: 'A Unique Culture',
paragraph:
'Everyone talks about a work-life balance, we do it - for two reasons. Firstly, we believe in an environment of happy people. Secondly, even if you’re highly productive, the only way to maintain productivity long-term is by taking time for the things that make you happy.',
},
{
id: 4,
title: 'Make the Impossible Better',
paragraph:
"If you have a mindset that is continuously focused on pushing through and beyond your boundaries, conquering a whole new challenge every day in an atmosphere where you constantly learn and improve, this is the place for you. We'd love to learn more about you.",
},
],
},
values: {
heading: 'Values',
cards: [
{
id: 0,
iconUrl: Care,
title: 'Care',
paragraph:
'We believe that by working together and being kind to one another, we can make a difference. We care about work colleagues, ourselves, partnerships, but also the planet. We constantly strive to be helpful, kind, and inclusive in everything we do and looking for ways to be more sustainable. ',
},
{
id: 1,
iconUrl: Culture,
title: 'Culture',
paragraph:
'Our people love what they do. We provide a fun and supportive environment that empowers our staff to grow, learn, and thrive. We are consistent and transparent in our actions and committed to our clients and colleagues. We believe that together we can achieve more.',
},
{
id: 2,
iconUrl: Doing,
title: 'Learn by Doing',
paragraph:
'Our legacy is our impact on the people around us. By being kind and helping others, we can make a positive difference and leave a lasting impression. We grow as individuals, as well as we grow as a team.',
},
{
id: 3,
iconUrl: Ideas,
title: 'Ideas Over Hierarchy',
paragraph:
'We believe that the best ideas can come from anywhere, both inside and outside our company. Our job is to seek out those ideas, shape and improve them through candid debate, and take them from concept to action.',
},
],
},
cards: [
{
id: 0,
title: 'BI Healthcare Solution System',
imgUrl:
'https://lh6.googleusercontent.com/D7N87i3udAln4YBp5SbaSI-9r2pVnnT5K2VT6p0G3dQanVgTMC2tdgz71PWOYco-7yQ=w2400',
alt: 'BI Healthcare Solution System',
link: '/casestudybi',
},
{
id: 1,
title: 'Resource Planning System',
imgUrl:
'https://lh5.googleusercontent.com/HLOh5coHfcEgDuftj1pOA9f1865xiIom5vyxTWNMKqMiivxL8Lg4c9ACzbfYYUdeuqQ=w2400',
alt: 'Resource Planning System',
link: '/casestudyresource',
},
{
id: 2,
title: 'Ticketing System for Passengers',
imgUrl:
'https://lh5.googleusercontent.com/f_G0H0C_qLHhsU8PBj6uTkNigzKiXzd24B_pgJ6UqVmBKlU2Lyxv2r5lf6uvY9d_0PY=w2400',
alt: 'Ticketing System for Passengers',
link: '/casestudyticketing',
},
],
connect: {
heading: 'Connect and Grow With Us',
paragraph:
'At Diligent, we are passionately proud of our culture and feel that everyone, including those who are not yet on the team, should have the opportunity to experience it. Because of this, we participate in Open Doors. Our coworkers are actively involved in the local tech communities. We take satisfaction in giving back as well, assisting college students or seasoned professionals who want to start a career in IT.',
subtitle: 'Check out how we have fun together!',
sliderImages: [],
},
ActionCard: {
heading: 'Step up Your Career!',
paragraph:
'We are continuously on the lookout for talented people to grow our business.',
primaryBtn: 'Apply',
secondaryBtn: 'About Us',
},
};

export default function Careers({ forwardedRef }) {
const [clickedPosition, setClickedPosition] = useState('');
const [cntCareers, setCntCareers] = useState('');
const [isLoaded, setIsLoaded] = useState('');

const api_url = process.env.REACT_APP_API_URL;

useEffect(() => {
document.title = 'Careers';
}, []);

//useAnalytics();

useEffect(async () => {
var vid = document.getElementById('animation');
vid.playbackRate = 2;
axios
.get(
`${api_url}/api/careerspage?populate[0]=heading&populate[1]=info&populate[2]=job.icon`,
)
.then(res => {
//console.log(res.data.data.attributes);
setCntCareers(res.data.data.attributes);
setIsLoaded(true);
})
.catch(err => {
console.log(err);
setIsLoaded(false);
});
}, []);

if (!isLoaded) {
return (
<div className="z-50 w-full h-screen bg-white dark:bg-dg-primary-1700 dark:text-white flex items-center justify-center text-3xl font-semibold">
<video id="animation" width="540" height="540" autoPlay muted loop>
<source src={Animation_Diligent} type="video/webm" />
Loading...
</video>
</div>
);
}

return (
<PageLayout>
<div className="bg-white dark:bg-dg-primary-1700 w-full pt-90p overflow-hidden">
{/* Diligent Minds */}
<Wrapper padding={' py-90p'}>
<PageTitle
left
heading="Personal Development & Success Stories"
subheading="Diligent Minds"
/>
<Wrapper padding={' py-72p'}>
<CardsGrid data={_data.cards} />
</Wrapper>
<div className="flex flex-col md:flex-row items-center justify-center gap-8">
<p className="paragraph w-full md:w-1/2 lg:w-3/4">
If you have a mindset that is continuously focused on pushing through and
beyond your boundaries, conquering a whole new challenge every day in an
atmosphere where you constantly learn and improve, this is the place for
you. We'd love to learn more about you.
</p>
<button className="btn-secondary">
Read More
</button>
</div>
</Wrapper>

{/* Action Card */}
<Wrapper>
<div className="my-90p">
<ActionCard
title={_data.ActionCard.heading}
text={_data.ActionCard.paragraph}
btn1={_data.ActionCard.primaryBtn}
btn2={_data.ActionCard.secondaryBtn}
link1={'/contact'}
link2={'/about'}
/>
</div>
</Wrapper>
</div>
</PageLayout>
);
}

+ 384
- 0
frontend/src/pages/EventsTimeline.jsx Ver arquivo

@@ -0,0 +1,384 @@
import { useState, useEffect } from 'react';
import axios from 'axios';

import ImgStep1 from '../assets/images/CaseStudy/CentralizedSmall.png';
import ImgEvents from '../assets/images/Careers/events.png';

import Care from './../assets/icons/values/care.svg';
import Doing from './../assets/icons/values/doing.svg';
import Culture from './../assets/icons/values/culture.svg';
import Ideas from './../assets/icons/values/ideas.svg';

import CardsGrid from '../components/CardsGrid';

import Animation_Diligent from '../assets/animation_diligent.webm';
import Wrapper from '../layout/Wrapper';
import PageTitle from '../components/shared/PageTitle';
import HighlighedText from '../components/shared/HighlighedText';
import CardValues from '../components/shared/CardValues';
import CardLife from '../components/shared/CardLife';
import ActionCard from '../components/shared/ActionCard';
import AboutUsSlider from '../components/shared/AboutUsSlider';
import CardCareers2 from '../components/CareerCardsTemplates/CardCareers2';
import OrbitOnScroll from '../components/shared/graphics/OrbitOnScroll';
import PageLayout from '../layout/PageLayout';
import TimelineCard from '../components/TimelineCard';
//import useAnalytics from '../hooks/useAnalytics';

// eslint-disable-next-line no-underscore-dangle
const _data = {
heading: {
heading: 'Join Our Team of Diligent Minds',
subheading: 'Careers',
},
job: {
NetDev: {
id: 1,
templateFlag: 1,
role: '.Net Developer',
nugget: '.Net',
shortDetails:
'An idea solves a problem. We help you to create that idea, build a product and scale it to be successful in your business.',
extended: {
paragraph:
'Team Diligent is constantly growing! We are looking for a team player that will work with experienced engineers. If technology is your passion and you are ready to move the boundaries of your knowledge every day, then, Diligent is the right place for you. If you are not from Niš, we are offering a full remote position.',
requirements: [
'Good software development fundamentals and knowledge of .NET architecture concepts & patterns',
'Good knowledge of software design patterns',
'Good knowledge of databases and database design',
'Experience in working with microservices is a big plus',
'The ability to work in a big team but also to work independently',
'Excellent communication skills',
],
key: [
'Working as a full-stack developer on various project and products',
'Working with 3rd-party APIs',
'Working on different integration scenarios',
'Setting up project structure and architecture',
'Being involved in full project development, from writing a specification to deploying a finished product',
],
offer: [
'Full Remote position',
'A fast-growth company with stable projects and strong international clients',
'Opportunity to work in teams with experienced engineers',
'Competitive employment conditions',
'An environment that will make you feel good about your job',
'Challenging and diverse projects',
'Support in your personal and professional growth',
'Flexible working hours',
'Private health insurance',
],
},
},
NetDevIntern: {
id: 2,
templateFlag: 2,
role: '.Net Developer Internship',
nugget: '.NetInernship',
shortDetails:
'An idea solves a problem. We help you to create that idea, build a product and scale it to be successful in your business.',
extended: {
paragraph:
'Team Diligent is constantly growing! We are looking for a team player that will work with experienced engineers. If technology is your passion and you are ready to move the boundaries of your knowledge every day, then, Diligent is the right place for you. If you are not from Niš, we are offering a full remote position.',
offer: [
'Paid internship',
'Full Remote position',
'A fast-growth company with stable projects and strong international clients',
'Experience of working in a team',
'Work on real project with real clients',
'Mentorship from industry leaders',
'Support in your personal and professional growth',
'Lots of team activities and perks',
'Modern working place with a positive and fun atmosphere',
],
requirements: [
'Fundamentals of data structures ',
'Fundamentals and knowledge of .NET architecture concepts & patterns',
'Fundamentals of databases and database design',
'Team player and fast learner',
'Analytical and problem-solving skills',
],
selectionProcess: [
'Application',
'CV Screening',
'HR Interview',
'Technical Interview',
'Internship - offer & contract',
],
conslusionParagraph:
'At the end of the selection process, we will select interns able to join our team for a 3 months internship and arrange the beginning of the practice personally with you.',
},
},
},
life: {
heading: 'A Culture That’s Serious About Work and Fun',
subheading: 'Diligent life',
italic: {
heading: 'Life At diligent',
paragraph:
'From the start, you can expect to be challenged and supported. We provide a encouraged atmosphere with knowledgeable mentors to help you advance in your career. To create an inspiring work life, we collaborate as a team both inside and outside of the office.',
heading2: 'What It Means to Work With Us',
},
cards: [
{
id: 1,
title: 'Shape the Future',
paragraph:
'We collaborate with business leaders and entrepreneurs to disrupt and push their industries forward. From startup ideas to enterprise-level product & software development, we work together as a team to transform our clients’ ideas into reality.',
},
{
id: 2,
title: 'Life-Long Learning',
paragraph:
'We believe that learning is a journey that never ends. With us, you will have the opportunity to continuously learn in an environment surrounded by other highly skilled professionals with decades of experience. Also, there are several chances for you to develop through the use of various technologies, involvement in the product definition process, conference attendance, and more.',
},
{
id: 3,
title: 'A Unique Culture',
paragraph:
'Everyone talks about a work-life balance, we do it - for two reasons. Firstly, we believe in an environment of happy people. Secondly, even if you’re highly productive, the only way to maintain productivity long-term is by taking time for the things that make you happy.',
},
{
id: 4,
title: 'Make the Impossible Better',
paragraph:
"If you have a mindset that is continuously focused on pushing through and beyond your boundaries, conquering a whole new challenge every day in an atmosphere where you constantly learn and improve, this is the place for you. We'd love to learn more about you.",
},
],
},
values: {
heading: 'Values',
cards: [
{
id: 0,
iconUrl: Care,
title: 'Care',
paragraph:
'We believe that by working together and being kind to one another, we can make a difference. We care about work colleagues, ourselves, partnerships, but also the planet. We constantly strive to be helpful, kind, and inclusive in everything we do and looking for ways to be more sustainable. ',
},
{
id: 1,
iconUrl: Culture,
title: 'Culture',
paragraph:
'Our people love what they do. We provide a fun and supportive environment that empowers our staff to grow, learn, and thrive. We are consistent and transparent in our actions and committed to our clients and colleagues. We believe that together we can achieve more.',
},
{
id: 2,
iconUrl: Doing,
title: 'Learn by Doing',
paragraph:
'Our legacy is our impact on the people around us. By being kind and helping others, we can make a positive difference and leave a lasting impression. We grow as individuals, as well as we grow as a team.',
},
{
id: 3,
iconUrl: Ideas,
title: 'Ideas Over Hierarchy',
paragraph:
'We believe that the best ideas can come from anywhere, both inside and outside our company. Our job is to seek out those ideas, shape and improve them through candid debate, and take them from concept to action.',
},
],
},
cards: [
{
id: 0,
title: 'BI Healthcare Solution System',
imgUrl:
'https://lh6.googleusercontent.com/D7N87i3udAln4YBp5SbaSI-9r2pVnnT5K2VT6p0G3dQanVgTMC2tdgz71PWOYco-7yQ=w2400',
alt: 'BI Healthcare Solution System',
link: '/casestudybi',
},
{
id: 1,
title: 'Resource Planning System',
imgUrl:
'https://lh5.googleusercontent.com/HLOh5coHfcEgDuftj1pOA9f1865xiIom5vyxTWNMKqMiivxL8Lg4c9ACzbfYYUdeuqQ=w2400',
alt: 'Resource Planning System',
link: '/casestudyresource',
},
{
id: 2,
title: 'Ticketing System for Passengers',
imgUrl:
'https://lh5.googleusercontent.com/f_G0H0C_qLHhsU8PBj6uTkNigzKiXzd24B_pgJ6UqVmBKlU2Lyxv2r5lf6uvY9d_0PY=w2400',
alt: 'Ticketing System for Passengers',
link: '/casestudyticketing',
},
],
connect: {
heading: 'Connect and Grow With Us',
paragraph:
'At Diligent, we are passionately proud of our culture and feel that everyone, including those who are not yet on the team, should have the opportunity to experience it. Because of this, we participate in Open Doors. Our coworkers are actively involved in the local tech communities. We take satisfaction in giving back as well, assisting college students or seasoned professionals who want to start a career in IT.',
subtitle: 'Check out how we have fun together!',
sliderImages: [],
},
ActionCard: {
heading: 'Step up Your Career!',
paragraph:
'We are continuously on the lookout for talented people to grow our business.',
primaryBtn: 'Apply',
secondaryBtn: 'About Us',
},
};

export default function Careers({ forwardedRef }) {
const [clickedPosition, setClickedPosition] = useState('');
const [cntCareers, setCntCareers] = useState('');
const [isLoaded, setIsLoaded] = useState('');

const api_url = process.env.REACT_APP_API_URL;

useEffect(() => {
document.title = 'Careers';
}, []);

//useAnalytics();

useEffect(async () => {
var vid = document.getElementById('animation');
vid.playbackRate = 2;
axios
.get(
`${api_url}/api/careerspage?populate[0]=heading&populate[1]=info&populate[2]=job.icon`,
)
.then(res => {
//console.log(res.data.data.attributes);
setCntCareers(res.data.data.attributes);
setIsLoaded(true);
})
.catch(err => {
console.log(err);
setIsLoaded(false);
});
}, []);

if (!isLoaded) {
return (
<div className="z-50 w-full h-screen bg-white dark:bg-dg-primary-1700 dark:text-white flex items-center justify-center text-3xl font-semibold">
<video id="animation" width="540" height="540" autoPlay muted loop>
<source src={Animation_Diligent} type="video/webm" />
Loading...
</video>
</div>
);
}

return (
<PageLayout>
<div className="bg-white dark:bg-dg-primary-1700 w-full pt-90p overflow-hidden">
{/* Selection Process */}
<Wrapper bg padding={' py-90p'}>
<PageTitle
left
heading="Becoming a Part of Our Team"
subheading="Selection Process"
/>
<div className="no-scroll flex flex-col items-center justify-start overflow-auto h-[75vh] pt-72p pl-3">
{/* Dynamic Image */}
<img
id="steps-image"
src={ImgStep1}
alt="Image not found"
className="absolute top-1/4 left-1/2 w-2/5 bg-fixed"
/>

{/* Section 1 */}
<div
id="steps-container"
className="relative flex flex-row items-start justify-center gap-16 min-h-[54vh] max-h[100vh]"
>
{/* Line */}
<hr className="bg-gray-400 w-full absolute -left-1/2 rotate-90" />
{/* Dot */}
<div className="z-10 p-[0.36rem] rounded-full bg-white border-solid border border-dg-primary-900 absolute -left-[0.63%] top-[1%]"></div>
<div className="w-1/2 min-w-fit ml-8">
<TimelineCard
key="1"
id="1"
title="Heading"
subtitle="Subheading"
paragraph="Paragraph over here. Lorem ipsum. Paragraph over here. Lorem ipsum."
/>
</div>
<div className="w-1/2"></div>
</div>

{/* Section 2 */}
<div className="relative flex flex-row items-start justify-center gap-16 min-h-[54vh] max-h[100vh]">
{/* Line */}
<hr className="bg-gray-400 w-full absolute -left-1/2 rotate-90" />
{/* Dot */}
<div className="z-10 p-[0.36rem] rounded-full bg-white border-solid border border-dg-primary-900 absolute -left-[0.63%] top-[1%]"></div>
<div className="w-1/2 ml-8">
<h3 className="h3-heading">{_data.selectionProcess.stepTwo.heading}</h3>
<p className="text-sm text-dark-gray dark:text-white mt-4">
{_data.selectionProcess.stepTwo.paragraph}
</p>
</div>
<div className="w-1/2"></div>
</div>

{/* Section 3 */}
<div className="relative flex flex-row items-start justify-center gap-16 min-h-[54vh] max-h[100vh]">
{/* Line */}
<hr className="bg-gray-400 w-full absolute -left-1/2 rotate-90" />
{/* Dot */}
<div className="z-10 p-[0.36rem] rounded-full bg-white border-solid border border-dg-primary-900 absolute -left-[0.63%] top-[1%]"></div>
<div className="w-1/2 ml-8">
<h3 className="h3-heading">{_data.selectionProcess.stepThree.heading}</h3>
<p className="text-sm text-dark-gray dark:text-white mt-4">
{_data.selectionProcess.stepThree.paragraph}
</p>
</div>
<div className="w-1/2"></div>
</div>

{/* Section 4 */}
<div className="relative flex flex-row items-start justify-center gap-16 min-h-[54vh] max-h[100vh]">
{/* Line */}
<hr className="bg-gray-400 w-full absolute -left-1/2 rotate-90" />
{/* Dot */}
<div className="z-10 p-[0.36rem] rounded-full bg-white border-solid border border-dg-primary-900 absolute -left-[0.63%] top-[1%]"></div>
<div className="w-1/2 ml-8">
<h3 className="h3-heading">{_data.selectionProcess.stepFour.heading}</h3>
<p className="text-sm text-dark-gray dark:text-white mt-4">
{_data.selectionProcess.stepFour.paragraph}
</p>
</div>
<div className="w-1/2"></div>
</div>

{/* Section 5 */}
<div className="relative flex flex-row items-start justify-center gap-16 min-h-[54vh] max-h[100vh]">
{/* Line */}
<hr className="bg-gray-400 w-full absolute -left-1/2 rotate-90" />
{/* Dot */}
<div className="z-10 p-[0.36rem] rounded-full bg-white border-solid border border-dg-primary-900 absolute -left-[0.63%] top-[1%]"></div>
<div className="w-1/2 ml-8">
<h3 className="h3-heading">{_data.selectionProcess.stepFive.heading}</h3>
<p className="text-sm text-dark-gray dark:text-white mt-4">
{_data.selectionProcess.stepFive.paragraph}
</p>
</div>
<div className="w-1/2"></div>
</div>
</div>
</Wrapper>

{/* Action Card */}
<Wrapper>
<div className="my-90p">
<ActionCard
title={_data.ActionCard.heading}
text={_data.ActionCard.paragraph}
btn1={_data.ActionCard.primaryBtn}
btn2={_data.ActionCard.secondaryBtn}
link1={'/contact'}
link2={'/about'}
/>
</div>
</Wrapper>
</div>
</PageLayout>
);
}

+ 1
- 1
frontend/src/styles/text.css Ver arquivo

@@ -4,7 +4,7 @@

@layer components {
.heading {
@apply font-secondary font-bold text-dark-gray dark:text-white text-n-head-mobile md:text-n-head;
@apply font-primary font-bold text-dark-gray dark:text-white text-head-mobile md:text-head;
}

.subheading {

+ 2
- 2
frontend/tailwind.config.js Ver arquivo

@@ -3,8 +3,8 @@ module.exports = {
darkMode: 'class',
theme: {
fontFamily: {
primary: ['"Abril Fatface"', 'serif'],
secondary: ['"Poppins"', 'sans-serif'],
'primary' : ['"Poppins"','sans-serif'],
'secondary' : ['"Poppins"', 'sans-serif'],
},
fontSize: {
'head' : ['56px', {

Carregando…
Cancelar
Salvar