diff --git a/libs/route-pages/projects/src/lib/routes.ts b/libs/route-pages/projects/src/lib/routes.ts
index 4bebd7eec..74a6e6c07 100644
--- a/libs/route-pages/projects/src/lib/routes.ts
+++ b/libs/route-pages/projects/src/lib/routes.ts
@@ -40,6 +40,10 @@ export const routes: Routes = [
path: 'breethe',
loadChildren: () => import('@valor-software/breethe-page').then(m => m.BreethePageModule)
},
+ {
+ path: 'zephyr',
+ loadChildren: () => import('@valor-software/zephyr-page').then(m => m.ZephyrPageModule)
+ },
{
path: ':id',
component: ProjectComponent
diff --git a/libs/route-pages/zephyr-page/.eslintrc.json b/libs/route-pages/zephyr-page/.eslintrc.json
new file mode 100644
index 000000000..d7bdac1e9
--- /dev/null
+++ b/libs/route-pages/zephyr-page/.eslintrc.json
@@ -0,0 +1,36 @@
+{
+ "extends": ["../../../.eslintrc.json"],
+ "ignorePatterns": ["!**/*"],
+ "overrides": [
+ {
+ "files": ["*.ts"],
+ "extends": [
+ "plugin:@nx/angular",
+ "plugin:@angular-eslint/template/process-inline-templates"
+ ],
+ "rules": {
+ "@angular-eslint/directive-selector": [
+ "error",
+ {
+ "type": "attribute",
+ "prefix": "valorSoftwareSiteBase",
+ "style": "camelCase"
+ }
+ ],
+ "@angular-eslint/component-selector": [
+ "error",
+ {
+ "type": "element",
+ "prefix": "valor-software-site-base",
+ "style": "kebab-case"
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.html"],
+ "extends": ["plugin:@nx/angular-template"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/libs/route-pages/zephyr-page/README.md b/libs/route-pages/zephyr-page/README.md
new file mode 100644
index 000000000..4c194ad35
--- /dev/null
+++ b/libs/route-pages/zephyr-page/README.md
@@ -0,0 +1,9 @@
+# route-pages-zephyr-page
+
+This library was generated with [Nx](https://nx.dev).
+
+
+## Running unit tests
+
+Run `nx test route-pages-zephyr-page` to execute the unit tests.
+
diff --git a/libs/route-pages/zephyr-page/ng-package.json b/libs/route-pages/zephyr-page/ng-package.json
new file mode 100644
index 000000000..7131ce3c1
--- /dev/null
+++ b/libs/route-pages/zephyr-page/ng-package.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
+ "dest": "../../../dist/libs/route-pages/zephyr-page",
+ "lib": {
+ "entryFile": "src/index.ts"
+ }
+}
diff --git a/libs/route-pages/zephyr-page/package.json b/libs/route-pages/zephyr-page/package.json
new file mode 100644
index 000000000..e427ea2a4
--- /dev/null
+++ b/libs/route-pages/zephyr-page/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "@valor-software/zephyr-page",
+ "version": "0.0.1",
+ "peerDependencies": {
+ "@angular/common": "^12.2.0",
+ "@angular/core": "^12.2.0"
+ },
+ "dependencies": {
+ "tslib": "^2.3.0"
+ }
+}
diff --git a/libs/route-pages/zephyr-page/project.json b/libs/route-pages/zephyr-page/project.json
new file mode 100644
index 000000000..94823f091
--- /dev/null
+++ b/libs/route-pages/zephyr-page/project.json
@@ -0,0 +1,44 @@
+{
+ "name": "route-pages-zephyr-page",
+ "$schema": "../../../node_modules/nx/schemas/project-schema.json",
+ "projectType": "library",
+ "sourceRoot": "libs/route-pages/zephyr-page/src",
+ "prefix": "valor-software-site-base",
+ "targets": {
+ "build": {
+ "executor": "@nx/angular:ng-packagr-lite",
+ "outputs": ["dist/libs/route-pages/zephyr-page"],
+ "options": {
+ "project": "libs/route-pages/zephyr-page/ng-package.json"
+ },
+ "configurations": {
+ "production": {
+ "tsConfig": "libs/route-pages/zephyr-page/tsconfig.lib.prod.json"
+ },
+ "development": {
+ "tsConfig": "libs/route-pages/zephyr-page/tsconfig.lib.json"
+ }
+ },
+ "defaultConfiguration": "production"
+ },
+ "test": {
+ "executor": "@nx/jest:jest",
+ "outputs": ["coverage/libs/route-pages/zephyr-page"],
+ "options": {
+ "jestConfig": "libs/route-pages/zephyr-page/jest.config.ts",
+ "passWithNoTests": true
+ }
+ },
+ "lint": {
+ "executor": "@nx/linter:eslint",
+ "options": {
+ "lintFilePatterns": [
+ "libs/route-pages/zephyr-page/src/**/*.ts",
+ "libs/route-pages/zephyr-page/src/**/*.html"
+ ]
+ }
+ }
+ },
+ "tags": [],
+ "implicitDependencies": ["common-docs"]
+}
diff --git a/libs/route-pages/zephyr-page/src/index.ts b/libs/route-pages/zephyr-page/src/index.ts
new file mode 100644
index 000000000..a3f2f2e46
--- /dev/null
+++ b/libs/route-pages/zephyr-page/src/index.ts
@@ -0,0 +1,2 @@
+export * from './zephyr-page.module';
+
\ No newline at end of file
diff --git a/libs/route-pages/zephyr-page/src/routes.ts b/libs/route-pages/zephyr-page/src/routes.ts
new file mode 100644
index 000000000..649354d6e
--- /dev/null
+++ b/libs/route-pages/zephyr-page/src/routes.ts
@@ -0,0 +1,4 @@
+import {ZephyrPageComponent} from "./zephyr-page.component";
+
+export const routes = [{ path: '', component: ZephyrPageComponent }];
+
diff --git a/libs/route-pages/zephyr-page/src/test-setup.ts b/libs/route-pages/zephyr-page/src/test-setup.ts
new file mode 100644
index 000000000..dec67071c
--- /dev/null
+++ b/libs/route-pages/zephyr-page/src/test-setup.ts
@@ -0,0 +1,11 @@
+import 'jest-preset-angular/setup-jest';
+
+import { getTestBed } from '@angular/core/testing';
+import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
+
+getTestBed().resetTestEnvironment();
+getTestBed().initTestEnvironment(
+ BrowserDynamicTestingModule,
+ platformBrowserDynamicTesting(),
+ { teardown: { destroyAfterEach: false } },
+);
diff --git a/libs/route-pages/zephyr-page/src/zephyr-page.component.html b/libs/route-pages/zephyr-page/src/zephyr-page.component.html
new file mode 100644
index 000000000..748b6afcc
--- /dev/null
+++ b/libs/route-pages/zephyr-page/src/zephyr-page.component.html
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+
+ Zephyr
+
+
+ Zephyr Cloud is a cutting-edge platform that offers seamless integration across any cloud provider,
+ framework, or bundler, enabling developers to deploy and manage applications in seconds.
+ It is designed to accelerate development workflows with unparalleled ease of application
+ deployment and management. With Zephyr Cloud, your team can preview and test applications in
+ a real-world environment before going live, turning "testing in production" into a practical reality.
+ Once ready, applications can be promoted with just a single click.
+
+
+
+
+
+

+
+
+

+
+
+
+
+
+
+ Background
+
+
+

+
+
+ The inception of Zephyr Cloud stemmed from Valor Software's commitment to advancing software
+ development through open-source contributions, particularly in Module Federation. Building on the
+ success of its predecessor, Medusa—a pivotal tool for Federated Micro Frontends—Valor Software
+ recognized an opportunity to push the boundaries further. Driven by insights from clients and the
+ community, our CEO Dmitriy Shekhovtsov together with trusted co-partner Zackary Chapple, in
+ collaboration with Module Federation creator Zackary Jackson, conceived Zephyr Cloud to empower
+ developers to "Innovate With Confidence" throughout the entire software development lifecycle.
+
+
+
+
+
+ Technologies & services:
+
+
+
+
+
+
+ Deliverables
+
+
+
+ At Valor, we’ve dedicated our expertise and resources to create a platform that embodies the pinnacle
+ of modern deployment solutions. Drawing on years of hands-on experience with module federation and
+ cutting-edge technology, we have engineered Zephyr to offer unmatched speed and flexibility. Our team,
+ fueled by a deep understanding of micro-frontends and extensive field experience, has carefully crafted
+ a solution that exceeds the demands of today’s dynamic development environments. Zephyr represents the
+ culmination of our commitment to innovation and excellence, making sure that every deployment is faster,
+ more efficient, and seamlessly integrated into any workflow.
+
+
+
+ -
+ Zephyr Cloud Platform: A cutting-edge cloud-agnostic, framework-agnostic platform
+ designed for ultra-fast deployments, featuring robust support for micro-frontends and module federation.
+
+ -
+ Project Website: A professionally designed landing page and comprehensive project
+ website that includes information about Zephyr Cloud, its features, and benefits. The site also
+ houses the documentation, making it easy for users to access setup guides, integration instructions,
+ and support resources.
+
+
+ -
+ Comprehensive Documentation: Detailed guides and reference materials covering
+ installation, configuration, and usage of Zephyr, including setup for various frameworks and
+ bundlers, and a curated collection of example configurations and practical use cases showcasing
+ Zephyr’s flexibility across different environments.
+
+
+ -
+ Chrome Extension: The Zephyr Mission Control Chrome extension for managing and
+ previewing deployed application versions, offering real-time visibility and control directly
+ from the browser.
+
+
+
+
+
+
+
+
+
+ Challenges
+
+
+ Zephyr Cloud addresses several critical challenges:
+
+
+
+ -
+ Enhancing Developer Experience: Companies must streamline the developer experience
+ by integrating daily engineering tasks and applications across the SDLC. Delays in CI/CD pipelines
+ or changes lead to substantial organizational costs.
+
+ -
+ Managing Multiple Third-Party Applications: With developers using numerous
+ applications daily, consolidating data and making it actionable is challenging. There is a need
+ to leverage third-party data from cloud services and error-tracking tools to generate valuable
+ insights.
+
+ -
+ Supporting Organizational Growth: As organizations expand, they need solutions
+ that transition from mere website deployment to efficiently building and managing platforms with
+ extensive developer teams.
+
+ -
+ Achieving Rapid Time to Market: Rapid time to market is essential, necessitating
+ quick iteration through immediate deployment and availability.
+
+ -
+ Heavy Vendor Lock-In: Existing CI/CD tools often lead to vendor lock-in, making
+ it challenging to experiment with or transition to newer, more advanced tools and solutions.
+
+ -
+ High Learning Overhead: The sophisticated nature of modern tools involves a steep
+ learning curve, requiring lengthy training that can impact team productivity and project momentum.
+
+
+
+
+
+
+
+ Our Solutions
+
+
+ Zephyr Cloud's innovative features tackle these challenges head-on:
+
+
+
+ -
+ Version Control: Deploy unlimited application versions with access through a
+ Chrome extension and dashboard.
+
+ -
+ Rollback and Forward: WEnsure stability with the ability to instantly roll back
+ or forward releases as needed.
+
+ -
+ Sub-Second Deployment: Achieve lightning-fast deployment for both production and
+ preview versions in literal seconds.
+
+ -
+ Long-Lived Preview Links: Keep deployed versions live indefinitely unless manually
+ deleted.
+
+ -
+ Smart Dependency Management: Monitor and visualize all application's dependencies,
+ from remote modules in Module Federation apps to npm packages, ensuring everything stays in sync
+ and optimized.
+
+ -
+ Concurrent Integration: Zephyr’s design ensures it can be set up and run in
+ parallel with any existing cloud services, frameworks, or bundlers, enabling seamless and
+ non-disruptive operation.
+
+ -
+ Speed of Integration: From its inception, Zephyr Cloud has prioritized speed.
+ Thanks to its speed-centric design it can be integrated into the existing systems in only an
+ afternoon, minimizing downtime.
+
+
+
+
+
+
+
+
+
+ Future
+
+
+
+
+ Zephyr Cloud is currently in public alpha and has already achieved significant milestones,
+ including securing $3M in Seed funding. We are exceptionally confident in the platform's
+ transformative potential and its ability to revolutionize development workflows. Our ongoing
+ development focuses on enhancing rapid deployment capabilities and adding innovative features.
+
+
+ We invite you to experience Zephyr Cloud’s game-changing capabilities firsthand. Contact us today
+ to schedule a personalized demo and see for yourself how our platform can redefine your development
+ process. Stay tuned for exciting updates as we continue to advance and refine our offerings.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libs/route-pages/zephyr-page/src/zephyr-page.component.ts b/libs/route-pages/zephyr-page/src/zephyr-page.component.ts
new file mode 100644
index 000000000..e20d2f779
--- /dev/null
+++ b/libs/route-pages/zephyr-page/src/zephyr-page.component.ts
@@ -0,0 +1,83 @@
+import { Component } from '@angular/core';
+import SwiperCore, { Pagination, SwiperOptions } from "swiper";
+import { ITechnologiesCard } from '@valor-software/common-docs';
+
+SwiperCore.use([Pagination]);
+
+const technologiesCards: ITechnologiesCard[] = [
+ {
+ title: '',
+ smJustify: 'center',
+ lgJustify: 'start',
+ technologies: [
+ {
+ src: "assets/img/technologies/svg/react_clean.svg",
+ title: "React"
+ },
+ {
+ src: "assets/img/technologies/active/node.png",
+ title: "Node.Js"
+ },
+ {
+ src: "assets/img/technologies/others/type_script.png",
+ title: "TypeScript"
+ },
+ {
+ src: "assets/img/technologies/others/stripe.png",
+ title: "Stripe"
+ },
+ {
+ src: "assets/img/technologies/others/sentry.png",
+ title: "Sentry"
+ },
+ {
+ src: "assets/img/technologies/active/g_analytics.png",
+ title: "Google Analytics"
+ },
+ {
+ src: "assets/img/technologies/others/auth0.png",
+ title: "Auth0"
+ },
+ {
+ src: "assets/img/technologies/others/cloudflare_workers.png",
+ title: "Cloudflare Workers"
+ }
+ ]
+ },
+
+];
+
+@Component({
+ // eslint-disable-next-line @angular-eslint/component-selector
+ selector: 'zephyr-page',
+ templateUrl: './zephyr-page.component.html'
+})
+export class ZephyrPageComponent {
+ changeBreadCrumbTitle: { path: string, title: string, excludePath?: boolean }[] = [
+ {
+ path: 'projects',
+ title: 'Portfolio',
+ },
+ {
+ path: 'zephyr',
+ title: 'zephyr'
+ }
+ ];
+
+ technologiesCards: ITechnologiesCard[] = technologiesCards;
+ swiperConfig: SwiperOptions = {
+ slidesPerView: 1,
+ spaceBetween: 40,
+ centeredSlides: true,
+ mousewheel: {
+ releaseOnEdges: true
+ },
+ initialSlide: 0,
+ slideToClickedSlide: true,
+ pagination: {
+ clickable: true
+ },
+
+ };
+
+}
diff --git a/libs/route-pages/zephyr-page/src/zephyr-page.module.spec.ts b/libs/route-pages/zephyr-page/src/zephyr-page.module.spec.ts
new file mode 100644
index 000000000..88274dc3e
--- /dev/null
+++ b/libs/route-pages/zephyr-page/src/zephyr-page.module.spec.ts
@@ -0,0 +1,19 @@
+import { async, TestBed } from '@angular/core/testing';
+import { ZephyrPageModule } from './zephyr-page.module';
+
+describe('ZephyrPageModule', () => {
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [ ZephyrPageModule ]
+ })
+ .compileComponents();
+ }));
+
+ // TODO: Add real tests here.
+ //
+ // NB: This particular test does not do anything useful.
+ // It does NOT check for correct instantiation of the module.
+ it('should have a module definition', () => {
+ expect(ZephyrPageModule).toBeDefined();
+ });
+});
diff --git a/libs/route-pages/zephyr-page/src/zephyr-page.module.ts b/libs/route-pages/zephyr-page/src/zephyr-page.module.ts
new file mode 100644
index 000000000..ae1185e6e
--- /dev/null
+++ b/libs/route-pages/zephyr-page/src/zephyr-page.module.ts
@@ -0,0 +1,22 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { ZephyrPageComponent } from "./zephyr-page.component";
+import { routes } from "./routes";
+import { RouterModule, Routes } from "@angular/router";
+import { CommonDocsModule } from '@valor-software/common-docs';
+import { SwiperModule } from "swiper/angular";
+
+export { ZephyrPageComponent } from "./zephyr-page.component";
+
+@NgModule({
+ declarations: [ZephyrPageComponent],
+ imports: [
+ CommonModule,
+ RouterModule.forChild(routes),
+ CommonDocsModule,
+ SwiperModule
+ ]
+})
+export class ZephyrPageModule {
+ static routes: Routes = routes;
+}
diff --git a/libs/route-pages/zephyr-page/tsconfig.json b/libs/route-pages/zephyr-page/tsconfig.json
new file mode 100644
index 000000000..aeb1c9ace
--- /dev/null
+++ b/libs/route-pages/zephyr-page/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "files": [],
+ "include": [],
+ "references": [
+ {
+ "path": "./tsconfig.lib.json"
+ },
+ {
+ "path": "./tsconfig.spec.json"
+ }
+ ],
+ "compilerOptions": {
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "target": "es2020"
+ },
+ "angularCompilerOptions": {
+ "strictInjectionParameters": true,
+ "strictInputAccessModifiers": true,
+ "strictTemplates": true
+ }
+}
diff --git a/libs/route-pages/zephyr-page/tsconfig.lib.json b/libs/route-pages/zephyr-page/tsconfig.lib.json
new file mode 100644
index 000000000..5aebe84f5
--- /dev/null
+++ b/libs/route-pages/zephyr-page/tsconfig.lib.json
@@ -0,0 +1,20 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../../dist/out-tsc",
+ "target": "ES2022",
+ "declaration": true,
+ "declarationMap": true,
+ "inlineSources": true,
+ "types": [],
+ "lib": ["dom", "es2018"],
+ "useDefineForClassFields": false
+ },
+ "exclude": [
+ "src/test-setup.ts",
+ "**/*.spec.ts",
+ "**/*.test.ts",
+ "jest.config.ts"
+ ],
+ "include": ["**/*.ts"]
+}
diff --git a/libs/route-pages/zephyr-page/tsconfig.lib.prod.json b/libs/route-pages/zephyr-page/tsconfig.lib.prod.json
new file mode 100644
index 000000000..0e06848ce
--- /dev/null
+++ b/libs/route-pages/zephyr-page/tsconfig.lib.prod.json
@@ -0,0 +1,11 @@
+{
+ "extends": "./tsconfig.lib.json",
+ "compilerOptions": {
+ "declarationMap": false,
+ "target": "ES2022",
+ "useDefineForClassFields": false
+ },
+ "angularCompilerOptions": {
+ "compilationMode": "partial"
+ }
+}
diff --git a/libs/route-pages/zephyr-page/tsconfig.spec.json b/libs/route-pages/zephyr-page/tsconfig.spec.json
new file mode 100644
index 000000000..cb7b2fe45
--- /dev/null
+++ b/libs/route-pages/zephyr-page/tsconfig.spec.json
@@ -0,0 +1,20 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../../dist/out-tsc",
+ "module": "commonjs",
+ "types": [
+ "jest",
+ "node"
+ ]
+ },
+ "files": [
+ "src/test-setup.ts"
+ ],
+ "include": [
+ "**/*.test.ts",
+ "**/*.spec.ts",
+ "**/*.d.ts",
+ "jest.config.ts"
+ ]
+}
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 784c2dcfe..8249bdd91 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -33,6 +33,9 @@
"@valor-software/breethe-page": [
"libs/route-pages/breethe-page/src/index.ts"
],
+ "@valor-software/zephyr-page": [
+ "libs/route-pages/zephyr-page/src/index.ts"
+ ],
"@valor-software/careers": [
"libs/route-pages/careers/src/index.ts"
],