From e1a32e88ec3d5cae5391ca818a0c9ca204029a66 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 2 Jun 2026 02:39:36 +0000
Subject: [PATCH 1/3] Initial plan
From c744700532dbc22717e2d38ec15606792df6f001 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 2 Jun 2026 03:06:19 +0000
Subject: [PATCH 2/3] feat: randomize home page free and open source quote
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
---
.../components/FreeAndOpenSourceAside.astro | 11 ++++++++++-
.../unit/custom-components.vitest.test.ts | 19 ++++++++++++++++---
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/src/frontend/src/components/FreeAndOpenSourceAside.astro b/src/frontend/src/components/FreeAndOpenSourceAside.astro
index 0d661cbfd..de100d130 100644
--- a/src/frontend/src/components/FreeAndOpenSourceAside.astro
+++ b/src/frontend/src/components/FreeAndOpenSourceAside.astro
@@ -2,12 +2,21 @@
/**
* This aside component displays a localized "Free & Open Source" message.
*/
+const aspireQuotes = [
+ 'Aspire is the cloud-native app model for .NET.',
+ 'Aspire is orchestration for your distributed app stack.',
+ 'Aspire is local-first developer tooling for cloud-native apps.',
+ 'Aspire is built for observable, production-ready app development.',
+ 'Aspire is open source from app model to deployment artifacts.',
+];
+
+const randomQuote = aspireQuotes[Math.floor(Math.random() * aspireQuotes.length)];
---
{Astro.locals.t('landing.freeAndOSS')}
- {Astro.locals.t('landing.aspirePromise')}
+ {randomQuote}
diff --git a/src/frontend/tests/unit/custom-components.vitest.test.ts b/src/frontend/tests/unit/custom-components.vitest.test.ts
index ca4e10f2c..13a778641 100644
--- a/src/frontend/tests/unit/custom-components.vitest.test.ts
+++ b/src/frontend/tests/unit/custom-components.vitest.test.ts
@@ -1,4 +1,4 @@
-import { describe, expect, it } from 'vitest';
+import { describe, expect, it, vi } from 'vitest';
import heroImage from '@assets/aspire-hero.png';
import AccessibleCodeButtons from '@components/AccessibleCodeButtons.astro';
@@ -404,9 +404,9 @@ const basicRenderCases: BasicRenderCase[] = [
includes: ['data-lang-name="TypeScript"', 'data-lang-name="C#"', 'And more...'],
},
{
- name: 'FreeAndOpenSourceAside renders translated copy',
+ name: 'FreeAndOpenSourceAside renders localized title',
Component: FreeAndOpenSourceAside,
- includes: ['landing.freeAndOSS', 'landing.aspirePromise'],
+ includes: ['landing.freeAndOSS'],
},
{
name: 'OsAwareTabs renders shell tabs and sync key script',
@@ -642,6 +642,19 @@ describe('custom Astro component render coverage', () => {
});
}
+ it('renders different Aspire quotes for different random values', async () => {
+ const randomSpy = vi.spyOn(Math, 'random');
+ randomSpy.mockReturnValueOnce(0).mockReturnValueOnce(0.99);
+
+ const firstRender = normalizeHtml(await renderComponent(FreeAndOpenSourceAside));
+ const secondRender = normalizeHtml(await renderComponent(FreeAndOpenSourceAside));
+
+ expect(firstRender).toContain('Aspire is the cloud-native app model for .NET.');
+ expect(secondRender).toContain('Aspire is open source from app model to deployment artifacts.');
+
+ randomSpy.mockRestore();
+ });
+
it('filters GitHubRepoStats by repository name when multiple stats are provided', async () => {
const html = normalizeHtml(
await renderComponent(GitHubRepoStats, {
From bfe05dd406b1faedd0ef63f899989b7e1f756ec1 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 2 Jun 2026 03:12:38 +0000
Subject: [PATCH 3/3] fix: rotate homepage free and open source quote per visit
Co-authored-by: IEvangelist <7679720+IEvangelist@users.noreply.github.com>
---
.../components/FreeAndOpenSourceAside.astro | 16 +++++++++++-----
.../unit/custom-components.vitest.test.ts | 18 +++++++-----------
2 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/src/frontend/src/components/FreeAndOpenSourceAside.astro b/src/frontend/src/components/FreeAndOpenSourceAside.astro
index de100d130..290d3fc51 100644
--- a/src/frontend/src/components/FreeAndOpenSourceAside.astro
+++ b/src/frontend/src/components/FreeAndOpenSourceAside.astro
@@ -9,17 +9,23 @@ const aspireQuotes = [
'Aspire is built for observable, production-ready app development.',
'Aspire is open source from app model to deployment artifacts.',
];
-
-const randomQuote = aspireQuotes[Math.floor(Math.random() * aspireQuotes.length)];
---
{Astro.locals.t('landing.freeAndOSS')}
-
- {randomQuote}
-
+
{aspireQuotes[0]}
+
+