├── src ├── partials │ ├── footer.html │ └── nav.html ├── scss │ ├── _footer.scss │ ├── base.scss │ ├── _how.scss │ ├── _button.scss │ ├── _usage.scss │ ├── _partners.scss │ ├── reset.scss │ ├── _keys.scss │ └── _hero.scss ├── js │ ├── hero.js │ ├── navbar.js │ ├── partners.js │ └── keypoints.js ├── styles.scss └── index.js ├── .gitignore ├── assets ├── img │ ├── favicon.ico │ ├── dashes.svg │ ├── github.svg │ ├── discord.svg │ ├── helios.svg │ ├── top-hero-illu.svg │ ├── zendesk.svg │ ├── logo.svg │ ├── bg.svg │ ├── keys │ │ ├── top.svg │ │ └── policies.svg │ ├── strapi.svg │ ├── bottom-hero-illu.svg │ └── middle-hero-illu.svg └── fonts │ ├── hack │ ├── Hack-Bold.ttf │ ├── Hack-Italic.ttf │ ├── Hack-Regular.ttf │ ├── Hack-BoldItalic.ttf │ └── _hack.scss │ ├── san-francisco │ ├── SF-UI-Text-Bold.otf │ ├── SF-UI-Text-Medium.otf │ ├── SF-UI-Text-Regular.otf │ ├── SF-UI-Text-Semibold.otf │ └── _san-francisco.scss │ └── hk-grotesk │ ├── hkgrotesk-bold-webfont.woff │ ├── hkgrotesk-bold-webfont.woff2 │ ├── hkgrotesk-regular-webfont.woff │ ├── hkgrotesk-regular-webfont.woff2 │ └── _hk-grotesk.scss ├── .posthtmlrc.js ├── README.md ├── package.json └── index.html /src/partials/footer.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | /.idea/ 4 | /.cache 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /src/scss/_footer.scss: -------------------------------------------------------------------------------- 1 | footer { 2 | height: 170px; 3 | background: #151B2B; 4 | } 5 | -------------------------------------------------------------------------------- /assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/img/favicon.ico -------------------------------------------------------------------------------- /assets/fonts/hack/Hack-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/hack/Hack-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/hack/Hack-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/hack/Hack-Italic.ttf -------------------------------------------------------------------------------- /src/js/hero.js: -------------------------------------------------------------------------------- 1 | export default class Hero { 2 | constructor() { 3 | console.log('init Navbar'); 4 | } 5 | 6 | } 7 | -------------------------------------------------------------------------------- /assets/fonts/hack/Hack-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/hack/Hack-Regular.ttf -------------------------------------------------------------------------------- /src/js/navbar.js: -------------------------------------------------------------------------------- 1 | export default class Navbar { 2 | constructor() { 3 | console.log('init Navbar'); 4 | } 5 | 6 | } 7 | -------------------------------------------------------------------------------- /assets/fonts/hack/Hack-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/hack/Hack-BoldItalic.ttf -------------------------------------------------------------------------------- /.posthtmlrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require('posthtml-include')({ 4 | root: __dirname, 5 | }), 6 | ], 7 | }; -------------------------------------------------------------------------------- /assets/fonts/san-francisco/SF-UI-Text-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/san-francisco/SF-UI-Text-Bold.otf -------------------------------------------------------------------------------- /assets/fonts/san-francisco/SF-UI-Text-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/san-francisco/SF-UI-Text-Medium.otf -------------------------------------------------------------------------------- /assets/fonts/san-francisco/SF-UI-Text-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/san-francisco/SF-UI-Text-Regular.otf -------------------------------------------------------------------------------- /assets/fonts/san-francisco/SF-UI-Text-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/san-francisco/SF-UI-Text-Semibold.otf -------------------------------------------------------------------------------- /assets/fonts/hk-grotesk/hkgrotesk-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/hk-grotesk/hkgrotesk-bold-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/hk-grotesk/hkgrotesk-bold-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/hk-grotesk/hkgrotesk-bold-webfont.woff2 -------------------------------------------------------------------------------- /assets/fonts/hk-grotesk/hkgrotesk-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/hk-grotesk/hkgrotesk-regular-webfont.woff -------------------------------------------------------------------------------- /assets/fonts/hk-grotesk/hkgrotesk-regular-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bdebon/qovery-engine-livestream/HEAD/assets/fonts/hk-grotesk/hkgrotesk-regular-webfont.woff2 -------------------------------------------------------------------------------- /src/partials/nav.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/js/partners.js: -------------------------------------------------------------------------------- 1 | export default class Partners { 2 | 3 | constructor(observer) { 4 | this.observer = observer 5 | this.init() 6 | } 7 | 8 | init() { 9 | const targets = document.querySelectorAll('.q-partners'); 10 | 11 | targets.forEach(li => { 12 | this.observer.observe(li) 13 | }) 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/scss/base.scss: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 'SanFrancisco', Helvetica; 3 | font-size: 16px; 4 | background: #F9F9FD; 5 | } 6 | 7 | 8 | .container { 9 | padding: 0 32px; 10 | max-width: 1280px; 11 | width: 100%; 12 | margin: auto; 13 | } 14 | 15 | 16 | @media (max-width: 750px) { 17 | 18 | .container { 19 | padding: 0 24px; 20 | } 21 | 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/js/keypoints.js: -------------------------------------------------------------------------------- 1 | export default class Keypoints { 2 | 3 | constructor(observer) { 4 | this.observer = observer 5 | this.init() 6 | } 7 | 8 | init() { 9 | const targets = document.querySelectorAll('.q-key-points ul li'); 10 | 11 | 12 | targets.forEach(li => { 13 | this.observer.observe(li) 14 | }) 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/styles.scss: -------------------------------------------------------------------------------- 1 | @import 'scss/reset'; 2 | @import 'scss/base'; 3 | @import 'src/scss/footer'; 4 | @import 'scss/hero'; 5 | @import 'src/scss/button'; 6 | @import 'src/scss/how'; 7 | @import 'scss/usage'; 8 | @import 'scss/keys'; 9 | @import 'scss/partners'; 10 | 11 | @import '../assets/fonts/hk-grotesk/hk-grotesk'; 12 | @import '../assets/fonts/san-francisco/san-francisco'; 13 | @import '../assets/fonts/hack/hack'; 14 | -------------------------------------------------------------------------------- /src/scss/_how.scss: -------------------------------------------------------------------------------- 1 | .q-how { 2 | max-width: 924px; 3 | margin: auto; 4 | padding: 96px 32px; 5 | text-align: center; 6 | 7 | h2 { 8 | font-family: "hk_grotesk", Helvetica; 9 | font-weight: 800; 10 | font-size: 32px; 11 | line-height: 110%; 12 | color: #454658; 13 | margin-bottom: 24px; 14 | } 15 | 16 | p { 17 | font-size: 16px; 18 | line-height: 150%; 19 | color: #454658; 20 | margin-bottom: 32px; 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /assets/fonts/hack/_hack.scss: -------------------------------------------------------------------------------- 1 | /** Hack which is used for displaying code**/ 2 | @font-face { 3 | font-family: "HackRegular"; 4 | src: url("/assets/fonts/hack/Hack-Regular.ttf"); 5 | } 6 | 7 | @font-face { 8 | font-family: "HackBold"; 9 | src: url("/assets/fonts/hack/Hack-Bold.ttf"); 10 | } 11 | 12 | @font-face { 13 | font-family: "HackBoldItalic"; 14 | src: url("/assets/fonts/hack/Hack-BoldItalic.ttf"); 15 | } 16 | 17 | @font-face { 18 | font-family: "HackItalic"; 19 | src: url("/assets/fonts/hack/Hack-Italic.ttf"); 20 | } 21 | -------------------------------------------------------------------------------- /assets/img/dashes.svg: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | // here you put all the js you want. 2 | import Keypoints from "./js/keypoints"; 3 | import Partners from "./js/partners"; 4 | 5 | var options = { 6 | rootMargin: '0px', 7 | threshold: 0.2 8 | } 9 | 10 | function callback(entries) { 11 | entries.filter(el => { 12 | if(el.isIntersecting) { 13 | el.target.classList.add('visible'); 14 | } 15 | }) 16 | } 17 | 18 | 19 | let observer = new IntersectionObserver(callback, options); 20 | 21 | const keypoints = new Keypoints(observer); 22 | const partners = new Partners(observer); 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | ``` 3 | npm install 4 | npm run start 5 | ``` 6 | 7 | And then go to `localhost:1234` 8 | 9 | # Handling changes 10 | If you need to change things such as navbar for example, you will find all the reusable component througout the pages in the folder : `/src/partials`. 11 | Change the html here and modifiy the css in the good file in `/src/scss`. 12 | That is almost everything you need to know. 13 | 14 | If you have run : `npm run start`, parcels has an excellent hot reload except if you are on another page than index.html. There is a bug with parcels that requires you to manually refresh the page when you are not working on `index.html`. 15 | # qovery-engine-livestream 16 | -------------------------------------------------------------------------------- /assets/fonts/san-francisco/_san-francisco.scss: -------------------------------------------------------------------------------- 1 | /** San Francisco which is used for the platform **/ 2 | @font-face { 3 | font-family: "SanFrancisco"; 4 | src: url("/assets/fonts/san-francisco/SF-UI-Text-Regular.otf"); 5 | font-weight: 400; 6 | } 7 | 8 | @font-face { 9 | font-family: "SanFrancisco"; 10 | src: url("/assets/fonts/san-francisco/SF-UI-Text-Medium.otf"); 11 | font-weight: 500; 12 | } 13 | 14 | @font-face { 15 | font-family: "SanFrancisco"; 16 | src: url("/assets/fonts/san-francisco/SF-UI-Text-Semibold.otf"); 17 | font-weight: 600; 18 | } 19 | 20 | @font-face { 21 | font-family: "SanFrancisco"; 22 | src: url("/assets/fonts/san-francisco/SF-UI-Text-Bold.otf"); 23 | font-weight: 700; 24 | } 25 | -------------------------------------------------------------------------------- /assets/fonts/hk-grotesk/_hk-grotesk.scss: -------------------------------------------------------------------------------- 1 | /*! Generated by Font Squirrel (https://www.fontsquirrel.com) on July 9, 2020 */ 2 | 3 | 4 | 5 | @font-face { 6 | font-family: 'hk_grotesk'; 7 | src: url('/assets/fonts/hk-grotesk/hkgrotesk-bold-webfont.woff2') format('woff2'), 8 | url('/assets/fonts/hk-grotesk/hkgrotesk-bold-webfont.woff') format('woff'); 9 | font-weight: 700; 10 | font-style: normal; 11 | 12 | } 13 | 14 | 15 | 16 | 17 | @font-face { 18 | font-family: 'hk_grotesk'; 19 | src: url('/assets/fonts/hk-grotesk/hkgrotesk-regular-webfont.woff2') format('woff2'), 20 | url('/assets/fonts/hk-grotesk/hkgrotesk-regular-webfont.woff') format('woff'); 21 | font-weight: normal; 22 | font-style: normal; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quick-parcel-project", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.html", 6 | "scripts": { 7 | "start": "parcel index.html", 8 | "start-multiple-entries": "parcel index.html centered.html what.html ", 9 | "build": "parcel build index.html" 10 | }, 11 | "dependencies": { 12 | "assets": "^3.0.1", 13 | "got": "^11.8.1", 14 | "http2": "^3.3.7", 15 | "js": "^0.1.0", 16 | "parcel-plugin-asset-copier": "^1.1.0", 17 | "parcel-plugin-html-root-syntax": "0.0.3", 18 | "scss": "^0.2.4" 19 | }, 20 | "devDependencies": { 21 | "parcel-bundler": "^1.6.1", 22 | "posthtml-include": "^1.4.3", 23 | "sass": "^1.26.11" 24 | }, 25 | "keywords": [], 26 | "assetsPath": "assets" 27 | } 28 | -------------------------------------------------------------------------------- /src/scss/_button.scss: -------------------------------------------------------------------------------- 1 | .q-btn { 2 | display: inline-flex; 3 | align-items: center; 4 | padding: 8px 16px; 5 | 6 | border-radius: 3px; 7 | color: white; 8 | 9 | font-weight: 600; 10 | font-size: 14px; 11 | line-height: 150%; 12 | 13 | transition: background 150ms ease; 14 | 15 | img { 16 | margin-right: 8px; 17 | } 18 | } 19 | 20 | .q-btn--github { 21 | background: #454658; 22 | 23 | &:hover { 24 | background: darken(#454658, 5); 25 | } 26 | 27 | img { 28 | width: 19px; 29 | } 30 | } 31 | 32 | .q-btn--discord { 33 | background: #6578C0; 34 | 35 | &:hover { 36 | background: darken(#6578C0, 3); 37 | } 38 | 39 | img { 40 | width: 16px; 41 | } 42 | } 43 | 44 | 45 | @media screen and (max-width: 750px) { 46 | .q-btn { 47 | padding: 8px 12px; 48 | font-size: 11px; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /assets/img/github.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /assets/img/discord.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /src/scss/_usage.scss: -------------------------------------------------------------------------------- 1 | .q-usage { 2 | max-width: 964px; 3 | margin: auto; 4 | padding: 0 32px; 5 | margin-bottom: 100px; 6 | 7 | h2 { 8 | font-family: "hk_grotesk", Helvetica; 9 | font-weight: 800; 10 | font-size: 32px; 11 | line-height: 110%; 12 | color: #454658; 13 | margin-bottom: 24px; 14 | text-align: center; 15 | } 16 | 17 | p { 18 | font-size: 16px; 19 | line-height: 150%; 20 | color: #454658; 21 | margin-bottom: 32px; 22 | text-align: center; 23 | } 24 | } 25 | 26 | .q-usage__head { 27 | background: url('/assets/img/bg.svg') no-repeat bottom center; 28 | background-size: 100%; 29 | padding-bottom: 100px; 30 | } 31 | 32 | .q-usage__code-wrapper { 33 | padding: 24px; 34 | background: white; 35 | box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05); 36 | border-radius: 3px; 37 | margin-bottom: 48px; 38 | 39 | .q-tag { 40 | font-weight: bold; 41 | font-size: 12px; 42 | line-height: 150%; 43 | text-transform: uppercase; 44 | color: white; 45 | background: #5D64D2; 46 | border-radius: 3px; 47 | padding: 4px 8px; 48 | margin-bottom: 24px; 49 | display: inline-block; 50 | } 51 | 52 | pre { 53 | overflow: auto; 54 | margin: 0; 55 | } 56 | } 57 | 58 | .q-usage__ctas { 59 | display: flex; 60 | justify-content: center; 61 | align-items: center; 62 | 63 | .q-btn:first-child { 64 | margin-right: 24px; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/scss/_partners.scss: -------------------------------------------------------------------------------- 1 | .q-partners { 2 | margin-bottom: 120px; 3 | 4 | &.visible { 5 | h2 span { 6 | animation: fadeInPartners 800ms ease-in forwards; 7 | } 8 | 9 | ul li a { 10 | animation: fadeInPartners 800ms forwards 500ms; 11 | } 12 | } 13 | 14 | h2 { 15 | font-family: "hk_grotesk", Helvetica; 16 | font-weight: bold; 17 | font-size: 32px; 18 | line-height: 110%; 19 | text-align: center; 20 | margin-bottom: 47px; 21 | overflow: hidden; 22 | 23 | span { 24 | transform: translate3d(0, 100%, 0); 25 | display: block; 26 | } 27 | } 28 | 29 | ul { 30 | margin: auto; 31 | max-width: 700px; 32 | display: flex; 33 | align-items: center; 34 | justify-content: space-between; 35 | 36 | li { 37 | flex: 1 0; 38 | text-align: center; 39 | overflow: hidden; 40 | 41 | a { 42 | display: block; 43 | margin: auto; 44 | max-width: 237px; 45 | transform: translate3d(0, 100%, 0); 46 | } 47 | } 48 | 49 | li:nth-child(2) { 50 | a { 51 | max-width: 139px; 52 | } 53 | } 54 | 55 | li:nth-child(3) { 56 | a { 57 | max-width: 167px; 58 | } 59 | } 60 | } 61 | } 62 | 63 | 64 | @media screen and (max-width: 750px) { 65 | .q-partners { 66 | ul { 67 | display: block; 68 | 69 | li { 70 | img { 71 | display: block; 72 | margin: auto; 73 | margin-bottom: 64px; 74 | } 75 | } 76 | } 77 | } 78 | } 79 | 80 | @keyframes fadeInPartners { 81 | 0% { 82 | transform: translate3d(0, 100%, 0); 83 | } 84 | 85 | 100% { 86 | transform: translate3d(0, 0, 0); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/scss/reset.scss: -------------------------------------------------------------------------------- 1 | /*─────────────────────────────────────────────────────────────────────────────────────────────────*/ 2 | /*─────────────────────────────────────────────────────────────────────────────────────────────────*/ 3 | /*─ 4 | /*─ RESET 5 | /*─ 6 | /*─────────────────────────────────────────────────────────────────────────────────────────────────*/ 7 | /*─────────────────────────────────────────────────────────────────────────────────────────────────*/ 8 | * { 9 | box-sizing: border-box; 10 | } 11 | 12 | html { 13 | -webkit-text-size-adjust: none; /*─ Debug font size on iphone when landscape orientation ─*/ 14 | -webkit-font-smoothing: subpixel-antialiased; /*─ Debug safari font weight when fixed element on the page ─*/ 15 | -webkit-font-smoothing: antialiased; /*─ idem : Debug safari font weight when fixed element on the page ─*/ 16 | } 17 | html, body, nav, header, footer, div, span, 18 | h1, h2, h3, p, 19 | a, img, 20 | ul, li, 21 | table, form, label, input, textarea, select, button { 22 | margin: 0; 23 | padding: 0; 24 | border: 0; 25 | font: inherit; 26 | //font-family: inherit; 27 | font-size: 100%; 28 | } 29 | ul { 30 | list-style: none; 31 | } 32 | li { 33 | list-style: none; 34 | } 35 | input, textarea, select, button { 36 | display: block; 37 | box-sizing: border-box; 38 | border-radius: 0; 39 | outline: none; 40 | border: none; 41 | background: none; 42 | color: inherit; 43 | } 44 | input:focus, 45 | textarea:focus, 46 | button:focus { 47 | outline: none; 48 | } 49 | input[type='submit']:hover, 50 | button:hover { 51 | cursor: pointer; 52 | } 53 | input::-ms-clear { 54 | display: none; /*─ IE11 → remove cross to close ─*/ 55 | } 56 | textarea { 57 | overflow: auto; /*─ Hide scroll bar on IE ─*/ 58 | } 59 | a { 60 | display: block; 61 | color: inherit; 62 | text-decoration: none; 63 | } 64 | img, video, svg, picture { 65 | display: block; 66 | } 67 | img, video { 68 | width: 100%; 69 | height: auto; 70 | } 71 | svg { 72 | width: 100%; 73 | height: 100%; 74 | } 75 | iframe { 76 | position: absolute; 77 | top: 0; 78 | left: 0; 79 | width: 100%; 80 | height: 100%; 81 | } 82 | -------------------------------------------------------------------------------- /src/scss/_keys.scss: -------------------------------------------------------------------------------- 1 | .q-key-points { 2 | margin-bottom: 167px; 3 | 4 | .container { 5 | max-width: 1100px; 6 | } 7 | 8 | &.visible { 9 | ul li { 10 | animation: KeyFadeIn 500ms ease-in forwards; 11 | } 12 | } 13 | 14 | ul { 15 | display: grid; 16 | grid-template-columns: repeat(2, minmax(0, 1fr)); 17 | grid-gap: 64px 24px; 18 | 19 | li { 20 | max-width: 408px; 21 | opacity: 0; 22 | 23 | &.visible { 24 | animation: KeyFadeIn 600ms ease-in forwards; 25 | } 26 | 27 | &:nth-child(even) { 28 | margin-left: auto; 29 | } 30 | 31 | &:nth-child(odd) { 32 | animation-delay: 150ms; 33 | } 34 | 35 | &:nth-child(even) { 36 | animation-delay: 350ms; 37 | } 38 | 39 | 40 | 41 | img { 42 | height: 159px; 43 | width: auto; 44 | margin-bottom: 24px; 45 | } 46 | 47 | h3 { 48 | font-family: hk_grotesk, Helvetica; 49 | font-weight: bold; 50 | font-size: 24px; 51 | line-height: 110%; 52 | margin-bottom: 24px; 53 | } 54 | 55 | p { 56 | font-style: normal; 57 | font-weight: normal; 58 | font-size: 16px; 59 | line-height: 150%; 60 | color: #454658; 61 | margin-bottom: 24px; 62 | 63 | &:last-child { 64 | margin-bottom: 12px; 65 | } 66 | } 67 | } 68 | } 69 | 70 | a { 71 | font-weight: bold; 72 | font-size: 12px; 73 | line-height: 130%; 74 | text-transform: uppercase; 75 | color: #5D64D2; 76 | display: table-cell; 77 | //transition: color 200ms ease; 78 | 79 | &:hover { 80 | color: darken(#5D64D2, 15); 81 | } 82 | } 83 | } 84 | 85 | 86 | @keyframes KeyFadeIn { 87 | 0% { 88 | transform: translate3D(0, 10px, 0); 89 | opacity: 0; 90 | } 91 | 92 | 100% { 93 | transform: none; 94 | opacity: 1; 95 | } 96 | } 97 | 98 | 99 | @media screen and (max-width: 750px) { 100 | .q-key-points { 101 | ul { 102 | grid-template-columns: repeat(1, 1fr); 103 | grid-gap: 64px; 104 | 105 | li { 106 | img { 107 | display: block; 108 | margin: auto; 109 | margin-bottom: 24px; 110 | } 111 | } 112 | } 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /assets/img/helios.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /src/scss/_hero.scss: -------------------------------------------------------------------------------- 1 | .q-hero { 2 | background: #151B2B; 3 | color: white; 4 | padding-top: 40px; 5 | padding-bottom: 80px; 6 | } 7 | 8 | .q-hero__logo { 9 | width: 158px; 10 | } 11 | 12 | .q-hero__content { 13 | display: flex; 14 | justify-content: space-between; 15 | align-items: center; 16 | } 17 | 18 | .q-hero__text { 19 | max-width: 470px; 20 | margin-right: 70px; 21 | opacity: 0; 22 | animation: HeroSlideIn 1s forwards .2s ease; 23 | font-size: 0; 24 | will-change: transform, opacity, box-size; 25 | 26 | h1 { 27 | font-family: hk_grotesk, Helvetica; 28 | font-weight: 800; 29 | font-size: 46px; 30 | line-height: 110%; 31 | margin-bottom: 24px; 32 | display: flex; 33 | align-items: baseline; 34 | 35 | span { 36 | margin-left: 20px; 37 | } 38 | } 39 | 40 | .q-hero__headline { 41 | font-family: hk_grotesk, Helvetica; 42 | font-weight: 600; 43 | font-size: 25px; 44 | line-height: 140%; 45 | margin-bottom: 24px; 46 | } 47 | 48 | .q-hero__summary { 49 | font-size: 16px; 50 | line-height: 150%; 51 | color: #8686B3; 52 | margin-bottom: 48px; 53 | } 54 | } 55 | 56 | .q-hero__images { 57 | max-width: 550px; 58 | position: relative; 59 | animation: HeroWrapperSlideIn 1.3s forwards .5s; 60 | will-change: transform, opacity, box-size; 61 | 62 | 63 | .q-hero__illu { 64 | position: relative; 65 | opacity: 0; 66 | animation: HeroSlideIn .9s forwards .5s; 67 | will-change: transform, opacity, box-size; 68 | 69 | &--1 { 70 | z-index: 10; 71 | } 72 | 73 | &--2 { 74 | z-index: 9; 75 | margin-top: -15%; 76 | animation-delay: .7s; 77 | } 78 | 79 | &--3 { 80 | z-index: 8; 81 | margin-top: -12%; 82 | animation-delay: .9s; 83 | } 84 | 85 | &.q-hero__illu--dashes { 86 | position: absolute; 87 | animation: FadeIn 1s forwards 1.1s; 88 | opacity: 0; 89 | top: -6%; 90 | } 91 | } 92 | } 93 | 94 | @keyframes FadeIn { 95 | 0% { 96 | opacity: 0; 97 | } 98 | 99 | 100% { 100 | opacity: 1; 101 | } 102 | } 103 | 104 | @keyframes HeroWrapperSlideIn { 105 | 0% { 106 | transform: translateY(-1%); 107 | } 108 | 109 | 100% { 110 | transform: translateY(0); 111 | } 112 | } 113 | 114 | 115 | @keyframes HeroSlideIn { 116 | 0% { 117 | transform: translateY(-10%); 118 | opacity: 0; 119 | } 120 | 121 | 100% { 122 | transform: translateY(0); 123 | opacity: 1; 124 | } 125 | } 126 | 127 | .q-hero__ctas { 128 | display: flex; 129 | 130 | .q-btn:first-child { 131 | margin-right: 24px; 132 | } 133 | } 134 | 135 | 136 | @media screen and (max-width: 750px) { 137 | .q-hero__images { 138 | display: none; 139 | } 140 | 141 | .q-hero__logo { 142 | margin-bottom: 32px; 143 | } 144 | 145 | .q-hero__text { 146 | margin-right: 0; 147 | 148 | h1 { 149 | display: block; 150 | 151 | span { 152 | display: block; 153 | margin-top: 24px; 154 | margin-left: 0; 155 | } 156 | } 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /assets/img/top-hero-illu.svg: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /assets/img/zendesk.svg: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /assets/img/logo.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /assets/img/bg.svg: -------------------------------------------------------------------------------- 1 | 39 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |Abstraction layer to deploy microservices applications on any Cloud provider.
52 |Qovery Engine is an open-source abstraction layer product that turns easy apps deployment on AWS, GCP, Azure and others Cloud providers.
53 |Qovery Engine is an open-source abstraction layer product that turns easy apps deployment on AWS, GCP, Azure and others Cloud providers. The Qovery Engine is coded in Rust and takes advantage of Terraform, Helm, Kubectl, Docker to manage resources.
77 | 78 |Initialize EKS (AWS Kubernetes) and ECR (AWS container registry) on AWS
85 |let engine = Engine::new( 89 | context, // parameters 90 | local_docker, // initialize Docker as a Build Platform 91 | ecr, // initialize Elastic Container Registry 92 | aws, // initialize AWS account 93 | cloudflare, // initialize Cloudflare as DNS Nameservers 94 | ); 95 | 96 | let session = match engine.session() { 97 | Ok(session) => session, // get the session 98 | Err(config_error) => panic!("configuration error {:?}", config_error), 99 | }; 100 | 101 | let mut tx = session.transaction(); 102 | 103 | // create EKS (AWS managed Kubernetes cluster) 104 | tx.create_kubernetes(&eks); 105 | 106 | // create the infrastructure and wait for the result 107 | match tx.commit() { 108 | TransactionResult::Ok => println!("OK"), 109 | TransactionResult::Rollback(commit_err) => println!("ERROR but rollback OK"), 110 | TransactionResult::UnrecoverableError(commit_err, rollback_err) => println!("FATAL ERROR") 111 | };112 |
Qovery Engine empowers you to deploy complex applications, such as a backend, a frontend, and a database in a very simple way.
131 |Servers, networking, security, all is done by the Engine for you.
132 | See more 133 |Qovery Engine knows when something goes wrong on the deployment of your applications. Qovery Engine is built with resiliency in mind.
138 |A transactional engine inspired by what is provided into ACID databases has been developed at the heart of the product to rollback on a consistent and working application version when something goes wrong.
139 | See more 140 |Qovery Engine does not reinvent the wheel. It takes advantage of the best tools in the Cloud industry, such as Kubernetes, Terraform, and Helm to manage the deployment of the infrastructure and your applications.
145 |Servers, networking, security, all is done by the Engine for you.
146 | See more 147 |Qovery Engine is built to be highly extensible. Adding the support of a Cloud provider or a Continuous Integration platform is as simple as implementing a simple programmatic interface.
152 | See more 153 |