diff --git a/modules/docs/app/VoloDocs.Web/Controllers/HomeController.cs b/modules/docs/app/VoloDocs.Web/Controllers/HomeController.cs
deleted file mode 100644
index 17c6550502..0000000000
--- a/modules/docs/app/VoloDocs.Web/Controllers/HomeController.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Volo.Abp.AspNetCore.Mvc;
-
-namespace VoloDocs.Web.Controllers
-{
- public class HomeController : AbpController
- {
- public void Index()
- {
- //if (!_urlUiOptions.RoutePrefix.IsNullOrWhiteSpace())
- //{
- // return Redirect("." + _urlUiOptions.RoutePrefix);
- //}
-
- //return Page();
-
- //return Redirect("/en/abp/latest");
- }
- }
-}
diff --git a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml
new file mode 100644
index 0000000000..0a212f1499
--- /dev/null
+++ b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml
@@ -0,0 +1,23 @@
+@page
+@model VoloDocs.Web.Pages.IndexModel
+@{
+}
+
+@if (!Model.Projects.Any())
+{
+
+ No projects found!
+ See documentation to see how you can create a new one.
+
+}
+else
+{
+
Projects
+
+
+ @foreach (var project in Model.Projects)
+ {
+ @project.Name
+ }
+
+}
\ No newline at end of file
diff --git a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs
new file mode 100644
index 0000000000..537d650f83
--- /dev/null
+++ b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.Extensions.Options;
+using Volo.Docs;
+using Volo.Docs.Projects;
+
+namespace VoloDocs.Web.Pages
+{
+ public class IndexModel : PageModel
+ {
+ public IReadOnlyList Projects { get; set; }
+
+ private readonly DocsUiOptions _urlUiOptions;
+
+ private readonly IProjectAppService _projectAppService;
+
+ public IndexModel(IOptions urlOptions, IProjectAppService projectAppService)
+ {
+ _projectAppService = projectAppService;
+ _urlUiOptions = urlOptions.Value;
+ }
+
+ public async Task OnGetAsync()
+ {
+ var projects = await _projectAppService.GetListAsync();
+
+ if (projects.Items.Count == 1)
+ {
+ return await RedirectToProjectAsync(projects.Items.First());
+ }
+ else if (projects.Items.Count > 1)
+ {
+ Projects = projects.Items;
+ }
+
+ return Page();
+ }
+
+ private async Task RedirectToProjectAsync(ProjectDto project, string language = "en", string version = null)
+ {
+ var path = GetUrlForProject(project, language, version);
+ return await Task.FromResult(Redirect(path));
+ }
+
+ //Eg: "/en/abp/latest"
+ public string GetUrlForProject(ProjectDto project, string language = "en", string version = null)
+ {
+ return "." +
+ _urlUiOptions.RoutePrefix.EnsureStartsWith('/').EnsureEndsWith('/') +
+ language.EnsureEndsWith('/') +
+ project.ShortName.EnsureEndsWith('/') +
+ (version ?? DocsAppConsts.Latest);
+ }
+ }
+}