> explicitly.')
+  process.exit(-1);
+}
+
+const certFilePath = path.join(baseFolder, `${certificateName}.pem`);
+const keyFilePath = path.join(baseFolder, `${certificateName}.key`);
+
+if (!fs.existsSync(baseFolder)) {
+    fs.mkdirSync(baseFolder, { recursive: true });
+}
+
+if (!fs.existsSync(certFilePath) || !fs.existsSync(keyFilePath)) {
+  spawn('dotnet', [
+    'dev-certs',
+    'https',
+    '--export-path',
+    certFilePath,
+    '--format',
+    'Pem',
+    '--no-password',
+  ], { stdio: 'inherit', })
+  .on('exit', (code) => process.exit(code));
+}
\ No newline at end of file
diff --git a/AwesomeMicroservices/awesomemicroservices.client/awesomemicroservices.client.esproj b/AwesomeMicroservices/awesomemicroservices.client/awesomemicroservices.client.esproj
new file mode 100644
index 0000000..af345cb
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/awesomemicroservices.client.esproj
@@ -0,0 +1,10 @@
+
+  
+    npm start
+    Jasmine
+    
+    false
+    
+    $(MSBuildProjectDirectory)\dist\awesomemicroservices.client\browser\
+  
+
\ No newline at end of file
diff --git a/AwesomeMicroservices/awesomemicroservices.client/karma.conf.js b/AwesomeMicroservices/awesomemicroservices.client/karma.conf.js
new file mode 100644
index 0000000..efe6efe
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/karma.conf.js
@@ -0,0 +1,44 @@
+module.exports = function (config) {
+  config.set({
+    basePath: '',
+    frameworks: ['jasmine', '@angular-devkit/build-angular'],
+    plugins: [
+      require('karma-jasmine'),
+      require('karma-chrome-launcher'),
+      require('karma-jasmine-html-reporter'),
+      require('karma-coverage'),
+      require('@angular-devkit/build-angular/plugins/karma')
+    ],
+    client: {
+      jasmine: {
+        // you can add configuration options for Jasmine here
+        // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
+        // for example, you can disable the random execution with `random: false`
+        // or set a specific seed with `seed: 4321`
+      },
+      clearContext: false // leave Jasmine Spec Runner output visible in browser
+    },
+    jasmineHtmlReporter: {
+      suppressAll: true // removes the duplicated traces
+    },
+    coverageReporter: {
+      dir: require('path').join(__dirname, './coverage/'),
+      subdir: '.',
+      reporters: [
+        { type: 'html' },
+        { type: 'text-summary' }
+      ]
+    },
+    reporters: ['progress', 'kjhtml'],
+    port: 9876,
+    colors: true,
+    logLevel: config.LOG_INFO,
+    autoWatch: true,
+    browsers: ['Chrome'],
+    singleRun: false,
+    restartOnFileChange: true,
+    listenAddress: 'localhost',
+    hostname: 'localhost'
+  });
+};
+
diff --git a/AwesomeMicroservices/awesomemicroservices.client/package.json b/AwesomeMicroservices/awesomemicroservices.client/package.json
new file mode 100644
index 0000000..72d8571
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/package.json
@@ -0,0 +1,43 @@
+{
+  "name": "awesomemicroservices.client",
+  "version": "0.0.0",
+  "scripts": {
+    "ng": "ng",
+    "start": "run-script-os",
+    "build": "ng build",
+    "watch": "ng build --watch --configuration development",
+    "test": "ng test",
+    "prestart": "node aspnetcore-https",
+    "start:windows": "ng serve --ssl --ssl-cert \"%APPDATA%\\ASP.NET\\https\\%npm_package_name%.pem\" --ssl-key \"%APPDATA%\\ASP.NET\\https\\%npm_package_name%.key\" --host=127.0.0.1",
+    "start:default": "ng serve --ssl --ssl-cert \"$HOME/.aspnet/https/${npm_package_name}.pem\" --ssl-key \"$HOME/.aspnet/https/${npm_package_name}.key\" --host=127.0.0.1"
+  },
+  "private": true,
+  "dependencies": {
+    "@angular/animations": "^18.2.0",
+    "@angular/common": "^18.2.0",
+    "@angular/compiler": "^18.2.0",
+    "@angular/core": "^18.2.0",
+    "@angular/forms": "^18.2.0",
+    "@angular/platform-browser": "^18.2.0",
+    "@angular/platform-browser-dynamic": "^18.2.0",
+    "@angular/router": "^18.2.0",
+    "rxjs": "~7.8.0",
+    "tslib": "^2.3.0",
+    "zone.js": "~0.14.10",
+    "jest-editor-support": "*",
+    "run-script-os": "*"
+  },
+  "devDependencies": {
+    "@angular-devkit/build-angular": "^18.2.8",
+    "@angular/cli": "^18.2.8",
+    "@angular/compiler-cli": "^18.2.0",
+    "@types/jasmine": "~5.1.0",
+    "jasmine-core": "~5.2.0",
+    "karma": "~6.4.0",
+    "karma-chrome-launcher": "~3.2.0",
+    "karma-coverage": "~2.2.0",
+    "karma-jasmine": "~5.1.0",
+    "karma-jasmine-html-reporter": "~2.1.0",
+    "typescript": "~5.5.2"
+  }
+}
\ No newline at end of file
diff --git a/AwesomeMicroservices/awesomemicroservices.client/public/favicon.ico b/AwesomeMicroservices/awesomemicroservices.client/public/favicon.ico
new file mode 100644
index 0000000..57614f9
Binary files /dev/null and b/AwesomeMicroservices/awesomemicroservices.client/public/favicon.ico differ
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/app/app-routing.module.ts b/AwesomeMicroservices/awesomemicroservices.client/src/app/app-routing.module.ts
new file mode 100644
index 0000000..0297262
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/app/app-routing.module.ts
@@ -0,0 +1,10 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+const routes: Routes = [];
+
+@NgModule({
+  imports: [RouterModule.forRoot(routes)],
+  exports: [RouterModule]
+})
+export class AppRoutingModule { }
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.css b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.css
new file mode 100644
index 0000000..43fba20
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.css
@@ -0,0 +1,14 @@
+:host {
+    max-width: 1280px;
+    padding: 2rem;
+    text-align: center;
+}
+
+th, td {
+    padding-left: 1rem;
+    padding-right: 1rem;
+}
+
+table {
+    margin: 0 auto;
+}
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.html b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.html
new file mode 100644
index 0000000..4f4058c
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.html
@@ -0,0 +1,24 @@
+Weather forecast
+
+This component demonstrates fetching data from the server.
+
+Loading... Please refresh once the ASP.NET backend has started. See https://aka.ms/jspsintegrationangular for more details.
+
+
+    
+        
+            | Date+ | Temp. (C)+ | Temp. (F)+ | Summary+ | 
+    
+    
+        
+            | {{ forecast.date }}+ | {{ forecast.temperatureC }}+ | {{ forecast.temperatureF }}+ | {{ forecast.summary }}+ | 
+    
+
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.spec.ts b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.spec.ts
new file mode 100644
index 0000000..64dc497
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.spec.ts
@@ -0,0 +1,45 @@
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { AppComponent } from './app.component';
+
+describe('AppComponent', () => {
+  let component: AppComponent;
+  let fixture: ComponentFixture;
+  let httpMock: HttpTestingController;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      declarations: [AppComponent],
+      imports: [HttpClientTestingModule]
+    }).compileComponents();
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(AppComponent);
+    component = fixture.componentInstance;
+    httpMock = TestBed.inject(HttpTestingController);
+  });
+
+  afterEach(() => {
+    httpMock.verify();
+  });
+
+  it('should create the app', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('should retrieve weather forecasts from the server', () => {
+    const mockForecasts = [
+      { date: '2021-10-01', temperatureC: 20, temperatureF: 68, summary: 'Mild' },
+      { date: '2021-10-02', temperatureC: 25, temperatureF: 77, summary: 'Warm' }
+    ];
+
+    component.ngOnInit();
+
+    const req = httpMock.expectOne('/weatherforecast');
+    expect(req.request.method).toEqual('GET');
+    req.flush(mockForecasts);
+
+    expect(component.forecasts).toEqual(mockForecasts);
+  });
+});
\ No newline at end of file
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.ts b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.ts
new file mode 100644
index 0000000..c9ba946
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.component.ts
@@ -0,0 +1,37 @@
+import { HttpClient } from '@angular/common/http';
+import { Component, OnInit } from '@angular/core';
+
+interface WeatherForecast {
+  date: string;
+  temperatureC: number;
+  temperatureF: number;
+  summary: string;
+}
+
+@Component({
+  selector: 'app-root',
+  templateUrl: './app.component.html',
+  styleUrl: './app.component.css'
+})
+export class AppComponent implements OnInit {
+  public forecasts: WeatherForecast[] = [];
+
+  constructor(private http: HttpClient) {}
+
+  ngOnInit() {
+    this.getForecasts();
+  }
+
+  getForecasts() {
+    this.http.get('/weatherforecast').subscribe(
+      (result) => {
+        this.forecasts = result;
+      },
+      (error) => {
+        console.error(error);
+      }
+    );
+  }
+
+  title = 'awesomemicroservices.client';
+}
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/app/app.module.ts b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.module.ts
new file mode 100644
index 0000000..0192642
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/app/app.module.ts
@@ -0,0 +1,19 @@
+import { HttpClientModule } from '@angular/common/http';
+import { NgModule } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
+
+import { AppRoutingModule } from './app-routing.module';
+import { AppComponent } from './app.component';
+
+@NgModule({
+  declarations: [
+    AppComponent
+  ],
+  imports: [
+    BrowserModule, HttpClientModule,
+    AppRoutingModule
+  ],
+  providers: [],
+  bootstrap: [AppComponent]
+})
+export class AppModule { }
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/index.html b/AwesomeMicroservices/awesomemicroservices.client/src/index.html
new file mode 100644
index 0000000..c27f437
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/index.html
@@ -0,0 +1,13 @@
+
+
+
+  
+  AwesomemicroservicesClient
+  
+  
+  
+
+
+  
+
+
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/main.ts b/AwesomeMicroservices/awesomemicroservices.client/src/main.ts
new file mode 100644
index 0000000..1d335a6
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/main.ts
@@ -0,0 +1,8 @@
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+
+import { AppModule } from './app/app.module';
+
+platformBrowserDynamic().bootstrapModule(AppModule, {
+  ngZoneEventCoalescing: true
+})
+  .catch(err => console.error(err));
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/proxy.conf.js b/AwesomeMicroservices/awesomemicroservices.client/src/proxy.conf.js
new file mode 100644
index 0000000..2e255a2
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/proxy.conf.js
@@ -0,0 +1,16 @@
+const { env } = require('process');
+
+const target = env.ASPNETCORE_HTTPS_PORT ? `https://localhost:${env.ASPNETCORE_HTTPS_PORT}` :
+    env.ASPNETCORE_URLS ? env.ASPNETCORE_URLS.split(';')[0] : 'https://localhost:7223';
+
+const PROXY_CONFIG = [
+  {
+    context: [
+      "/weatherforecast",
+    ],
+    target,
+    secure: false
+  }
+]
+
+module.exports = PROXY_CONFIG;
diff --git a/AwesomeMicroservices/awesomemicroservices.client/src/styles.css b/AwesomeMicroservices/awesomemicroservices.client/src/styles.css
new file mode 100644
index 0000000..90d4ee0
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/src/styles.css
@@ -0,0 +1 @@
+/* You can add global styles to this file, and also import other style files */
diff --git a/AwesomeMicroservices/awesomemicroservices.client/tsconfig.app.json b/AwesomeMicroservices/awesomemicroservices.client/tsconfig.app.json
new file mode 100644
index 0000000..3775b37
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/tsconfig.app.json
@@ -0,0 +1,15 @@
+/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
+/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "./out-tsc/app",
+    "types": []
+  },
+  "files": [
+    "src/main.ts"
+  ],
+  "include": [
+    "src/**/*.d.ts"
+  ]
+}
diff --git a/AwesomeMicroservices/awesomemicroservices.client/tsconfig.json b/AwesomeMicroservices/awesomemicroservices.client/tsconfig.json
new file mode 100644
index 0000000..a8bb65b
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/tsconfig.json
@@ -0,0 +1,33 @@
+/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
+/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
+{
+  "compileOnSave": false,
+  "compilerOptions": {
+    "outDir": "./dist/out-tsc",
+    "strict": true,
+    "noImplicitOverride": true,
+    "noPropertyAccessFromIndexSignature": true,
+    "noImplicitReturns": true,
+    "noFallthroughCasesInSwitch": true,
+    "skipLibCheck": true,
+    "isolatedModules": true,
+    "esModuleInterop": true,
+    "sourceMap": true,
+    "declaration": false,
+    "experimentalDecorators": true,
+    "moduleResolution": "bundler",
+    "importHelpers": true,
+    "target": "ES2022",
+    "module": "ES2022",
+    "lib": [
+      "ES2022",
+      "dom"
+    ]
+  },
+  "angularCompilerOptions": {
+    "enableI18nLegacyMessageIdFormat": false,
+    "strictInjectionParameters": true,
+    "strictInputAccessModifiers": true,
+    "strictTemplates": true
+  }
+}
diff --git a/AwesomeMicroservices/awesomemicroservices.client/tsconfig.spec.json b/AwesomeMicroservices/awesomemicroservices.client/tsconfig.spec.json
new file mode 100644
index 0000000..5fb748d
--- /dev/null
+++ b/AwesomeMicroservices/awesomemicroservices.client/tsconfig.spec.json
@@ -0,0 +1,15 @@
+/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
+/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
+{
+  "extends": "./tsconfig.json",
+  "compilerOptions": {
+    "outDir": "./out-tsc/spec",
+    "types": [
+      "jasmine"
+    ]
+  },
+  "include": [
+    "src/**/*.spec.ts",
+    "src/**/*.d.ts"
+  ]
+}
diff --git a/AwesomeMicroservicesSolution.sln b/AwesomeMicroservicesSolution.sln
new file mode 100644
index 0000000..4976656
--- /dev/null
+++ b/AwesomeMicroservicesSolution.sln
@@ -0,0 +1,30 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.12.35527.113 d17.12
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AwesomeMicroservices.Server", "AwesomeMicroservices\AwesomeMicroservices.Server\AwesomeMicroservices.Server.csproj", "{758C914B-C1D9-46E2-95F6-CDE1E282E283}"
+EndProject
+Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "awesomemicroservices.client", "AwesomeMicroservices\awesomemicroservices.client\awesomemicroservices.client.esproj", "{32A7249B-E416-4273-85AB-E8411FE0C8CA}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{758C914B-C1D9-46E2-95F6-CDE1E282E283}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{758C914B-C1D9-46E2-95F6-CDE1E282E283}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{758C914B-C1D9-46E2-95F6-CDE1E282E283}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{758C914B-C1D9-46E2-95F6-CDE1E282E283}.Release|Any CPU.Build.0 = Release|Any CPU
+		{32A7249B-E416-4273-85AB-E8411FE0C8CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{32A7249B-E416-4273-85AB-E8411FE0C8CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{32A7249B-E416-4273-85AB-E8411FE0C8CA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+		{32A7249B-E416-4273-85AB-E8411FE0C8CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{32A7249B-E416-4273-85AB-E8411FE0C8CA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{32A7249B-E416-4273-85AB-E8411FE0C8CA}.Release|Any CPU.Deploy.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d563d29
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# AwesomeMicroservicesSolution
\ No newline at end of file