refactor: move to monorepo
8
apps/vojtechmares.com/.eslintrc.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
module.exports = {
|
||||
root: true,
|
||||
extends: ["next", "prettier"],
|
||||
rules: {
|
||||
"@next/next/no-html-link-for-pages": "off",
|
||||
"react/jsx-key": "off",
|
||||
},
|
||||
};
|
||||
75
apps/vojtechmares.com/components/Button.tsx
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
import Link from "next/link";
|
||||
import clsx from "clsx";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
const baseStyles = {
|
||||
solid:
|
||||
"group inline-flex items-center justify-center rounded-full font-semibold focus:outline-none focus-visible:outline-2 focus-visible:outline-offset-2",
|
||||
outline:
|
||||
"group inline-flex ring-1 items-center justify-center rounded-full focus:outline-none",
|
||||
};
|
||||
|
||||
const variantStyles = {
|
||||
solid: {
|
||||
black:
|
||||
"bg-black text-white hover:bg-slate-700 active:bg-slate-800 focus-visible:outline-slate-900",
|
||||
amber:
|
||||
"bg-amber-500 text-white hover:bg-amber-600 active:bg-amber-800 focus-visible:outline-amber-500",
|
||||
white:
|
||||
"bg-white text-black hover:bg-amber-50 active:bg-amber-200 focus-visible:outline-white",
|
||||
},
|
||||
outline: {
|
||||
black:
|
||||
"ring-slate-200 text-black hover:ring-slate-300 active:bg-slate-100 focus-visible:outline-amber-500 focus-visible:ring-slate-300",
|
||||
white:
|
||||
"ring-slate-700 text-white hover:ring-slate-500 active:ring-slate-700 focus-visible:outline-white",
|
||||
amber: "", // Outline buttons cannot be amber
|
||||
},
|
||||
};
|
||||
|
||||
const transitionStyle = "transition duration-150 ease-in-out";
|
||||
|
||||
const sizeStyles = {
|
||||
medium: "px-4 py-2 text-sm",
|
||||
large: "px-8 py-4 text-base",
|
||||
};
|
||||
|
||||
type Props = {
|
||||
variant?: "solid" | "outline";
|
||||
color?: "black" | "white" | "amber";
|
||||
size?: "medium" | "large";
|
||||
className?: string;
|
||||
href?: string;
|
||||
children?: ReactNode;
|
||||
};
|
||||
|
||||
export function Button({
|
||||
variant = "solid",
|
||||
color = "black",
|
||||
size = "medium",
|
||||
className,
|
||||
href,
|
||||
children,
|
||||
}: Props) {
|
||||
if (variant === "outline" && color === "amber") {
|
||||
throw new Error("Outline buttons cannot be amber");
|
||||
}
|
||||
|
||||
className = clsx(
|
||||
baseStyles[variant],
|
||||
variantStyles[variant][color],
|
||||
sizeStyles[size],
|
||||
transitionStyle,
|
||||
className
|
||||
);
|
||||
|
||||
if (href !== undefined) {
|
||||
return (
|
||||
<Link href={href} className={className}>
|
||||
{children}
|
||||
</Link>
|
||||
);
|
||||
} else {
|
||||
return <button className={className}>{children}</button>;
|
||||
}
|
||||
}
|
||||
15
apps/vojtechmares.com/components/Container.tsx
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import clsx from "clsx";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
type Props = {
|
||||
className?: string;
|
||||
children?: ReactNode;
|
||||
};
|
||||
|
||||
export function Container({ className, children }: Props) {
|
||||
return (
|
||||
<div className={clsx("mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", className)}>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
30
apps/vojtechmares.com/components/homepage/CallToAction.tsx
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
import { Button } from "@/components/Button";
|
||||
import { Container } from "@/components/Container";
|
||||
|
||||
export function CallToAction() {
|
||||
return (
|
||||
<section
|
||||
id="get-started-today"
|
||||
className="relative overflow-hidden bg-amber-500 py-32"
|
||||
>
|
||||
<Container className="relative">
|
||||
<div className="mx-auto max-w-xl text-center">
|
||||
<h2 className="font-display text-3xl tracking-tight text-white sm:text-4xl">
|
||||
Pojďme do toho společně
|
||||
</h2>
|
||||
<p className="mt-4 text-lg tracking-tight text-white">
|
||||
Je na čase pozvednout Vaši infrastrukturu na dnešní standardy. Infrastruktura má ukázat Vaši aplikaci světu, ne ji držet při zemi.
|
||||
</p>
|
||||
<Button
|
||||
href="mailto:iam@vojtechmares.com"
|
||||
color="white"
|
||||
size="large"
|
||||
className="mt-10"
|
||||
>
|
||||
Napište mi
|
||||
</Button>
|
||||
</div>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
110
apps/vojtechmares.com/components/homepage/Faqs.tsx
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
import Image from "next/image";
|
||||
|
||||
import { Container } from "@/components/Container";
|
||||
import backgroundImage from "@/images/background-faqs.jpg";
|
||||
|
||||
const faqs = [
|
||||
[
|
||||
{
|
||||
question: "Does TaxPal handle VAT?",
|
||||
answer:
|
||||
"Well no, but if you move your company offshore you can probably ignore it.",
|
||||
},
|
||||
{
|
||||
question: "Can I pay for my subscription via purchase order?",
|
||||
answer: "Absolutely, we are happy to take your money in all forms.",
|
||||
},
|
||||
{
|
||||
question: "How do I apply for a job at TaxPal?",
|
||||
answer:
|
||||
"We only hire our customers, so subscribe for a minimum of 6 months and then let’s talk.",
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
question: "What was that testimonial about tax fraud all about?",
|
||||
answer:
|
||||
"TaxPal is just a software application, ultimately your books are your responsibility.",
|
||||
},
|
||||
{
|
||||
question:
|
||||
"TaxPal sounds horrible but why do I still feel compelled to purchase?",
|
||||
answer:
|
||||
"This is the power of excellent visual design. You just can’t resist it, no matter how poorly it actually functions.",
|
||||
},
|
||||
{
|
||||
question:
|
||||
"I found other companies called TaxPal, are you sure you can use this name?",
|
||||
answer:
|
||||
"Honestly not sure at all. We haven’t actually incorporated or anything, we just thought it sounded cool and made this website.",
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
question: "How do you generate reports?",
|
||||
answer:
|
||||
"You just tell us what data you need a report for, and we get our kids to create beautiful charts for you using only the finest crayons.",
|
||||
},
|
||||
{
|
||||
question: "Can we expect more inventory features?",
|
||||
answer: "In life it’s really better to never expect anything at all.",
|
||||
},
|
||||
{
|
||||
question: "I lost my password, how do I get into my account?",
|
||||
answer:
|
||||
"Send us an email and we will send you a copy of our latest password spreadsheet so you can find your information.",
|
||||
},
|
||||
],
|
||||
];
|
||||
|
||||
export function Faqs() {
|
||||
return (
|
||||
<section
|
||||
id="faq"
|
||||
aria-labelledby="faq-title"
|
||||
className="relative overflow-hidden bg-slate-50 py-20 sm:py-32"
|
||||
>
|
||||
<Image
|
||||
className="absolute top-0 left-1/2 max-w-none translate-x-[-30%] -translate-y-1/4"
|
||||
src={backgroundImage}
|
||||
alt=""
|
||||
width={1558}
|
||||
height={946}
|
||||
unoptimized
|
||||
/>
|
||||
<Container className="relative">
|
||||
<div className="mx-auto max-w-2xl lg:mx-0">
|
||||
<h2
|
||||
id="faq-title"
|
||||
className="font-display text-3xl tracking-tight text-black sm:text-4xl"
|
||||
>
|
||||
Frequently asked questions
|
||||
</h2>
|
||||
<p className="mt-4 text-lg tracking-tight text-slate-700">
|
||||
If you can’t find what you’re looking for, email our support team
|
||||
and if you’re lucky someone will get back to you.
|
||||
</p>
|
||||
</div>
|
||||
<ul
|
||||
role="list"
|
||||
className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-8 lg:max-w-none lg:grid-cols-3"
|
||||
>
|
||||
{faqs.map((column, columnIndex) => (
|
||||
<li key={columnIndex}>
|
||||
<ul role="list" className="flex flex-col gap-y-8">
|
||||
{column.map((faq, faqIndex) => (
|
||||
<li key={faqIndex}>
|
||||
<h3 className="font-display text-lg leading-7 text-black">
|
||||
{faq.question}
|
||||
</h3>
|
||||
<p className="mt-4 text-sm text-slate-700">{faq.answer}</p>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
81
apps/vojtechmares.com/components/homepage/Hero.tsx
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import Image, { type StaticImageData } from "next/image";
|
||||
|
||||
import { Button } from "@/components/Button";
|
||||
import { Container } from "@/components/Container";
|
||||
|
||||
import avatarVojtechMares from "@/images/avatars/vojtech-mares.png";
|
||||
import logoGLAMI from "@/images/logos/glami.svg";
|
||||
import logoFakturoid from "@/images/logos/fakturoid.svg";
|
||||
|
||||
type Company = {
|
||||
name: string;
|
||||
logo: StaticImageData;
|
||||
}
|
||||
|
||||
const companies: Company[] = [
|
||||
{ name: 'GLAMI', logo: logoGLAMI },
|
||||
{ name: 'Fakturoid', logo: logoFakturoid },
|
||||
];
|
||||
|
||||
export function Hero() {
|
||||
return (
|
||||
<>
|
||||
<Container className="pt-5 lg:pt-8">
|
||||
<div className="flex flex-col justify-center md:flex-row md:justify-between md:items-end">
|
||||
<div>
|
||||
<h1 className="font-display text-5xl font-medium tracking-tight text-black sm:text-7xl leading-10">
|
||||
Jsem{" "}
|
||||
<span className="relative whitespace-nowrap text-amber-500">
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
viewBox="0 0 418 42"
|
||||
className="absolute top-2/3 left-0 h-[0.58em] w-full fill-amber-300/70"
|
||||
preserveAspectRatio="none"
|
||||
>
|
||||
<path d="M203.371.916c-26.013-2.078-76.686 1.963-124.73 9.946L67.3 12.749C35.421 18.062 18.2 21.766 6.004 25.934 1.244 27.561.828 27.778.874 28.61c.07 1.214.828 1.121 9.595-1.176 9.072-2.377 17.15-3.92 39.246-7.496C123.565 7.986 157.869 4.492 195.942 5.046c7.461.108 19.25 1.696 19.17 2.582-.107 1.183-7.874 4.31-25.75 10.366-21.992 7.45-35.43 12.534-36.701 13.884-2.173 2.308-.202 4.407 4.442 4.734 2.654.187 3.263.157 15.593-.78 35.401-2.686 57.944-3.488 88.365-3.143 46.327.526 75.721 2.23 130.788 7.584 19.787 1.924 20.814 1.98 24.557 1.332l.066-.011c1.201-.203 1.53-1.825.399-2.335-2.911-1.31-4.893-1.604-22.048-3.261-57.509-5.556-87.871-7.36-132.059-7.842-23.239-.254-33.617-.116-50.627.674-11.629.54-42.371 2.494-46.696 2.967-2.359.259 8.133-3.625 26.504-9.81 23.239-7.825 27.934-10.149 28.304-14.005.417-4.348-3.529-6-16.878-7.066Z" />
|
||||
</svg>
|
||||
<span className="relative">Vojtěch Mareš</span>
|
||||
</span>{" "}
|
||||
a pomohu Vám s Vaší IT infrastrukturou.
|
||||
</h1>
|
||||
<p className="mt-6 max-w-xl text-lg tracking-tight text-slate-700">
|
||||
Společně snížíme Vaše náklady na infrasturkuturu, zbavíme se technického
|
||||
dluhu a připravíme Vaší IT infrastrukturu na rapidní škálování.
|
||||
</p>
|
||||
<div className="mt-10 flex flex-col gap-y-6 md:gap-y-0 sm:flex-row sm:justify-start sm:gap-x-6">
|
||||
<Button
|
||||
href="mailto:iam@vojtechmares.com"
|
||||
size="large"
|
||||
>
|
||||
Napište mi
|
||||
</Button>
|
||||
</div>
|
||||
<div className="mt-10 "> {/* mt-36 lg:mt-44 */}
|
||||
<p className="font-display text-lg tracking-tight text-slate-700">
|
||||
Moji spokojení klienti, přidejte se k nim i Vy.
|
||||
</p>
|
||||
<ul
|
||||
role="list"
|
||||
className="mt-4 flex flex-wrap items-center justify-center gap-x-6 sm:justify-start"
|
||||
>
|
||||
{companies.map((company) => (
|
||||
<li key={company.name} className="flex">
|
||||
<Image
|
||||
className="h-16 object-scale-down"
|
||||
src={company.logo}
|
||||
alt={company.name}
|
||||
width={128}
|
||||
height={64}
|
||||
priority
|
||||
/>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<Image className="pt-10 md:pt-0 mx-auto md:mx-0" priority width={400} height={800} src={avatarVojtechMares} alt="Vojtěch Mareš" />
|
||||
</div>
|
||||
</Container>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
import Image, { StaticImageData } from "next/image";
|
||||
import clsx from "clsx";
|
||||
|
||||
import { Container } from "@/components/Container";
|
||||
import { Button } from "@/components/Button";
|
||||
|
||||
import logoKubernetes from "@/images/logos/tools/kubernetes.svg";
|
||||
import logoRancher from "@/images/logos/tools/rancher.svg";
|
||||
|
||||
import logoAWS from "@/images/logos/tools/amazonaws.svg";
|
||||
import logoDigitalOcean from "@/images/logos/tools/digitalocean.svg";
|
||||
import logoGCP from "@/images/logos/tools/googlecloud.svg";
|
||||
import logoAzure from "@/images/logos/tools/microsoftazure.svg";
|
||||
import logoLinode from "@/images/logos/tools/linode.svg";
|
||||
|
||||
import logoOpenStack from "@/images/logos/tools/openstack.svg";
|
||||
import logoProxmox from "@/images/logos/tools/proxmox.svg";
|
||||
import logovmware from "@/images/logos/tools/vmware.svg";
|
||||
|
||||
const sections = [
|
||||
{
|
||||
title: "Kubernetes",
|
||||
description: "Kubernetes je open-source platforma pro automatizaci a správu kontejnerizovaných aplikací. Je to jednotná standardizovaná platforma pro vývoj a provozování aplikací, která umožňuje rychle a efektivně nasazovat a spravovat aplikace v kontejnerech.",
|
||||
images: [
|
||||
{ src: logoKubernetes, alt: "Kubernetes"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Veřejný cloud",
|
||||
description: "Veřejný cloud je sdílená fyzická infrastruktura, která je spravována třetí stranou, díky tomu se nestaráte o vlastní hardware a jeho údržbu. Veřejné cloudy jsou využívány společnostmi ať pro vývoj a testování, ale i pro produkční nasazení a dodávání jejich aplikace zákazníkům, kdekoliv na celém světě.",
|
||||
images: [
|
||||
{ src: logoAWS, alt: "Amazon Web Services"},
|
||||
{ src: logoGCP, alt: "Google Cloud Platform"},
|
||||
{ src: logoAzure, alt: "Microsoft Azure"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "\"Malý\" veřejný cloud",
|
||||
description: "Ne všichni hráči na cloudovém trhu jsou velké firmy. Existují i menší poskytovatelé, kteří sice nenabízí jejich rešení pro každý Váš problém, ale jen virtuální stroje, spravované Kubernetes a databáze a objektové úložiště. Což je však pro většinu aplikací naprosto dostatečné.",
|
||||
images: [
|
||||
{ src: logoDigitalOcean, alt: "Digital Ocean"},
|
||||
{ src: logoLinode, alt: "Linode"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Vlastní infrastruktura",
|
||||
description: "Ať máte vlastní datacentrum nebo jen pár virtuálních strojů, můžete využít Kubernetes a všechny jeho výhody. Využijte vlastní infrastrukturu a vytvořte si vlastní cloud. Pokud používáte například Proxmox, OpenStack nebo VMware vSphere, můžete využít jejich API a přímo je propojit s Vašimi Kubernetes, ať jeden cluster nebo víc.",
|
||||
images: [
|
||||
{ src: logoOpenStack, alt: "OpenStack"},
|
||||
{ src: logoProxmox, alt: "Proxmox"},
|
||||
{ src: logovmware, alt: "VMware"},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Hybridní řešení",
|
||||
description: "Pokud máte vlastní infrastrukturu, ale chcete využít i veřejný cloud, můžete využít například Rancher, který vám umožní propojit Vaši vlastní infrastrukturu s veřejným cloudem. Využijte výhody obou světů a vytvořte si hybridní řešení. Díky Rancheru získáte jednotnou ucelenou platformu pro všechny prostředí.",
|
||||
images: [
|
||||
{ src: logoRancher, alt: "Rancher"},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
const SectionDesktop = ({title, description, images, reverse}: { title: string, description: string, images: { src: StaticImageData, alt: string }[], reverse: boolean}) => (
|
||||
<div className="grid grid-cols-2 gap-x-24 gap-y-32">
|
||||
<div>
|
||||
<h3 className="font-display text-xl font-medium">{title}</h3>
|
||||
<p className="mt-4 text-slate-700">{description}</p>
|
||||
</div>
|
||||
<div className={clsx(reverse ? "order-first" : "")}>
|
||||
<div className="flex flex-row justify-around">
|
||||
{images.map((image, index) => (
|
||||
<Image key={index} src={image.src} width={128} height={128} alt={image.alt} title={image.alt} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
const SectionMobile = ({title, description, images}: { title: string, description: string, images: { src: StaticImageData, alt: string }[]}) => (
|
||||
<>
|
||||
<div className="flex flex-wrap gap-x-8 justify-around overflow-hidden mb-4">
|
||||
{images.map((image, index) => (
|
||||
<Image key={index} src={image.src} width={128} height={128} alt={image.alt} title={image.alt} />
|
||||
))}
|
||||
</div>
|
||||
<h3 className="font-display text-xl font-medium">{title}</h3>
|
||||
<p className="mt-4 text-slate-700">{description}</p>
|
||||
</>
|
||||
)
|
||||
|
||||
const Mobile = () => (
|
||||
<div className="lg:hidden mt-10">
|
||||
{sections.map((section, index) => (
|
||||
<div key={index} className={clsx(sections.length - 1 !== index ? "mb-10" : "")}>
|
||||
<SectionMobile {...section} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
|
||||
const Desktop = () => (
|
||||
<div className="hidden lg:block mt-10 lg:mt-20">
|
||||
{sections.map((section, index) => (
|
||||
<div key={index} className={
|
||||
clsx(sections.length - 1 !== index ? "mb-32" : "")
|
||||
}>
|
||||
<SectionDesktop {...section} reverse={index % 2 === 1}/>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
|
||||
export function KubernetesEverywhere() {
|
||||
return (
|
||||
<section
|
||||
id="kubernetes-kdekoliv"
|
||||
aria-label="Features for simplifying everyday business tasks"
|
||||
className="pt-20 pb-14 sm:pb-20 sm:pt-32 lg:pb-32"
|
||||
>
|
||||
<Container>
|
||||
<div className="mx-auto max-w-2xl md:text-center">
|
||||
<h2 className="font-display text-3xl tracking-tight text-black sm:text-4xl">
|
||||
Kubernetes, jedna platforma, kdekoliv
|
||||
</h2>
|
||||
<p className="mt-4 text-lg tracking-tight text-slate-700">
|
||||
Se vším Vám poradím, od veřejného cloudu přes on-premise a serverless, až po edge.
|
||||
</p>
|
||||
</div>
|
||||
<Mobile />
|
||||
<Desktop />
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
122
apps/vojtechmares.com/components/homepage/Services.tsx
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
import clsx from "clsx";
|
||||
|
||||
import { Button } from "@/components/Button";
|
||||
import { Container } from "@/components/Container";
|
||||
|
||||
type SwirlyDoodleProps = { className: string };
|
||||
|
||||
function SwirlyDoodle({ className }: SwirlyDoodleProps) {
|
||||
return (
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
viewBox="0 0 281 40"
|
||||
className={className}
|
||||
preserveAspectRatio="none"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M240.172 22.994c-8.007 1.246-15.477 2.23-31.26 4.114-18.506 2.21-26.323 2.977-34.487 3.386-2.971.149-3.727.324-6.566 1.523-15.124 6.388-43.775 9.404-69.425 7.31-26.207-2.14-50.986-7.103-78-15.624C10.912 20.7.988 16.143.734 14.657c-.066-.381.043-.344 1.324.456 10.423 6.506 49.649 16.322 77.8 19.468 23.708 2.65 38.249 2.95 55.821 1.156 9.407-.962 24.451-3.773 25.101-4.692.074-.104.053-.155-.058-.135-1.062.195-13.863-.271-18.848-.687-16.681-1.389-28.722-4.345-38.142-9.364-15.294-8.15-7.298-19.232 14.802-20.514 16.095-.934 32.793 1.517 47.423 6.96 13.524 5.033 17.942 12.326 11.463 18.922l-.859.874.697-.006c2.681-.026 15.304-1.302 29.208-2.953 25.845-3.07 35.659-4.519 54.027-7.978 9.863-1.858 11.021-2.048 13.055-2.145a61.901 61.901 0 0 0 4.506-.417c1.891-.259 2.151-.267 1.543-.047-.402.145-2.33.913-4.285 1.707-4.635 1.882-5.202 2.07-8.736 2.903-3.414.805-19.773 3.797-26.404 4.829Zm40.321-9.93c.1-.066.231-.085.29-.041.059.043-.024.096-.183.119-.177.024-.219-.007-.107-.079ZM172.299 26.22c9.364-6.058 5.161-12.039-12.304-17.51-11.656-3.653-23.145-5.47-35.243-5.576-22.552-.198-33.577 7.462-21.321 14.814 12.012 7.205 32.994 10.557 61.531 9.831 4.563-.116 5.372-.288 7.337-1.559Z"
|
||||
/>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
type ServiceProps = {
|
||||
name: string;
|
||||
price: string;
|
||||
description: string;
|
||||
href: string;
|
||||
featured?: boolean;
|
||||
buttonText?: string;
|
||||
};
|
||||
|
||||
function Service({
|
||||
name,
|
||||
price,
|
||||
description,
|
||||
href,
|
||||
featured = false,
|
||||
buttonText = "Napište mi",
|
||||
}: ServiceProps) {
|
||||
return (
|
||||
<section
|
||||
className={clsx(
|
||||
"flex flex-col rounded-3xl px-6 sm:px-8 py-8",
|
||||
featured ? "order-first bg-amber-500 lg:order-none" : "",
|
||||
featured ? "hover:bg-amber-600" : "md:ring-1 md:hover:ring-slate-700 md:ring-transparent",
|
||||
"transition ease-in-out duration-300 md:hover:-translate-y-1 md:hover:scale-110"
|
||||
)}
|
||||
>
|
||||
<h3 className="font-display text-4xl text-white">{name}</h3>
|
||||
<p className="font-display mt-4 text-lg font-light tracking-tight text-white">
|
||||
{price}
|
||||
</p>
|
||||
<p
|
||||
className={clsx(
|
||||
"mt-2 text-base",
|
||||
featured ? "text-slate-100" : "text-slate-400"
|
||||
)}
|
||||
>
|
||||
{description}
|
||||
</p>
|
||||
<Button
|
||||
href={href}
|
||||
variant={featured ? "solid" : "outline"}
|
||||
color="white"
|
||||
className="mt-16"
|
||||
aria-label={`Get started with the ${name} plan for ${price}`}
|
||||
>
|
||||
{buttonText}
|
||||
</Button>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
export function Services() {
|
||||
return (
|
||||
<section
|
||||
id="services"
|
||||
aria-label="Services"
|
||||
className="bg-black py-20 sm:py-32"
|
||||
>
|
||||
<Container>
|
||||
<div className="md:text-center">
|
||||
<h2 className="font-display text-3xl tracking-tight text-white sm:text-4xl">
|
||||
<span className="relative whitespace-nowrap">
|
||||
<SwirlyDoodle className="absolute top-1/2 left-0 h-[1em] w-full fill-amber-400" />
|
||||
<span className="relative">Co pro Vás,</span>
|
||||
</span>{" "}
|
||||
můžu udělat
|
||||
</h2>
|
||||
<p className="mt-4 text-lg text-slate-400">
|
||||
Nezáleží na velikosti Vaší firmy, ať jste startup, nebo korporát, dokážu pomoci každému.
|
||||
</p>
|
||||
</div>
|
||||
<div className="-mx-4 mt-16 grid max-w-2xl grid-cols-1 gap-y-10 sm:mx-auto lg:-mx-8 lg:max-w-none lg:grid-cols-3 xl:mx-0 xl:gap-x-8">
|
||||
<Service
|
||||
name="Konzultace"
|
||||
price="2 000 CZK za hodinu"
|
||||
description="Chcete se poradit nebo si nevíte rady? Projdeme Váš současný stav a najdeme kde je problém a navrhneme řešení."
|
||||
href="mailto:iam@vojtechmares.com"
|
||||
/>
|
||||
<Service
|
||||
featured
|
||||
name="Firemní školení"
|
||||
price="24 000 CZK za jednodenní školení"
|
||||
description="Jednoduše, s názornými příklady, které si každý vyzkouší. Naučím váš tým nové technologii nebo prohloubíme stávající znalosti."
|
||||
href="/#skoleni"
|
||||
buttonText="Seznam školení"
|
||||
/>
|
||||
<Service
|
||||
name="Implementace"
|
||||
price="Cena dohodou"
|
||||
description="Analyzujeme Vaši situaci, projdeme možnosti, vybereme nejlepší řešení a společně jej nasadíme."
|
||||
href="mailto:iam@vojtechmares.com"
|
||||
buttonText="Napište mi"
|
||||
/>
|
||||
</div>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
100
apps/vojtechmares.com/components/homepage/Testimonials.tsx
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
import Image from "next/image";
|
||||
|
||||
import { Container } from "@/components/Container";
|
||||
import avatarAntoninHoskovec from "@/images/avatars/antonin-hoskovec.jpg";
|
||||
|
||||
const testimonials = [
|
||||
[
|
||||
{
|
||||
content:
|
||||
"Když jsme Vojtu poznali, byli jsme zrovna v procesu migrace existujících Kubernetes clusterů na nové, vylepšené (vlastní) infrastrukturní balíčky. Krásně jsme si sedli v automatizaci jak vytváření/strhávání infrastruktury, tak v automatizaci nasazování a použitých technologiích (AWS, Kubernetes, Terraform, Python, GitLab. Docker). Vojta pro nás navrhnul a vytvořil nové Terraform repozitáře, pomohl nám i se školením týmu a mladších kolegů a byl dlouhodobě k dispozici pro řešení ad-hoc problémů.",
|
||||
author: {
|
||||
name: "Antonín Hoškovec",
|
||||
role: "AI team lead, GLAMI",
|
||||
image: avatarAntoninHoskovec,
|
||||
},
|
||||
},
|
||||
],
|
||||
// [
|
||||
// {
|
||||
// content:
|
||||
// "The best part about TaxPal is every time I pay my employees, my bank balance doesn’t go down like it used to. Looking forward to spending this extra cash when I figure out why my card is being declined.",
|
||||
// author: {
|
||||
// name: "Leland Kiehn",
|
||||
// role: "Founder of Kiehn and Sons",
|
||||
// image: avatarImage5,
|
||||
// },
|
||||
// },
|
||||
// ],
|
||||
];
|
||||
|
||||
function QuoteIcon(props: any) {
|
||||
return (
|
||||
<svg aria-hidden="true" width={105} height={78} {...props}>
|
||||
<path d="M25.086 77.292c-4.821 0-9.115-1.205-12.882-3.616-3.767-2.561-6.78-6.102-9.04-10.622C1.054 58.534 0 53.411 0 47.686c0-5.273.904-10.396 2.712-15.368 1.959-4.972 4.746-9.567 8.362-13.786a59.042 59.042 0 0 1 12.43-11.3C28.325 3.917 33.599 1.507 39.324 0l11.074 13.786c-6.479 2.561-11.677 5.951-15.594 10.17-3.767 4.219-5.65 7.835-5.65 10.848 0 1.356.377 2.863 1.13 4.52.904 1.507 2.637 3.089 5.198 4.746 3.767 2.41 6.328 4.972 7.684 7.684 1.507 2.561 2.26 5.5 2.26 8.814 0 5.123-1.959 9.19-5.876 12.204-3.767 3.013-8.588 4.52-14.464 4.52Zm54.24 0c-4.821 0-9.115-1.205-12.882-3.616-3.767-2.561-6.78-6.102-9.04-10.622-2.11-4.52-3.164-9.643-3.164-15.368 0-5.273.904-10.396 2.712-15.368 1.959-4.972 4.746-9.567 8.362-13.786a59.042 59.042 0 0 1 12.43-11.3C82.565 3.917 87.839 1.507 93.564 0l11.074 13.786c-6.479 2.561-11.677 5.951-15.594 10.17-3.767 4.219-5.65 7.835-5.65 10.848 0 1.356.377 2.863 1.13 4.52.904 1.507 2.637 3.089 5.198 4.746 3.767 2.41 6.328 4.972 7.684 7.684 1.507 2.561 2.26 5.5 2.26 8.814 0 5.123-1.959 9.19-5.876 12.204-3.767 3.013-8.588 4.52-14.464 4.52Z" />
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
||||
export function Testimonials() {
|
||||
return (
|
||||
<section
|
||||
id="testimonials"
|
||||
aria-label="What our customers are saying"
|
||||
className="bg-slate-50 py-20 sm:py-32"
|
||||
>
|
||||
<Container>
|
||||
<div className="mx-auto max-w-2xl md:text-center">
|
||||
<h2 className="font-display text-3xl tracking-tight text-black sm:text-4xl">
|
||||
Napsali o mně
|
||||
</h2>
|
||||
<p className="mt-4 text-lg tracking-tight text-slate-700">
|
||||
Zde jsou některé z mých referencí.
|
||||
</p>
|
||||
</div>
|
||||
<ul
|
||||
role="list"
|
||||
className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-6 sm:gap-8 lg:mt-20 lg:max-w-4xl" // lg:grid-cols-2
|
||||
>
|
||||
{testimonials.map((column, columnIndex) => (
|
||||
<li key={columnIndex}>
|
||||
<ul role="list" className="flex flex-col gap-y-6 sm:gap-y-8">
|
||||
{column.map((testimonial, testimonialIndex) => (
|
||||
<li key={testimonialIndex}>
|
||||
<figure className="relative rounded-2xl bg-white p-6 shadow-xl shadow-slate-900/10">
|
||||
<QuoteIcon className="absolute top-6 left-6 fill-slate-100" />
|
||||
<blockquote className="relative">
|
||||
<p className="text-lg tracking-tight text-black">
|
||||
{testimonial.content}
|
||||
</p>
|
||||
</blockquote>
|
||||
<figcaption className="relative mt-6 flex items-center justify-between border-t border-slate-100 pt-6">
|
||||
<div>
|
||||
<div className="font-display text-base text-black">
|
||||
{testimonial.author.name}
|
||||
</div>
|
||||
<div className="mt-1 text-sm text-slate-700">
|
||||
{testimonial.author.role}
|
||||
</div>
|
||||
</div>
|
||||
<div className="overflow-hidden rounded-full bg-slate-50">
|
||||
<Image
|
||||
className="h-14 w-14 object-cover"
|
||||
src={testimonial.author.image}
|
||||
alt={testimonial.author.name}
|
||||
width={56}
|
||||
height={56}
|
||||
/>
|
||||
</div>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
94
apps/vojtechmares.com/components/homepage/Training.tsx
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
import Image, { StaticImageData } from "next/image";
|
||||
import Link from "next/link";
|
||||
|
||||
import { Container } from "@/components/Container";
|
||||
|
||||
import logoKubernetes from "@/images/logos/tools/kubernetes.svg";
|
||||
import logoTerraform from "@/images/logos/tools/terraform.svg";
|
||||
import logoArgo from "@/images/logos/tools/argo.svg";
|
||||
import logoGit from "@/images/logos/tools/git.svg";
|
||||
|
||||
type TrainingType = {
|
||||
name: string;
|
||||
logo: StaticImageData;
|
||||
href: string;
|
||||
};
|
||||
|
||||
const trainingList: TrainingType[] = [
|
||||
{ name: 'Kubernetes', href: '/skoleni/kubernetes', logo: logoKubernetes },
|
||||
{ name: 'Terraform', href: '/skoleni/terraform', logo: logoTerraform },
|
||||
{ name: 'ArgoCD', href: '/skoleni/argocd', logo: logoArgo },
|
||||
{ name: 'Git', href: '/skoleni/git', logo: logoGit },
|
||||
];
|
||||
|
||||
type TrainingProps = {
|
||||
training: TrainingType;
|
||||
className?: string;
|
||||
};
|
||||
|
||||
const Training = ({ training, className }: TrainingProps) => {
|
||||
return (
|
||||
<Link href={training.href} className={className}>
|
||||
<Image
|
||||
src={training.logo}
|
||||
className="rounded-lg p-2 invert mx-auto"
|
||||
width="128"
|
||||
height="128"
|
||||
alt={training.name}
|
||||
/>
|
||||
<h3 className="mt-4 text-lg font-medium text-amber-500 text-center">{training.name}</h3>
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
|
||||
const TrainingGridMobile = () => {
|
||||
return (
|
||||
<div className="-mx-4 mt-20 grid grid-cols-2 gap-x-8 gap-y-4 overflow-hidden px-4 sm:-mx-6 sm:px-6 lg:hidden">
|
||||
{trainingList.map((training) => (
|
||||
<div key={training.name} >
|
||||
<Training training={training} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const TrainingGridDesktop = () => {
|
||||
return (
|
||||
<div className="hidden lg:mt-20 lg:block">
|
||||
<div className="grid grid-cols-4 gap-x-8 gap-y-4">
|
||||
{trainingList.map((training) => (
|
||||
<div key={training.name} className="relative py-4 cursor-pointer rounded-3xl transition ease-in-out duration-300 md:hover:-translate-y-1 md:hover:scale-110 md:ring-1 md:hover:ring-slate-700 md:ring-transparent">
|
||||
<Training training={training} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const TrainingList = () => {
|
||||
return (
|
||||
<section
|
||||
id="skoleni"
|
||||
aria-label="Training"
|
||||
className="pt-20 pb-14 sm:pb-20 sm:pt-32 lg:pb-32 bg-black"
|
||||
>
|
||||
<Container>
|
||||
<div className="mx-auto max-w-2xl md:text-center">
|
||||
<h2 className="font-display text-3xl tracking-tight text-white sm:text-4xl">
|
||||
Moje školení
|
||||
</h2>
|
||||
<p className="mt-4 text-lg tracking-tight text-slate-400">
|
||||
Od veřejného cloudu přes on-premise až po serverless, se vším vám
|
||||
poradím.
|
||||
</p>
|
||||
</div>
|
||||
<TrainingGridMobile />
|
||||
<TrainingGridDesktop />
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export { TrainingList };
|
||||
85
apps/vojtechmares.com/components/homepage/WhatIDo.tsx
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
import clsx from "clsx";
|
||||
|
||||
import { Container } from "@/components/Container";
|
||||
|
||||
const steps = [
|
||||
{
|
||||
name: "Analýza současného stavu",
|
||||
description:
|
||||
"Zjistíme kde jsou slabá místa Vaší infrastruktury nebo aplikace, a nebo obojího.",
|
||||
},
|
||||
{
|
||||
name: "Návrh řešení",
|
||||
description:
|
||||
"Navrhnu, jak tato slabá místa odstranit, na co si dát pozor a naplánujeme případné další kroky. ",
|
||||
},
|
||||
{
|
||||
name: "Implementace",
|
||||
description:
|
||||
"Přesunu Vaši aplikaci do Kubernetes, ať na Vašem vlastním hardware nebo v public cloudu. Celá infrastruktura bude jasně deklarovaná jako kód pomocí Terraformu.",
|
||||
},
|
||||
{
|
||||
name: "Proškolení Vašeho týmu",
|
||||
description:
|
||||
"Naučím váš tým používat moderní technologie, tak abyste mohli rozvíjet Vaší aplikaci a byznys a technologie byly nástrojem k rozvoji, ne břemenem, které s sebou táhnete.",
|
||||
},
|
||||
];
|
||||
|
||||
export function WhatIDo() {
|
||||
return (
|
||||
<section
|
||||
id="features"
|
||||
aria-label="Features for running your books"
|
||||
className="relative overflow-hidden bg-gradient-to-br to-amber-600 via-amber-500 from-amber-500 pt-20 pb-28 sm:py-32"
|
||||
>
|
||||
<Container className="relative">
|
||||
<div className="max-w-2xl md:mx-auto md:text-center xl:max-w-none">
|
||||
<h2 className="font-display text-3xl tracking-tight text-white sm:text-4xl md:text-5xl">
|
||||
Z nuly do cloudu
|
||||
</h2>
|
||||
<p className="mt-6 text-lg tracking-tight text-slate-100">
|
||||
Vše co budete potřebovat, od začátku až do cíle.
|
||||
</p>
|
||||
</div>
|
||||
<nav aria-label="Progress">
|
||||
<ol
|
||||
role="list"
|
||||
className="mx-auto mt-20 max-w-3xl overflow-hidden pt-2"
|
||||
>
|
||||
{steps.map((step, stepIdx) => (
|
||||
<li
|
||||
key={step.name}
|
||||
className={clsx(
|
||||
stepIdx !== steps.length - 1 ? "pb-10" : "",
|
||||
"relative"
|
||||
)}
|
||||
>
|
||||
{stepIdx !== steps.length - 1 ? (
|
||||
<div
|
||||
className="absolute top-4 left-6 -ml-px mt-0.5 h-full w-0.5 bg-white"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
) : null}
|
||||
<div className="group relative flex items-start">
|
||||
<span className="flex h-9 items-center" aria-hidden="true">
|
||||
<span className="relative z-10 flex h-12 w-12 items-center justify-center rounded-full border-2 border-amber-500 bg-white">
|
||||
<span className="h-3 w-3 rounded-full bg-amber-500" />
|
||||
</span>
|
||||
</span>
|
||||
<span className="ml-4 flex min-w-0 flex-col">
|
||||
<span className="text-2xl font-normal text-white">
|
||||
{step.name}
|
||||
</span>
|
||||
<span className="text-lg text-slate-100">
|
||||
{step.description}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
))}
|
||||
</ol>
|
||||
</nav>
|
||||
</Container>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
162
apps/vojtechmares.com/components/layout/Footer.tsx
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
import Link from "next/link";
|
||||
|
||||
import { Container } from "@/components/Container";
|
||||
// import { Logo } from '@/components/Logo'
|
||||
import { Button } from "@/components/Button";
|
||||
|
||||
export function Footer() {
|
||||
return (
|
||||
<footer className="bg-slate-50">
|
||||
<Container className="py-8">
|
||||
<div className="py-4">
|
||||
<div className="grid grid-cols-1 gap-y-6 lg:grid-cols-4 lg:gap-4">
|
||||
<div>
|
||||
<h4 className="text-lg font-medium">Vojtěch Mareš</h4>
|
||||
<ul className="mt-4 list-none">
|
||||
<li>
|
||||
<Link href="tel:+420732490651" className="underline">
|
||||
+420 732 490 651
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link
|
||||
href="mailto:iam@vojtechmares.com"
|
||||
className="underline"
|
||||
>
|
||||
iam@vojtechmares.com
|
||||
</Link>
|
||||
</li>
|
||||
<li className="mt-4">
|
||||
Company ID
|
||||
<br />
|
||||
<code id="company-id">06999280</code>
|
||||
</li>
|
||||
<li className="mt-2">
|
||||
VAT ID
|
||||
<br />
|
||||
<code id="vat-id">CZ9709180063</code>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-lg font-medium">Nejblíbenější školení</h3>
|
||||
<ul className="mt-4 list-disc pl-4">
|
||||
<li>
|
||||
<Link href="/skoleni/kubernetes" className="underline">
|
||||
Kubernetes
|
||||
</Link>
|
||||
</li>
|
||||
{/* <li>
|
||||
<Link href="/skoleni/gitlab-ci" className="underline">GitLab CI</Link>
|
||||
</li> */}
|
||||
<li>
|
||||
<Link href="/skoleni/terraform" className="underline">
|
||||
Terraform
|
||||
</Link>
|
||||
</li>
|
||||
{/* <li>
|
||||
<Link href="/skoleni/rancher" className="underline">Rancher</Link>
|
||||
</li> */}
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-lg font-medium">Důležité odkazy</h3>
|
||||
<ul className="mt-4 list-disc pl-4">
|
||||
{/* <li>
|
||||
<Link
|
||||
href="https://devops-skoelni.cz/?utm_source=vojtechmares&utm_medium=vojtechmares-com-website&utm_content=link"
|
||||
className="underline"
|
||||
target="_blank"
|
||||
>
|
||||
DevOps-Skoleni.cz
|
||||
</Link>
|
||||
</li> */}
|
||||
<li>
|
||||
<Link
|
||||
href="https://skoleni.io/?utm_source=vojtechmares&utm_medium=vojtechmares-com-website&utm_content=link"
|
||||
className="underline"
|
||||
target="_blank"
|
||||
>
|
||||
Skoleni.io
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link
|
||||
href="https://devopsaci.cz/?utm_source=vojtechmares&utm_medium=vojtechmares-com-website&utm_content=link"
|
||||
className="underline"
|
||||
target="_blank"
|
||||
>
|
||||
DevOpsaci.cz
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-lg font-medium">Zaujal jsem vás?</h3>
|
||||
<p className="mt-4">
|
||||
Zaujal jsem vás avšak nevíte, jak přesně bych vám mohl pomoci?
|
||||
Nebojte se zeptat a společně vymyslíme, jak vám mohu pomoci.
|
||||
</p>
|
||||
<Button
|
||||
href="mailto:iam@vojtechmares.com"
|
||||
className="mt-5"
|
||||
>
|
||||
Napište mi
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-col items-center border-t border-slate-400/10 py-10 sm:flex-row-reverse sm:justify-between">
|
||||
<div className="flex gap-x-6">
|
||||
<Link
|
||||
href="https://www.linkedin.com/in/vojtech-mares/"
|
||||
target="_blank"
|
||||
className="group"
|
||||
aria-label="Vojtěch Mareš na LinkedIn"
|
||||
>
|
||||
<svg
|
||||
// role="img"
|
||||
// viewBox="0 0 24 24"
|
||||
// xmlns="http://www.w3.org/2000/svg"
|
||||
aria-hidden="true"
|
||||
className="h-6 w-6 fill-black group-hover:fill-slate-700"
|
||||
>
|
||||
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
|
||||
</svg>
|
||||
</Link>
|
||||
<Link
|
||||
href="https://twitter.com/vojtechmares_"
|
||||
target="_blank"
|
||||
className="group"
|
||||
aria-label="Vojtěch Mareš na Twitter"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
className="h-6 w-6 fill-black group-hover:fill-slate-700"
|
||||
>
|
||||
<path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0 0 22 5.92a8.19 8.19 0 0 1-2.357.646 4.118 4.118 0 0 0 1.804-2.27 8.224 8.224 0 0 1-2.605.996 4.107 4.107 0 0 0-6.993 3.743 11.65 11.65 0 0 1-8.457-4.287 4.106 4.106 0 0 0 1.27 5.477A4.073 4.073 0 0 1 2.8 9.713v.052a4.105 4.105 0 0 0 3.292 4.022 4.093 4.093 0 0 1-1.853.07 4.108 4.108 0 0 0 3.834 2.85A8.233 8.233 0 0 1 2 18.407a11.615 11.615 0 0 0 6.29 1.84" />
|
||||
</svg>
|
||||
</Link>
|
||||
<Link
|
||||
href="https://github.com/vojtechmares"
|
||||
target="_blank"
|
||||
className="group"
|
||||
aria-label="Vojtěch Mareš na GitHub"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
className="h-6 w-6 fill-black group-hover:fill-slate-700"
|
||||
>
|
||||
<path d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2Z" />
|
||||
</svg>
|
||||
</Link>
|
||||
</div>
|
||||
<p className="mt-6 text-slate-700 sm:mt-0">
|
||||
Copyright © {new Date().getFullYear()} Vojtěch Mareš. Všechna
|
||||
práva vyhrazena.
|
||||
</p>
|
||||
</div>
|
||||
</Container>
|
||||
</footer>
|
||||
);
|
||||
}
|
||||
45
apps/vojtechmares.com/components/layout/Header.tsx
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import Link from "next/link";
|
||||
|
||||
import { Container } from "@/components/Container";
|
||||
import { Button } from "@/components/Button";
|
||||
|
||||
export function Header() {
|
||||
return (
|
||||
<>
|
||||
<header className="py-10">
|
||||
<Container>
|
||||
<nav className="relative z-50 flex justify-between">
|
||||
<div className="flex items-center md:gap-x-12">
|
||||
<span className="text-2xl font-bold">
|
||||
<Link href="/" className="py-2 px-4 rounded-full focus-visible:outline-black">Vojtěch Mareš</Link>
|
||||
</span>
|
||||
<div className="hidden md:flex md:gap-x-6">
|
||||
<Link
|
||||
href="/#skoleni"
|
||||
className="inline-block rounded-full py-2 px-4 text-lg font-medium text-slate-700 hover:bg-slate-100 hover:text-black focus-visible:outline-black"
|
||||
>
|
||||
Školení
|
||||
</Link>
|
||||
{/* <Link href="/pripadove-studie" className="inline-block rounded-full py-2 px-4 text-lg font-medium text-slate-700 hover:bg-slate-100 hover:text-black focus-visible:outline-black">Případové studie</Link> */}
|
||||
<Link
|
||||
href="https://vojtechmares.blog/"
|
||||
className="inline-block rounded-full py-2 px-4 text-lg font-medium text-slate-700 hover:bg-slate-100 hover:text-black focus-visible:outline-black"
|
||||
>
|
||||
Blog
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center gap-x-5 md:gap-x-8">
|
||||
<Button href="mailto:iam@vojtechmares.com" color="amber">
|
||||
<span className="text-lg">
|
||||
Napište mi{" "}
|
||||
<span className="hidden lg:inline">ještě dnes</span>
|
||||
</span>
|
||||
</Button>
|
||||
</div>
|
||||
</nav>
|
||||
</Container>
|
||||
</header>
|
||||
</>
|
||||
);
|
||||
}
|
||||
140
apps/vojtechmares.com/components/trainingpage/TrainingLayout.tsx
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
import Head from "next/head";
|
||||
import Image from "next/image";
|
||||
import clsx from "clsx";
|
||||
|
||||
import { Header } from "@/components/layout/Header";
|
||||
import { Footer } from "@/components/layout/Footer";
|
||||
import { Container } from "@/components/Container";
|
||||
import { Button } from "@/components/Button";
|
||||
|
||||
type Props = {
|
||||
content: any;
|
||||
meta: any;
|
||||
}
|
||||
|
||||
export default function TrainingLayout({ content, meta }: Props) {
|
||||
const formatter = new Intl.NumberFormat("cs", {
|
||||
style: "currency",
|
||||
currency: "CZK",
|
||||
maximumFractionDigits: 0,
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<title>
|
||||
Školení {meta.name} | Vojtěch Mareš - DevOps konzultant, lektor,
|
||||
engineer
|
||||
</title>
|
||||
|
||||
<meta
|
||||
name="description"
|
||||
content={`Školení ${meta.name} | Vojtěch Mareš - DevOps konzultant, lektor, engineer`}
|
||||
/>
|
||||
</Head>
|
||||
<main>
|
||||
<Header />
|
||||
<div className="pb-14 sm:pb-20 lg:pb-32">
|
||||
<div className="bg-black pt-16 pb-16">
|
||||
<Container className="flex justify-around">
|
||||
<Image
|
||||
src={meta.logo}
|
||||
width="1500"
|
||||
height="1500"
|
||||
alt=""
|
||||
priority
|
||||
className={clsx(
|
||||
"h-32 w-32 rounded-full",
|
||||
meta.logo.src.endsWith(".svg") ? "invert" : ""
|
||||
)}
|
||||
/>
|
||||
<h2 className="ml-4 text-center font-display self-center text-4xl tracking-tight text-white sm:text-6xl">
|
||||
Školení {meta.name}
|
||||
</h2>
|
||||
</Container>
|
||||
</div>
|
||||
<Container>
|
||||
<div className="mt-12 md:grid md:grid-cols-5 md:gap-x-4 md:gap-y-4">
|
||||
<div className="md:col-span-3">
|
||||
<div className="prose prose:text-black prose-p:text-slate-700 prose-h1:text-2xl prose-h1:font-medium prose-h2:text-xl prose-h2:font-medium prose-h3:text-lg prose-h3:font-medium prose-li:my-0">
|
||||
{content}
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-8 md:col-span-2 md:mt-0">
|
||||
{meta.days === 2 ? (
|
||||
<div className=" mb-8 rounded-lg bg-blue-50 p-4 shadow">
|
||||
<div className="flex">
|
||||
<div className="flex-shrink-0">
|
||||
{/* <ExclamationTriangleIcon className="h-5 w-5 text-yellow-400" aria-hidden="true" /> */}
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 20 20"
|
||||
fill="currentColor"
|
||||
className="h-5 w-5 text-blue-400"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z"
|
||||
clipRule="evenodd"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<div className="ml-3">
|
||||
<p className="text-blue-600">
|
||||
Toto školení je{" "}
|
||||
<span className="font-medium">
|
||||
dvoudenní.
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
<div className="mt-8 overflow-hidden rounded-lg bg-slate-50 shadow md:mt-0">
|
||||
<div className="px-4 pt-5 sm:px-6">
|
||||
<h3 className="text-lg font-medium leading-6 text-black">
|
||||
Cena za školení
|
||||
</h3>
|
||||
</div>
|
||||
<div className=" px-4 pb-5 pt-2">
|
||||
<dl className="sm:divide-y sm:divide-slate-400">
|
||||
<div className="py-4 sm:grid sm:grid-cols-2 sm:gap-4 sm:py-5 sm:px-6">
|
||||
<dt className="font-medium text-slate-700">
|
||||
Veřejný termín
|
||||
</dt>
|
||||
<dd className="mt-1 text-black sm:mt-0">
|
||||
{formatter.format(meta.price.open)} bez DPH
|
||||
</dd>
|
||||
</div>
|
||||
<div className="py-4 sm:grid sm:grid-cols-2 sm:gap-4 sm:py-5 sm:px-6">
|
||||
<dt className="font-medium text-slate-700">
|
||||
Firemní školení
|
||||
</dt>
|
||||
<dd className="mt-1 text-black sm:mt-0">
|
||||
{formatter.format(meta.price.company)} bez DPH
|
||||
</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-8">
|
||||
<Button
|
||||
variant="solid"
|
||||
color="amber"
|
||||
className="w-full text-lg font-medium"
|
||||
href="mailto:iam@vojtechmares.com"
|
||||
>
|
||||
Nezávazně poptat
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Container>
|
||||
</div>
|
||||
</main>
|
||||
<Footer />
|
||||
</>
|
||||
);
|
||||
};
|
||||
3
apps/vojtechmares.com/css/tailwind.css
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
BIN
apps/vojtechmares.com/images/avatars/antonin-hoskovec.jpg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
apps/vojtechmares.com/images/avatars/vojtech-mares.png
Normal file
|
After Width: | Height: | Size: 3 MiB |
1
apps/vojtechmares.com/images/logos/fakturoid.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 1000 343" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.2348 0 0 1.75181 -117.491 -179.534)"><path d="m95.15 102.485h809.85v195.797h-809.85z" fill="none"/><path d="m195.961 102.485c-55.672 0-100.811 35.811-100.811 79.988v35.816c0 44.176 45.139 79.993 100.811 79.993 55.673 0 100.8-35.817 100.8-79.993v-35.816c0-44.177-45.127-79.988-100.8-79.988zm70.37 125.657c0 19.579-14.452 33.144-35.104 33.144h-4.648c-22.027 0-37.172-12.363-37.172-29.365 0-16.485 12.046-29.021 46.123-29.021h8.085v-1.205c0-13.051-6.194-22.326-19.964-22.326-16.692 0-25.981 6.354-29.426 10.648h-.858v-7.383c0-10.305 9.295-22.667 33.728-22.667 20.652 0 39.236 14.941 39.236 46.879zm-103.094-7.154h-9.982v38.754h-9.288c-7.404 0-13.943-5.666-13.943-13.742v-61.213c0-18.895 8.78-42.555 35.152-48.414 26.695-5.932 34.161 7.122 34.161 7.122s-16.703-.228-29.79 9.983c-7.451 5.812-16.03 18.628-16.292 33.201v18.004c16.479 3.156 29.671-2.319 33.562-4.049l.668-.084s-1.182 20.438-24.248 20.438zm705.901 32.012c-19.66 0-34.752-17.137-34.752-37.59 0-24.462 11.907-40.354 33.644-40.354 7.478 0 15.647 5.252 18.555 11.747v-34.964h5.676c8.862 0 12.739 5.113 12.739 12.575v52.516c0 21.698-10.246 36.07-35.862 36.07zm-45.771 0c-14.326 0-22.177-8.212-22.177-23.385v-50.802h5.234c8.263 0 13.223 4.452 13.223 13.918v35.076c0 7.515 3.168 9.881 11.295 9.881h3.444v4.037c0 8.074-3.168 11.275-11.019 11.275zm-67.476-78.169c22.484 0 35.393 18.017 35.393 37.837 0 22.453-12.909 40.332-37.057 40.332-22.485 0-35.393-17.879-35.393-37.699 0-22.453 12.908-40.47 37.057-40.47zm-125.418 78.169c-18.269 0-32.692-12.169-32.692-33.878v-42.453h3.434c10.576 0 15.248 4.565 15.248 13.276v27.38c0 13.689 6.593 19.22 14.973 19.22 7.555 0 12.912-5.255 12.912-17.977v-41.899h3.298c10.713 0 15.247 4.565 15.247 13.276v27.932c0 23.23-10.852 35.123-32.42 35.123zm-80.518-87.738c2.477-2.919 5.779-5.146 8.667-5.146h4.265v16.965h25.723v7.648c0 3.893-3.438 8.899-11.004 8.899h-14.719v29.34c0 9.731 4.264 13.487 11.692 13.487 5.915 0 10.455-.836 13.344-2.642h.687v6.673c0 7.648-5.502 12.514-16.232 12.514-18.708 0-27.788-10.289-27.788-27.809v-45.05c0-7.371 1.376-10.152 5.365-14.879zm-61.821-1.085v44.645c7.22-9.428 14.301-18.994 22.908-27.174 4.445-4.159 8.887-4.854 14.858-4.854h10.69v.695c-5.276 4.436-22.633 24.122-30.406 33.967 5.97 7.348 11.802 14.974 18.465 21.768 6.803 6.793 9.858 8.179 14.439 9.706-1.943 5.961-4.997 9.15-12.634 9.15-4.165 0-9.025-1.941-12.217-5.131-9.58-9.844-17.911-20.934-26.103-31.888v36.464l-5.97.138c-8.607.141-12.774-4.435-12.774-13.171v-86.653h5.972c9.025 0 12.772 5.129 12.772 12.338zm-55.038 87.903h-3.712c-17.595 0-29.691-9.949-29.691-23.631 0-13.266 9.622-23.354 36.84-23.354h6.46v-.968c0-10.501-4.949-13.682-15.945-13.682-13.335 0-20.757 5.115-23.506 8.569h-.687v-5.943c0-8.29 7.422-18.24 26.942-18.24 16.494 0 31.34 7.737 31.34 33.442v17.136c0 15.754-11.546 26.671-28.041 26.671zm284.128-57.512c-2.771-1.107-5.959-2.214-10.809-2.214-8.317 0-12.891 4.565-12.891 15.913v42.894h-5.127c-8.316 0-13.582-4.151-13.582-11.9v-34.315c0-14.945 7.9-29.196 27.581-29.196 11.502 0 15.521 6.502 15.521 12.176v6.642zm-329.152-22.366h-28.956v23.507h33.895v5.671c0 6.083-4.802 9.402-9.058 9.402h-24.152v40.379h-7.823c-6.861 0-10.978-3.596-10.978-11.062v-69.004c0-11.754 4.665-14.658 15.645-14.658h42.131v5.947c0 4.424-3.294 9.818-10.704 9.818zm-175.085 58.861c0 7.212 5.85 11.506 16 11.506 9.982 0 14.8-4.809 14.8-14.256v-8.927h-8.258c-17.556 0-22.542 4.117-22.542 11.677zm655.182-40.391c-9.415 0-15.507 9.121-15.507 21.145 0 15.478 8.03 25.568 18.692 25.568 10.385 0 14.954-7.74 14.954-21.283 0-18.657-8.169-25.43-18.139-25.43zm-425.038 27.689h-6.598c-14.022 0-18.008 3.317-18.008 9.397 0 5.805 4.674 9.259 12.784 9.259 7.973 0 11.822-3.869 11.822-11.47zm311.096-26.899c-10.689 0-16.101 8.871-16.101 21.206 0 14.831 5.412 23.7 17.765 23.7 10.827 0 16.101-8.869 16.101-21.067 0-14.968-5.553-23.839-17.765-23.839zm56.054-19.61c-5.924 0-10.745-5.011-10.745-10.996s4.821-10.856 10.745-10.856c5.922 0 10.879 4.871 10.879 10.856s-4.957 10.996-10.879 10.996z" fill="#1a1919" transform="matrix(.867262 0 0 .611305 66.3788 77.8879)"/></g></svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
1
apps/vojtechmares.com/images/logos/glami.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="72" height="16" viewBox="0 0 72 16"><g fill="none" fill-rule="evenodd"><path style="fill: #000" d="M70.0355571,15.822208 L70.0355571,0.2448 L72,0.2448 L72,15.822208 L70.0355571,15.822208 Z M61.5776143,0.244864 L64.2676179,0.244864 L64.2676179,15.822304 L62.3701286,15.822304 L62.3701286,2.868704 L57.6152357,14.521312 L55.6954071,14.521312 L50.9405143,2.868704 L50.9405143,15.822304 L49.043025,15.822304 L49.043025,0.244864 L51.7330286,0.244864 L56.6553214,12.349568 L61.5776143,0.244864 Z M36.8866607,12.184192 L37.4997214,10.519488 L41.0092393,10.519488 L38.2970893,3.022944 L33.6426429,15.82224 L31.4994536,15.82224 L37.504575,0.244832 L39.0671036,0.244832 L45.072225,15.82224 L42.9403821,15.82224 L41.6230071,12.184192 L36.8866607,12.184192 Z M29.552175,13.981152 L28.8739607,15.822208 L20.5233429,15.822208 L20.5233429,0.2448 L22.4877857,0.2448 L22.4877857,13.981152 L29.552175,13.981152 Z M8.09971071,7.111104 L16.1999679,7.111104 L16.1999679,15.822208 L14.4000321,15.822208 L14.4000321,13.019904 C12.9140036,14.835904 10.6423071,16 8.09971071,16 C3.633525,16 0,12.4112 0,8 C0,3.5888 3.633525,0 8.09971071,0 C10.3329,0 12.3578357,0.897248 13.8244179,2.345792 L12.5522357,3.602304 C11.4114214,2.475552 9.83648571,1.777792 8.09971071,1.777792 C4.62603214,1.777792 1.79993571,4.569056 1.79993571,8 C1.79993571,11.430944 4.62603214,14.222208 8.09971071,14.222208 C11.267775,14.222208 13.8960643,11.900096 14.3341714,8.888896 L8.09971071,8.888896 L8.09971071,7.111104 Z"></path></g></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
1
apps/vojtechmares.com/images/logos/tools/amazonaws.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Amazon AWS</title><path d="M6.763 10.036c0 .296.032.535.088.71.064.176.144.368.256.576.04.063.056.127.056.183 0 .08-.048.16-.152.24l-.503.335a.383.383 0 0 1-.208.072c-.08 0-.16-.04-.239-.112a2.47 2.47 0 0 1-.287-.375 6.18 6.18 0 0 1-.248-.471c-.622.734-1.405 1.101-2.347 1.101-.67 0-1.205-.191-1.596-.574-.391-.384-.59-.894-.59-1.533 0-.678.239-1.23.726-1.644.487-.415 1.133-.623 1.955-.623.272 0 .551.024.846.064.296.04.6.104.918.176v-.583c0-.607-.127-1.03-.375-1.277-.255-.248-.686-.367-1.3-.367-.28 0-.568.031-.863.103-.295.072-.583.16-.862.272a2.287 2.287 0 0 1-.28.104.488.488 0 0 1-.127.023c-.112 0-.168-.08-.168-.247v-.391c0-.128.016-.224.056-.28a.597.597 0 0 1 .224-.167c.279-.144.614-.264 1.005-.36a4.84 4.84 0 0 1 1.246-.151c.95 0 1.644.216 2.091.647.439.43.662 1.085.662 1.963v2.586zm-3.24 1.214c.263 0 .534-.048.822-.144.287-.096.543-.271.758-.51.128-.152.224-.32.272-.512.047-.191.08-.423.08-.694v-.335a6.66 6.66 0 0 0-.735-.136 6.02 6.02 0 0 0-.75-.048c-.535 0-.926.104-1.19.32-.263.215-.39.518-.39.917 0 .375.095.655.295.846.191.2.47.296.838.296zm6.41.862c-.144 0-.24-.024-.304-.08-.064-.048-.12-.16-.168-.311L7.586 5.55a1.398 1.398 0 0 1-.072-.32c0-.128.064-.2.191-.2h.783c.151 0 .255.025.31.08.065.048.113.16.16.312l1.342 5.284 1.245-5.284c.04-.16.088-.264.151-.312a.549.549 0 0 1 .32-.08h.638c.152 0 .256.025.32.08.063.048.12.16.151.312l1.261 5.348 1.381-5.348c.048-.16.104-.264.16-.312a.52.52 0 0 1 .311-.08h.743c.127 0 .2.065.2.2 0 .04-.009.08-.017.128a1.137 1.137 0 0 1-.056.2l-1.923 6.17c-.048.16-.104.263-.168.311a.51.51 0 0 1-.303.08h-.687c-.151 0-.255-.024-.32-.08-.063-.056-.119-.16-.15-.32l-1.238-5.148-1.23 5.14c-.04.16-.087.264-.15.32-.065.056-.177.08-.32.08zm10.256.215c-.415 0-.83-.048-1.229-.143-.399-.096-.71-.2-.918-.32-.128-.071-.215-.151-.247-.223a.563.563 0 0 1-.048-.224v-.407c0-.167.064-.247.183-.247.048 0 .096.008.144.024.048.016.12.048.2.08.271.12.566.215.878.279.319.064.63.096.95.096.502 0 .894-.088 1.165-.264a.86.86 0 0 0 .415-.758.777.777 0 0 0-.215-.559c-.144-.151-.416-.287-.807-.415l-1.157-.36c-.583-.183-1.014-.454-1.277-.813a1.902 1.902 0 0 1-.4-1.158c0-.335.073-.63.216-.886.144-.255.335-.479.575-.654.24-.184.51-.32.83-.415.32-.096.655-.136 1.006-.136.175 0 .359.008.535.032.183.024.35.056.518.088.16.04.312.08.455.127.144.048.256.096.336.144a.69.69 0 0 1 .24.2.43.43 0 0 1 .071.263v.375c0 .168-.064.256-.184.256a.83.83 0 0 1-.303-.096 3.652 3.652 0 0 0-1.532-.311c-.455 0-.815.071-1.062.223-.248.152-.375.383-.375.71 0 .224.08.416.24.567.159.152.454.304.877.44l1.134.358c.574.184.99.44 1.237.767.247.327.367.702.367 1.117 0 .343-.072.655-.207.926-.144.272-.336.511-.583.703-.248.2-.543.343-.886.447-.36.111-.734.167-1.142.167zM21.698 16.207c-2.626 1.94-6.442 2.969-9.722 2.969-4.598 0-8.74-1.7-11.87-4.526-.247-.223-.024-.527.272-.351 3.384 1.963 7.559 3.153 11.877 3.153 2.914 0 6.114-.607 9.06-1.852.439-.2.814.287.383.607zM22.792 14.961c-.336-.43-2.22-.207-3.074-.103-.255.032-.295-.192-.063-.36 1.5-1.053 3.967-.75 4.254-.399.287.36-.08 2.826-1.485 4.007-.215.184-.423.088-.327-.151.32-.79 1.03-2.57.695-2.994z"/></svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
1
apps/vojtechmares.com/images/logos/tools/apachekafka.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Apache Kafka</title><path d="M9.71 2.136a1.43 1.43 0 0 0-2.047 0h-.007a1.48 1.48 0 0 0-.421 1.042c0 .41.161.777.422 1.039l.007.007c.257.264.616.426 1.019.426.404 0 .766-.162 1.027-.426l.003-.007c.261-.262.421-.629.421-1.039 0-.408-.159-.777-.421-1.042H9.71zM8.683 22.295c.404 0 .766-.167 1.027-.429l.003-.008c.261-.261.421-.631.421-1.036 0-.41-.159-.778-.421-1.044H9.71a1.42 1.42 0 0 0-1.027-.432 1.4 1.4 0 0 0-1.02.432h-.007c-.26.266-.422.634-.422 1.044 0 .406.161.775.422 1.036l.007.008c.258.262.617.429 1.02.429zm7.89-4.462c.359-.096.683-.33.882-.684l.027-.052a1.47 1.47 0 0 0 .114-1.067 1.454 1.454 0 0 0-.675-.896l-.021-.014a1.425 1.425 0 0 0-1.078-.132c-.36.091-.684.335-.881.686-.2.349-.241.75-.146 1.119.099.363.33.691.675.896h.002c.346.203.737.239 1.101.144zm-6.405-7.342a2.083 2.083 0 0 0-1.485-.627c-.58 0-1.103.242-1.482.627-.378.385-.612.916-.612 1.507s.233 1.124.612 1.514a2.08 2.08 0 0 0 2.967 0c.379-.39.612-.923.612-1.514s-.233-1.122-.612-1.507zm-.835-2.51c.843.141 1.6.552 2.178 1.144h.004c.092.093.182.196.265.299l1.446-.851a3.176 3.176 0 0 1-.047-1.808 3.149 3.149 0 0 1 1.456-1.926l.025-.016a3.062 3.062 0 0 1 2.345-.306c.77.21 1.465.721 1.898 1.482v.002c.431.757.518 1.626.313 2.408a3.145 3.145 0 0 1-1.456 1.928l-.198.118h-.02a3.095 3.095 0 0 1-2.154.201 3.127 3.127 0 0 1-1.514-.944l-1.444.848a4.162 4.162 0 0 1 0 2.879l1.444.846c.413-.47.939-.789 1.514-.944a3.041 3.041 0 0 1 2.371.319l.048.023v.002a3.17 3.17 0 0 1 1.408 1.906 3.215 3.215 0 0 1-.313 2.405l-.026.053-.003-.005a3.147 3.147 0 0 1-1.867 1.436 3.096 3.096 0 0 1-2.371-.318v-.006a3.156 3.156 0 0 1-1.456-1.927 3.175 3.175 0 0 1 .047-1.805l-1.446-.848a3.905 3.905 0 0 1-.265.294l-.004.005a3.938 3.938 0 0 1-2.178 1.138v1.699a3.09 3.09 0 0 1 1.56.862l.002.004c.565.572.914 1.368.914 2.243 0 .873-.35 1.664-.914 2.239l-.002.009a3.1 3.1 0 0 1-2.21.931 3.1 3.1 0 0 1-2.206-.93h-.002v-.009a3.186 3.186 0 0 1-.916-2.239c0-.875.35-1.672.916-2.243v-.004h.002a3.1 3.1 0 0 1 1.558-.862v-1.699a3.926 3.926 0 0 1-2.176-1.138l-.006-.005a4.098 4.098 0 0 1-1.173-2.874c0-1.122.452-2.136 1.173-2.872h.006a3.947 3.947 0 0 1 2.176-1.144V6.289a3.137 3.137 0 0 1-1.558-.864h-.002v-.004a3.192 3.192 0 0 1-.916-2.243c0-.871.35-1.669.916-2.243l.002-.002A3.084 3.084 0 0 1 8.683 0c.861 0 1.641.355 2.21.932v.002h.002c.565.574.914 1.372.914 2.243 0 .876-.35 1.667-.914 2.243l-.002.005a3.142 3.142 0 0 1-1.56.864v1.692zm8.121-1.129l-.012-.019a1.452 1.452 0 0 0-.87-.668 1.43 1.43 0 0 0-1.103.146h.002c-.347.2-.58.529-.677.896-.095.365-.054.768.146 1.119l.007.009c.2.347.519.579.874.673.357.103.755.059 1.098-.144l.019-.009a1.47 1.47 0 0 0 .657-.885 1.493 1.493 0 0 0-.141-1.118"/></svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
BIN
apps/vojtechmares.com/images/logos/tools/argo.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
1
apps/vojtechmares.com/images/logos/tools/argo.svg
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
1
apps/vojtechmares.com/images/logos/tools/cilium.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Cilium</title><path d="M13.607 14.583h-3.215l-1.626-2.764 1.626-2.802h3.215l1.626 2.802-1.626 2.764ZM14.186 8H9.799l-2.2 3.813 2.2 3.787h4.387l2.213-3.787L14.186 8Zm-4.387 8.4-2.2 3.813L9.799 24h4.387l2.213-3.787-2.213-3.813H9.799Zm-1.034 3.819 1.627-2.802h3.215l1.626 2.802-1.626 2.765h-3.215l-1.627-2.765ZM9.799 0l-2.2 3.813 2.2 3.787h4.387l2.213-3.787L14.186 0H9.799ZM8.765 3.819l1.627-2.802h3.215l1.626 2.802-1.626 2.764h-3.215L8.765 3.819Zm8.234 8.581-2.2 3.813 2.2 3.787h4.388l2.213-3.787-2.213-3.813h-4.388Zm-1.034 3.819 1.627-2.802h3.215l1.626 2.802-1.626 2.765h-3.215l-1.627-2.765ZM16.999 4l-2.2 3.813 2.2 3.787h4.388L23.6 7.813 21.387 4h-4.388Zm-1.034 3.819 1.627-2.802h3.215l1.626 2.802-1.626 2.764h-3.215l-1.627-2.764ZM2.599 12.4l-2.2 3.813L2.599 20h4.387l2.213-3.787L6.986 12.4H2.599Zm-1.034 3.819 1.627-2.802h3.214l1.627 2.802-1.627 2.765H3.192l-1.627-2.765ZM2.599 4l-2.2 3.813 2.2 3.787h4.387l2.213-3.787L6.986 4H2.599ZM1.565 7.819l1.627-2.802h3.214l1.627 2.802-1.627 2.764H3.192L1.565 7.819Z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
1
apps/vojtechmares.com/images/logos/tools/civo.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Civo</title><path d="M9.229 7.985h-.993c-.183 0-.303.14-.303.318v7.393c0 .177.12.318.303.318h.993a.318.318 0 0 0 .323-.318V8.303a.317.317 0 0 0-.323-.318m-3.1 5.838a.32.32 0 0 0-.507-.104 2.34 2.34 0 0 1-1.604.635c-1.627 0-2.868-1.65-2.141-3.368a2.128 2.128 0 0 1 1.13-1.128c.992-.42 1.958-.18 2.599.408a.32.32 0 0 0 .507-.103l.43-.943a.353.353 0 0 0-.111-.428C5.425 8.03 4.05 7.732 2.617 8.22a3.838 3.838 0 0 0-2.412 2.478c-.874 2.772 1.172 5.32 3.813 5.32.92 0 1.764-.31 2.44-.831a.348.348 0 0 0 .101-.42zm17.666-3.125a3.838 3.838 0 0 0-2.412-2.478 4.176 4.176 0 0 0-2.329-.13c-1.2.269-2.07.838-2.834 2.479l-1.534 3.326-2.603-5.722a.32.32 0 0 0-.29-.187l-1.138-.002a.32.32 0 0 0-.292.453l3.376 7.382a.324.324 0 0 0 .291.19l.056.005h1.276a.236.236 0 0 0 .076-.013.335.335 0 0 0 .2-.18l1.71-3.893c.515-1.213.827-1.718 1.643-2.065a2.527 2.527 0 0 1 2.054.026c.492.222.878.629 1.084 1.128a2.701 2.701 0 0 1 .206.95 2.354 2.354 0 0 1-2.353 2.387 2.34 2.34 0 0 1-1.604-.635.32.32 0 0 0-.507.104l-.43.944a.348.348 0 0 0 .1.42c.677.52 1.522.831 2.44.831 2.642 0 4.688-2.548 3.814-5.32"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
1
apps/vojtechmares.com/images/logos/tools/consul.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Consul</title><path d="M14.0754 12.0285a2.5059 2.5059 0 0 0-2.506-2.506 2.5059 2.5059 0 0 0-2.5058 2.506 2.5059 2.5059 0 0 0 2.5059 2.5059 2.5059 2.5059 0 0 0 2.5059-2.506zm3.5317.0003a1.1559 1.1556 0 0 0-1.1558-1.1556 1.1559 1.1556 0 0 0-1.1559 1.1556 1.1559 1.1556 0 0 0 1.1559 1.1555 1.1559 1.1556 0 0 0 1.1558-1.1555zm4.7917 5.5103a1.1576 1.1564 0 0 0-1.1577-1.1564 1.1576 1.1564 0 0 0-1.1576 1.1564 1.1576 1.1564 0 0 0 1.1576 1.1564 1.1576 1.1564 0 0 0 1.1577-1.1564zM20.748 13.888a1.1534 1.157 0 0 0-1.1533-1.157 1.1534 1.157 0 0 0-1.1534 1.157 1.1534 1.157 0 0 0 1.1534 1.1571 1.1534 1.157 0 0 0 1.1533-1.157zm3.2512.0619a1.1542 1.1538 0 0 0-1.1542-1.1538 1.1542 1.1538 0 0 0-1.1542 1.1538 1.1542 1.1538 0 0 0 1.1542 1.1538 1.1542 1.1538 0 0 0 1.1542-1.1538zm-3.279-3.883a1.1561 1.1535 0 0 0-1.156-1.1535 1.1561 1.1535 0 0 0-1.1562 1.1535 1.1561 1.1535 0 0 0 1.1561 1.1535 1.1561 1.1535 0 0 0 1.1562-1.1535zm3.2798.045a1.1614 1.157 0 0 0-1.1614-1.157 1.1614 1.157 0 0 0-1.1613 1.157 1.1614 1.157 0 0 0 1.1613 1.1572A1.1614 1.157 0 0 0 24 10.1119zm-1.626-3.631a1.1575 1.1601 0 0 0-1.1575-1.16 1.1575 1.1601 0 0 0-1.1575 1.16 1.1575 1.1601 0 0 0 1.1575 1.1602A1.1575 1.1601 0 0 0 22.374 6.481zM11.6171.3832c-3.1098 0-6.029 1.2063-8.2197 3.3974C1.206 5.9822 0 8.9007 0 11.9998c0 3.109 1.2067 6.0279 3.3974 8.2193 2.2028 2.1922 5.1213 3.3978 8.2197 3.3978 2.578 0 5.0176-.8252 7.055-2.386l-1.4196-1.8524c-1.6263 1.246-3.5748 1.9048-5.6354 1.9048-2.4776 0-4.8112-.9641-6.5717-2.7154-1.748-1.7488-2.7118-4.0828-2.7118-6.568 0-2.4784.9645-4.812 2.7158-6.5703 1.7484-1.7488 4.0817-2.713 6.5677-2.713 2.058 0 4.0069.659 5.6365 1.9057l1.4179-1.854C16.6314 1.2083 14.1922.3831 11.617.3831Z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>DigitalOcean</title><path d="M12.04 0C5.408-.02.005 5.37.005 11.992h4.638c0-4.923 4.882-8.731 10.064-6.855a6.95 6.95 0 014.147 4.148c1.889 5.177-1.924 10.055-6.84 10.064v-4.61H7.391v4.623h4.61V24c7.86 0 13.967-7.588 11.397-15.83-1.115-3.59-3.985-6.446-7.575-7.575A12.8 12.8 0 0012.039 0zM7.39 19.362H3.828v3.564H7.39zm-3.563 0v-2.978H.85v2.978z"/></svg>
|
||||
|
After Width: | Height: | Size: 431 B |
BIN
apps/vojtechmares.com/images/logos/tools/git.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
1
apps/vojtechmares.com/images/logos/tools/git.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Git</title><path d="M23.546 10.93L13.067.452c-.604-.603-1.582-.603-2.188 0L8.708 2.627l2.76 2.76c.645-.215 1.379-.07 1.889.441.516.515.658 1.258.438 1.9l2.658 2.66c.645-.223 1.387-.078 1.9.435.721.72.721 1.884 0 2.604-.719.719-1.881.719-2.6 0-.539-.541-.674-1.337-.404-1.996L12.86 8.955v6.525c.176.086.342.203.488.348.713.721.713 1.883 0 2.6-.719.721-1.889.721-2.609 0-.719-.719-.719-1.879 0-2.598.182-.18.387-.316.605-.406V8.835c-.217-.091-.424-.222-.6-.401-.545-.545-.676-1.342-.396-2.009L7.636 3.7.45 10.881c-.6.605-.6 1.584 0 2.189l10.48 10.477c.604.604 1.582.604 2.186 0l10.43-10.43c.605-.603.605-1.582 0-2.187"/></svg>
|
||||
|
After Width: | Height: | Size: 702 B |
1
apps/vojtechmares.com/images/logos/tools/github.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
|
||||
|
After Width: | Height: | Size: 822 B |
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub Actions</title><path d="M10.984 13.836a.5.5 0 0 1-.353-.146l-.745-.743a.5.5 0 1 1 .706-.708l.392.391 1.181-1.18a.5.5 0 0 1 .708.707l-1.535 1.533a.504.504 0 0 1-.354.146zm9.353-.147l1.534-1.532a.5.5 0 0 0-.707-.707l-1.181 1.18-.392-.391a.5.5 0 1 0-.706.708l.746.743a.497.497 0 0 0 .706-.001zM4.527 7.452l2.557-1.585A1 1 0 0 0 7.09 4.17L4.533 2.56A1 1 0 0 0 3 3.406v3.196a1.001 1.001 0 0 0 1.527.85zm2.03-2.436L4 6.602V3.406l2.557 1.61zM24 12.5c0 1.93-1.57 3.5-3.5 3.5a3.503 3.503 0 0 1-3.46-3h-2.08a3.503 3.503 0 0 1-3.46 3 3.502 3.502 0 0 1-3.46-3h-.558c-.972 0-1.85-.399-2.482-1.042V17c0 1.654 1.346 3 3 3h.04c.244-1.693 1.7-3 3.46-3 1.93 0 3.5 1.57 3.5 3.5S13.43 24 11.5 24a3.502 3.502 0 0 1-3.46-3H8c-2.206 0-4-1.794-4-4V9.899A5.008 5.008 0 0 1 0 5c0-2.757 2.243-5 5-5s5 2.243 5 5a5.005 5.005 0 0 1-4.952 4.998A2.482 2.482 0 0 0 7.482 12h.558c.244-1.693 1.7-3 3.46-3a3.502 3.502 0 0 1 3.46 3h2.08a3.503 3.503 0 0 1 3.46-3c1.93 0 3.5 1.57 3.5 3.5zm-15 8c0 1.378 1.122 2.5 2.5 2.5s2.5-1.122 2.5-2.5-1.122-2.5-2.5-2.5S9 19.122 9 20.5zM5 9c2.206 0 4-1.794 4-4S7.206 1 5 1 1 2.794 1 5s1.794 4 4 4zm9 3.5c0-1.378-1.122-2.5-2.5-2.5S9 11.122 9 12.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5zm9 0c0-1.378-1.122-2.5-2.5-2.5S18 11.122 18 12.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5zm-13 8a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm2 0a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm12 0c0 1.93-1.57 3.5-3.5 3.5a3.503 3.503 0 0 1-3.46-3.002c-.007.001-.013.005-.021.005l-.506.017h-.017a.5.5 0 0 1-.016-.999l.506-.017c.018-.002.035.006.052.007A3.503 3.503 0 0 1 20.5 17c1.93 0 3.5 1.57 3.5 3.5zm-1 0c0-1.378-1.122-2.5-2.5-2.5S18 19.122 18 20.5s1.122 2.5 2.5 2.5 2.5-1.122 2.5-2.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
1
apps/vojtechmares.com/images/logos/tools/gitlab.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitLab</title><path d="m23.6004 9.5927-.0337-.0862L20.3.9814a.851.851 0 0 0-.3362-.405.8748.8748 0 0 0-.9997.0539.8748.8748 0 0 0-.29.4399l-2.2055 6.748H7.5375l-2.2057-6.748a.8573.8573 0 0 0-.29-.4412.8748.8748 0 0 0-.9997-.0537.8585.8585 0 0 0-.3362.4049L.4332 9.5015l-.0325.0862a6.0657 6.0657 0 0 0 2.0119 7.0105l.0113.0087.03.0213 4.976 3.7264 2.462 1.8633 1.4995 1.1321a1.0085 1.0085 0 0 0 1.2197 0l1.4995-1.1321 2.4619-1.8633 5.006-3.7489.0125-.01a6.0682 6.0682 0 0 0 2.0094-7.003z"/></svg>
|
||||
|
After Width: | Height: | Size: 573 B |
1
apps/vojtechmares.com/images/logos/tools/goland.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GoLand</title><path d="M0 0v24h24V0Zm6.764 3a5.448 5.448 0 0 1 3.892 1.356L9.284 6.012A3.652 3.652 0 0 0 6.696 5c-1.6 0-2.844 1.4-2.844 3.08v.028c0 1.812 1.244 3.14 3 3.14a3.468 3.468 0 0 0 2.048-.596V9.228H6.708v-1.88H11v4.296a6.428 6.428 0 0 1-4.228 1.572c-3.076 0-5.196-2.164-5.196-5.092v-.028A5.08 5.08 0 0 1 6.764 3Zm10.432 0c3.052 0 5.244 2.276 5.244 5.088v.028a5.116 5.116 0 0 1-5.272 5.12c-3.056-.02-5.248-2.296-5.248-5.112v-.028A5.116 5.116 0 0 1 17.196 3Zm-.028 2A2.96 2.96 0 0 0 14.2 8.068v.028a3.008 3.008 0 0 0 3 3.112 2.96 2.96 0 0 0 2.964-3.084v-.028A3.004 3.004 0 0 0 17.168 5ZM2.252 19.5h9V21h-9z"/></svg>
|
||||
|
After Width: | Height: | Size: 700 B |
1
apps/vojtechmares.com/images/logos/tools/googlecloud.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Google Cloud</title><path d="M12.19 2.38a9.344 9.344 0 0 0-9.234 6.893c.053-.02-.055.013 0 0-3.875 2.551-3.922 8.11-.247 10.941l.006-.007-.007.03a6.717 6.717 0 0 0 4.077 1.356h5.173l.03.03h5.192c6.687.053 9.376-8.605 3.835-12.35a9.365 9.365 0 0 0-2.821-4.552l-.043.043.006-.05A9.344 9.344 0 0 0 12.19 2.38zm-.358 4.146c1.244-.04 2.518.368 3.486 1.15a5.186 5.186 0 0 1 1.862 4.078v.518c3.53-.07 3.53 5.262 0 5.193h-5.193l-.008.009v-.04H6.785a2.59 2.59 0 0 1-1.067-.23h.001a2.597 2.597 0 1 1 3.437-3.437l3.013-3.012A6.747 6.747 0 0 0 8.11 8.24c.018-.01.04-.026.054-.023a5.186 5.186 0 0 1 3.67-1.69z"/></svg>
|
||||
|
After Width: | Height: | Size: 683 B |
1
apps/vojtechmares.com/images/logos/tools/grafana.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Grafana</title><path d="M23.02 10.59a8.578 8.578 0 0 0-.862-3.034 8.911 8.911 0 0 0-1.789-2.445c.337-1.342-.413-2.505-.413-2.505-1.292-.08-2.113.4-2.416.62-.052-.02-.102-.044-.154-.064-.22-.089-.446-.172-.677-.247-.231-.073-.47-.14-.711-.197a9.867 9.867 0 0 0-.875-.161C14.557.753 12.94 0 12.94 0c-1.804 1.145-2.147 2.744-2.147 2.744l-.018.093c-.098.029-.2.057-.298.088-.138.042-.275.094-.413.143-.138.055-.275.107-.41.166a8.869 8.869 0 0 0-1.557.87l-.063-.029c-2.497-.955-4.716.195-4.716.195-.203 2.658.996 4.33 1.235 4.636a11.608 11.608 0 0 0-.607 2.635C1.636 12.677.953 15.014.953 15.014c1.926 2.214 4.171 2.351 4.171 2.351.003-.002.006-.002.006-.005.285.509.615.994.986 1.446.156.19.32.371.488.548-.704 2.009.099 3.68.099 3.68 2.144.08 3.553-.937 3.849-1.173a9.784 9.784 0 0 0 3.164.501h.08l.055-.003.107-.002.103-.005.003.002c1.01 1.44 2.788 1.646 2.788 1.646 1.264-1.332 1.337-2.653 1.337-2.94v-.058c0-.02-.003-.039-.003-.06.265-.187.52-.387.758-.6a7.875 7.875 0 0 0 1.415-1.7c1.43.083 2.437-.885 2.437-.885-.236-1.49-1.085-2.216-1.264-2.354l-.018-.013-.016-.013a.217.217 0 0 1-.031-.02c.008-.092.016-.18.02-.27.011-.162.016-.323.016-.48v-.253l-.005-.098-.008-.135a1.891 1.891 0 0 0-.01-.13c-.003-.042-.008-.083-.013-.125l-.016-.124-.018-.122a6.215 6.215 0 0 0-2.032-3.73 6.015 6.015 0 0 0-3.222-1.46 6.292 6.292 0 0 0-.85-.048l-.107.002h-.063l-.044.003-.104.008a4.777 4.777 0 0 0-3.335 1.695c-.332.4-.592.84-.768 1.297a4.594 4.594 0 0 0-.312 1.817l.003.091c.005.055.007.11.013.164a3.615 3.615 0 0 0 .698 1.82 3.53 3.53 0 0 0 1.827 1.282c.33.098.66.14.971.137.039 0 .078 0 .114-.002l.063-.003c.02 0 .041-.003.062-.003.034-.002.065-.007.099-.01.007 0 .018-.003.028-.003l.031-.005.06-.008a1.18 1.18 0 0 0 .112-.02c.036-.008.072-.013.109-.024a2.634 2.634 0 0 0 .914-.415c.028-.02.056-.041.085-.065a.248.248 0 0 0 .039-.35.244.244 0 0 0-.309-.06l-.078.042c-.09.044-.184.083-.283.116a2.476 2.476 0 0 1-.475.096c-.028.003-.054.006-.083.006l-.083.002c-.026 0-.054 0-.08-.002l-.102-.006h-.012l-.024.006c-.016-.003-.031-.003-.044-.006-.031-.002-.06-.007-.091-.01a2.59 2.59 0 0 1-.724-.213 2.557 2.557 0 0 1-.667-.438 2.52 2.52 0 0 1-.805-1.475 2.306 2.306 0 0 1-.029-.444l.006-.122v-.023l.002-.031c.003-.021.003-.04.005-.06a3.163 3.163 0 0 1 1.352-2.29 3.12 3.12 0 0 1 .937-.43 2.946 2.946 0 0 1 .776-.101h.06l.07.002.045.003h.026l.07.005a4.041 4.041 0 0 1 1.635.49 3.94 3.94 0 0 1 1.602 1.662 3.77 3.77 0 0 1 .397 1.414l.005.076.003.075c.002.026.002.05.002.075 0 .024.003.052 0 .07v.065l-.002.073-.008.174a6.195 6.195 0 0 1-.08.639 5.1 5.1 0 0 1-.267.927 5.31 5.31 0 0 1-.624 1.13 5.052 5.052 0 0 1-3.237 2.014 4.82 4.82 0 0 1-.649.066l-.039.003h-.287a6.607 6.607 0 0 1-1.716-.265 6.776 6.776 0 0 1-3.4-2.274 6.75 6.75 0 0 1-.746-1.15 6.616 6.616 0 0 1-.714-2.596l-.005-.083-.002-.02v-.056l-.003-.073v-.096l-.003-.104v-.07l.003-.163c.008-.22.026-.45.054-.678a8.707 8.707 0 0 1 .28-1.355c.128-.444.286-.872.473-1.277a7.04 7.04 0 0 1 1.456-2.1 5.925 5.925 0 0 1 .953-.763c.169-.111.343-.213.524-.306.089-.05.182-.091.273-.135.047-.02.093-.042.138-.062a7.177 7.177 0 0 1 .714-.267l.145-.045c.049-.015.098-.026.148-.041.098-.029.197-.052.296-.076.049-.013.1-.02.15-.033l.15-.032.151-.028.076-.013.075-.01.153-.024c.057-.01.114-.013.171-.023l.169-.021c.036-.003.073-.008.106-.01l.073-.008.036-.003.042-.002c.057-.003.114-.008.171-.01l.086-.006h.023l.037-.003.145-.007a7.999 7.999 0 0 1 1.708.125 7.917 7.917 0 0 1 2.048.68 8.253 8.253 0 0 1 1.672 1.09l.09.077.089.078c.06.052.114.107.171.159.057.052.112.106.166.16.052.055.107.107.159.164a8.671 8.671 0 0 1 1.41 1.978c.012.026.028.052.04.078l.04.078.075.156c.023.051.05.1.07.153l.065.15a8.848 8.848 0 0 1 .45 1.34.19.19 0 0 0 .201.142.186.186 0 0 0 .172-.184c.01-.246.002-.532-.024-.856z"/></svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
1
apps/vojtechmares.com/images/logos/tools/k3s.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>K3s</title><path d="M21.46 2.172H2.54A2.548 2.548 0 0 0 0 4.712v14.575a2.548 2.548 0 0 0 2.54 2.54h18.92a2.548 2.548 0 0 0 2.54-2.54V4.713a2.548 2.548 0 0 0-2.54-2.54ZM10.14 16.465 5.524 19.15a1.235 1.235 0 1 1-1.242-2.137L8.9 14.33a1.235 1.235 0 1 1 1.241 2.136zm1.817-4.088h-.006a1.235 1.235 0 0 1-1.23-1.24l.023-5.32a1.236 1.236 0 0 1 1.236-1.23h.005a1.235 1.235 0 0 1 1.23 1.241l-.023 5.32a1.236 1.236 0 0 1-1.235 1.23zm8.17 6.32a1.235 1.235 0 0 1-1.688.453l-4.624-2.67a1.235 1.235 0 1 1 1.235-2.14l4.624 2.67a1.235 1.235 0 0 1 .452 1.688z"/></svg>
|
||||
|
After Width: | Height: | Size: 630 B |
BIN
apps/vojtechmares.com/images/logos/tools/kubernetes.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
1
apps/vojtechmares.com/images/logos/tools/kubernetes.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Kubernetes</title><path d="M10.204 14.35l.007.01-.999 2.413a5.171 5.171 0 0 1-2.075-2.597l2.578-.437.004.005a.44.44 0 0 1 .484.606zm-.833-2.129a.44.44 0 0 0 .173-.756l.002-.011L7.585 9.7a5.143 5.143 0 0 0-.73 3.255l2.514-.725.002-.009zm1.145-1.98a.44.44 0 0 0 .699-.337l.01-.005.15-2.62a5.144 5.144 0 0 0-3.01 1.442l2.147 1.523.004-.002zm.76 2.75l.723.349.722-.347.18-.78-.5-.623h-.804l-.5.623.179.779zm1.5-3.095a.44.44 0 0 0 .7.336l.008.003 2.134-1.513a5.188 5.188 0 0 0-2.992-1.442l.148 2.615.002.001zm10.876 5.97l-5.773 7.181a1.6 1.6 0 0 1-1.248.594l-9.261.003a1.6 1.6 0 0 1-1.247-.596l-5.776-7.18a1.583 1.583 0 0 1-.307-1.34L2.1 5.573c.108-.47.425-.864.863-1.073L11.305.513a1.606 1.606 0 0 1 1.385 0l8.345 3.985c.438.209.755.604.863 1.073l2.062 8.955c.108.47-.005.963-.308 1.34zm-3.289-2.057c-.042-.01-.103-.026-.145-.034-.174-.033-.315-.025-.479-.038-.35-.037-.638-.067-.895-.148-.105-.04-.18-.165-.216-.216l-.201-.059a6.45 6.45 0 0 0-.105-2.332 6.465 6.465 0 0 0-.936-2.163c.052-.047.15-.133.177-.159.008-.09.001-.183.094-.282.197-.185.444-.338.743-.522.142-.084.273-.137.415-.242.032-.024.076-.062.11-.089.24-.191.295-.52.123-.736-.172-.216-.506-.236-.745-.045-.034.027-.08.062-.111.088-.134.116-.217.23-.33.35-.246.25-.45.458-.673.609-.097.056-.239.037-.303.033l-.19.135a6.545 6.545 0 0 0-4.146-2.003l-.012-.223c-.065-.062-.143-.115-.163-.25-.022-.268.015-.557.057-.905.023-.163.061-.298.068-.475.001-.04-.001-.099-.001-.142 0-.306-.224-.555-.5-.555-.275 0-.499.249-.499.555l.001.014c0 .041-.002.092 0 .128.006.177.044.312.067.475.042.348.078.637.056.906a.545.545 0 0 1-.162.258l-.012.211a6.424 6.424 0 0 0-4.166 2.003 8.373 8.373 0 0 1-.18-.128c-.09.012-.18.04-.297-.029-.223-.15-.427-.358-.673-.608-.113-.12-.195-.234-.329-.349-.03-.026-.077-.062-.111-.088a.594.594 0 0 0-.348-.132.481.481 0 0 0-.398.176c-.172.216-.117.546.123.737l.007.005.104.083c.142.105.272.159.414.242.299.185.546.338.743.522.076.082.09.226.1.288l.16.143a6.462 6.462 0 0 0-1.02 4.506l-.208.06c-.055.072-.133.184-.215.217-.257.081-.546.11-.895.147-.164.014-.305.006-.48.039-.037.007-.09.02-.133.03l-.004.002-.007.002c-.295.071-.484.342-.423.608.061.267.349.429.645.365l.007-.001.01-.003.129-.029c.17-.046.294-.113.448-.172.33-.118.604-.217.87-.256.112-.009.23.069.288.101l.217-.037a6.5 6.5 0 0 0 2.88 3.596l-.09.218c.033.084.069.199.044.282-.097.252-.263.517-.452.813-.091.136-.185.242-.268.399-.02.037-.045.095-.064.134-.128.275-.034.591.213.71.248.12.556-.007.69-.282v-.002c.02-.039.046-.09.062-.127.07-.162.094-.301.144-.458.132-.332.205-.68.387-.897.05-.06.13-.082.215-.105l.113-.205a6.453 6.453 0 0 0 4.609.012l.106.192c.086.028.18.042.256.155.136.232.229.507.342.84.05.156.074.295.145.457.016.037.043.09.062.129.133.276.442.402.69.282.247-.118.341-.435.213-.71-.02-.039-.045-.096-.065-.134-.083-.156-.177-.261-.268-.398-.19-.296-.346-.541-.443-.793-.04-.13.007-.21.038-.294-.018-.022-.059-.144-.083-.202a6.499 6.499 0 0 0 2.88-3.622c.064.01.176.03.213.038.075-.05.144-.114.28-.104.266.039.54.138.87.256.154.06.277.128.448.173.036.01.088.019.13.028l.009.003.007.001c.297.064.584-.098.645-.365.06-.266-.128-.537-.423-.608zM16.4 9.701l-1.95 1.746v.005a.44.44 0 0 0 .173.757l.003.01 2.526.728a5.199 5.199 0 0 0-.108-1.674A5.208 5.208 0 0 0 16.4 9.7zm-4.013 5.325a.437.437 0 0 0-.404-.232.44.44 0 0 0-.372.233h-.002l-1.268 2.292a5.164 5.164 0 0 0 3.326.003l-1.27-2.296h-.01zm1.888-1.293a.44.44 0 0 0-.27.036.44.44 0 0 0-.214.572l-.003.004 1.01 2.438a5.15 5.15 0 0 0 2.081-2.615l-2.6-.44-.004.005z"/></svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
1
apps/vojtechmares.com/images/logos/tools/linode.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Linode</title><path d="M22.006 10.684a.15.15 0 0 0-.07-.15l-3.261-1.821a.14.14 0 0 0-.14 0l-2.771 1.69a.17.17 0 0 0-.07.13v1.451l-1.13-.74a.14.14 0 0 0-.15 0l-1.62 1-.071-1.64a.19.19 0 0 0-.07-.12l-1.65-1.09 1.51-.781a.16.16 0 0 0 .08-.14l-.27-6.272a.16.16 0 0 0-.08-.13L8 0h-.1L2.08 1.81A.16.16 0 0 0 2 2l1.27 6.233a.22.22 0 0 0 0 .08l1.83 1.38-1.26.6a.16.16 0 0 0-.08.17l1 4.702a.18.18 0 0 0 0 .07L6 16.375l-.8.49a.15.15 0 0 0-.06.16l.75 3.642a.11.11 0 0 0 0 .07l3.002 3.221a.14.14 0 0 0 .2 0l3.921-3.121a.16.16 0 0 0 .06-.12l-.07-2.12 1.32 1.1a.14.14 0 0 0 .18 0l3.142-2.511a.24.24 0 0 0 .06-.11l.09-1.57 1 .67a.14.14 0 0 0 .17 0l2.571-2.001a.14.14 0 0 0 .05-.1zm-9.623.15l.07 1.57.12 2.781-4.231 2.871-.66-4.532zm-.35-8.423l.25 5.912-5.002 2.59-.9-6.321zM3.54 8.123L2.33 2.26l3.74 2.32.931 6.203-1.58-1.2zM5 15.055l-.88-4.261 3.281 2.74.6 4.382-1.68-1.62zm1.14 5.512l-.65-3.141 2.892 2.85.47 3.162zm3.002 3l-.49-3.33 4.001-2.871.14 3.28zm3.861-5.36v-1.081a.16.16 0 0 0-.05-.11l-1.13-.92 1-.7a.14.14 0 0 0 .06-.12v-.261l1.39 1.06v3.211zm4.442-1.201l-2.861 2.28v-3.22l3.07-2.201zm1.29-1.21l-.9-.631.09-1.59a.11.11 0 0 0 0-.06.1.1 0 0 0 0-.05l-1.93-1.27v-1.391l3 1.89zm2.55-1.861l-2.28 1.81.26-3.06 2.431-1.681z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Microsoft Azure</title><path d="M22.379 23.343a1.62 1.62 0 0 0 1.536-2.14v.002L17.35 1.76A1.62 1.62 0 0 0 15.816.657H8.184A1.62 1.62 0 0 0 6.65 1.76L.086 21.204a1.62 1.62 0 0 0 1.536 2.139h4.741a1.62 1.62 0 0 0 1.535-1.103l.977-2.892 4.947 3.675c.28.208.618.32.966.32m-3.084-12.531 3.624 10.739a.54.54 0 0 1-.51.713v-.001h-.03a.54.54 0 0 1-.322-.106l-9.287-6.9h4.853m6.313 7.006c.116-.326.13-.694.007-1.058L9.79 1.76a1.722 1.722 0 0 0-.007-.02h6.034a.54.54 0 0 1 .512.366l6.562 19.445a.54.54 0 0 1-.338.684"/></svg>
|
||||
|
After Width: | Height: | Size: 593 B |
1
apps/vojtechmares.com/images/logos/tools/mysql.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>MySQL</title><path d="M16.405 5.501c-.115 0-.193.014-.274.033v.013h.014c.054.104.146.18.214.273.054.107.1.214.154.32l.014-.015c.094-.066.14-.172.14-.333-.04-.047-.046-.094-.08-.14-.04-.067-.126-.1-.18-.153zM5.77 18.695h-.927a50.854 50.854 0 00-.27-4.41h-.008l-1.41 4.41H2.45l-1.4-4.41h-.01a72.892 72.892 0 00-.195 4.41H0c.055-1.966.192-3.81.41-5.53h1.15l1.335 4.064h.008l1.347-4.064h1.095c.242 2.015.384 3.86.428 5.53zm4.017-4.08c-.378 2.045-.876 3.533-1.492 4.46-.482.716-1.01 1.073-1.583 1.073-.153 0-.34-.046-.566-.138v-.494c.11.017.24.026.386.026.268 0 .483-.075.647-.222.197-.18.295-.382.295-.605 0-.155-.077-.47-.23-.944L6.23 14.615h.91l.727 2.36c.164.536.233.91.205 1.123.4-1.064.678-2.227.835-3.483zm12.325 4.08h-2.63v-5.53h.885v4.85h1.745zm-3.32.135l-1.016-.5c.09-.076.177-.158.255-.25.433-.506.648-1.258.648-2.253 0-1.83-.718-2.746-2.155-2.746-.704 0-1.254.232-1.65.697-.43.508-.646 1.256-.646 2.245 0 .972.19 1.686.574 2.14.35.41.877.615 1.583.615.264 0 .506-.033.725-.098l1.325.772.36-.622zM15.5 17.588c-.225-.36-.337-.94-.337-1.736 0-1.393.424-2.09 1.27-2.09.443 0 .77.167.977.5.224.362.336.936.336 1.723 0 1.404-.424 2.108-1.27 2.108-.445 0-.77-.167-.978-.5zm-1.658-.425c0 .47-.172.856-.516 1.156-.344.3-.803.45-1.384.45-.543 0-1.064-.172-1.573-.515l.237-.476c.438.22.833.328 1.19.328.332 0 .593-.073.783-.22a.754.754 0 00.3-.615c0-.33-.23-.61-.648-.845-.388-.213-1.163-.657-1.163-.657-.422-.307-.632-.636-.632-1.177 0-.45.157-.81.47-1.085.315-.278.72-.415 1.22-.415.512 0 .98.136 1.4.41l-.213.476a2.726 2.726 0 00-1.064-.23c-.283 0-.502.068-.654.206a.685.685 0 00-.248.524c0 .328.234.61.666.85.393.215 1.187.67 1.187.67.433.305.648.63.648 1.168zm9.382-5.852c-.535-.014-.95.04-1.297.188-.1.04-.26.04-.274.167.055.053.063.14.11.214.08.134.218.313.346.407.14.11.28.216.427.31.26.16.555.255.81.416.145.094.293.213.44.313.073.05.12.14.214.172v-.02c-.046-.06-.06-.147-.105-.214-.067-.067-.134-.127-.2-.193a3.223 3.223 0 00-.695-.675c-.214-.146-.682-.35-.77-.595l-.013-.014c.146-.013.32-.066.46-.106.227-.06.435-.047.67-.106.106-.027.213-.06.32-.094v-.06c-.12-.12-.21-.283-.334-.395a8.867 8.867 0 00-1.104-.823c-.21-.134-.476-.22-.697-.334-.08-.04-.214-.06-.26-.127-.12-.146-.19-.34-.275-.514a17.69 17.69 0 01-.547-1.163c-.12-.262-.193-.523-.34-.763-.69-1.137-1.437-1.826-2.586-2.5-.247-.14-.543-.2-.856-.274-.167-.008-.334-.02-.5-.027-.11-.047-.216-.174-.31-.235-.38-.24-1.364-.76-1.644-.072-.18.434.267.862.422 1.082.115.153.26.328.34.5.047.116.06.235.107.356.106.294.207.622.347.897.073.14.153.287.247.413.054.073.146.107.167.227-.094.136-.1.334-.154.5-.24.757-.146 1.693.194 2.25.107.166.362.534.703.393.3-.12.234-.5.32-.835.02-.08.007-.133.048-.187v.015c.094.188.188.367.274.555.206.328.566.668.867.895.16.12.287.328.487.402v-.02h-.015c-.043-.058-.1-.086-.154-.133a3.445 3.445 0 01-.35-.4 8.76 8.76 0 01-.747-1.218c-.11-.21-.202-.436-.29-.643-.04-.08-.04-.2-.107-.24-.1.146-.247.273-.32.453-.127.288-.14.642-.188 1.01-.027.007-.014 0-.027.014-.214-.052-.287-.274-.367-.46-.2-.475-.233-1.238-.06-1.785.047-.14.247-.582.167-.716-.042-.127-.174-.2-.247-.303a2.478 2.478 0 01-.24-.427c-.16-.374-.24-.788-.414-1.162-.08-.173-.22-.354-.334-.513-.127-.18-.267-.307-.368-.52-.033-.073-.08-.194-.027-.274.014-.054.042-.075.094-.09.088-.072.335.022.422.062.247.1.455.194.662.334.094.066.195.193.315.226h.14c.214.047.455.014.655.073.355.114.675.28.962.46a5.953 5.953 0 012.085 2.286c.08.154.115.295.188.455.14.33.313.663.455.982.14.315.275.636.476.897.1.14.502.213.682.286.133.06.34.115.46.188.23.14.454.3.67.454.11.076.443.243.463.378z"/></svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
1
apps/vojtechmares.com/images/logos/tools/nodedotjs.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Node.js</title><path d="M11.998,24c-0.321,0-0.641-0.084-0.922-0.247l-2.936-1.737c-0.438-0.245-0.224-0.332-0.08-0.383 c0.585-0.203,0.703-0.25,1.328-0.604c0.065-0.037,0.151-0.023,0.218,0.017l2.256,1.339c0.082,0.045,0.197,0.045,0.272,0l8.795-5.076 c0.082-0.047,0.134-0.141,0.134-0.238V6.921c0-0.099-0.053-0.192-0.137-0.242l-8.791-5.072c-0.081-0.047-0.189-0.047-0.271,0 L3.075,6.68C2.99,6.729,2.936,6.825,2.936,6.921v10.15c0,0.097,0.054,0.189,0.139,0.235l2.409,1.392 c1.307,0.654,2.108-0.116,2.108-0.89V7.787c0-0.142,0.114-0.253,0.256-0.253h1.115c0.139,0,0.255,0.112,0.255,0.253v10.021 c0,1.745-0.95,2.745-2.604,2.745c-0.508,0-0.909,0-2.026-0.551L2.28,18.675c-0.57-0.329-0.922-0.945-0.922-1.604V6.921 c0-0.659,0.353-1.275,0.922-1.603l8.795-5.082c0.557-0.315,1.296-0.315,1.848,0l8.794,5.082c0.57,0.329,0.924,0.944,0.924,1.603 v10.15c0,0.659-0.354,1.273-0.924,1.604l-8.794,5.078C12.643,23.916,12.324,24,11.998,24z M19.099,13.993 c0-1.9-1.284-2.406-3.987-2.763c-2.731-0.361-3.009-0.548-3.009-1.187c0-0.528,0.235-1.233,2.258-1.233 c1.807,0,2.473,0.389,2.747,1.607c0.024,0.115,0.129,0.199,0.247,0.199h1.141c0.071,0,0.138-0.031,0.186-0.081 c0.048-0.054,0.074-0.123,0.067-0.196c-0.177-2.098-1.571-3.076-4.388-3.076c-2.508,0-4.004,1.058-4.004,2.833 c0,1.925,1.488,2.457,3.895,2.695c2.88,0.282,3.103,0.703,3.103,1.269c0,0.983-0.789,1.402-2.642,1.402 c-2.327,0-2.839-0.584-3.011-1.742c-0.02-0.124-0.126-0.215-0.253-0.215h-1.137c-0.141,0-0.254,0.112-0.254,0.253 c0,1.482,0.806,3.248,4.655,3.248C17.501,17.007,19.099,15.91,19.099,13.993z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
1
apps/vojtechmares.com/images/logos/tools/openstack.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>OpenStack</title><path d="M18.575 9.29h5.418v5.42h-5.418zM0 9.29h5.419v5.42H0zm18.575 7.827a1.207 1.207 0 0 1-1.206 1.206H6.623a1.207 1.207 0 0 1-1.205-1.206v-.858H0v5.252a2.236 2.236 0 0 0 2.229 2.23h19.53A2.237 2.237 0 0 0 24 21.512V16.26h-5.425zM21.763.258H2.233a2.236 2.236 0 0 0-2.23 2.23V7.74h5.419v-.858a1.206 1.206 0 0 1 1.205-1.206h10.746a1.206 1.206 0 0 1 1.205 1.206v.858H24V2.487A2.237 2.237 0 0 0 21.763.258Z"/></svg>
|
||||
|
After Width: | Height: | Size: 508 B |
1
apps/vojtechmares.com/images/logos/tools/postgresql.svg
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
1
apps/vojtechmares.com/images/logos/tools/prometheus.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Prometheus</title><path d="M12 0C5.373 0 0 5.372 0 12c0 6.627 5.373 12 12 12s12-5.373 12-12c0-6.628-5.373-12-12-12zm0 22.46c-1.885 0-3.414-1.26-3.414-2.814h6.828c0 1.553-1.528 2.813-3.414 2.813zm5.64-3.745H6.36v-2.046h11.28v2.046zm-.04-3.098H6.391c-.037-.043-.075-.086-.111-.13-1.155-1.401-1.427-2.133-1.69-2.879-.005-.025 1.4.287 2.395.511 0 0 .513.119 1.262.255-.72-.843-1.147-1.915-1.147-3.01 0-2.406 1.845-4.508 1.18-6.207.648.053 1.34 1.367 1.387 3.422.689-.951.977-2.69.977-3.755 0-1.103.727-2.385 1.454-2.429-.648 1.069.168 1.984.894 4.256.272.854.237 2.29.447 3.201.07-1.892.395-4.652 1.595-5.605-.529 1.2.079 2.702.494 3.424.671 1.164 1.078 2.047 1.078 3.716a4.642 4.642 0 01-1.11 2.996c.792-.149 1.34-.283 1.34-.283l2.573-.502s-.374 1.538-1.81 3.019z"/></svg>
|
||||
|
After Width: | Height: | Size: 847 B |
1
apps/vojtechmares.com/images/logos/tools/proxmox.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Proxmox</title><path d="M4.928 1.825c-1.09.553-1.09.64-.07 1.78 5.655 6.295 7.004 7.782 7.107 7.782.139.017 7.971-8.542 8.058-8.801.034-.07-.208-.312-.519-.536-.415-.312-.864-.433-1.712-.467-1.59-.104-2.144.242-4.115 2.455-.899 1.003-1.66 1.833-1.66 1.833-.017 0-.76-.813-1.642-1.798S8.473 2.1 8.127 1.91c-.796-.45-2.421-.484-3.2-.086zM1.297 4.367C.45 4.695 0 5.007 0 5.248c0 .121 1.331 1.678 2.94 3.459 1.625 1.78 2.939 3.268 2.939 3.302 0 .035-1.331 1.522-2.94 3.303C1.314 17.11.017 18.683.035 18.822c.086.467 1.504 1.055 2.541 1.055 1.678-.018 2.058-.312 5.603-4.202 1.78-1.954 3.233-3.614 3.233-3.666 0-.069-1.435-1.694-3.199-3.63-2.3-2.508-3.423-3.632-3.96-3.874-.812-.398-2.126-.467-2.956-.138zm18.467.12c-.502.26-1.764 1.505-3.943 3.891-1.763 1.937-3.199 3.562-3.199 3.631 0 .07 1.453 1.712 3.234 3.666 3.544 3.89 3.925 4.184 5.602 4.202 1.038 0 2.455-.588 2.542-1.055.017-.156-1.28-1.712-2.905-3.493-1.608-1.78-2.94-3.285-2.94-3.32 0-.034 1.332-1.539 2.94-3.32C22.72 6.91 24.017 5.352 24 5.214c-.087-.45-1.366-.968-2.473-1.038-.795-.034-1.21.035-1.763.312zM7.954 16.973c-2.144 2.369-3.908 4.374-3.943 4.46-.034.07.208.312.52.537.414.311.864.432 1.711.467 1.574.103 2.161-.26 4.15-2.508.864-.968 1.608-1.78 1.625-1.78s.761.812 1.643 1.798c2.023 2.248 2.559 2.576 4.132 2.49.848-.035 1.297-.156 1.712-.467.311-.225.553-.467.519-.536-.087-.26-7.92-8.819-8.058-8.801-.069 0-1.867 1.954-4.011 4.34z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
1
apps/vojtechmares.com/images/logos/tools/rabbitmq.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>RabbitMQ</title><path d="M23.035 9.601h-7.677a.956.956 0 01-.962-.962V.962a.956.956 0 00-.962-.956H10.56a.956.956 0 00-.962.956V8.64a.956.956 0 01-.962.962H5.762a.956.956 0 01-.961-.962V.962A.956.956 0 003.839 0H.959a.956.956 0 00-.956.962v22.076A.956.956 0 00.965 24h22.07a.956.956 0 00.962-.962V10.58a.956.956 0 00-.962-.98zm-3.86 8.152a1.437 1.437 0 01-1.437 1.443h-1.924a1.437 1.437 0 01-1.436-1.443v-1.917a1.437 1.437 0 011.436-1.443h1.924a1.437 1.437 0 011.437 1.443z"/></svg>
|
||||
|
After Width: | Height: | Size: 560 B |
1
apps/vojtechmares.com/images/logos/tools/rancher.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Rancher</title><path d="M22.727 9.007a.713.713 0 01-.726.855h-1.542V8.798h.468a.883.883 0 00.875-.875v-.388c0-.477.12-.875.269-.875.139 0 .328.388.407.865l.249 1.482zm-3.49-1.253c.486 0 .874.388.894.885v4.555a.883.883 0 01-.875.875h-2.357a.883.883 0 01-.875-.875v-1.79a.871.871 0 00-.348.696v1.502c0 .477.397.875.875.875h1.531v2.327a.535.535 0 01-.537.538h-2.884a.535.535 0 01-.537-.538v-2.168a.535.535 0 00-.537-.537h-7.2a.535.535 0 00-.538.537v2.168a.535.535 0 01-.537.538H2.428a.535.535 0 01-.537-.538V10.58L.588 11.603c-.06.04-.14.04-.189-.02l-.368-.438a.135.135 0 01-.01-.159l1.91-2.914a.536.536 0 01.487-.318h10.165a.54.54 0 01.527.627l-.21 1.243a.54.54 0 00.528.626h2.039a.535.535 0 00.527-.437c-.13.04-.269.06-.418.06h-1.452c-.487 0-.815-.388-.736-.866l.249-1.482c.08-.477.258-.865.407-.865.15 0 .269.398.269.875v.229c.02-.01.05-.01.08-.01h4.843zm3.65-.537c0-.388.288-.557.556-.557.269 0 .557.17.557.557 0 .378-.288.547-.557.547-.268 0-.557-.17-.557-.547zm.984 0c0-.308-.2-.438-.418-.438-.219 0-.428.13-.428.438 0 .298.21.438.428.438.219-.01.418-.14.418-.438zm-.607-.279h.199c.1 0 .199.03.199.17 0 .08-.06.129-.13.149l.13.228h-.12l-.119-.218h-.05v.218h-.109v-.547zm.199.25c.05 0 .09-.03.09-.08 0-.06-.05-.07-.09-.07h-.1v.15h.1z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
apps/vojtechmares.com/images/logos/tools/redis.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Redis</title><path d="M10.5 2.661l.54.997-1.797.644 2.409.218.748 1.246.467-1.121 2.077-.208-1.61-.613.426-1.017-1.578.519zm6.905 2.077L13.76 6.182l3.292 1.298.353-.146 3.293-1.298zm-10.51.312a2.97 1.153 0 0 0-2.97 1.152 2.97 1.153 0 0 0 2.97 1.153 2.97 1.153 0 0 0 2.97-1.153 2.97 1.153 0 0 0-2.97-1.152zM24 6.805s-8.983 4.278-10.395 4.953c-1.226.561-1.901.561-3.261.094C8.318 11.022 0 7.241 0 7.241v1.038c0 .24.332.499.966.8 1.277.613 8.34 3.677 9.45 4.206 1.112.53 1.9.54 3.313-.197 1.412-.738 8.049-3.905 9.326-4.57.654-.342.945-.602.945-.84zm-10.042.602L8.39 8.26l3.884 1.61zM24 10.637s-8.983 4.279-10.395 4.954c-1.226.56-1.901.56-3.261.093C8.318 14.854 0 11.074 0 11.074v1.038c0 .238.332.498.966.8 1.277.612 8.34 3.676 9.45 4.205 1.112.53 1.9.54 3.313-.197 1.412-.737 8.049-3.905 9.326-4.57.654-.332.945-.602.945-.84zm0 3.842l-10.395 4.954c-1.226.56-1.901.56-3.261.094C8.318 18.696 0 14.916 0 14.916v1.038c0 .239.332.499.966.8 1.277.613 8.34 3.676 9.45 4.206 1.112.53 1.9.54 3.313-.198 1.412-.737 8.049-3.904 9.326-4.569.654-.343.945-.613.945-.841z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
apps/vojtechmares.com/images/logos/tools/terraform.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
1
apps/vojtechmares.com/images/logos/tools/terraform.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Terraform</title><path d="M1.44 0v7.575l6.561 3.79V3.787zm21.12 4.227l-6.561 3.791v7.574l6.56-3.787zM8.72 4.23v7.575l6.561 3.787V8.018zm0 8.405v7.575L15.28 24v-7.578z"/></svg>
|
||||
|
After Width: | Height: | Size: 253 B |
1
apps/vojtechmares.com/images/logos/tools/vault.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Vault</title><path d="M0 0l11.955 24L24 0zm13.366 4.827h1.393v1.38h-1.393zm-2.77 5.569H9.22V8.993h1.389zm0-2.087H9.22V6.906h1.389zm0-2.086H9.22V4.819h1.389zm2.087 6.263h-1.377V11.08h1.388zm0-2.09h-1.377V8.993h1.388zm0-2.087h-1.377V6.906h1.388zm0-2.086h-1.377V4.819h1.388zm.683.683h1.393v1.389h-1.393zm0 3.475V8.993h1.389v1.388Z"/></svg>
|
||||
|
After Width: | Height: | Size: 414 B |
1
apps/vojtechmares.com/images/logos/tools/vmware.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>VMware</title><path d="M.5 10.1a.505.505 0 00-.197.048.497.497 0 00-.25.68l1.138 2.475c.179.38.38.592.721.592.342 0 .542-.22.72-.592l1.003-2.186a.144.144 0 01.144-.092.16.16 0 01.157.16v2.118a.535.535 0 101.066 0v-1.73a.531.531 0 01.566-.552.52.52 0 01.541.551v1.73a.531.531 0 00.53.593.539.539 0 00.535-.592v-1.73a.531.531 0 01.564-.552.52.52 0 01.543.551v1.73a.531.531 0 00.528.593.535.535 0 00.535-.592v-1.969a1.234 1.234 0 00-1.283-1.23 1.647 1.647 0 00-1.14.486 1.26 1.26 0 00-1.095-.483 1.807 1.807 0 00-1.074.483 1.287 1.287 0 00-.961-.483 1.177 1.177 0 00-1.158.786l-.729 1.716-.933-2.203.011-.004A.505.505 0 00.5 10.1zm18.43.06a.27.27 0 00-.266.274h.002v3.142a.27.27 0 10.535 0v-1.222c0-1.037.571-1.56 1.27-1.643a.266.266 0 00.238-.274.258.258 0 00-.266-.269 1.465 1.465 0 00-1.242.88v-.614a.266.266 0 00-.271-.274zm-6.735.008a.273.273 0 00-.25.217l-.912 2.627-.902-2.62a.28.28 0 00-.274-.22.266.266 0 00-.27.258.493.493 0 00.034.144l1.09 3.037.02-.007a.319.319 0 00.298.242.3.3 0 00.293-.242l.903-2.583.896 2.583a.3.3 0 00.293.242h.018a.319.319 0 00.293-.242l1.097-3.038a.512.512 0 00.033-.144.258.258 0 00-.265-.25.262.262 0 00-.258.209l-.918 2.63-.904-2.626a.285.285 0 00-.278-.217h-.025a.273.273 0 00-.012 0zm10.168.008a1.75 1.75 0 00-1.691 1.851 1.765 1.765 0 001.76 1.858l-.008.013a1.784 1.784 0 001.33-.539.228.228 0 00.082-.17.228.228 0 00-.379-.168 1.435 1.435 0 01-1.018.415 1.237 1.237 0 01-1.24-1.207h2.555a.247.247 0 00.246-.247c0-.945-.593-1.806-1.637-1.806zm-5.744.002a1.571 1.571 0 00-.158.006 2.384 2.384 0 00-1.078.205.22.22 0 00-.143.222.24.24 0 00.235.229.266.266 0 00.095-.024 1.822 1.822 0 01.834-.162c.691 0 1.07.334 1.07.979v.125a3.796 3.796 0 00-1.103-.15c-.892 0-1.52.4-1.52 1.16l-.003-.004c0 .736.671 1.117 1.34 1.117a1.575 1.575 0 001.298-.62v.343a.247.247 0 00.254.25.254.254 0 00.258-.262v-1.983a1.416 1.416 0 00-.379-1.046 1.571 1.571 0 00-1-.385zm5.719.43c.714 0 1.085.565 1.139 1.214h-2.278a1.222 1.222 0 011.139-1.215zm-5.885 1.382a3.75 3.75 0 011.057.153V12.49c0 .57-.539.973-1.2.973-.485 0-.904-.261-.904-.713 0-.467.375-.76 1.047-.76Z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
5
apps/vojtechmares.com/next-env.d.ts
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
/// <reference types="next" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
|
||||
// NOTE: This file should not be edited
|
||||
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
||||
28
apps/vojtechmares.com/next.config.js
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
const withMDX = require("@next/mdx")({
|
||||
extension: /\.mdx?$/,
|
||||
options: {
|
||||
// If you use remark-gfm, you'll need to use next.config.mjs
|
||||
// as the package is ESM only
|
||||
// https://github.com/remarkjs/remark-gfm#install
|
||||
remarkPlugins: [],
|
||||
rehypePlugins: [],
|
||||
// If you use `MDXProvider`, uncomment the following line.
|
||||
// providerImportSource: "@mdx-js/react",
|
||||
},
|
||||
});
|
||||
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
reactStrictMode: true,
|
||||
swcMinify: true,
|
||||
experimental: {
|
||||
newNextLinkBehavior: true,
|
||||
scrollRestoration: true,
|
||||
},
|
||||
pageExtensions: ["js", "jsx", "ts", "tsx", "md", "mdx"],
|
||||
images: {
|
||||
formats: ["image/avif", "image/webp"],
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = withMDX(nextConfig);
|
||||
49
apps/vojtechmares.com/package.json
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"name": "vojtechmares.com",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"test": "vitest",
|
||||
"coverage": "vitest run --coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@headlessui/react": "^1.7.4",
|
||||
"@mdx-js/loader": "^2.2.1",
|
||||
"@mdx-js/react": "^2.2.1",
|
||||
"@next/mdx": "^13.1.1",
|
||||
"@tailwindcss/typography": "^0.5.8",
|
||||
"@vercel/analytics": "1.0.1",
|
||||
"clsx": "^1.2.1",
|
||||
"next": "13.4.4",
|
||||
"react": "18.2.0",
|
||||
"react-dom": "18.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.2",
|
||||
"@testing-library/react": "^14.0.0",
|
||||
"@types/node": "^18.11.17",
|
||||
"@types/react": "18.2.7",
|
||||
"@vitejs/plugin-react": "^4.0.0",
|
||||
"@vitest/coverage-c8": "^0.31.0",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"eslint": "8.41.0",
|
||||
"eslint-config-next": "^13.0.4",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"jsdom": "^22.0.0",
|
||||
"postcss": "^8.4.19",
|
||||
"prettier": "^2.7.1",
|
||||
"prettier-plugin-tailwindcss": "^0.3.0",
|
||||
"tailwindcss": "^3.2.4",
|
||||
"typescript": "^5.0.0",
|
||||
"vite": "^4.3.9",
|
||||
"vitest": "^0.31.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0"
|
||||
},
|
||||
"packageManager": "pnpm@8.6.0"
|
||||
}
|
||||
16
apps/vojtechmares.com/pages/_app.tsx
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import { Analytics } from '@vercel/analytics/react';
|
||||
import { AppProps } from "next/app";
|
||||
|
||||
import "@/css/tailwind.css";
|
||||
|
||||
function App({ Component, pageProps }: AppProps) {
|
||||
return (
|
||||
<>
|
||||
<Component {...pageProps} />
|
||||
<Analytics />
|
||||
</>
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
export default App;
|
||||
55
apps/vojtechmares.com/pages/_document.tsx
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
import { Head, Html, Main, NextScript } from "next/document";
|
||||
|
||||
export default function Document(props: any) {
|
||||
let pageProps = props.__NEXT_DATA__?.props?.pageProps;
|
||||
|
||||
return (
|
||||
<Html
|
||||
className="h-full scroll-smooth bg-white antialiased [font-feature-settings:'ss01']"
|
||||
lang="cs"
|
||||
>
|
||||
<Head>
|
||||
{/* <link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link
|
||||
rel="preconnect"
|
||||
href="https://fonts.gstatic.com"
|
||||
crossOrigin="anonymous"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css2?family=Inter:wght@100..900&family=Lexend:wght@400;500&display=swap"
|
||||
/> */}
|
||||
<link
|
||||
rel="apple-touch-icon"
|
||||
sizes="180x180"
|
||||
href="/apple-touch-icon.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="32x32"
|
||||
href="/favicon-32x32.png"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="16x16"
|
||||
href="/favicon-16x16.png"
|
||||
/>
|
||||
<link rel="manifest" href="/site.webmanifest" />
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
|
||||
<meta name="msapplication-TileColor" content="#da532c" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
<script
|
||||
defer
|
||||
data-domain="vojtechmares.com"
|
||||
src="https://plausible.io/js/script.js"
|
||||
></script>
|
||||
</Head>
|
||||
<body className="flex h-full flex-col">
|
||||
<Main />
|
||||
<NextScript />
|
||||
</body>
|
||||
</Html>
|
||||
);
|
||||
}
|
||||
39
apps/vojtechmares.com/pages/index.tsx
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
import Head from "next/head";
|
||||
|
||||
import { Header } from "@/components/layout/Header";
|
||||
import { Hero } from "@/components/homepage/Hero";
|
||||
import { CallToAction } from "@/components/homepage/CallToAction";
|
||||
import { Faqs } from "@/components/homepage/Faqs";
|
||||
import { Footer } from "@/components/layout/Footer";
|
||||
import { Services } from "@/components/homepage/Services";
|
||||
import { WhatIDo } from "@/components/homepage/WhatIDo";
|
||||
import { Testimonials } from "@/components/homepage/Testimonials";
|
||||
import { KubernetesEverywhere } from "@/components/homepage/KubernetesEverywhere";
|
||||
import { TrainingList } from "@/components/homepage/Training";
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<title>Vojtěch Mareš - DevOps konzultant, lektor, engineer</title>
|
||||
|
||||
<meta
|
||||
name="description"
|
||||
content="Vojtěch Mareš - DevOps konzultant, lektor, engineer"
|
||||
/>
|
||||
</Head>
|
||||
<main>
|
||||
<Header />
|
||||
<Hero />
|
||||
<WhatIDo />
|
||||
<TrainingList />
|
||||
<KubernetesEverywhere />
|
||||
<CallToAction />
|
||||
<Testimonials />
|
||||
<Services />
|
||||
{/* <Faqs /> */}
|
||||
</main>
|
||||
<Footer />
|
||||
</>
|
||||
);
|
||||
}
|
||||
49
apps/vojtechmares.com/pages/skoleni/argocd.mdx
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
import TrainingLayout from "@/components/trainingpage/TrainingLayout";
|
||||
import logoArgo from "@/images/logos/tools/argo.png";
|
||||
|
||||
export const meta = {
|
||||
name: "ArgoCD",
|
||||
price: {
|
||||
open: 5900,
|
||||
company: 24000,
|
||||
},
|
||||
logo: logoArgo,
|
||||
description:
|
||||
"ArgoCD je GitOps nastroj kterym nasazujeme aplikace do Kubernetes. Pracuje na zaklade deklaraticnich konfiguracnich souboru, ktete si stahuje z Gitu. To znamena, ze vse co commitneme do repozitare, se na nasadi do Kubernetes. O vsech zmenach: co, kdy, kdo udelal budeme mit prehledne zaznami v Gitu.",
|
||||
days: 1,
|
||||
featured: true,
|
||||
weight: 49,
|
||||
};
|
||||
|
||||
# Popis technologie
|
||||
|
||||
ArgoCD je GitOps nastroj kterym nasazujeme aplikace do Kubernetes. Pracuje na zaklade deklaraticnich konfiguracnich souboru, ktete si stahuje z Gitu. To znamena, ze vse co commitneme do repozitare, se na nasadi do Kubernetes. O vsech zmenach: co, kdy, kdo udelal budeme mit prehledne zaznami v Gitu.
|
||||
|
||||
# Co Vás naučím
|
||||
|
||||
- Uvod do CD
|
||||
- Co je ArgoCD
|
||||
- Instalace a konfigurace
|
||||
- GitOps
|
||||
- Plain Kubernetes manifests
|
||||
- Helm packages
|
||||
- Kustomize
|
||||
- Jsonnet
|
||||
- Rollbacks
|
||||
- Best Practices
|
||||
- User Management
|
||||
|
||||
# Pro koho je školení určeno
|
||||
|
||||
Školení je určeno pro vývojáře a DevOpsáky, kteří chteji automaticky nasazovat do Kubernetes podle GitOps principu.
|
||||
|
||||
# Předchozí znalosti
|
||||
|
||||
Zakladni znalost Kubernetes
|
||||
Technické požadavky
|
||||
Webový prohlížeč
|
||||
Přístup na internet
|
||||
|
||||
export default ({ children }) => (
|
||||
<TrainingLayout content={children} meta={meta} />
|
||||
);
|
||||
52
apps/vojtechmares.com/pages/skoleni/git.mdx
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import TrainingLayout from "@/components/trainingpage/TrainingLayout";
|
||||
import logoGit from "@/images/logos/tools/git.png";
|
||||
|
||||
export const meta = {
|
||||
name: "Git",
|
||||
price: {
|
||||
open: 5900,
|
||||
company: 24000,
|
||||
},
|
||||
logo: logoGit,
|
||||
description:
|
||||
"Git je moderní verzovaci nástroj, který se stal de facto standardem mezi vývojáři. Používají jej na denní bázy jednotlivci, startupy i korporace. Git vám nabízí jednoduchou kolaboraci na projektu s více lidmi a práci na více částech současně aniž byste si zasahovali do rozdělaných věcí nebo je jinak narušovali. Spolupráci na vývoji projektu ještě zlepšuje Gitlab, což je kolaborativni platforma na návrh, vývoj a provozování software (více o Gitlabu v samostatném kurzu).",
|
||||
days: 1,
|
||||
weight: 1,
|
||||
};
|
||||
|
||||
# Co je to Git?
|
||||
|
||||
Git je moderní verzovaci nástroj, který se stal de facto standardem mezi vývojáři. Používají jej na denní bázy jednotlivci, startupy i korporace. Git vám nabízí jednoduchou kolaboraci na projektu s více lidmi a práci na více částech současně aniž byste si zasahovali do rozdělaných věcí nebo je jinak narušovali. Spolupráci na vývoji projektu ještě zlepšuje Gitlab, což je kolaborativni platforma na návrh, vývoj a provozování software (více o Gitlabu v samostatném kurzu).
|
||||
|
||||
# Jak školení probíhá
|
||||
|
||||
Na školení formou workshopu si vysvětlíme proč je dobré Git používat, jak funguje (proč dnes nemá konkurenty) a best practice. Ukážeme si vše od instalace a základního nastavení Gitu, přes jednoduchou práci na jedné větvi až po práci v teamu a s více větvemi za pomoci různých mergovacích strategií (merge, rebase). Ukážeme si výhody a nevýhody obou z nich a je pak na Vás jak to budete dělat. Také si ukážeme jak se dostat ze špatných situací, jako omylem jsem si všechno smazal a podobně.
|
||||
|
||||
# Co Vás naučím
|
||||
|
||||
Konfigirace GITu
|
||||
Vytvořit nový repozitář
|
||||
Základní ovládání GITu
|
||||
Práce v jedné větvi
|
||||
Práce ve větvích - merge, rebase (silná stránka Gitu)
|
||||
Práce se vzdálenými repozitáři
|
||||
Záchrana smazaných dat z repozitáře
|
||||
|
||||
# Pro koho je školení určeno
|
||||
|
||||
Školení je určeno primárně pro vývojáře, kteří neverzují vůbec nebo nepoužívají Git. Zároveň je vhodné i pro ty, kteří Git nevyužívají na 100% (git commit, git pull, git push). Ať jde o malé weby nebo velké projekty, Git si najde uplatnění. Dále je kurz vhodný i pro ty, kteří nepíšou kód tak často, ale občas potřebují něco zaverzovat, například nějaké migrační skripty DB anebo konfiguraci serveru. Git pomůže i DBA nebo DevOps.
|
||||
|
||||
## Předchozí znalosti
|
||||
|
||||
Základy programování
|
||||
Základy práce v terminálu výhodou
|
||||
Základní znalost Gitu výhodou
|
||||
|
||||
## Technické požadavky
|
||||
|
||||
Nainstalovaný Git
|
||||
Přístup na internet - ideálně bez korporátní proxy, případně nastavenou proxy v prohlížeči
|
||||
|
||||
export default ({ children }) => (
|
||||
<TrainingLayout content={children} meta={meta} />
|
||||
);
|
||||
52
apps/vojtechmares.com/pages/skoleni/kubernetes.mdx
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import logoKubernetes from "@/images/logos/tools/kubernetes.png";
|
||||
import TrainingLayout from "@/components/trainingpage/TrainingLayout";
|
||||
|
||||
export const meta = {
|
||||
name: "Kubernetes",
|
||||
price: {
|
||||
open: 11900,
|
||||
company: 44000,
|
||||
},
|
||||
logo: logoKubernetes,
|
||||
description:
|
||||
"Kubernetes jsou dnes nejrozšířenější platformou na hostování Docker kontejnerů a jsou podporovány velkými hráči na trhu (Google, Amazon, Microsoft) skrz Cloud Native Computing Foundation. Kubernetes pro provoz používají všechny velikosti firem, od startupu po korporace.",
|
||||
days: 2,
|
||||
featured: true,
|
||||
weight: 50,
|
||||
};
|
||||
|
||||
# Popis technologie
|
||||
|
||||
Kubernetes jsou dnes nejrozšířenější platformou na hostování Docker kontejnerů a jsou podporovány velkými hráči na trhu (Google, Amazon, Microsoft) skrz Cloud Native Computing Foundation. Kubernetes pro provoz používají všechny velikosti firem, od startupu po korporace.
|
||||
|
||||
# Jak školení probíhá
|
||||
|
||||
Školeni probíhá formou workshopů, vše si prakticky vyzkoušíme a osaháme. Ukážeme jak spustit Kubernetes lokálně (pro vývoj) a na cloudové platformě DigitalOcean. Dozvíme se základní strukturu Kubernetes a projdeme si jeho komponenty. Naučíme se jak napsat Kubernetes manifest a jak jim nasadit aplikaci v Dockeru. Dále si ukážeme jak pracovat s právama v Kubernetes a jak používat (a psát) Kubernetes balíčky v Helmu.
|
||||
|
||||
# Co Vás naučím
|
||||
|
||||
- Teoretický úvod do Kubernetes
|
||||
- Instalace Minikube a kubectl (pro ty kteří nenainstalovali doma)
|
||||
- Popis Kubernetes komponent
|
||||
- Deployment do Kubernetes
|
||||
- Práce s právy v Kubernetes clusteru
|
||||
- Teoretický úvod do Helm balíčku
|
||||
- Instalace / Deployment pomocí Helmu
|
||||
- Psaní vlastního Helm balíčku
|
||||
|
||||
# Pro koho je školení určeno
|
||||
|
||||
Školení je určeno pro lidi (vývojáři a devops), kteří mají zájem provozovat své Docker aplikace v Kubernetes.
|
||||
|
||||
# Předchozí znalosti
|
||||
|
||||
Základy práce s Dockerem
|
||||
Základy práce s Linuxem
|
||||
Základy práce v terminálu
|
||||
Technické požadavky
|
||||
Nainstalovaný Kubernetes
|
||||
Přístup na internet - ideálně bez korporátní proxy, případně nastavenou proxy v prohlížeči
|
||||
|
||||
export default ({ children }) => (
|
||||
<TrainingLayout content={children} meta={meta} />
|
||||
);
|
||||
59
apps/vojtechmares.com/pages/skoleni/terraform.mdx
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
import TrainingLayout from "@/components/trainingpage/TrainingLayout";
|
||||
import logoTerraform from "@/images/logos/tools/terraform.png";
|
||||
|
||||
export const meta = {
|
||||
name: "Terraform",
|
||||
price: {
|
||||
open: 5900,
|
||||
company: 24000,
|
||||
},
|
||||
logo: logoTerraform,
|
||||
description:
|
||||
"Terraform je nástroj, který se používá ke správě infrastruktury v cloudu, jak veřejném (AWS, Azure, GCP), tak privátním (OpenStack, VMware vSphere). Terraform Vám umožní spravovat infrastruktutru jako kód, to znamená verzovanou v Gitu, přidávání resources pomocí merge (pull) requestů a mnoho dalších výhod. Infrastrukturu můžete dále nasadit do testovacího prostředí přesně tak, jako je v produkci bez zbytečného úsilí. O všech komponentách máte přehled a můžete predikovat ceny. Konec klikání infrastruktury, zkuste Terraform. Terraform umožnuje spravovat více cloudových providerů současne, zároveň umožnuje pracovat s hibridními cloudy (část v privátním cloudu, část ve veřejném).",
|
||||
days: 1,
|
||||
featured: true,
|
||||
weight: 31,
|
||||
};
|
||||
|
||||
# Co to je Terraform a k čemu se používá?
|
||||
|
||||
Terraform je nástroj, který se používá ke správě infrastruktury v cloudu, jak veřejném (AWS, Azure, GCP), tak privátním (OpenStack, VMware vSphere).
|
||||
|
||||
Terraform Vám umožní spravovat infrastruktutru jako kód, to znamená verzovanou v Gitu, přidávání resources pomocí merge (pull) requestů a mnoho dalších výhod. Infrastrukturu můžete dále nasadit do testovacího prostředí přesně tak, jako je v produkci bez zbytečného úsilí. O všech komponentách máte přehled a můžete predikovat ceny. Konec klikání infrastruktury, zkuste Terraform.
|
||||
|
||||
Terraform umožnuje spravovat více cloudových providerů současne, zároveň umožnuje pracovat s hibridními cloudy (část v privátním cloudu, část ve veřejném).
|
||||
|
||||
# Jak školení probíhá
|
||||
|
||||
Školení je formou workshopu, všechno si podrobně vyzkoušíme a vysvětlíme. Ukážeme si jak Terraform pracuje, jak jej používat v teamu a jak jím spravovat infrastukturu. Uděláme si příklad infrastruktury jednoduché aplikace, kde nastavíme vše - od DNS, přes Kubernetes cluster po S3 file storage.
|
||||
|
||||
# Co Vás naučím
|
||||
|
||||
- Základní koncept Terraformu
|
||||
- Výhody Terraformu proti Ansible, Puppetu, ...
|
||||
- Konfigurace Terraformu pro práci v teamu
|
||||
- Ovládání Terraform CLI
|
||||
- Úvod do Terraform Configuration Language (HCL)
|
||||
- Terraform Providers - napojení na cloudy
|
||||
- Práce s resources v Terraformu
|
||||
- Terraform moduly
|
||||
- Best Practice
|
||||
|
||||
# Pro koho je školení určeno
|
||||
|
||||
Školení je určeno pro DevOps a adminy, kteří chtějí lépe a efektivněji spravovat infrastrukturu. Zároveň také pro vývojáře, kteří se starají o nejakou infrastrukturu v cloudech.
|
||||
|
||||
# Předchozí znalosti
|
||||
|
||||
- Základní znalost veřejných cloudů (AWS, DigitalOcean, Azure, ...)
|
||||
- Základy práce v terminálu
|
||||
|
||||
# Technické požadavky
|
||||
|
||||
- **Přístup na internet** (ideálně bez korporatni proxy)
|
||||
- Nainstalovaný Terraform
|
||||
- Vlastní účet v [DigitalOcean (referral)](https://m.do.co/c/a0d4508fa827) výhodou
|
||||
|
||||
export default ({ children }) => (
|
||||
<TrainingLayout content={children} meta={meta} />
|
||||
);
|
||||
6
apps/vojtechmares.com/postcss.config.js
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {}
|
||||
}
|
||||
}
|
||||
4
apps/vojtechmares.com/prettier.config.cjs
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
/** @type {import("prettier").Config} */
|
||||
module.exports = {
|
||||
plugins: [require.resolve("prettier-plugin-tailwindcss")],
|
||||
};
|
||||
BIN
apps/vojtechmares.com/public/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
apps/vojtechmares.com/public/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 254 KiB |
BIN
apps/vojtechmares.com/public/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
1
apps/vojtechmares.com/public/bestpony.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
Rainbow Dash
|
||||
9
apps/vojtechmares.com/public/browserconfig.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#da532c</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
BIN
apps/vojtechmares.com/public/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
apps/vojtechmares.com/public/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
apps/vojtechmares.com/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
apps/vojtechmares.com/public/mstile-150x150.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
2
apps/vojtechmares.com/public/robots.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
User-Agent: *
|
||||
Allow: /
|
||||
69
apps/vojtechmares.com/public/safari-pinned-tab.svg
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="2000.000000pt" height="2000.000000pt" viewBox="0 0 2000.000000 2000.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.14, written by Peter Selinger 2001-2017
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,2000.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M9568 19995 c-1 -1 -59 -6 -128 -9 -68 -4 -145 -9 -170 -11 -41 -4
|
||||
-161 -14 -235 -20 -101 -9 -210 -21 -275 -30 -19 -3 -57 -7 -85 -11 -27 -3
|
||||
-57 -7 -65 -9 -8 -2 -40 -7 -70 -10 -45 -5 -182 -28 -370 -60 -14 -2 -92 -18
|
||||
-175 -36 -82 -17 -161 -33 -175 -35 -62 -12 -370 -90 -515 -130 -839 -235
|
||||
-1687 -598 -2409 -1031 -49 -29 -92 -53 -97 -53 -5 0 -9 -4 -9 -8 0 -5 -12
|
||||
-14 -26 -20 -27 -13 -96 -56 -299 -191 -71 -47 -136 -91 -143 -98 -8 -7 -23
|
||||
-18 -35 -25 -19 -10 -249 -174 -287 -205 -8 -7 -69 -54 -135 -104 -105 -81
|
||||
-381 -307 -426 -349 -8 -8 -51 -46 -95 -85 -246 -217 -583 -556 -855 -860 -67
|
||||
-75 -280 -330 -342 -410 -252 -324 -440 -591 -629 -895 -64 -102 -125 -201
|
||||
-136 -220 -135 -236 -179 -315 -245 -440 -72 -137 -81 -155 -82 -160 -1 -3
|
||||
-34 -72 -74 -155 -123 -252 -293 -650 -359 -840 -12 -33 -40 -112 -62 -175
|
||||
-23 -63 -43 -119 -44 -125 -2 -5 -6 -17 -9 -25 -47 -116 -252 -861 -272 -985
|
||||
-1 -11 -7 -40 -13 -65 -6 -25 -14 -61 -17 -80 -3 -19 -8 -42 -10 -50 -3 -8
|
||||
-11 -53 -20 -100 -14 -81 -18 -104 -30 -160 -3 -14 -7 -43 -10 -65 -4 -22 -10
|
||||
-65 -15 -95 -5 -30 -12 -75 -15 -100 -3 -25 -8 -56 -10 -70 -4 -25 -12 -84
|
||||
-20 -150 -7 -52 -13 -108 -20 -175 -3 -33 -8 -76 -10 -95 -3 -19 -7 -71 -10
|
||||
-115 -4 -44 -8 -100 -10 -125 -27 -316 -28 -1150 -1 -1455 7 -75 17 -193 22
|
||||
-255 2 -30 6 -71 9 -90 2 -19 7 -62 11 -95 3 -33 8 -67 9 -75 2 -8 6 -44 10
|
||||
-80 4 -36 8 -67 10 -70 2 -3 6 -37 10 -75 4 -39 9 -73 11 -76 2 -3 6 -24 9
|
||||
-45 2 -21 12 -79 20 -129 9 -49 18 -106 21 -125 3 -19 10 -53 16 -75 5 -22 12
|
||||
-51 13 -65 2 -14 13 -68 25 -120 11 -52 23 -106 26 -120 2 -14 7 -33 10 -42 3
|
||||
-10 7 -29 10 -43 8 -46 84 -336 126 -480 68 -237 216 -678 279 -830 7 -16 13
|
||||
-32 14 -35 8 -23 119 -290 141 -338 13 -29 24 -55 24 -58 0 -14 263 -550 338
|
||||
-689 64 -119 178 -321 206 -365 13 -19 71 -114 131 -210 140 -226 407 -614
|
||||
502 -730 7 -8 56 -71 109 -140 94 -121 347 -424 389 -465 11 -12 52 -56 90
|
||||
-100 81 -92 477 -491 581 -586 39 -35 93 -85 120 -110 66 -61 379 -327 429
|
||||
-364 22 -16 42 -32 45 -35 11 -12 183 -143 325 -247 270 -198 538 -373 835
|
||||
-548 103 -60 155 -90 295 -167 160 -88 604 -303 800 -386 716 -306 1469 -533
|
||||
2181 -656 93 -17 275 -46 314 -51 25 -3 56 -8 70 -10 36 -6 86 -13 155 -21 33
|
||||
-3 67 -8 75 -9 8 -2 51 -6 95 -10 44 -4 90 -8 101 -10 12 -2 59 -6 105 -10 46
|
||||
-4 102 -8 124 -10 144 -13 394 -20 750 -20 352 0 509 4 710 20 22 1 81 6 130
|
||||
9 50 4 101 9 115 11 14 2 52 6 85 9 66 6 132 13 185 21 19 3 58 7 85 11 28 3
|
||||
75 9 105 14 30 5 73 12 95 15 40 5 72 10 130 20 47 8 197 34 225 40 14 3 48 9
|
||||
75 15 28 5 59 11 70 14 79 18 173 38 190 40 16 3 145 34 255 61 225 57 468
|
||||
129 710 212 118 40 222 75 230 77 64 18 413 159 640 258 261 114 811 396 977
|
||||
501 24 15 45 27 47 27 2 0 42 23 88 51 320 197 582 374 837 567 85 65 166 126
|
||||
180 137 117 88 445 368 631 540 114 105 419 411 522 523 59 64 118 128 130
|
||||
142 87 95 359 420 414 495 16 22 31 42 35 45 3 3 25 32 50 65 24 33 46 62 49
|
||||
65 7 7 143 195 209 290 150 215 408 626 511 815 18 33 55 101 82 150 105 190
|
||||
428 870 428 900 0 3 9 25 19 48 35 78 212 549 225 602 2 6 6 17 9 25 35 86
|
||||
174 573 226 795 17 72 36 148 42 170 5 22 11 49 13 60 2 11 18 90 35 175 16
|
||||
85 33 171 36 190 3 19 13 73 21 120 8 47 17 104 20 126 3 23 6 50 8 60 5 24
|
||||
14 87 21 139 3 22 7 56 10 75 10 79 30 273 40 405 4 44 8 91 10 104 19 118 28
|
||||
1068 12 1296 -4 61 -10 142 -12 180 -3 39 -7 94 -10 123 -3 28 -7 78 -10 110
|
||||
-5 54 -8 83 -20 192 -7 68 -17 143 -21 165 -2 11 -6 43 -9 70 -3 28 -8 57 -10
|
||||
65 -2 8 -7 39 -10 69 -4 30 -9 63 -11 75 -5 23 -6 33 -29 161 -41 242 -69 370
|
||||
-147 685 -85 348 -269 925 -375 1180 -3 8 -7 17 -8 20 -6 17 -116 283 -137
|
||||
330 -159 362 -402 841 -549 1079 -15 25 -45 75 -65 111 -21 36 -40 67 -44 70
|
||||
-3 3 -19 28 -35 55 -132 229 -516 765 -735 1029 -89 107 -257 304 -270 316 -8
|
||||
8 -51 56 -95 105 -84 95 -498 512 -601 605 -122 111 -211 190 -294 260 -47 40
|
||||
-96 82 -110 94 -283 240 -706 544 -1112 799 -221 139 -732 423 -856 477 -13 5
|
||||
-71 33 -130 61 -342 164 -717 315 -1122 450 -236 78 -651 199 -680 198 -3 0
|
||||
-18 4 -33 10 -15 6 -42 13 -58 16 -17 3 -86 19 -152 35 -131 31 -300 66 -363
|
||||
75 -22 4 -47 8 -56 11 -18 5 -32 8 -98 18 -19 3 -44 7 -55 10 -11 2 -45 7 -75
|
||||
11 -30 5 -62 9 -70 11 -14 2 -145 21 -200 29 -83 12 -121 16 -250 30 -119 12
|
||||
-312 29 -480 41 -68 5 -1017 14 -1022 9z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
19
apps/vojtechmares.com/public/site.webmanifest
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"name": "",
|
||||
"short_name": "",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
||||
12
apps/vojtechmares.com/tailwind.config.js
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
module.exports = {
|
||||
content: [
|
||||
'./pages/**/*.{ts,tsx}',
|
||||
'./components/**/*.{ts,tsx}',
|
||||
],
|
||||
theme: {
|
||||
extend: {}
|
||||
},
|
||||
plugins: [
|
||||
require('@tailwindcss/typography'),
|
||||
]
|
||||
}
|
||||
19
apps/vojtechmares.com/tests/Button.test.tsx
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import { expect, test } from "vitest";
|
||||
import { render, screen, cleanup } from "@testing-library/react";
|
||||
import { Button } from "@/components/Button";
|
||||
|
||||
test("button", () => {
|
||||
render(<Button>Hello</Button>);
|
||||
|
||||
expect(screen.getByText("Hello")).toBeDefined();
|
||||
|
||||
cleanup();
|
||||
});
|
||||
|
||||
test("button-with-link", () => {
|
||||
render(<Button href="/country-road">Hello</Button>);
|
||||
|
||||
expect(screen.getByText("Hello").getAttribute("href")).toBe("/country-road");
|
||||
|
||||
cleanup();
|
||||
});
|
||||
38
apps/vojtechmares.com/tests/Home.test.tsx
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
import { expect, test } from "vitest";
|
||||
import { render, screen, within } from "@testing-library/react";
|
||||
import Home from "../pages";
|
||||
|
||||
test("home", () => {
|
||||
render(<Home />);
|
||||
const main = within(screen.getByRole("main"));
|
||||
expect(
|
||||
main.getByRole("heading", {
|
||||
level: 1,
|
||||
name: /Jsem Vojtěch Mareš a pomohu Vám s Vaší IT infrastrukturou./i,
|
||||
})
|
||||
).toBeDefined();
|
||||
|
||||
const writeMe = screen.getAllByText(/Napište mi/i);
|
||||
|
||||
writeMe.map((element) => {
|
||||
// First button (in navbar) is <a><span>...</span></a>, therefore we look for parent (closest) anchor element
|
||||
if (element instanceof HTMLSpanElement) {
|
||||
const parent = element.closest("a");
|
||||
expect(parent?.getAttribute("href")).toBe(
|
||||
"mailto:iam@vojtechmares.com"
|
||||
)
|
||||
return;
|
||||
}
|
||||
|
||||
expect(element.getAttribute("href")).toBe(
|
||||
"mailto:iam@vojtechmares.com"
|
||||
)
|
||||
});
|
||||
|
||||
|
||||
expect(writeMe).toHaveLength(6);
|
||||
|
||||
// const footer = within(screen.getByRole('contentinfo'))
|
||||
// const link = within(footer.getByRole('link'))
|
||||
// expect(link.getByRole('img', { name: /vercel logo/i })).toBeDefined()
|
||||
});
|
||||
31
apps/vojtechmares.com/tsconfig.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
||||
"exclude": ["node_modules"],
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["./*"]
|
||||
},
|
||||
"composite": false,
|
||||
"declaration": true,
|
||||
"declarationMap": true,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"inlineSources": false,
|
||||
"isolatedModules": true,
|
||||
"moduleResolution": "node",
|
||||
"noUnusedLocals": false,
|
||||
"noUnusedParameters": false,
|
||||
"preserveWatchOutput": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"target": "es5",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"noEmit": true,
|
||||
"incremental": true,
|
||||
"module": "esnext",
|
||||
"resolveJsonModule": true,
|
||||
"jsx": "preserve"
|
||||
}
|
||||
}
|
||||
18
apps/vojtechmares.com/vitest.config.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
/// <reference types="vitest" />
|
||||
|
||||
import { defineConfig } from "vitest/config";
|
||||
import react from "@vitejs/plugin-react";
|
||||
import { resolve } from "path";
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
test: {
|
||||
environment: "jsdom",
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
"@": resolve(__dirname, "."),
|
||||
},
|
||||
},
|
||||
});
|
||||