Compare commits

..

3 commits

Author SHA1 Message Date
Artis Blūms
3525471e02 Merge branch 'main' into add-deploy-workflow 2022-08-31 20:03:45 +03:00
Artis Blūms
e20bbe29fd fix: removes failing step 2022-08-07 22:34:25 +03:00
Artis Blūms
071c9971a7 feat: adds github deploy workflow 2022-08-06 20:52:08 +03:00
42 changed files with 5341 additions and 5075 deletions

26
.github/workflows/deploy.yml vendored Normal file
View file

@ -0,0 +1,26 @@
name: deploy
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 16.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Build
run: |
yarn
yarn build

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
node_modules/
.cache/
public
.idea

View file

@ -10,7 +10,7 @@ module.exports = {
// {
// resolve: "gatsby-plugin-google-analytics",
// options: {
// trackingId: "G-8M9CZ79T4L",
// trackingId: "",
// },
// },
"gatsby-plugin-react-helmet",

View file

@ -12,35 +12,30 @@
"start": "gatsby develop",
"build": "gatsby build",
"serve": "gatsby serve",
"clean": "gatsby clean",
"lint:prettier": "yarn prettier ./src --check",
"format:prettier": "yarn prettier ./src -w"
"clean": "gatsby clean"
},
"dependencies": {
"@splidejs/react-splide": "^0.7.12",
"axios": "^1.6.5",
"gatsby": "^5.13.3",
"gatsby-plugin-google-analytics": "^5.13.0",
"gatsby-plugin-image": "^3.13.0",
"gatsby-plugin-manifest": "^5.13.0",
"gatsby-plugin-react-helmet": "^6.13.0",
"gatsby-plugin-sass": "^6.13.0",
"gatsby-plugin-sharp": "^5.13.0",
"gatsby-plugin-sitemap": "^6.13.0",
"gatsby-source-filesystem": "^5.13.0",
"gatsby-transformer-sharp": "^5.13.0",
"i18next": "^23.7.16",
"i18next-browser-languagedetector": "^7.2.0",
"@splidejs/react-splide": "^0.6.12",
"axios": "^0.27.2",
"gatsby": "^4.1.0",
"gatsby-plugin-google-analytics": "^4.1.0",
"gatsby-plugin-image": "^2.1.0",
"gatsby-plugin-manifest": "^4.1.0",
"gatsby-plugin-react-helmet": "^5.1.0",
"gatsby-plugin-sass": "^5.1.0",
"gatsby-plugin-sharp": "^4.1.0",
"gatsby-plugin-sitemap": "^5.1.0",
"gatsby-source-filesystem": "^4.1.0",
"gatsby-transformer-sharp": "^4.1.0",
"i18next": "^21.8.16",
"i18next-browser-languagedetector": "^6.1.4",
"path": "^0.12.7",
"path-browserify": "^1.0.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-helmet": "^6.1.0",
"react-i18next": "^14.0.0",
"sass": "^1.70.0",
"swiper": "^11.0.5"
},
"devDependencies": {
"prettier": "^3.3.2"
"react-i18next": "^11.18.3",
"sass": "^1.43.4",
"swiper": "^7.2.0"
}
}

View file

