Compare commits
10 Commits
d8bed59ef7
...
5ad389dc8a
Author | SHA1 | Date | |
---|---|---|---|
|
5ad389dc8a | ||
|
1f057819bf | ||
|
f4b284606e | ||
|
9707bbafd9 | ||
|
0d5a8334c8 | ||
5cf4501069 | |||
|
1911630fc4 | ||
|
84adc85b59 | ||
|
e4b6346938 | ||
|
3abbb61187 |
95
CONTENT.md
Normal file
@ -0,0 +1,95 @@
|
||||
# Accelerate your Software Delivery with SREEZ, your DevOps Sidekick 🍒
|
||||
|
||||
Are you struggling to keep up with your ever-growing DeOps toolchain and delivery processes ?
|
||||
|
||||
Unleash your full potential with NationTech's expert driven DevOps + SRE tools and services.
|
||||
|
||||
### What
|
||||
|
||||
Our platform engineering team will provide you with the tools that are only accessible by businesses hiring large dedicated teams.
|
||||
|
||||
### How
|
||||
|
||||
We build an efficient and scalable platform targeted at small to medium teams using the best practices in platform engineering, all based on fully open-source tools so you're never locked-in.
|
||||
|
||||
## Hire the best
|
||||
|
||||
Our team builds upon 50 years of passion for the entire software stack.
|
||||
|
||||
We've built, migrated and operated development and production platforms for companies of all sizes, from 1 to 300 000 employees.
|
||||
|
||||
Our team has deep expertise in anything deployment, automation, production management, migration, distributed systems, databases, backup, AI models customization and deployment, backend development, 3D printing, embedded programming, Linux administration, Kubernetes administration and much more
|
||||
|
||||
## Spending too much time and effort on your tooling ?
|
||||
|
||||
We understand the challenges small teams face in adopting DevOps practices. The principle of flow states that you should always strive to improve your lead time for changes and we help you do that by continuously improving your delivery times.
|
||||
|
||||
Our platform is specifically designed to alleviate the unnecessary burdens, allowing you to focus on what matters most - building great software.
|
||||
|
||||
## Stop accepting tools that are "just ok"
|
||||
|
||||
- Benefit right now from the same sophisticated tools as big corporations like Google, Spotify or RedHat
|
||||
- Unlock yourself from closed platforms and providers that earn more when you use inefficient tools and processes
|
||||
- Deliver more consistently with robust tools that can scale with your needs
|
||||
- Don't fear the complexity of a large scale platform : we handle it for you and define the simplest and most efficient interfaces for your needs
|
||||
|
||||
## Delivering faster means a winning business : join the Elite
|
||||
|
||||
DORA (DevOps Research and Assessment) State of DevOps Report found that :
|
||||
|
||||
- Elite performers (those in the top 20% for the four metrics) deliver changes 973x faster than the bottom 20%
|
||||
- Elite performers restore their services 6,570x faster than bottom 20%
|
||||
- Elite performers have change failure rates 6.6x lower despite the much higher delivery rate than the bottom 20%
|
||||
|
||||
By providing a comprehensive software delivery platform and expert services aligned with DevOps and SRE best practives, NationTech helps organizations become Elite and gain a competitive edge in their market.
|
||||
|
||||
## Unleash Your Team's full Potential - Start Today
|
||||
|
||||
Don't let outdated processes and tools hold your team back from delivering software at the speed of innovation
|
||||
|
||||
Schedule a Demo
|
||||
|
||||
## Where is all this going : The Roadmap
|
||||
|
||||
The kind of features we're working on for your team :
|
||||
|
||||
- Automated infrastructure optimization - Reduce costs thanks to automatic serverless downscaling to zero and other optimizations
|
||||
- One-click deployment pipelines - With a simple click, generate fully-configured CI/CD/SRE enabled projects tailored to your tech stack
|
||||
- Automatic migration - Drag and drop an existing project in our import tool to benefit from the same State-Of-The-Art CI/CD/SRE platform as a fresh new project
|
||||
- AI Assisted operations - Leverage advanced AI/ML capabilities for intelligent monitoring, anomaly detection, self-healing infrastructure and predictive scaling. Pioneers can provide real-world data to train our AI models.
|
||||
- Unified security management - Centrally manage security policies, secrets, networking rules and compliance across your entire cloud estate.
|
||||
|
||||
|
||||
## Early adopter program
|
||||
|
||||
|
||||
Join the early adopter program : 3 spots left!
|
||||
|
||||
This includes a complete NationTech package including our platform, hosting and services.
|
||||
|
||||
Here is our suggested base package, customize it to your needs !
|
||||
|
||||
### Services
|
||||
- Get 30 hours consulting per month on your specific Platform Engineering, DevOps, Coaching and SRE needs
|
||||
- 24/7 monitoring and 2h incident response
|
||||
- Unlimited support via chat and phone calls in french and english
|
||||
|
||||
### Platform
|
||||
- Fully managed, Kubernetes Cluster and SREEZ platform
|
||||
- Be part of the SREEZ founding group : the features that matter most to you will get prioritized
|
||||
|
||||
### Hosting on the most sustainable infrastructure
|
||||
|
||||
- Hosting of 16GB GPU Ram for AI models that we set up for you
|
||||
- Custom chatbots and search engines trained on your own private data
|
||||
- Image generation models
|
||||
- Other open-source and custom models
|
||||
- Hosting in our datacenter network of 20TB Storage, 100 CPU cores, 200GB RAM
|
||||
- 5x lower energy consumption than the most efficient large datacenters
|
||||
|
||||
|
||||
CONTACT US :
|
||||
|
||||
Email : sreez@nationtech.io
|
||||
Discord : https://discord.gg/w3JDpvVTMw
|
||||
LinkedIn : https://www.linkedin.com/company/nationtech-io/
|
51
CONTENT_claude3sonnet.md
Normal file
@ -0,0 +1,51 @@
|
||||
# Accelerate Your Software Delivery with SREEZ, Your DevOps Sidekick 🍒
|
||||
|
||||
Are you tired of wrestling with outdated DevOps tools and processes that slow down your team? Say goodbye to unnecessary friction and unleash your full potential with NationTech's cutting-edge software delivery platform.
|
||||
|
||||
## The Struggle is Real 😩
|
||||
|
||||
As a developer or engineering leader, you know the pain points all too well:
|
||||
|
||||
- **Spending too much time** configuring and maintaining complex CI/CD pipelines instead of building awesome products
|
||||
- Being **locked into inefficient tools** from big providers that make more money the slower you go
|
||||
- Struggling to keep up with the latest DevOps and SRE best practices across your growing team
|
||||
- Dealing with unpredictable delivery times and stability issues that frustrate customers
|
||||
|
||||
But fear not, our cherry-picking experts are here to help! 🍒
|
||||
|
||||
## Unlock Your Superpowers with NationTech 🚀
|
||||
|
||||
We're a passionate team of DevOps wizards and sustainability champions on a mission to reinvent cloud computing. Our innovative distributed micro data center network delivers powerful, eco-friendly solutions while pushing the boundaries of what's possible.
|
||||
|
||||
With NationTech, you'll gain access to:
|
||||
|
||||
✨ **A comprehensive software delivery platform**: Benefit from the same sophisticated open-source tools used by tech giants like Google, but tailored for small to medium teams. No more compromises!
|
||||
|
||||
🧙 **Expert migration and DevOps services**: Our team has 50+ years of combined experience across the entire tech stack. We'll help you adopt cutting-edge practices and migrate seamlessly.
|
||||
|
||||
⚡ **Lightning-fast deployment**: Using our platform, elite performers deliver changes 973x faster than the bottom 20%. Imagine the competitive edge for your business!
|
||||
|
||||
🛡️ **Robust reliability**: With intelligent self-healing infrastructure and predictive scaling, you'll see 6,570x faster restores and 6.6x lower failure rates.
|
||||
|
||||
🌳 **Sustainable computing**: Our distributed micro data centers reuse energy for heating, slashing emissions while keeping your ops costs low.
|
||||
|
||||
## See the Future, Today 🔮
|
||||
|
||||
The NationTech roadmap is filled with game-changing innovations:
|
||||
|
||||
- 💥 Automated infrastructure optimization to reduce costs
|
||||
- ⌛ One-click, fully configured CI/CD pipelines for any stack
|
||||
- 🔃 Seamless migration of existing projects to our platform
|
||||
- 🤖 AI-assisted operations for intelligent monitoring and self-healing
|
||||
- 🔐 Unified security management across your cloud estate
|
||||
|
||||
## Join the Elite & Become a Legend 💎
|
||||
|
||||
Don't let outdated processes hold you back from industry-leading delivery speeds. **Sign up for our early adopter program today and be among the first to experience the full power of the NationTech platform!**
|
||||
|
||||
Together, we'll blaze a trail toward a future of sustainable, streamlined software operations. The journey starts now - are you ready to make history?
|
||||
|
||||
**Start Your Acceleration:**
|
||||
1. Schedule a Demo
|
||||
2. Email us: sreez@nationtech.io
|
||||
3. Join our Discord: https://discord.gg/w3JDpvVTMw
|
38
CONTENT_v1.md
Normal file
@ -0,0 +1,38 @@
|
||||
# Accelerate your Software Delivery with Expert DevOps Solutions
|
||||
|
||||
We empower small to medium sized teams with expert-driven DevOps tools and services. Our customers reduce their time-to-market through our comprehensive software delivery platform, expert migration service and Site Reliability Engineering (SRE) best practices.
|
||||
|
||||
## Hire the best
|
||||
|
||||
Our team builds upon 50 years of passion for the entire software stack.
|
||||
|
||||
They've built, migrated and operated development and production platforms for companies of all sizes, from 1 to 300 000 employees.
|
||||
|
||||
## Spending too much time and effort on your tooling ?
|
||||
|
||||
We understand the challenges small teams face in adopting DevOps practices. The principle of flow states that you should always strive to improve your lead time for changes and we help you do that by continuously improving your delivery times.
|
||||
|
||||
Our platform is specifically designed to alleviate the unnecessary burdens, allowing you to focus on what matters most - building great software.
|
||||
|
||||
## Achieve more
|
||||
|
||||
- Stop wasting energy trying to find the best tool and never fully utilize it
|
||||
- Stop wasting hours every time you create a project to find the new best practices and libraries
|
||||
- Stop getting lost in cryptic build and deployment failures
|
||||
- Stop missing deadlines because your team spent weeks building and maintaining your pipeline
|
||||
|
||||
## Delivering faster means a winning business
|
||||
|
||||
DORA (DevOps Research and Assessment) State of DevOps Report found that :
|
||||
|
||||
- Elite performers (those in the top 20% for the four metrics) deliver changes 973x faster than the bottom 20%
|
||||
- Elite performers restore their services 6,570x faster than bottom 20%
|
||||
- Elite performers have change failure rates 6.6x lower despite the much higher delivery rate than the bottom 20%
|
||||
|
||||
By providing a comprehensive software delivery platform and expert services aligned with DevOps and SRE best practives, NationTech helps organizations become Elite and gain a competitive edge in their market.
|
||||
|
||||
## Unleash Your Team's full Potential - Start Today
|
||||
|
||||
Don't let outdated processes and tools hold your team back from delivering software at the speed of innovation
|
||||
|
||||
Schedule a Demo
|
85
CONTENT_v2.md
Normal file
@ -0,0 +1,85 @@
|
||||
# Accelerate your Software Delivery with Expert DevOps Solutions
|
||||
|
||||
We empower small to medium sized teams with expert-driven DevOps tools and services. Our customers reduce their time-to-market through our comprehensive software delivery platform, expert migration service and Site Reliability Engineering (SRE) best practices.
|
||||
|
||||
## Hire the best
|
||||
|
||||
Our team builds upon 50 years of passion for the entire software stack.
|
||||
|
||||
We've built, migrated and operated development and production platforms for companies of all sizes, from 1 to 300 000 employees.
|
||||
|
||||
Our team has deep expertise in anything deployment, automation, production management, migration, distributed systems, databases, backup, AI models customization and deployment, backend development, 3D printing, embedded programming, Linux administration, Kubernetes administration and much more
|
||||
|
||||
## Spending too much time and effort on your tooling ?
|
||||
|
||||
We understand the challenges small teams face in adopting DevOps practices. The principle of flow states that you should always strive to improve your lead time for changes and we help you do that by continuously improving your delivery times.
|
||||
|
||||
Our platform is specifically designed to alleviate the unnecessary burdens, allowing you to focus on what matters most - building great software.
|
||||
|
||||
## Stop accepting tools that are "just ok"
|
||||
|
||||
- Benefit right now from the same sophisticated tools as big corporations like Google, Spotify or RedHat
|
||||
- Unlock yourself from closed platforms and providers that earn more when you use inefficient tools and processes
|
||||
- Deliver more consistently with robust tools that can scale with your needs
|
||||
- Don't fear the complexity of a large scale platform : we handle it for you and define the simplest and most efficient interfaces for your needs
|
||||
|
||||
## Delivering faster means a winning business : join the Elite
|
||||
|
||||
DORA (DevOps Research and Assessment) State of DevOps Report found that :
|
||||
|
||||
- Elite performers (those in the top 20% for the four metrics) deliver changes 973x faster than the bottom 20%
|
||||
- Elite performers restore their services 6,570x faster than bottom 20%
|
||||
- Elite performers have change failure rates 6.6x lower despite the much higher delivery rate than the bottom 20%
|
||||
|
||||
By providing a comprehensive software delivery platform and expert services aligned with DevOps and SRE best practives, NationTech helps organizations become Elite and gain a competitive edge in their market.
|
||||
|
||||
## Unleash Your Team's full Potential - Start Today
|
||||
|
||||
Don't let outdated processes and tools hold your team back from delivering software at the speed of innovation
|
||||
|
||||
Schedule a Demo
|
||||
|
||||
## Where is all this going : The Roadmap
|
||||
|
||||
The kind of features we're working on for your team :
|
||||
|
||||
- Automated infrastructure optimization - Reduce costs thanks to automatic serverless downscaling to zero and other optimizations
|
||||
- One-click deployment pipelines - With a simple click, generate fully-configured CI/CD/SRE enabled projects tailored to your tech stack
|
||||
- Automatic migration - Drag and drop an existing project in our import tool to benefit from the same State-Of-The-Art CI/CD/SRE platform as a fresh new project
|
||||
- AI Assisted operations - Leverage advanced AI/ML capabilities for intelligent monitoring, anomaly detection, self-healing infrastructure and predictive scaling. Pioneers can provide real-world data to train our AI models.
|
||||
- Unified security management - Centrally manage security policies, secrets, networking rules and compliance across your entire cloud estate.
|
||||
|
||||
|
||||
## Early adopter program
|
||||
|
||||
|
||||
Join the early adopter program : 3 spots left!
|
||||
|
||||
This includes a complete NationTech package including our platform, hosting and services.
|
||||
|
||||
Here is our suggested base package, customize it to your needs !
|
||||
|
||||
### Services
|
||||
- Get 30 hours consulting per month on your specific Platform Engineering, DevOps, Coaching and SRE needs
|
||||
- 24/7 monitoring and 2h incident response
|
||||
- Unlimited support via chat and phone calls in french and english
|
||||
|
||||
### Platform
|
||||
- Fully managed, Kubernetes Cluster and SREEZ platform
|
||||
- Be part of the SREEZ founding group : the features that matter most to you will get prioritized
|
||||
|
||||
### Hosting on the most sustainable infrastructure
|
||||
|
||||
- Hosting of 16GB GPU Ram for AI models that we set up for you
|
||||
- Custom chatbots and search engines trained on your own private data
|
||||
- Image generation models
|
||||
- Other open-source and custom models
|
||||
- Hosting in our datacenter network of 20TB Storage, 100 CPU cores, 200GB RAM
|
||||
- 5x lower energy consumption than the most efficient large datacenters
|
||||
|
||||
|
||||
CONTACT US :
|
||||
|
||||
Email : sreez@nationtech.io
|
||||
Discord : https://discord.gg/w3JDpvVTMw
|
||||
LinkedIn : https://www.linkedin.com/company/nationtech-io/
|
686
sreez/Cargo.lock
generated
@ -1,5 +1,5 @@
|
||||
[package]
|
||||
name = "nationtech-io"
|
||||
name = "sreez"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
@ -15,7 +15,7 @@ leptos = { version = "0.6", features = ["nightly"] }
|
||||
leptos_meta = { version = "0.6", features = ["nightly"] }
|
||||
leptos_actix = { version = "0.6", optional = true }
|
||||
leptos_router = { version = "0.6", features = ["nightly"] }
|
||||
wasm-bindgen = "=0.2.89"
|
||||
wasm-bindgen = "=0.2.92"
|
||||
|
||||
[features]
|
||||
csr = ["leptos/csr", "leptos_meta/csr", "leptos_router/csr"]
|
||||
@ -39,7 +39,7 @@ panic = "abort"
|
||||
|
||||
[package.metadata.leptos]
|
||||
# The name used by wasm-bindgen/cargo-leptos for the JS/WASM bundle. Defaults to the crate name
|
||||
output-name = "nationtech-io"
|
||||
output-name = "sreez"
|
||||
# The site root folder is where cargo-leptos generate all output. WARNING: all content of this folder will be erased on a rebuild. Use it in your server setup.
|
||||
site-root = "target/site"
|
||||
# The site-root relative folder where all compiled output (JS, WASM and CSS) is written
|
||||
|
55
sreez/Dockerfile
Normal file
@ -0,0 +1,55 @@
|
||||
# Get started with a build env with Rust nightly
|
||||
FROM rustlang/rust:nightly-bullseye as base
|
||||
|
||||
# If you’re using stable, use this instead
|
||||
# FROM rust:1.74-bullseye as builder
|
||||
|
||||
# Install cargo-binstall, which makes it easier to install other
|
||||
# cargo extensions like cargo-leptos
|
||||
RUN wget https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
|
||||
RUN tar -xvf cargo-binstall-x86_64-unknown-linux-musl.tgz
|
||||
RUN cp cargo-binstall /usr/local/cargo/bin
|
||||
|
||||
# Install cargo-leptos
|
||||
RUN cargo binstall cargo-leptos -y
|
||||
|
||||
# Add the WASM target
|
||||
RUN rustup target add wasm32-unknown-unknown
|
||||
|
||||
# Make an /app dir, which everything will eventually live in
|
||||
RUN mkdir -p /app
|
||||
WORKDIR /app
|
||||
|
||||
FROM base as builder
|
||||
# Build the app
|
||||
COPY . .
|
||||
RUN cargo leptos build --release -vv
|
||||
|
||||
FROM debian:bookworm-slim as runtime
|
||||
WORKDIR /app
|
||||
RUN apt-get update -y \
|
||||
&& apt-get install -y --no-install-recommends openssl ca-certificates \
|
||||
&& apt-get autoremove -y \
|
||||
&& apt-get clean -y \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# -- NB: update binary name from "leptos_start" to match your app name in Cargo.toml --
|
||||
# Copy the server binary to the /app directory
|
||||
COPY --from=builder /app/target/release/sreez /app/
|
||||
|
||||
# /target/site contains our JS/WASM/CSS, etc.
|
||||
COPY --from=builder /app/target/site /app/site
|
||||
|
||||
# Copy Cargo.toml if it’s needed at runtime
|
||||
COPY --from=builder /app/Cargo.toml /app/
|
||||
|
||||
# Set any required env variables and
|
||||
ENV RUST_LOG="info"
|
||||
ENV LEPTOS_SITE_ADDR="0.0.0.0:8080"
|
||||
ENV LEPTOS_SITE_ROOT="site"
|
||||
EXPOSE 8080
|
||||
|
||||
# -- NB: update binary name from "leptos_start" to match your app name in Cargo.toml --
|
||||
# Run the server
|
||||
CMD ["/app/sreez"]
|
||||
|
BIN
sreez/assets/fonts/FiraMono-Bold.woff2
Normal file
BIN
sreez/assets/fonts/FiraMono-Medium.woff2
Normal file
BIN
sreez/assets/fonts/FiraMono-Regular.woff2
Normal file
BIN
sreez/assets/fonts/PTM55F.ttf
Normal file
BIN
sreez/assets/fonts/PTM75F.ttf
Normal file
BIN
sreez/assets/fonts/intelone-mono-font-family-bold.ttf
Normal file
BIN
sreez/assets/fonts/intelone-mono-font-family-bolditalic.ttf
Normal file
BIN
sreez/assets/fonts/intelone-mono-font-family-italic.ttf
Normal file
BIN
sreez/assets/fonts/intelone-mono-font-family-light.ttf
Normal file
BIN
sreez/assets/fonts/intelone-mono-font-family-lightitalic.ttf
Normal file
BIN
sreez/assets/fonts/intelone-mono-font-family-medium.ttf
Normal file
BIN
sreez/assets/fonts/intelone-mono-font-family-mediumitalic.ttf
Normal file
BIN
sreez/assets/fonts/intelone-mono-font-family-regular.ttf
Normal file
1
sreez/assets/icons/linkedin.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg>
|
After Width: | Height: | Size: 681 B |
7
sreez/assets/icons/website.svg
Normal file
@ -0,0 +1,7 @@
|
||||
<svg fill="#000000" height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M256,0C114.62,0,0,114.62,0,256s114.62,256,256,256s256-114.62,256-256S397.38,0,256,0z M172.211,41.609 c-24.934,27.119-44.68,66.125-56.755,111.992H49.749C75.179,102.741,118.869,62.524,172.211,41.609z M25.6,256 c0-26.999,5.077-52.727,13.662-76.8h70.494c-4.608,24.294-7.356,49.963-7.356,76.8s2.748,52.506,7.347,76.8H39.262 C30.677,308.727,25.6,283,25.6,256z M49.749,358.4h65.707c12.083,45.867,31.821,84.872,56.755,111.991 C118.869,449.476,75.179,409.259,49.749,358.4z M243.2,485.188c-43.81-8.252-81.877-58.24-101.359-126.788H243.2V485.188z M243.2,332.8H135.74c-4.924-24.166-7.74-49.997-7.74-76.8s2.816-52.634,7.74-76.8H243.2V332.8z M243.2,153.6H141.841 C161.323,85.052,199.39,35.063,243.2,26.812V153.6z M462.251,153.6h-65.707c-12.083-45.867-31.821-84.873-56.755-111.992 C393.131,62.524,436.821,102.741,462.251,153.6z M268.8,26.812c43.81,8.252,81.877,58.24,101.359,126.788H268.8V26.812z M268.8,179.2h107.46c4.924,24.166,7.74,49.997,7.74,76.8s-2.816,52.634-7.74,76.8H268.8V179.2z M268.8,485.188V358.4h101.359 C350.677,426.948,312.61,476.937,268.8,485.188z M339.789,470.391c24.934-27.127,44.672-66.125,56.755-111.991h65.707 C436.821,409.259,393.131,449.476,339.789,470.391z M402.244,332.8c4.608-24.294,7.356-49.963,7.356-76.8 s-2.748-52.506-7.347-76.8h70.494c8.576,24.073,13.653,49.801,13.653,76.8c0,27-5.077,52.727-13.662,76.8H402.244z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
BIN
sreez/assets/icons/youcanbookme_black.png
Normal file
After Width: | Height: | Size: 39 KiB |
16
sreez/assets/scripts/matomo.js
Normal file
@ -0,0 +1,16 @@
|
||||
let h = window.location.hostname;
|
||||
if (h === "localhost" || h.match(/\.\d\d\d$/)) {
|
||||
console.log('Matomo tracking disabled, seems to be running on a development hostname', h);
|
||||
} else {
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="//matomo.qc1.nationtech.io/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '1']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
}
|
BIN
sreez/assets/sreez_logo.png
Normal file
After Width: | Height: | Size: 134 KiB |
BIN
sreez/assets/sreez_logo_shaded.png
Normal file
After Width: | Height: | Size: 159 KiB |
BIN
sreez/assets/sreez_logo_shaded_v2.png
Normal file
After Width: | Height: | Size: 143 KiB |
BIN
sreez/assets/sreez_stack_logos.png
Normal file
After Width: | Height: | Size: 712 KiB |
BIN
sreez/assets/sreez_stack_logos_flat.png
Normal file
After Width: | Height: | Size: 717 KiB |
18
sreez/build_docker.sh
Executable file
@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ -z "${1}" ]]
|
||||
then
|
||||
echo "Specify the image tag as first argument to this script"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
REGISTRY=registry.nationtech.io
|
||||
IMAGE_NAME=sreez-website
|
||||
TAG="${1}"
|
||||
|
||||
IMAGE="${REGISTRY}/${IMAGE_NAME}:${TAG}"
|
||||
|
||||
echo "Going to build and push image ${IMAGE}"
|
||||
|
||||
docker build -t "${IMAGE}" .
|
||||
# docker push "${1}"
|
23
sreez/helm/sreez-website/.helmignore
Normal file
@ -0,0 +1,23 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
24
sreez/helm/sreez-website/Chart.yaml
Normal file
@ -0,0 +1,24 @@
|
||||
apiVersion: v2
|
||||
name: sreez-website
|
||||
description: NationTech public website for SREEZ
|
||||
|
||||
# A chart can be either an 'application' or a 'library' chart.
|
||||
#
|
||||
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||
# to be deployed.
|
||||
#
|
||||
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 0.1.0
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||
# It is recommended to use it with quotes.
|
||||
appVersion: "1.0.0"
|
22
sreez/helm/sreez-website/templates/NOTES.txt
Normal file
@ -0,0 +1,22 @@
|
||||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range $host := .Values.ingress.hosts }}
|
||||
{{- range .paths }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "sreez-website.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "sreez-website.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "sreez-website.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "sreez-website.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
|
||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
|
||||
{{- end }}
|
62
sreez/helm/sreez-website/templates/_helpers.tpl
Normal file
@ -0,0 +1,62 @@
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "sreez-website.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "sreez-website.fullname" -}}
|
||||
{{- if .Values.fullnameOverride }}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||
{{- if contains $name .Release.Name }}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "sreez-website.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "sreez-website.labels" -}}
|
||||
helm.sh/chart: {{ include "sreez-website.chart" . }}
|
||||
{{ include "sreez-website.selectorLabels" . }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "sreez-website.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "sreez-website.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "sreez-website.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create }}
|
||||
{{- default (include "sreez-website.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else }}
|
||||
{{- default "default" .Values.serviceAccount.name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
68
sreez/helm/sreez-website/templates/deployment.yaml
Normal file
@ -0,0 +1,68 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "sreez-website.fullname" . }}
|
||||
labels:
|
||||
{{- include "sreez-website.labels" . | nindent 4 }}
|
||||
spec:
|
||||
{{- if not .Values.autoscaling.enabled }}
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
{{- end }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "sreez-website.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
{{- with .Values.podAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "sreez-website.labels" . | nindent 8 }}
|
||||
{{- with .Values.podLabels }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ include "sreez-website.serviceAccountName" . }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
{{- toYaml .Values.livenessProbe | nindent 12 }}
|
||||
readinessProbe:
|
||||
{{- toYaml .Values.readinessProbe | nindent 12 }}
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
{{- with .Values.volumeMounts }}
|
||||
volumeMounts:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.volumes }}
|
||||
volumes:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
32
sreez/helm/sreez-website/templates/hpa.yaml
Normal file
@ -0,0 +1,32 @@
|
||||
{{- if .Values.autoscaling.enabled }}
|
||||
apiVersion: autoscaling/v2
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: {{ include "sreez-website.fullname" . }}
|
||||
labels:
|
||||
{{- include "sreez-website.labels" . | nindent 4 }}
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: {{ include "sreez-website.fullname" . }}
|
||||
minReplicas: {{ .Values.autoscaling.minReplicas }}
|
||||
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
|
||||
metrics:
|
||||
{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
|
||||
- type: Resource
|
||||
resource:
|
||||
name: cpu
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
|
||||
{{- end }}
|
||||
{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
|
||||
- type: Resource
|
||||
resource:
|
||||
name: memory
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
|
||||
{{- end }}
|
||||
{{- end }}
|
61
sreez/helm/sreez-website/templates/ingress.yaml
Normal file
@ -0,0 +1,61 @@
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
{{- $fullName := include "sreez-website.fullname" . -}}
|
||||
{{- $svcPort := .Values.service.port -}}
|
||||
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
|
||||
{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
|
||||
{{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||
apiVersion: networking.k8s.io/v1
|
||||
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||
apiVersion: networking.k8s.io/v1beta1
|
||||
{{- else -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
{{- end }}
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
labels:
|
||||
{{- include "sreez-website.labels" . | nindent 4 }}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
|
||||
ingressClassName: {{ .Values.ingress.className }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- range .Values.ingress.tls }}
|
||||
- hosts:
|
||||
{{- range .hosts }}
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
secretName: {{ .secretName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ .host | quote }}
|
||||
http:
|
||||
paths:
|
||||
{{- range .paths }}
|
||||
- path: {{ .path }}
|
||||
{{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
|
||||
pathType: {{ .pathType }}
|
||||
{{- end }}
|
||||
backend:
|
||||
{{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
|
||||
service:
|
||||
name: {{ $fullName }}
|
||||
port:
|
||||
number: {{ $svcPort }}
|
||||
{{- else }}
|
||||
serviceName: {{ $fullName }}
|
||||
servicePort: {{ $svcPort }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
15
sreez/helm/sreez-website/templates/service.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "sreez-website.fullname" . }}
|
||||
labels:
|
||||
{{- include "sreez-website.labels" . | nindent 4 }}
|
||||
spec:
|
||||
type: {{ .Values.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.service.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
{{- include "sreez-website.selectorLabels" . | nindent 4 }}
|
13
sreez/helm/sreez-website/templates/serviceaccount.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "sreez-website.serviceAccountName" . }}
|
||||
labels:
|
||||
{{- include "sreez-website.labels" . | nindent 4 }}
|
||||
{{- with .Values.serviceAccount.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
automountServiceAccountToken: {{ .Values.serviceAccount.automount }}
|
||||
{{- end }}
|
@ -0,0 +1,15 @@
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: "{{ include "sreez-website.fullname" . }}-test-connection"
|
||||
labels:
|
||||
{{- include "sreez-website.labels" . | nindent 4 }}
|
||||
annotations:
|
||||
"helm.sh/hook": test
|
||||
spec:
|
||||
containers:
|
||||
- name: wget
|
||||
image: busybox
|
||||
command: ['wget']
|
||||
args: ['{{ include "sreez-website.fullname" . }}:{{ .Values.service.port }}']
|
||||
restartPolicy: Never
|
109
sreez/helm/sreez-website/values.yaml
Normal file
@ -0,0 +1,109 @@
|
||||
# Default values for sreez-website.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
image:
|
||||
repository: registry.nationtech.io/sreez-website
|
||||
pullPolicy: Always
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: "v1.0.0"
|
||||
|
||||
imagePullSecrets: []
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# Automatically mount a ServiceAccount's API credentials?
|
||||
automount: true
|
||||
# Annotations to add to the service account
|
||||
annotations: {}
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
name: ""
|
||||
|
||||
podAnnotations: {}
|
||||
podLabels: {}
|
||||
|
||||
podSecurityContext: {}
|
||||
# fsGroup: 2000
|
||||
|
||||
securityContext: {}
|
||||
# capabilities:
|
||||
# drop:
|
||||
# - ALL
|
||||
# readOnlyRootFilesystem: true
|
||||
# runAsNonRoot: true
|
||||
# runAsUser: 1000
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 8080
|
||||
|
||||
ingress:
|
||||
enabled: true
|
||||
className: "nginx"
|
||||
annotations:
|
||||
cert-manager.io/issuer: "letsencrypt-prod"
|
||||
kubernetes.io/tls-acme: "true"
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
hosts:
|
||||
- host: sreez.nationtech.io
|
||||
paths:
|
||||
- path: /
|
||||
pathType: ImplementationSpecific
|
||||
tls:
|
||||
- secretName: sreez.nationtech.io-tls
|
||||
hosts:
|
||||
- sreez.nationtech.io
|
||||
|
||||
resources: {}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: http
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: http
|
||||
|
||||
autoscaling:
|
||||
enabled: false
|
||||
minReplicas: 1
|
||||
maxReplicas: 100
|
||||
targetCPUUtilizationPercentage: 80
|
||||
# targetMemoryUtilizationPercentage: 80
|
||||
|
||||
# Additional volumes on the output Deployment definition.
|
||||
volumes: []
|
||||
# - name: foo
|
||||
# secret:
|
||||
# secretName: mysecret
|
||||
# optional: false
|
||||
|
||||
# Additional volumeMounts on the output Deployment definition.
|
||||
volumeMounts: []
|
||||
# - name: foo
|
||||
# mountPath: "/etc/foo"
|
||||
# readOnly: true
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
@ -2,8 +2,10 @@ use leptos::*;
|
||||
use leptos_meta::*;
|
||||
use leptos_router::*;
|
||||
|
||||
use crate::pages::ShortLandingPage;
|
||||
use crate::pages::HomePage;
|
||||
use crate::pages::InitialOffer;
|
||||
use crate::components::Matomo;
|
||||
|
||||
#[component]
|
||||
pub fn App() -> impl IntoView {
|
||||
@ -13,16 +15,19 @@ pub fn App() -> impl IntoView {
|
||||
view! {
|
||||
// injects a stylesheet into the document <head>
|
||||
// id=leptos means cargo-leptos will hot-reload this stylesheet
|
||||
<Stylesheet id="leptos" href="/pkg/nationtech-io.css"/>
|
||||
<Stylesheet id="leptos" href="/pkg/sreez.css"/>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
|
||||
<Matomo />
|
||||
|
||||
// sets the document title
|
||||
<Title text="SREEZ - Site Reliability Engineering for Everyone, eZ"/>
|
||||
|
||||
// content for this welcome page
|
||||
<Router>
|
||||
<main class="bg-main">
|
||||
<main class="bg-main bg-light">
|
||||
<Routes>
|
||||
<Route path="" view=HomePage/>
|
||||
<Route path="" view=ShortLandingPage/>
|
||||
<Route path="/home-page" view=HomePage/>
|
||||
<Route path="/initial-offer" view=InitialOffer/>
|
||||
<Route path="/*any" view=NotFound/>
|
||||
</Routes>
|
||||
|
19
sreez/src/components/book_a_demo.rs
Normal file
@ -0,0 +1,19 @@
|
||||
use leptos::*;
|
||||
|
||||
#[component]
|
||||
pub fn BookADemo() -> impl IntoView {
|
||||
let (is_clicked, set_clicked) = create_signal(false);
|
||||
|
||||
view! {
|
||||
<div>
|
||||
<button class="btn"
|
||||
on:click=move |_| {
|
||||
set_clicked.update(|is_clicked| *is_clicked = !*is_clicked)
|
||||
}
|
||||
>"Book a demo →"</button>
|
||||
<div class="animate-vertical sm-margin-top-2" data-visible=is_clicked>
|
||||
<script src="https://embed.ycb.me" async="true" data-domain="jggc"></script>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
38
sreez/src/components/footer.rs
Normal file
@ -0,0 +1,38 @@
|
||||
use leptos::*;
|
||||
|
||||
#[component]
|
||||
pub fn Footer() -> impl IntoView {
|
||||
let (is_clicked, set_clicked) = create_signal(false);
|
||||
|
||||
view! {
|
||||
<div class="pad-y-4 margin-top-5 text-left max-width-900 margin-x-1 lg-margin-x-auto">
|
||||
<p>"Reach us here :"</p>
|
||||
<p>
|
||||
<a href="linkedin" aria-label="NationTech LinkedIn page" aria-hidden="true" class="row items-center">
|
||||
<img src="assets/icons/linkedin.svg" height="32px"/>
|
||||
|
||||
<span class="pad-left-1">"LinkedIn"</span>
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://jggc.youcanbook.me" aria-label="You Can Book Me" aria-hidden="true" class="row items-center">
|
||||
<img src="assets/icons/youcanbookme_black.png" height="32px"/>
|
||||
<span class="pad-left-1">"Book a meeting"</span>
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://nationtech.io" aria-label="NationTech website" aria-hidden="true" class="row items-center">
|
||||
<img src="assets/icons/website.svg" height="32px"/>
|
||||
<span class="pad-left-1">"nationtech.io"</span>
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="mailto=sreez@nationtech.io" aria-label="SREEZ Email Address" aria-hidden="true" class="row items-center no-decoration">
|
||||
<span class="icon-as-image material-symbols-outlined">"mail"
|
||||
</span>
|
||||
<span class="pad-left-1 underline">"sreez@nationtech.io"</span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
}
|
||||
}
|
8
sreez/src/components/matomo.rs
Normal file
@ -0,0 +1,8 @@
|
||||
use leptos::*;
|
||||
|
||||
#[component]
|
||||
pub fn Matomo() -> impl IntoView {
|
||||
view! {
|
||||
<script src="assets/scripts/matomo.js" type="text/javascript" />
|
||||
}
|
||||
}
|
6
sreez/src/components/mod.rs
Normal file
@ -0,0 +1,6 @@
|
||||
mod book_a_demo;
|
||||
mod footer;
|
||||
mod matomo;
|
||||
pub use book_a_demo::*;
|
||||
pub use footer::*;
|
||||
pub use matomo::*;
|
@ -1,5 +1,6 @@
|
||||
pub mod app;
|
||||
mod pages;
|
||||
mod components;
|
||||
|
||||
#[cfg(feature = "hydrate")]
|
||||
#[wasm_bindgen::prelude::wasm_bindgen]
|
||||
|
@ -5,7 +5,7 @@ async fn main() -> std::io::Result<()> {
|
||||
use actix_web::*;
|
||||
use leptos::*;
|
||||
use leptos_actix::{generate_route_list, LeptosRoutes};
|
||||
use nationtech_io::app::*;
|
||||
use sreez::app::*;
|
||||
|
||||
let conf = get_configuration(None).await.unwrap();
|
||||
let addr = conf.leptos_options.site_addr;
|
||||
|
@ -11,10 +11,10 @@ pub fn HomePage() -> impl IntoView {
|
||||
<span class="font-size-xl color-gray">"Site Reliability Engineering for Everyone, eZ"</span>
|
||||
</h1>
|
||||
<h2 class="font-size-3xl">
|
||||
<span>"Stay focused"</span><br/>
|
||||
<span>"on your features,"</span><br/>
|
||||
<span>"we take care"</span><br/>
|
||||
<span>"of the infrastructure."</span>
|
||||
<span>"Focus"</span><br/>
|
||||
<span>"On features"</span><br/>
|
||||
<span>"We perfect"</span><br/>
|
||||
<span>"Your infrastructure."</span>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
@ -32,7 +32,7 @@ pub fn HomePage() -> impl IntoView {
|
||||
<h3>"Batteries included"</h3>
|
||||
<ul>
|
||||
<li>"Managed Orchestrator : RedHat OpenShift Community (OKD) cluster"</li>
|
||||
<li>"Marketplace : Easily install hundreds of apps, databases, productivity tools at no additional cost"</li>
|
||||
<li>"Marketplace : Easily install, upgrade, rollback hundreds of apps, databases, productivity tools at no additional cost"</li>
|
||||
<li>"CI/CD Pipeline : Source Control, Continuous Integration, Test Automation, Static Analysis, Continuous Delivery"</li>
|
||||
<li>"AI Tools : Open source LLMs, Model Management and Deployment, Jupyter Notebooks, NVidia GPUs"</li>
|
||||
</ul>
|
||||
|
@ -3,24 +3,24 @@ use leptos::*;
|
||||
#[component]
|
||||
pub fn InitialOffer() -> impl IntoView {
|
||||
view! {
|
||||
<div class="text-center margin-y-25vh">
|
||||
<p class="text-3x font-bold max-width-900 margin-x-auto">"Imagine a world where your startup's infrastructure is as resilient as the biggest tech giants', but without the overhead."</p>
|
||||
<p class="text-3x font-bold max-width-900 margin-x-auto">"Welcome to SREEZ, where we make that dream a reality"</p>
|
||||
</div>
|
||||
<div class="row margin-y-4 justify-center">
|
||||
<img src="assets/sreez_transparent_bg.png" alt="SREEZ mascot. Yes it is text-to-image generated by GPT4/DALL·E" class="max-width-400 margin-x-3"/>
|
||||
<div class="row wrap margin-y-4 justify-center">
|
||||
<div class="margin-x-3 text-left column justify-center">
|
||||
<h1>"SREEZ"
|
||||
<h1 class="text-3x">"Site Reliability Engineering for Everyone, eZ : SREEZ"
|
||||
<br/>
|
||||
<span class="font-size-xl color-gray">"Site Reliability Engineering for Everyone, eZ"</span>
|
||||
<span class="font-xl color-gray line-1">"Site Reliability Engineering for Everyone, eZ"</span>
|
||||
</h1>
|
||||
<h2 class="font-size-3xl">
|
||||
<h2 class="font-3xl">
|
||||
<span>"Stay focused"</span><br/>
|
||||
<span>"on your features,"</span><br/>
|
||||
<span>"we take care"</span><br/>
|
||||
<span>"of the infrastructure."</span>
|
||||
</h2>
|
||||
</div>
|
||||
<img src="assets/sreez_transparent_bg.png" alt="SREEZ mascot. Yes it is text-to-image generated by GPT4/DALL·E" class="max-width-400 margin-x-3"/>
|
||||
</div>
|
||||
<div class="text-center margin-y-25vh">
|
||||
<p class="text-3x font-bold max-width-900 margin-x-auto">"Imagine a world where your startup's infrastructure is as resilient as the biggest tech giants', but without the overhead."</p>
|
||||
<p class="text-3x font-bold max-width-900 margin-x-auto">"Welcome to SREEZ, where we make that dream a reality"</p>
|
||||
</div>
|
||||
<div class="row card-list">
|
||||
<div class="card">
|
||||
@ -49,7 +49,8 @@ pub fn InitialOffer() -> impl IntoView {
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p>"And much more, just "<a href="mailto:sreez@nationtech.io">"ask us!"</a></p>
|
||||
<p>"And much more, just "</p>
|
||||
<a href="mailto:sreez@nationtech.io?subject=SREEZ: I want to know more" target="_blank" ><button class="btn btn-dark">"Ask us"</button></a>
|
||||
|
||||
<div class="row card-list">
|
||||
<div class="card">
|
||||
@ -58,7 +59,7 @@ pub fn InitialOffer() -> impl IntoView {
|
||||
<p class="font-bold text-center ">"10 555 CAD / Year"</p>
|
||||
<p class="font-bold text-center">"Coming soon"</p>
|
||||
<p class="font-bold text-center">
|
||||
<a href="mailto:sreez@nationtech.io?subject=SREEZ Bootstrap Package&body=I am interested in SREEZ Bootstrap Package">"Subscribe to waitlist"</a>
|
||||
<a target="_blank" href="mailto:sreez@nationtech.io?subject=SREEZ Bootstrap Package&body=I am interested in SREEZ Bootstrap Package">"Subscribe to waitlist"</a>
|
||||
</p>
|
||||
<ul class="text-left">
|
||||
<li>"Dedicated Kubernetes namespace - Auto-Healing, Auto-Scaling, Fully Managed"</li>
|
||||
@ -79,7 +80,7 @@ pub fn InitialOffer() -> impl IntoView {
|
||||
<p class="font-bold text-center ">"55 555 CAD / Year"</p>
|
||||
<p class="font-bold text-center">"5 available "</p>
|
||||
<p class="font-bold text-center">
|
||||
<a href="mailto:sreez@nationtech.io?subject=SREEZ Startup Package&body=I am interested in SREEZ Startup Package">"Get it now"</a>
|
||||
<a target="_blank" href="mailto:sreez@nationtech.io?subject=SREEZ Startup Package&body=I am interested in SREEZ Startup Package">"Get it now"</a>
|
||||
</p>
|
||||
<ul class="text-left">
|
||||
<li>"Everything in lower package, plus"</li>
|
||||
@ -101,7 +102,7 @@ pub fn InitialOffer() -> impl IntoView {
|
||||
<p class="font-bold text-center">"555 555 CAD / Year"</p>
|
||||
<p class="font-bold text-center">"1 available "</p>
|
||||
<p class="font-bold text-center">
|
||||
<a href="mailto:sreez@nationtech.io?subject=SREEZ Top package&body=I am interested in SREEZ Top Package">"Get it now"</a>
|
||||
<a target="_blank" href="mailto:sreez@nationtech.io?subject=SREEZ Top package&body=I am interested in SREEZ Top Package">"Get it now"</a>
|
||||
</p>
|
||||
<ul class="text-left">
|
||||
<li>"Everything in lower package, plus"</li>
|
||||
@ -121,7 +122,7 @@ pub fn InitialOffer() -> impl IntoView {
|
||||
<div class="margin-y-25vh">
|
||||
<h2>"Not ready to make a move yet but want to improve your infrastructure"</h2>
|
||||
<p>
|
||||
<a href="mailto:sreez@nationtech.io?subject=Mailing list subscription&body=I want to get SREEZ news">"Subscribe to our mailing list"</a>
|
||||
<a target="_blank" href="mailto:sreez@nationtech.io?subject=Mailing list subscription&body=I want to get SREEZ news">"Subscribe to our mailing list"</a>
|
||||
" for SRE advice and events"
|
||||
</p>
|
||||
</div>
|
||||
|
@ -1,4 +1,6 @@
|
||||
mod home_page;
|
||||
mod initial_offer;
|
||||
mod short_landing_page;
|
||||
pub use short_landing_page::*;
|
||||
pub use home_page::*;
|
||||
pub use initial_offer::*;
|
||||
|
87
sreez/src/pages/short_landing_page.rs
Normal file
@ -0,0 +1,87 @@
|
||||
use leptos::*;
|
||||
use crate::components::BookADemo;
|
||||
use crate::components::Footer;
|
||||
|
||||
/// Renders the home page of your application.
|
||||
#[component]
|
||||
pub fn ShortLandingPage() -> impl IntoView {
|
||||
view! {
|
||||
<div class="margin-x-auto lg-margin-x-3">
|
||||
<img src="assets/sreez_logo_shaded_v2.png" aria-label="SREEZ mascot of a cherry because SREEZ sounds like 'cerise' in French which means Cherry" class="max-width-150"/>
|
||||
</div>
|
||||
<div class="max-width-900 margin-x-auto">
|
||||
<div class="margin-x-1 lg-margin-x-3 text-left">
|
||||
<h1>"Accelerate your software delivery with SREEZ."</h1>
|
||||
<p>"Focus on what really matters."</p>
|
||||
<p>"Stop being overwhelmed by platform and infrastructure work."</p>
|
||||
<p>"Get our platform deployed and your projects migrated faster than you thought possible."</p>
|
||||
<div class="margin-top-2 text-center lg-text-left">
|
||||
<BookADemo />
|
||||
</div>
|
||||
</div>
|
||||
<div class="card max-width-600 margin-x-auto margin-y-4">
|
||||
<span class="material-symbols-outlined card-icon">"key"</span>
|
||||
<ul class="text-left list-pad-1">
|
||||
<li>"A single dashboard for your infrastructure"</li>
|
||||
<li>"Pre-built platform combining the best tools available"</li>
|
||||
<li>"Expert platform engineers with decades of DevOps and SRE experience"</li>
|
||||
<li>"An all-in-one software delivery platform with services you didn't think you could afford"</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2 class="margin-top-5">"Struggling to keep your DevOps tools up to par ?"</h2>
|
||||
<div class="lg-lr-sections">
|
||||
<div class="card max-width-600 margin-x-auto margin-y-4">
|
||||
<span class="material-symbols-outlined card-icon">"price_change"</span>
|
||||
<p>"With an ever-growing DevOps toolchain, most teams cannot afford to invest the time and money required to build the pipeline they know they need."</p>
|
||||
</div>
|
||||
<div class="card max-width-600 margin-x-auto margin-y-4">
|
||||
<span class="material-symbols-outlined card-icon">"stacks"</span>
|
||||
<p>"We fix that by building a unified platform for small and medium teams."</p>
|
||||
</div>
|
||||
<div class="card max-width-600 margin-x-auto margin-y-4">
|
||||
<span class="material-symbols-outlined card-icon">"waving_hand"</span>
|
||||
<div>
|
||||
<p>"Our platform engineering experts work with you to select the best fitting open-source tools such as"</p>
|
||||
<ul class="text-left list-pad-1">
|
||||
<li>"Kubernetes"</li>
|
||||
<li>"RedHat Developer Hub"</li>
|
||||
<li>"ArgoCD"</li>
|
||||
<li>"Grafana"</li>
|
||||
<li>"HyperDX"</li>
|
||||
</ul>
|
||||
<img src="assets/sreez_stack_logos_flat.png" alt="SREEZ stack logos" class="width-600 max-width-100pct margin-top-2" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="card max-width-600 margin-x-auto margin-y-4">
|
||||
<span class="material-symbols-outlined card-icon">"engineering"</span>
|
||||
<div>
|
||||
<h3>"Wo do all this for you"</h3>
|
||||
<ul class="text-left list-pad-1">
|
||||
<li>"Migrate your existing applications to the platform"</li>
|
||||
<li>"Coach your team on best practices"</li>
|
||||
<li>"Be the 24/7 first respondants to incidents, only waking you up when it really matters"</li>
|
||||
<li>"Continuously improve your delivery speed, quality and reliability"</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="margin-top-8">"Delivering faster means your business wins : join the Elite with our unique early adopter offer!"</h2>
|
||||
<div class="card max-width-600 margin-x-auto margin-top-5">
|
||||
<span class="material-symbols-outlined card-icon">"editor_choice"</span>
|
||||
<h3 class="pad-y-1">"Get a pioneer seat to be a key part of the SREEZ project's foundation."</h3>
|
||||
<p><strong>"What you'll get"</strong></p>
|
||||
<ul class="text-left list-pad-1">
|
||||
<li>"20 to 100 hours of expert consulting from our team every month"</li>
|
||||
<li>"Free hosting up to 500 CPUs, 2 000 GB RAM, 150 TB Storage, 128 GB GPU VRAM for AI models"</li>
|
||||
<li>"Full SREEZ platform based on best-in-class open-source tools "</li>
|
||||
<li>"Your features prioritized on the platform"</li>
|
||||
<li>"DevOps and SRE best practices coaching and resources"</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="margin-top-5">
|
||||
<BookADemo />
|
||||
</div>
|
||||
</div>
|
||||
<Footer/>
|
||||
}
|
||||
}
|
@ -1,22 +1,44 @@
|
||||
@font-face {
|
||||
font-family: "Fira Mono";
|
||||
src:
|
||||
url("/assets/fonts/FiraMono-Regular.woff2") format("woff2");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Intel One";
|
||||
src:
|
||||
url("/assets/fonts/intelone-mono-font-family-regular.ttf") format("truetype");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "PT Mono";
|
||||
src:
|
||||
url("/assets/fonts/PTM55F.ttf") format("truetype");
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
// font-family: monospace;
|
||||
font-family: "Fira Mono";
|
||||
font-family: "Intel One";
|
||||
font-family: "PT Mono";
|
||||
text-align: center;
|
||||
font-size: 1.25rem;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #FAFAF5;
|
||||
font-family: Roboto, helvetica;
|
||||
font-family: Poppins, helvetica;
|
||||
.line-2-5 {
|
||||
line-height: 2.5rem;
|
||||
}
|
||||
|
||||
|
||||
.font-size-4xl {
|
||||
.font-4xl {
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
||||
.font-size-xl {
|
||||
font-size: 1.5rem;
|
||||
.font-xl {
|
||||
font-size: 1.7rem;
|
||||
}
|
||||
|
||||
.line-1 {
|
||||
line-height: 1rem;
|
||||
}
|
||||
|
||||
.color-gray {
|
||||
@ -32,11 +54,29 @@ ol {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.wrap {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.no-decoration {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.icon-as-image {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
font-size: 32px !important;
|
||||
}
|
||||
|
||||
.underline {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.items-center {
|
||||
align-items: center;
|
||||
}
|
||||
@ -55,6 +95,24 @@ ol {
|
||||
margin-bottom: 4rem;
|
||||
}
|
||||
|
||||
.pad-y-4 {
|
||||
padding-top: 4rem;
|
||||
padding-bottom: 4rem;
|
||||
}
|
||||
|
||||
.pad-y-1 {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.pad-left-3 {
|
||||
padding-left: 3rem;
|
||||
}
|
||||
|
||||
.pad-left-1 {
|
||||
padding-left: 1rem;
|
||||
}
|
||||
|
||||
.margin-x-3 {
|
||||
margin-left: 3rem;
|
||||
margin-right: 3rem;
|
||||
@ -69,15 +127,71 @@ ol {
|
||||
margin: 3rem;
|
||||
}
|
||||
|
||||
|
||||
.max-width-300 {
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
.max-width-150 {
|
||||
max-width: 150px;
|
||||
}
|
||||
|
||||
.max-width-400 {
|
||||
max-width: 400px;
|
||||
}
|
||||
|
||||
.max-width-500 {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
||||
.max-width-600 {
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
.width-600 {
|
||||
width: 600px;
|
||||
}
|
||||
|
||||
.max-width-100pct {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.max-width-900 {
|
||||
max-width: 900px;
|
||||
}
|
||||
|
||||
.list-pad-1 li {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.margin-x-auto {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.margin-top-8 {
|
||||
margin-top: 8rem;
|
||||
}
|
||||
|
||||
.margin-top-5 {
|
||||
margin-top: 5rem;
|
||||
}
|
||||
|
||||
.margin-top-2 {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.margin-top-1 {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.card {
|
||||
.card-icon {
|
||||
font-size: 7rem;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.card-list {
|
||||
text-align: left;
|
||||
justify-content: center;
|
||||
@ -88,12 +202,6 @@ ol {
|
||||
flex: 1;
|
||||
min-width: 250px;
|
||||
max-width: 400px;
|
||||
// border: solid 3px #ccc;
|
||||
//border-radius: 20px;
|
||||
// background-color: white;
|
||||
//border: 2px solid #eee;
|
||||
//border-right: 2px solid #fc314e88;
|
||||
//border-left: 2px solid #fc314e88;
|
||||
margin: 30px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@ -152,26 +260,122 @@ ol.huge-list-markers li{
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 900px) {
|
||||
.text-2x {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.text-3x {
|
||||
font-size: 3rem;
|
||||
font-size: 3.5rem;
|
||||
}
|
||||
|
||||
.text-4x {
|
||||
font-size: 4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.font-bold {
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.max-width-400 {
|
||||
max-width: 400px;
|
||||
.font-600 {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.height-110 {
|
||||
height: 110px;
|
||||
}
|
||||
|
||||
.bg-light, body {
|
||||
background-color: #F8F9F1;
|
||||
}
|
||||
|
||||
.btn-dark {
|
||||
background-color: #007488;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.btn {
|
||||
border: none;
|
||||
padding: 1rem 1.5rem;
|
||||
border-radius: 0.75rem;
|
||||
font-weight: 700;
|
||||
font-size: inherit;
|
||||
cursor: pointer;
|
||||
background-color: #e72235;
|
||||
color: white;
|
||||
&:hover {
|
||||
// background-color: #eee;
|
||||
// color: black;
|
||||
box-shadow: 5px 5px 27px 10px rgba(231,34,53,0.21);
|
||||
//background-color: #66d500;
|
||||
//background-color: white;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.material-symbols-outlined {
|
||||
font-variation-settings:
|
||||
'FILL' 0,
|
||||
'wght' 400,
|
||||
'GRAD' 0,
|
||||
'opsz' 24
|
||||
}
|
||||
|
||||
.animate-vertical {
|
||||
overflow: hidden;
|
||||
max-height: 0;
|
||||
transition: max-height 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
/* CSS for when data-visible attribute is true */
|
||||
.animate-vertical[data-visible] {
|
||||
max-height: 900px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.sm-margin-top-2 {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@media screen and (min-width: 960px) {
|
||||
.lg-margin-x-auto {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.lg-text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.lg-margin-x-3 {
|
||||
margin-left: 3rem;
|
||||
margin-right: 3rem;
|
||||
}
|
||||
|
||||
.lg-lr-sections {
|
||||
> div {
|
||||
margin-right: 0;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
justify-content: space-around;
|
||||
text-align: left;
|
||||
align-items: center;
|
||||
|
||||
.card-icon {
|
||||
padding-left: 7rem;
|
||||
padding-right: 7rem;
|
||||
}
|
||||
}
|
||||
|
||||
> div:nth-child(even) {
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
}
|
||||
}
|
||||
|