diff --git a/packages/content/package.json b/packages/content/package.json
new file mode 100644
index 0000000..6f229b6
--- /dev/null
+++ b/packages/content/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "content",
+ "version": "0.0.0",
+ "private": true
+}
diff --git a/packages/content/src/training/kubernetes.md b/packages/content/src/training/kubernetes.md
new file mode 100644
index 0000000..59fc40c
--- /dev/null
+++ b/packages/content/src/training/kubernetes.md
@@ -0,0 +1,11 @@
+---
+title: Kubernetes školení
+slug: kubernetes
+description: TODO
+image: ../images/kubernetes.png
+price:
+ open: 9000
+ corporate: 29000
+days: 2
+featured: true
+---
diff --git a/packages/content/src/training/terraform.md b/packages/content/src/training/terraform.md
new file mode 100644
index 0000000..b8b1b0b
--- /dev/null
+++ b/packages/content/src/training/terraform.md
@@ -0,0 +1,11 @@
+---
+title: Terraform školení
+slug: terraform
+description: TODO
+image: ../images/terraform.png
+price:
+ open: 5000
+ corporate: 19000
+days: 1
+featured: false
+---
diff --git a/packages/training-theme/src/Layout.tsx b/packages/training-theme/src/Layout.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/packages/training-theme/src/components/Container.tsx b/packages/training-theme/src/components/Container.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/packages/training-theme/src/components/Dates.tsx b/packages/training-theme/src/components/Dates.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/packages/training-theme/src/components/Footer.tsx b/packages/training-theme/src/components/Footer.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/packages/training-theme/src/components/Header.tsx b/packages/training-theme/src/components/Header.tsx
new file mode 100644
index 0000000..e69de29
diff --git a/sites/terraform-skoleni.cz/app/layout.tsx b/sites/terraform-skoleni.cz/app/layout.tsx
index c2c3b90..964af1b 100644
--- a/sites/terraform-skoleni.cz/app/layout.tsx
+++ b/sites/terraform-skoleni.cz/app/layout.tsx
@@ -1,4 +1,5 @@
-import '/styles/global.css';
+import { Footer } from 'components/Footer';
+import 'styles/global.css';
import { Metadata } from 'next';
export const metadata: Metadata = {
@@ -16,9 +17,10 @@ export default function RootLayout({
children: React.ReactNode;
}) {
return (
-
-
- Terraform Školení
+
+
+ {children}
+
);
diff --git a/sites/terraform-skoleni.cz/app/not-found.tsx b/sites/terraform-skoleni.cz/app/not-found.tsx
deleted file mode 100644
index 9c43d4b..0000000
--- a/sites/terraform-skoleni.cz/app/not-found.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Boundary } from '../components/Boundary';
-
-export default function NotFound() {
- return (
-
-
-
Not Found
-
-
Could not find requested resource
-
-
- );
-}
diff --git a/sites/terraform-skoleni.cz/app/page.tsx b/sites/terraform-skoleni.cz/app/page.tsx
index 26cd8fa..7d13cc5 100644
--- a/sites/terraform-skoleni.cz/app/page.tsx
+++ b/sites/terraform-skoleni.cz/app/page.tsx
@@ -1,5 +1,26 @@
+import { Container } from "components/Container";
+
+import { Hero } from "../components/Hero";
+import { Dates } from "../components/Dates";
+import { Price } from "../components/Price";
+import { CourseDetails } from "components/CourseDetails";
+
export default function Page() {
return (
- <>Hello>
+ <>
+
+
+
+ {/* */}
+
+
+
+
+
+
+
+ >
);
}
diff --git a/sites/terraform-skoleni.cz/components/Boundary.tsx b/sites/terraform-skoleni.cz/components/Boundary.tsx
deleted file mode 100644
index fbc1822..0000000
--- a/sites/terraform-skoleni.cz/components/Boundary.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import clsx from 'clsx';
-import React from 'react';
-
-const Label = ({
- children,
- animateRerendering,
- color,
-}: {
- children: React.ReactNode;
- animateRerendering?: boolean;
- color?: 'default' | 'pink' | 'blue' | 'violet' | 'cyan' | 'orange';
-}) => {
- return (
-
- {children}
-
- );
-};
-export const Boundary = ({
- children,
- labels = ['children'],
- size = 'default',
- color = 'default',
- animateRerendering = true,
-}: {
- children: React.ReactNode;
- labels?: string[];
- size?: 'small' | 'default';
- color?: 'default' | 'pink' | 'blue' | 'violet' | 'cyan' | 'orange';
- animateRerendering?: boolean;
-}) => {
- return (
-
-
- {labels.map((label) => {
- return (
-
- {label}
-
- );
- })}
-
-
- {children}
-
- );
-};
diff --git a/sites/terraform-skoleni.cz/components/Button.tsx b/sites/terraform-skoleni.cz/components/Button.tsx
new file mode 100644
index 0000000..3288369
--- /dev/null
+++ b/sites/terraform-skoleni.cz/components/Button.tsx
@@ -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 (
+
+ {children}
+
+ );
+ } else {
+ return {children} ;
+ }
+}
diff --git a/sites/terraform-skoleni.cz/components/Container.tsx b/sites/terraform-skoleni.cz/components/Container.tsx
new file mode 100644
index 0000000..ecaef6f
--- /dev/null
+++ b/sites/terraform-skoleni.cz/components/Container.tsx
@@ -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 (
+
+ {children}
+
+ );
+}
diff --git a/sites/terraform-skoleni.cz/components/CourseDetails.tsx b/sites/terraform-skoleni.cz/components/CourseDetails.tsx
new file mode 100644
index 0000000..0f99c8e
--- /dev/null
+++ b/sites/terraform-skoleni.cz/components/CourseDetails.tsx
@@ -0,0 +1,44 @@
+export function CourseDetails() {
+ return (
+ <>
+ 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 a "Infrastructure as Code"
+ 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
+
+ Nainstalovaný Terraform
+ Přístup na internet (ideálně bez korporatni proxy)
+ Vlastní účet v DigitalOceanu výhodou
+
+ >
+ );
+}
diff --git a/sites/terraform-skoleni.cz/components/Dates.tsx b/sites/terraform-skoleni.cz/components/Dates.tsx
new file mode 100644
index 0000000..61fd877
--- /dev/null
+++ b/sites/terraform-skoleni.cz/components/Dates.tsx
@@ -0,0 +1,35 @@
+export function Dates() {
+ return (
+
+ )
+}
diff --git a/sites/terraform-skoleni.cz/components/Footer.tsx b/sites/terraform-skoleni.cz/components/Footer.tsx
new file mode 100644
index 0000000..b0d10d6
--- /dev/null
+++ b/sites/terraform-skoleni.cz/components/Footer.tsx
@@ -0,0 +1,159 @@
+import Link from "next/link";
+
+import { Container } from "./Container";
+import { Button } from "./Button";
+
+export function Footer() {
+ return (
+
+
+
+
+
+
Vojtěch Mareš
+
+
+
+ +420 732 490 651
+
+
+
+
+ iam@vojtechmares.com
+
+
+
+ Company ID
+
+ 06999280
+
+
+ VAT ID
+
+ CZ9709180063
+
+
+
+
+
Další školení
+
+
+
+ Kubernetes
+
+
+
+ Git
+
+
+
+ Terraform
+
+
+
+ ArgoCD
+
+
+
+
+
Důležité odkazy
+
+
+
+ vojtechmares.com
+
+
+
+
+ Skoleni.io
+
+
+
+
+ DevOpsaci.cz
+
+
+
+
+
+
Máte zájem o školení?
+
+ TBD.
+
+
+ Napište mi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Copyright © {new Date().getFullYear()} Vojtěch Mareš. Všechna
+ práva vyhrazena.
+
+
+
+
+ );
+}
diff --git a/sites/terraform-skoleni.cz/components/Hero.tsx b/sites/terraform-skoleni.cz/components/Hero.tsx
new file mode 100644
index 0000000..82375c8
--- /dev/null
+++ b/sites/terraform-skoleni.cz/components/Hero.tsx
@@ -0,0 +1,34 @@
+import Image from 'next/image';
+import clsx from 'clsx';
+import { Container } from './Container';
+import terraformLogo from '../images/terraform.svg';
+
+export function Hero() {
+ return (
+ <>
+
+
+
+
+
+ Terraform školení
+
+
+ Školí: Vojtěch Mareš - DevOps konzultant, lektor a mentor
+
+
+
+
+ >
+ );
+}
diff --git a/sites/terraform-skoleni.cz/components/Price.tsx b/sites/terraform-skoleni.cz/components/Price.tsx
new file mode 100644
index 0000000..46a68e6
--- /dev/null
+++ b/sites/terraform-skoleni.cz/components/Price.tsx
@@ -0,0 +1,45 @@
+import { Button } from "./Button"
+
+export function Price() {
+ return (
+ <>
+
+
+
+ Cena za školení
+
+
+
+
+
+
+ Veřejný termín
+
+
+ 5500 CZK bez DPH
+
+
+
+
+ Firemní školení
+
+
+ 19 000 CZK bez DPH
+
+
+
+
+
+
+
+ Nezávazně poptat
+
+
+ >
+ )
+}
diff --git a/sites/terraform-skoleni.cz/images/terraform.png b/sites/terraform-skoleni.cz/images/terraform.png
new file mode 100644
index 0000000..8028d50
Binary files /dev/null and b/sites/terraform-skoleni.cz/images/terraform.png differ
diff --git a/sites/terraform-skoleni.cz/images/terraform.svg b/sites/terraform-skoleni.cz/images/terraform.svg
new file mode 100644
index 0000000..7aafae1
--- /dev/null
+++ b/sites/terraform-skoleni.cz/images/terraform.svg
@@ -0,0 +1 @@
+Terraform
\ No newline at end of file