@ -10,6 +10,7 @@
}
}
@mixin for-max-width {
@media all and (max-width: 1224px) {
@content;

View file

@ -1,4 +1,4 @@
$color-text-primary: #ffffff;
$color-text-primary: #FFFFFF;
$color-text-secondary: rgba(255, 255, 255, 60%);
$color-accent-primary: #c16b6b;
$color-accent-secondary: #b46f8e;
$color-accent-primary: #C16B6B;
$color-accent-secondary: #B46F8E;

View file

@ -1,6 +1,6 @@
@use "../abstracts/functions" as *;
@use "../abstracts/mixins" as *;
@use "./colors" as *;
@use '../abstracts/functions' as *;
@use '../abstracts/mixins' as *;
@use './colors' as *;
// @import url("https://use.typekit.net/ryt1jvs.css");
* {
@ -47,6 +47,7 @@ h5 {
font-size: px2rem(30px);
}
h6 {
font-size: px2rem(18px);
text-transform: uppercase;

View file

@ -23,19 +23,6 @@
grid-column: 1 / 7;
}
}
&-mobile {
@include for-mobile {
padding: 0 20px;
display: grid;
grid-template-columns: repeat(6, 1fr);
max-width: 100%;
width: auto;
> * {
grid-column: 1 / 7;
}
}
}
}
section.container {
padding-right: 20px;

View file

@ -1,14 +1,10 @@
@use "abstracts/functions";
@use "abstracts/mixins";
@use "base/colors";
@use "base/reset";
@use "base/typography";
@use "layout/grid";
@use 'abstracts/functions';
@use 'abstracts/mixins';
@use 'base/colors';
@use 'base/reset';
@use 'base/typography';
@use 'layout/grid';
body {
background-color: #111111;
}
html {
scroll-behavior: smooth;
}

View file

@ -2,6 +2,8 @@ import React from "react";
import "./about.style.scss";
import { useTranslation } from "react-i18next";
import { Swiper, SwiperSlide } from "swiper/react";
import "swiper/css";
import Rocket from "../../assets/images/main/about-us/rocket.png";
@ -17,6 +19,30 @@ const About = () => {
<h5>{t("about_us.sub_title")}</h5>
<p className="text">{t("about_us.text")}</p>
<Swiper
loop={false}
// centeredSlides={true}
slideToClickedSlide={true}
spaceBetween={0}
slidesPerView={2}
onSlideChange={() => console.log("slide change")}
onSwiper={(swiper) => console.log(swiper)}
className={"stats"}
>
<SwiperSlide>
<h4>30+</h4>
<p>Completed projects</p>
</SwiperSlide>
<SwiperSlide>
<h4>400+</h4>
<p>Web Pages created</p>
</SwiperSlide>
<SwiperSlide>
<h4>6+</h4>
<p>Years experience</p>
</SwiperSlide>
</Swiper>
<div className="stats">
<div>
<h4>{t("about_us.amount_completed")}</h4>

View file

@ -3,13 +3,8 @@
@use "../../assets/stylesheets/abstracts/variables" as *;
@use "../../assets/stylesheets/abstracts/mixins" as *;
#about-us {
scroll-margin-block-start: 120px;
}
.about-us {
margin-top: -80px;
> div {
&:first-child {
grid-column: 1/7;
@ -40,11 +35,18 @@
}
@include for-mobile {
text-align: center;
& > div {
padding: 4px;
display: none;
}
}
.swiper {
display: none;
margin-left: -20px;
margin-right: -20px;
@include for-mobile {
display: flex;
}
}
@include for-mobile {

View file

@ -1,40 +1,28 @@
import React, { useState, useRef } from "react";
import React, { useState } from "react";
import axios from "axios";
import { useTranslation } from "react-i18next";
import "./contact-form.style.scss";
import Dog from "../../assets/images/main/contact-form/Mask.svg";
import Dog from "../../assets/images/main/contact-form/mask.svg";
import BluePlanet from "../../assets/images/main/contact-form/Planet Blue.svg";
import YellowPlanet from "../../assets/images/main/contact-form/Planet Yellow.svg";
import FormInput from "../form-input/form-input.component";
import CustomButton from "../custom-button/custom-button.component";
const newPost = async (data) => {
return axios
.post("https://midcreative.eu/mail/", data, {
headers: {
"Content-Type": "application/json",
},
})
.then((res) => true)
.catch((err) => err);
const postForm = (e, data) => {
e.preventDefault();
console.log("post form", data);
axios
.post("http://127.0.0.1:3005/contact", data)
.then((res) => console.log(res));
};
const ContactForm = () => {
const { t } = useTranslation();
const [formData, setFormData] = useState({
name: "",
email: "",
phone: "",
});
const nameInputRef = useRef(null);
const emailInputRef = useRef(null);
const phoneInputRef = useRef(null);
const [success, setSuccess] = useState();
const [error, setError] = useState();
const setName = (name) => {
setFormData({ ...formData, name: name });
};
@ -47,32 +35,14 @@ const ContactForm = () => {
setFormData({ ...formData, phone: phone });
};
const cleanFields = () => {
nameInputRef.current.clean();
emailInputRef.current.clean();
phoneInputRef.current.clean();
};
const handlePost = (e) => {
const handleSubmit = (e) => {
e.preventDefault();
newPost(formData).then((res) => {
if (res === true) {
cleanFields();
setError(false);
setSuccess(true);
setTimeout(() => setSuccess(false), 6000);
} else {
cleanFields();
setError(true);
setSuccess(false);
}
});
console.log(e);
};
return (
<div className="container contact-form">
<h2>{t("contacts.title")}</h2>
<h2>Lets bring your project to the Moon</h2>
<div className="image">
<img src={Dog} alt="cute dog in space" />
@ -80,40 +50,35 @@ const ContactForm = () => {
<img src={YellowPlanet} alt="yellow planet" className="planet yellow" />
</div>
<form className="container" onSubmit={(e) => handlePost(e)}>
{success ? <p className="success">{t("contacts.success")}</p> : null}
{error ? (
<p className="error">
{t("contacts.error")}{" "}
<a href="mailto:info@midcreative.eu">info@midcreative.eu</a>
</p>
) : null}
<form
// action="http://127.0.0.1:3005/contact"
className="container"
// method="POST"
// onSubmit={(e) => postForm(e, formData)}
>
<FormInput
name="name"
type="text"
label={t("contacts.name")}
label="Name"
onChange={setName}
ref={nameInputRef}
required
/>
<FormInput
name="email"
type="email"
label={t("contacts.email")}
label="E-mail"
onChange={setEmail}
ref={emailInputRef}
required
/>
<FormInput
name="phone"
type="tel"
label={t("contacts.phone")}
label="Phone"
onChange={setPhone}
ref={phoneInputRef}
required
/>
<CustomButton text={t("contacts.send")} />
<CustomButton text="Send" />
</form>
</div>
);

View file

@ -14,20 +14,6 @@ section.content {
grid-row: 1/2;
}
.success {
margin-bottom: 16px;
color: rgba(116, 199, 103, 1);
}
.error {
margin-bottom: 16px;
color: rgba(246, 81, 81, 1);
a {
color: rgba(246, 81, 81, 1);
}
}
form {
grid-column: 1/5;
grid-row: 2/3;
@ -58,12 +44,7 @@ section.content {
img {
&:first-child {
background: linear-gradient(
0deg,
rgba(27, 27, 27, 0.2),
rgba(27, 27, 27, 0.2)
),
rgba(255, 255, 255, 0.01);
background: linear-gradient(0deg, rgba(27, 27, 27, 0.2), rgba(27, 27, 27, 0.2)), rgba(255, 255, 255, 0.01);
box-shadow: inset 0px 2px 5px rgb(255 255 255 / 15%);
backdrop-filter: blur(8px);
border-radius: 33px;
@ -85,8 +66,7 @@ section.content {
}
@include for-tablets {
h2,
form {
h2, form {
grid-column: 1/7;
}
@ -95,6 +75,7 @@ section.content {
}
}
@include for-mobile {
h2,
.image,
@ -113,8 +94,6 @@ section.content {
.image {
grid-row: 2/3;
width: 100%;
margin-bottom: 16px;
img {
margin: 0 auto;
}

View file

@ -9,10 +9,10 @@ const Contacts = () => {
return (
<div className="container contacts">
<div>
<a href="tel:+37125704038">
<a href="tel:+371 2662 0770">
<img src={Phone} alt="phone" />
</a>
<a href="tel:+37125704038">+371 25704038</a>
<a href="tel:+371 2662 0770">+371 2662 0770</a>
</div>
<div>
<a href="mailto:info@midcreative.eu">
@ -21,10 +21,10 @@ const Contacts = () => {
<a href="mailto:info@midcreative.eu">info@midcreative.eu</a>
</div>
<div>
<a href="https://telegram.me/shiseri" target="_blank" rel="noreferrer">
<a href="https://telegram.me/vlsqzwsme" target="_blank" rel="noreferrer">
<img src={Telegram} alt="telegram" />
</a>
<a href="https://telegram.me/shiseri" target="_blank" rel="noreferrer">
<a href="https://telegram.me/vlsqzwsme" target="_blank" rel="noreferrer">
Telegram
</a>
</div>

View file

@ -1,10 +1,6 @@
@use "../../assets/stylesheets/abstracts/mixins" as *;
// @use "../../assets/stylesheets/abstracts/variables";
#contact-us {
scroll-margin-block-start: 120px;
}
.contacts {
display: flex;
flex-direction: row;

View file

@ -1,15 +1,11 @@
import React from "react";
import "./footer.style.scss";
import { useTranslation } from "react-i18next";
import Contacts from "../contacts/contacts.component";
import TopLine from "../../assets/images/main/footer/top-line.png";
import Logo from "../../assets/images/main/footer/logo.svg";
const MidFooter = () => {
const { t } = useTranslation();
const MidFooter = () => {
return (
<footer>
<img className="line" src={TopLine} alt="" />
@ -18,37 +14,27 @@ const MidFooter = () => {
<div className="container info">
<div>
<h6>{t("footer.company")}</h6>
<h6>Company</h6>
<p className="gray">SIA MID Creative</p>
<h6>{t("footer.registration_nr")}</h6>
<h6>Registation nr.</h6>
<p className="gray">40203288612</p>
<h6>{t("footer.address")}</h6>
<h6>Adress</h6>
<p className="gray">Rīga, Gaiļezera iela 11 - 5, LV-1079</p>
</div>
<nav>
<h6>{t("footer.navigation")}</h6>
<a href="#top" className="gray mobile">
{t("menu.home")}
</a>
<a href="#services" className="gray">
{t("menu.services")}
</a>
<a href="#about-us" className="gray">
{t("menu.about_us")}
</a>
<a href="#projects" className="gray">
{t("menu.portfolio")}
</a>
<a href="#contact-us" className="gray">
{t("menu.contact_us")}
</a>
<h6>Navigation</h6>
<a href="#top" className="gray mobile">Home</a>
<a href="#services" className="gray">Services</a>
<a href="#about-us" className="gray">About us</a>
<a href="#projects" className="gray">Projects</a>
<a href="#contact-us" className="gray">Contact us</a>
</nav>
<div>
<img src={Logo} alt="" />
</div>
</div>
</footer>
);
};
)
}
export default MidFooter;
export default MidFooter

View file

@ -1,11 +1,7 @@
@use "../../assets/stylesheets/abstracts/mixins" as *;
footer {
background: radial-gradient(
62.99% 90.27% at 50% 0%,
rgba(225, 104, 154, 0.32) 0%,
rgba(141, 162, 243, 0) 65.06%
);
background: radial-gradient(62.99% 90.27% at 50% 0%, rgba(225, 104, 154, 0.32) 0%, rgba(141, 162, 243, 0) 65.06%);
margin-top: 192px;
.line {
@ -14,6 +10,7 @@ footer {
transform: translateY(-50px);
}
.info {
margin-top: 68px;
padding-bottom: 237px;
@ -60,9 +57,7 @@ footer {
padding-bottom: 110px;
justify-items: center;
div:first-child,
div:last-child,
nav {
div:first-child, div:last-child, nav {
grid-column: 1/7;
grid-row: unset;
text-align: center;

View file

@ -1,18 +1,10 @@
import React, { useState, forwardRef, useImperativeHandle } from "react";
import React, { useState } from "react";
import "./form-input.style.scss";
const FormInput = forwardRef(
({ handleChange, label, onChange, ...otherProps }, ref) => {
const FormInput = ({ handleChange, label, onChange, ...otherProps }) => {
const [input, setInput] = useState("");
const [toggleLabel, changeToggleLabel] = useState(false);
useImperativeHandle(ref, () => ({
clean() {
setInput("");
changeToggleLabel(false);
},
}));
return (
<div className="group">
<label
@ -36,7 +28,6 @@ const FormInput = forwardRef(
/>
</div>
);
},
);
};
export default FormInput;

View file

@ -12,7 +12,7 @@
position: absolute;
top: 6px;
opacity: 0.5;
color: #fff;
color: #FFF;
text-transform: uppercase;
transition: 300ms ease all;
@ -41,8 +41,11 @@
@include shrinkLabel();
}
}
}
input:autofill,
input:utofill:hover,
input:autofill:focus {
@ -52,3 +55,4 @@ input:autofill:focus {
-webkit-box-shadow: 0 0 0px 1000px #111 inset;
// transition: background-color 5000s ease-in-out 0s;
}

View file

@ -1,5 +1,4 @@
import React from "react";
import { Link } from "gatsby";
import { useTranslation } from "react-i18next";
@ -13,7 +12,7 @@ import Email from "../../assets/images/main/footer/email.png";
import "./header.style.scss";
const MidHeader = () => {
const { t } = useTranslation();
const { t, i18n } = useTranslation();
const toggleMenu = () => {
if (window !== "undefined") {
@ -59,16 +58,15 @@ const MidHeader = () => {
return (
<header>
<div className="container">
<div className="logo">
<img src={Logo} alt="MID" />
</div>
<nav className="navigation">
<Link to="/#services">{t("menu.services")}</Link>
<Link to="/#about-us">{t("menu.about_us")}</Link>
<Link to="/#projects">{t("menu.portfolio")}</Link>
<Link to="/#contact-us">{t("menu.contact_us")}</Link>
<a href="#services">{t("menu.services")}</a>
<a href="#about-us">{t("menu.about_us")}</a>
<a href="#projects">{t("menu.portfolio")}</a>
<a href="#pricing">{t("menu.pricing")}</a>
<a href="#contact-us">{t("menu.contact_us")}</a>
<LanguageSwitch />
</nav>
@ -91,11 +89,11 @@ const MidHeader = () => {
<img src={Logo2} alt="MID Creative Digital Agency" />
<nav className="navigation">
<a href="#top">{t("menu.home")}</a>
<a href="#services">{t("menu.services")}</a>
<a href="#about-us">{t("menu.about_us")}</a>
<a href="#projects">{t("menu.portfolio")}</a>
<a href="#contact-us">{t("menu.contact_us")}</a>
<a href="#top">Home</a>
<a href="#services">Services</a>
<a href="#about-us">About Us</a>
<a href="#projects">Featured Projects</a>
<a href="#contact-us">Contact Us</a>
</nav>
<div className="header-contacts">
@ -110,9 +108,6 @@ const MidHeader = () => {
</a>
<a href="mailto:info@midcreative.eu">info@midcreative.eu</a>
</div>
<LanguageSwitch />
</div>
</div>
</header>
);

View file

@ -1,15 +1,6 @@
@use "../../assets/stylesheets/abstracts/mixins" as *;
header {
backdrop-filter: blur(5px);
z-index: 1000;
position: fixed;
width: 100%;
top: 0;
left: 0;
right: 0;
.container {
padding: 44px 0;
max-width: 1224px;
display: flex;
@ -18,6 +9,12 @@ header {
align-items: center;
padding-left: 20px;
padding-right: 20px;
z-index: 1000;
position: fixed;
width: 100%;
top: 0;
left: 0;
right: 0;
.navigation {
display: flex;
@ -45,6 +42,10 @@ header {
display: none;
cursor: pointer;
&:focus {
outline: 1px solid #fff;
}
span {
background-color: #fff;
height: 5px;
@ -116,7 +117,6 @@ header {
}
.mobile-menu {
display: none;
transition: all ease 1s;
flex-direction: column;
align-items: center;
@ -132,6 +132,7 @@ header {
box-shadow: inset 2px 2px 5px rgba(255, 255, 255, 0.15);
backdrop-filter: blur(15px);
z-index: 2;
display: flex;
position: fixed;
height: 100vh;
width: 295px;
@ -158,12 +159,6 @@ header {
img {
margin: 0 auto;
}
@include for-mobile {
a:first-child {
margin-bottom: 6px;
}
}
}
&.open {
@ -172,10 +167,6 @@ header {
}
@include for-mobile {
.mobile-menu {
display: flex;
}
.logo {
width: 100%;
@ -193,4 +184,3 @@ header {
}
}
}
}

View file

@ -6,7 +6,7 @@ import "./intro.styles.scss";
import Spaceship from "../../assets/images/main/intro/spaceship.svg";
const Intro = () => {
const { t } = useTranslation();
const { t, i18n } = useTranslation();
return (
<section className="container intro">
@ -22,7 +22,7 @@ const Intro = () => {
<p>{t("intro.platforms")}</p>
</div>
{/* TODO: Finish this for mobile */}
{/* <h1 className="mobile">websites . mobileapps . e-shops . platforms</h1> */}
<h1 className="mobile">websites . mobileapps . e-shops . platforms</h1>
</div>
<div className="rocket">

View file

@ -55,6 +55,7 @@
@media all and (max-width: 1350px) {
transform: translateX(50px);
}
}
.rocket {
grid-column: 1/13;
@ -106,11 +107,7 @@
}
div {
text-align: center;
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 16px;
display: none;
}
}

View file

@ -1,4 +1,4 @@
import React from "react";
import React, { useState } from "react";
import i18n from "../../i18n";
import "./language-switch.style.scss";

View file

@ -1,3 +0,0 @@
#projects {
scroll-margin-block-start: 120px;
}

View file

@ -4,10 +4,7 @@ import "./section.style.scss";
const MidSection = (props) => {
return (
<section
className={`content container${props.mobileContainer ? "-mobile" : ""}`}
id={props.id}
>
<section className="container content" id={props.id}>
{props.title ? <h2>{props.title}</h2> : null}
{props.children}
</section>

View file

@ -1,8 +1,7 @@
import React from "react";
import { Script } from "gatsby";
import { useSiteMetadata } from "../hooks/use-site-metadata";
export const Seo = ({ title, description, pathname, children }) => {
export const SEO = ({ title, description, pathname, children }) => {
const {
title: defaultTitle,
description: defaultDescription,
@ -20,19 +19,6 @@ export const Seo = ({ title, description, pathname, children }) => {
<title>{seo.title}</title>
<meta name="description" content={seo.description} />
<meta name="image" content={seo.image} />
<Script
async
src="https://www.googletagmanager.com/gtag/js?id=G-8M9CZ79T4L"
></Script>
<Script>
{`
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-8M9CZ79T4L');
`}
</Script>
{children}
</>
);

View file

@ -1,9 +1,5 @@
@use "../../assets/stylesheets/abstracts/mixins" as *;
#services {
scroll-margin-block-start: 120px;
}
.services {
background: radial-gradient(
48.62% 45.5% at 50% 50%,

View file

@ -1,12 +1,15 @@
import React from "react";
import "./swiper-test.style.scss";
import React, { useState } from "react";
import "./swiper.style.scss";
import { useTranslation } from "react-i18next";
import { Swiper, SwiperSlide } from "swiper/react";
import "swiper/css";
import "swiper/css/effect-coverflow";
import { EffectCoverflow, Pagination, Autoplay } from "swiper/modules";
import SwiperCore, { EffectCoverflow, Pagination } from "swiper";
import { Autoplay } from "swiper";
SwiperCore.use([EffectCoverflow, Pagination]);
const getImage = (image) => {
return require(`../../assets/images/main/projects/${image}`).default;
@ -14,31 +17,49 @@ const getImage = (image) => {
const ProjectsSwiper = () => {
const { t } = useTranslation();
const [activeSlide, setSlide] = useState("");
const projects = t("projects", { returnObjects: true });
// const swiperProjects = ;
return (
<Swiper
loop={true}
effect={"coverflow"}
grabCursor={true}
centeredSlides={true}
slidesPerView={"auto"}
coverflowEffect={{
rotate: 50,
stretch: 0,
depth: 100,
modifier: 1,
slideShadows: true,
}}
pagination={true}
modules={[EffectCoverflow, Pagination, Autoplay]}
loopAdditionalSlides={5}
autoplay={{
delay: 2500,
disableOnInteraction: true,
}}
speed={800}
className="mySwiper"
speed={1200}
effect={"coverflow"}
coverflowEffect={{
scale: 1,
rotate: 0,
stretch: 100,
depth: 500,
modifier: 1,
slideShadows: false,
}}
centeredSlides={true}
slideToClickedSlide={true}
onSlideChange={(swiper) => {
setSlide(swiper.realIndex);
}}
breakpoints={{
0: {
slidesPerView: 1,
},
1200: {
slidesPerView: 2,
},
}}
onSwiper={(swiper) => {
console.log(swiper);
}}
modules={[Autoplay]}
id={`active-slide-${activeSlide}`}
key={`our-swiper`}
>
{projects &&
projects.map((project, i) => (

View file

@ -1,73 +0,0 @@
@use "../../assets/stylesheets/base/colors" as *;
@use "../../assets/stylesheets/abstracts/mixins" as *;
.swiper {
width: 100%;
padding-top: 50px;
padding-bottom: 50px;
}
.swiper-slide {
background-position: center;
background-size: cover;
width: 80%;
height: 60%;
max-width: 860px;
@include for-mobile {
max-width: 80%;
}
}
.swiper-slide img {
display: block;
width: 100%;
object-fit: cover;
}
#projects {
.swiper-slide {
p {
&:last-of-type {
text-align: center;
color: $color-text-secondary;
padding-top: 6px;
}
}
.project-info {
div {
display: flex;
flex-direction: row;
justify-content: space-evenly;
padding-top: 33px;
margin: 0 auto;
width: 50%;
white-space: nowrap;
@include for-mobile {
width: 100%;
}
p {
margin: 0 29px;
text-transform: uppercase;
color: $color-accent-primary;
padding: 0;
@include for-mobile {
margin: 0 12px;
}
}
}
}
&:not(.swiper-slide-active) {
h2 {
opacity: 0;
}
.project-info {
opacity: 0;
}
}
}
}

View file

@ -4,8 +4,7 @@
#projects {
.swiper {
width: 100%;
padding-top: 50px;
padding-bottom: 50px;
@include for-mobile {
background-size: 150%;
background-position: 50%;
@ -67,21 +66,21 @@
}
}
// &:before {
// content: "";
// width: 100%;
// height: 100%;
// position: absolute;
// background: linear-gradient(
// 90deg,
// rgba(17, 17, 17, 1) 0%,
// rgba(255, 255, 255, 0) 10%,
// rgba(255, 255, 255, 0) 90%,
// rgba(17, 17, 17, 1) 100%
// );
// z-index: 4;
// pointer-events: none;
// }
&:before {
content: "";
width: 100%;
height: 100%;
position: absolute;
background: linear-gradient(
90deg,
rgba(17, 17, 17, 1) 0%,
rgba(255, 255, 255, 0) 10%,
rgba(255, 255, 255, 0) 90%,
rgba(17, 17, 17, 1) 100%
);
z-index: 4;
pointer-events: none;
}
}
.swiper-container {
@ -89,20 +88,9 @@
padding-bottom: 50px;
}
.swiper-slide {
// width: 50%;
background-position: center;
background-size: cover;
width: 300px;
height: 300px;
width: 50%;
transition: all 0.5s;
img {
display: block;
width: 100%;
}
h2 {
width: max-content;
margin-left: auto;
@ -111,6 +99,16 @@
.img-wrap {
position: relative;
.img-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
z-index: 1;
}
}
p {

View file

@ -13,7 +13,7 @@ import MidFooter from "../components/footer/footer.component";
import Projects from "../components/projects/projects.component";
const MidMainPage = () => {
const { t } = useTranslation();
const { t, i18n } = useTranslation();
return (
<div className="main-page">
@ -28,7 +28,7 @@ const MidMainPage = () => {
<MidSection title={t("about_us.title")} id="about-us">
<About />
</MidSection>
<MidSection id="projects" mobileContainer>
<MidSection id="projects">
<Projects />
</MidSection>

View file

@ -9,4 +9,5 @@
rgba(23, 23, 23, 0) 100%
);
}
}

View file

@ -1,5 +1,5 @@
import * as React from "react";
import { Seo } from "../components/seo";
import { SEO } from "../components/seo";
import "../assets/stylesheets/style.scss";
@ -11,4 +11,4 @@ const IndexPage = () => {
export default IndexPage;
export const Head = () => <Seo title="MID Creative" />;
export const Head = () => <SEO />;

View file

@ -4,8 +4,7 @@
"about_us": "About Us",
"portfolio": "Portfolio",
"pricing": "Pricing",
"contact_us": "Contact Us",
"home": "Home"
"contact_us": "Contact Us"
},
"intro": {
"creating": "We are creating",
@ -83,66 +82,5 @@
"info": ["Website", "CMS"],
"text": "Fleet Management Software providers - website and content management system development"
}
],
"contacts": {
"title": "Lets bring your project to the Moon",
"name": "name",
"email": "E-mail",
"phone": "phone",
"send": "Send",
"success": "Thank you for sharing your contacts! We will get in touch!",
"error": "Looks like something went wrong, please try to reach us directly "
},
"privacy": {
"title": "Privacy Policy",
"description": "The privacy statement of users of this website, garmtech.com (hereinafter referred to as the Website) describes the procedures for use of personal data collected or received by GARMTECH LP (hereinafter referred to as the Website Owner) from users of this Website (hereinafter referred to as the Users). \n\nThe processing of personal data for the needs of Garmtech.com project is carried out by GARMTECH LP, registered in the Companies House of Great Britain under No. SLO21251.\n\nIdentification of persons and signature of electronic documents are provided by GARMTECH LP.\n\nThis Privacy Statement describes how the Website Owner can collect or receive personal data from the User, the types of personal data to be collected, procedures for disclosure and protection of these data, the Users rights, and means of communication with the Website Owner available to the User in order to get additional information about the privacy principles.",
"content": [
{
"title": "How the Users personal data can be collected or received.",
"message": "The Website can collect or receive the Users personal data when the User uses services of the Website.\n\nThe Users personal data are collected solely and exclusively for the provision of the services offered by the Website and only to the extent necessary for the provision of the above-mentioned services."
},
{
"title": "The Users personal data that the Website Owner is entitled to collect.",
"message": "By means of the Services provided via the Website, the Website Owner can collect the following Users personal data: first name, last name, address, phone number, e-mail address and IP address.\n\nIn addition, the User can voluntarily provide other data related to the Users questions or comments."
},
{
"title": "How the Users personal data are used.",
"message": "The Website Owner uses the User's Personal data to provide the Services offered by the Website, respond to user comments or questions and to diagnose technical problems."
},
{
"title": "How the Users personal data can be disclosed.",
"message": "The Website does not sell, rent or exchange the Users personal data. The Website can disclose the Users personal data only: to public authorities or other third parties, in accordance with the effective legislation of Great Britain and European Union, as well as to legal or natural persons who are registered on the Website as service providers (hereinafter referred to as the Service Providers) and use the Website for the provision of their services."
},
{
"title": "International data transfer.",
"message": "The Users personal data collected by the Website Owner are not transferred to non-EU or non-EEA countries."
},
{
"title": "How the Users personal data are protected.",
"message": "The Website Owner takes appropriate technical and organizational security measures to protect the personal data provided by the User from accidental, unlawful or unauthorized access and use."
},
{
"title": "Links to other websites.",
"message": "The Website may contain links to websites maintained by the Service Providers, the terms of use and privacy policies of which may be different from those of this Website. The Website Owner is not responsible for information or terms of third-party websites. Before using other websites and providing personal data or any other information to or through other websites, we encourage the User to get acquainted with the relevant terms of use and privacy statement."
},
{
"title": "Changes to this Privacy Statement.",
"message": "The Website Owner reserves the right to change the privacy statement of this Website at any time. The changes to the privacy statement of the Website become valid after their introduction. The date of the last version is specified at the beginning of this document. The Website Owner encourage the User to regularly reread the privacy statement of this Website."
},
{
"title": "The Users Rights.",
"message": "The Users rights stipulated by the applicable legislation may include the right to access the Users personal data processed by the Website Owner, the right to correct, delete or block such personal data and the right to object to certain personal data processing. In order to exercise these rights, the User must submit a written request, using the contact information provided in the How to contact the Website Owner section."
},
{
"title": "How to contact the Website Owner.",
"message": "The User can send comments or questions about the privacy statement of the Website to the e-mail address: info@garmtech.com or to the postal address: Garmtech LP GARMTECH LP, Suite 3087, 15 Bell street, St.Andrews, Fife, KY16 9UR, United Kingdom."
}
]
},
"footer": {
"company": "Company",
"registration_nr": "Registration nr.",
"address": "Address",
"navigation": "Navigation"
}
}

View file

@ -4,8 +4,7 @@
"about_us": "Par mums",
"portfolio": "Portfolio",
"pricing": "Cenas",
"contact_us": "Sazināties",
"home": "Mājas"
"contact_us": "Sazināties"
},
"intro": {
"creating": "Mēs izstrādājam",
@ -83,20 +82,5 @@
"info": ["Website", "CMS"],
"text": "Autoparka pārvaldības sistēmas mājas lapa un satura vadības sistēmas izstrāde"
}
],
"contacts": {
"title": "Aizšauj savu projektu līdz mēnesim",
"name": "Vārds",
"email": "Ēpasts",
"phone": "Telefons",
"send": "Nosūtīt",
"success": "Paldies ",
"error": "Izskatās, ka kautkas nestrādā :( Uzrakstiet mums uz "
},
"footer": {
"company": "Kompānija",
"registration_nr": "Reģistrācijas nr.",
"address": "Adrese",
"navigation": "Navigācija"
}
]
}

9032
yarn.lock

File diff suppressed because it is too large Load diff