@Model.ApiInfo.Title
@Model.ApiInfo.Description
- License: @Model.ApiInfo.License.Identifier
+ License: @Model.ApiInfo.License?.Identifier
diff --git a/src/Elastic.ApiExplorer/Landing/LandingViewModel.cs b/src/Elastic.ApiExplorer/Landing/LandingViewModel.cs
index c3950d28f..e4579ce25 100644
--- a/src/Elastic.ApiExplorer/Landing/LandingViewModel.cs
+++ b/src/Elastic.ApiExplorer/Landing/LandingViewModel.cs
@@ -6,7 +6,7 @@
namespace Elastic.ApiExplorer.Landing;
-public class LandingViewModel : ApiViewModel
+public class LandingViewModel(ApiRenderContext context) : ApiViewModel(context)
{
public required ApiLanding Landing { get; init; }
public required OpenApiInfo ApiInfo { get; init; }
diff --git a/src/Elastic.ApiExplorer/OpenApiGenerator.cs b/src/Elastic.ApiExplorer/OpenApiGenerator.cs
index 595430bee..75e9129bc 100644
--- a/src/Elastic.ApiExplorer/OpenApiGenerator.cs
+++ b/src/Elastic.ApiExplorer/OpenApiGenerator.cs
@@ -3,51 +3,242 @@
// See the LICENSE file in the project root for more information
using System.IO.Abstractions;
-using Elastic.ApiExplorer.Endpoints;
+using System.Text.RegularExpressions;
using Elastic.ApiExplorer.Landing;
using Elastic.ApiExplorer.Operations;
+using Elastic.Documentation;
using Elastic.Documentation.Configuration;
using Elastic.Documentation.Site.FileProviders;
using Elastic.Documentation.Site.Navigation;
using Microsoft.Extensions.Logging;
+using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
namespace Elastic.ApiExplorer;
-public class OpenApiGenerator(BuildContext context, ILoggerFactory logger)
+public interface IApiModel : INavigationModel, IPageRenderer