feat: Implement a new marketing-focused home page and refine the main application layout for improved presentation.

This commit is contained in:
Ho Ngoc Hai
2026-01-19 10:00:02 +07:00
parent 31d8e0100c
commit f7889567f2
2 changed files with 88 additions and 77 deletions

View File

@@ -6,13 +6,19 @@
<MudSnackbarProvider />
<MudLayout>
<MudAppBar Elevation="0" Class="border-b border-solid mud-border-lines-default">
<MudIconButton Icon="@Icons.Material.Rounded.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@ToggleDrawer" />
<MudText Typo="Typo.h6" Class="ml-3 font-weight-bold">GoodGo</MudText>
<MudAppBar Elevation="0" Class="border-b border-solid mud-border-lines-default" Fixed="true" Style="background-color: var(--bg-primary); backdrop-filter: blur(12px);">
<MudIconButton Icon="@Icons.Material.Rounded.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@ToggleDrawer" Class="d-md-none" />
<MudText Typo="Typo.h6" Class="ml-3 font-weight-bold" Style="font-family: 'Inter', sans-serif;">GoodGo</MudText>
<MudSpacer />
<MudButton Variant="Variant.Text" Color="Color.Inherit" Class="mr-4 d-none d-md-flex">Features</MudButton>
<MudButton Variant="Variant.Text" Color="Color.Inherit" Class="mr-4 d-none d-md-flex">Enterprise</MudButton>
<MudButton Variant="Variant.Text" Color="Color.Inherit" Class="mr-4 d-none d-md-flex">Pricing</MudButton>
<!-- Desktop Navigation -->
<MudStack Row="true" Spacing="4" Class="d-none d-md-flex align-center mr-8">
<MudLink Href="/" Color="Color.Inherit" Underline="Underline.None" Class="mud-nav-link px-3 py-2">Home</MudLink>
<MudLink Href="/features" Color="Color.Inherit" Underline="Underline.None" Class="mud-nav-link px-3 py-2">Features</MudLink>
<MudLink Href="/enterprise" Color="Color.Inherit" Underline="Underline.None" Class="mud-nav-link px-3 py-2">Enterprise</MudLink>
<MudLink Href="/pricing" Color="Color.Inherit" Underline="Underline.None" Class="mud-nav-link px-3 py-2">Pricing</MudLink>
</MudStack>
<MudStack Row="true" Spacing="2">
<MudButton Variant="Variant.Outlined" Color="Color.Inherit" Class="rounded-lg">Sign in</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Primary" Class="rounded-lg">Download</MudButton>
@@ -23,19 +29,20 @@
OnClick="@ToggleDarkMode" />
</MudAppBar>
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2">
<MudDrawer @bind-Open="_drawerOpen" Variant="@DrawerVariant.Temporary" Elevation="1">
<MudDrawerHeader>
<MudText Typo="Typo.h6">GoodGo</MudText>
</MudDrawerHeader>
<NavMenu />
</MudDrawer>
<MudMainContent Class="pt-16 px-4">
<MudContainer MaxWidth="MaxWidth.Large" Class="my-4">
@Body
</MudContainer>
<MudMainContent Class="pt-16">
@Body
</MudMainContent>
</MudLayout>
@code {
private bool _drawerOpen = true;
private bool _drawerOpen = false;
private bool _isDarkMode = false;
private MudTheme _theme = new()

View File

@@ -1,71 +1,75 @@
@page "/"
<PageTitle>Home - GoodGo</PageTitle>
<PageTitle>GoodGo - The AI Code Editor</PageTitle>
<MudText Typo="Typo.h3" GutterBottom="true">Welcome to GoodGo</MudText>
<MudText Typo="Typo.body1" Class="mb-4">
Enterprise frontend application built with Blazor WebAssembly and MudBlazor.
</MudText>
<MudContainer MaxWidth="MaxWidth.Large" Class="px-4 py-16">
<!-- Hero Section -->
<MudStack AlignItems="AlignItems.Center" Spacing="6" Class="py-12 text-center">
<MudText Typo="Typo.h1" Class="hero-title" Style="font-weight: 700; line-height: 1.1; letter-spacing: -0.02em;">
The AI Code Editor
</MudText>
<MudText Typo="Typo.h5" Class="hero-subtitle mb-6" Style="color: var(--text-secondary); max-width: 600px;">
Built to make you extraordinarily productive, GoodGo is the best way to code with AI.
</MudText>
<MudStack Row="true" Spacing="3" Class="justify-center">
<MudButton Variant="Variant.Filled" Color="Color.Primary" Size="Size.Large" Class="px-8 py-3 rounded-lg"
Style="font-weight: 600; font-size: 1.1rem;">
Download for Mac
</MudButton>
<MudButton Variant="Variant.Outlined" Color="Color.Inherit" Size="Size.Large" Class="px-8 py-3 rounded-lg"
Style="border-color: var(--border-default); font-weight: 500;">
Read the Manifesto
</MudButton>
</MudStack>
<MudText Typo="Typo.caption" Class="mt-4" Style="color: var(--text-tertiary);">
Free to use. No credit card required.
</MudText>
</MudStack>
<MudGrid>
<MudItem xs="12" sm="6" md="4">
<MudCard Elevation="2">
<MudCardHeader>
<CardHeaderAvatar>
<MudAvatar Color="Color.Primary">
<MudIcon Icon="@Icons.Material.Filled.ShoppingCart" />
</MudAvatar>
</CardHeaderAvatar>
<CardHeaderContent>
<MudText Typo="Typo.h6">Products</MudText>
<MudText Typo="Typo.body2">Manage your product catalog</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardActions>
<MudButton Variant="Variant.Text" Color="Color.Primary" Href="/products">View Products</MudButton>
</MudCardActions>
</MudCard>
</MudItem>
<!-- Demo / Visual Section -->
<div class="mt-12 mx-auto rounded-xl overflow-hidden glass-card" style="max-width: 1000px; aspect-ratio: 16/9; display: flex; align-items: center; justify-content: center; border: 1px solid var(--border-default);">
<MudText Typo="Typo.h6" Style="color: var(--text-tertiary);">[ Interactive Demo Placeholder ]</MudText>
</div>
<MudItem xs="12" sm="6" md="4">
<MudCard Elevation="2">
<MudCardHeader>
<CardHeaderAvatar>
<MudAvatar Color="Color.Secondary">
<MudIcon Icon="@Icons.Material.Filled.Person" />
</MudAvatar>
</CardHeaderAvatar>
<CardHeaderContent>
<MudText Typo="Typo.h6">Authentication</MudText>
<MudText Typo="Typo.body2">Login and registration</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardActions>
<MudButton Variant="Variant.Text" Color="Color.Secondary" Href="/auth">Go to Auth</MudButton>
</MudCardActions>
</MudCard>
</MudItem>
<!-- Features Section -->
<MudGrid Class="mt-24" Spacing="4">
<MudItem xs="12" md="4">
<div class="feature-card p-6 rounded-lg" style="border: 1px solid var(--border-default);">
<MudIcon Icon="@Icons.Material.Rounded.AutoFixHigh" Size="Size.Large" Class="mb-4" />
<MudText Typo="Typo.h6" Class="mb-2 font-weight-bold">Tab to Autocomplete</MudText>
<MudText Style="color: var(--text-secondary);">GoodGo predicts your next edit, so you can just hit tab to fly through changes.</MudText>
</div>
</MudItem>
<MudItem xs="12" md="4">
<div class="feature-card p-6 rounded-lg" style="border: 1px solid var(--border-default);">
<MudIcon Icon="@Icons.Material.Rounded.ChatBubble" Size="Size.Large" Class="mb-4" />
<MudText Typo="Typo.h6" Class="mb-2 font-weight-bold">Chat with Your Codebase</MudText>
<MudText Style="color: var(--text-secondary);">No more alt-tabbing. Get answers to codebase-wide questions strictly from your editor.</MudText>
</div>
</MudItem>
<MudItem xs="12" md="4">
<div class="feature-card p-6 rounded-lg" style="border: 1px solid var(--border-default);">
<MudIcon Icon="@Icons.Material.Rounded.Security" Size="Size.Large" Class="mb-4" />
<MudText Typo="Typo.h6" Class="mb-2 font-weight-bold">Privacy First</MudText>
<MudText Style="color: var(--text-secondary);">Your code never leaves your machine unless you explicitly choose to use cloud AI models.</MudText>
</div>
</MudItem>
</MudGrid>
</MudContainer>
<MudItem xs="12" sm="6" md="4">
<MudCard Elevation="2">
<MudCardHeader>
<CardHeaderAvatar>
<MudAvatar Color="Color.Tertiary">
<MudIcon Icon="@Icons.Material.Filled.Api" />
</MudAvatar>
</CardHeaderAvatar>
<CardHeaderContent>
<MudText Typo="Typo.h6">BFF Architecture</MudText>
<MudText Typo="Typo.body2">YARP reverse proxy to microservices</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardActions>
<MudButton Variant="Variant.Text" Color="Color.Tertiary" Href="/swagger">API Docs</MudButton>
</MudCardActions>
</MudCard>
</MudItem>
</MudGrid>
<MudAlert Severity="Severity.Info" Class="mt-4">
<MudText>This app uses the <strong>Backend for Frontend (BFF)</strong> pattern with YARP to proxy API calls to microservices.</MudText>
</MudAlert>
<style>
.hero-title {
font-size: 3rem;
}
@@media (min-width: 600px) {
.hero-title {
font-size: 5rem;
}
}
.glass-card {
background: var(--bg-secondary);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
</style>