Skip to content

Commit 72caa5a

Browse files
IEvangelistCopilot
andauthored
Fix misc issues (#6)
* fix: standardize section headings to lowercase across documentation * fix: update links in documentation for consistency * fix: update search term for Go icon in IntegrationGrid and set fetchpriority for images in Hero component * fix: add canonical URL for SEO and reorder favicon links for better prioritization * fix: restore robots.txt file with user-agent and sitemap directives (corrected location) * Update src/frontend/astro.config.mjs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent a720bc6 commit 72caa5a

File tree

11 files changed

+59
-58
lines changed

11 files changed

+59
-58
lines changed

src/frontend/astro.config.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ export default defineConfig({
9797
{ tag: 'meta', attrs: { name: 'twitter:description', content: 'Aspire (formerly .NET Aspire) streamlines your development workflow with code-first control, modularity, and observability.' } },
9898
{ tag: 'meta', attrs: { name: 'twitter:image', content: 'https://aspire.dev/og-image.png' } },
9999

100-
// Favicons and icons
101-
{ tag: 'link', attrs: { rel: 'icon', type: 'image/png', href: '/favicon-96x96.png', sizes: '96x96' } },
100+
// Favicons and icons (ordered: SVG → PNG → ICO → Apple Touch Icon)
102101
{ tag: 'link', attrs: { rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' } },
102+
{ tag: 'link', attrs: { rel: 'icon', type: 'image/png', href: '/favicon-96x96.png', sizes: '96x96' } },
103103
{ tag: 'link', attrs: { rel: 'shortcut icon', href: '/favicon.ico' } },
104104
{ tag: 'link', attrs: { rel: 'apple-touch-icon', sizes: '180x180', href: '/apple-touch-icon.png' } },
105105
{ tag: 'meta', attrs: { name: 'apple-mobile-web-app-title', content: 'Aspire' } },

src/frontend/src/components/IntegrationGrid.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ const icons = [
163163
{ meta: elasticIcon, alt: "Elasticsearch", search: "elasticsearch" },
164164
{ meta: eventStoreIcon, alt: "EventStore", search: "eventstore" },
165165
{ meta: garnetIcon, alt: "Garnet", search: "garnet" },
166-
{ meta: goIcon, alt: "Go", search: "go", light: goLightIcon },
166+
{ meta: goIcon, alt: "Go", search: "golang gofeature", light: goLightIcon },
167167
{ meta: gitHubIcon, alt: "GitHub", search: "github", light: gitHubLightIcon },
168168
{ meta: javaIcon, alt: "Java", search: "java" },
169169
{ meta: k6Icon, alt: "k6", search: "k6" },

src/frontend/src/components/starlight/Hero.astro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const imageAttrs = {
1212
decoding: "async" as const,
1313
width: 1000,
1414
height: 1000,
15+
fetchpriority: "high" as const,
1516
alt: image?.alt || "",
1617
};
1718

src/frontend/src/content/docs/architecture/overview.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ import PublishAppTopologyLight from "@assets/architecture/overview/publish-app-t
7272

7373
## Dev-time orchestration
7474

75-
In run mode, [the AppHost orchestrates](/getting-started/app-host/) all resources defined in your app model. But how does it achieve this?
75+
In run mode, [the AppHost orchestrates](/get-started/app-host/) all resources defined in your app model. But how does it achieve this?
7676

7777
> [!IMPORTANT]
7878
> The AppHost isn't a production runtime. It's a development-time orchestration tool that simplifies the process of running and debugging your application locally.
@@ -109,7 +109,7 @@ In this section, several key questions are answered to help you understand how t
109109

110110
The orchestration process follows a layered architecture. At its core, the AppHost represents the developer's desired view of the distributed application's resources. DCP ensures that this desired state is realized by orchestrating the resources and maintaining consistency.
111111

112-
The [app model](/getting-started/app-host/) serves as a blueprint for DCP to orchestrate your application. Under the hood, the AppHost is a .NET console application powered by the [`📦 Aspire.Hosting.AppHost`](https://www.nuget.org/packages/Aspire.Hosting.AppHost) NuGet package. This package includes build targets that register orchestration dependencies, enabling seamless dev-time orchestration.
112+
The [app model](/get-started/app-host/) serves as a blueprint for DCP to orchestrate your application. Under the hood, the AppHost is a .NET console application powered by the [`📦 Aspire.Hosting.AppHost`](https://www.nuget.org/packages/Aspire.Hosting.AppHost) NuGet package. This package includes build targets that register orchestration dependencies, enabling seamless dev-time orchestration.
113113

114114
DCP is a Kubernetes-compatible API server, meaning it uses the same network protocols and conventions as Kubernetes. This compatibility allows the Aspire AppHost to leverage existing Kubernetes libraries for communication. Specifically, the AppHost contains an implementation of the `k8s.KubernetesClient` (from the [📦 KubernetesClient](https://www.nuget.org/packages/KubernetesClient) NuGet package), which is a .NET client for Kubernetes. This client is used to communicate with the DCP API server, enabling the AppHost to delegate orchestration tasks to DCP.
115115

@@ -122,7 +122,7 @@ import AppHostDcpFlowLight from "@assets/architecture/overview/app-host-dcp-flow
122122
alt="Flow diagram showing AppHost delegating to DCP"
123123
label={"AppHost flow diagram"} />
124124

125-
### Developer Control Plane
125+
### Developer control plane
126126

127127
DCP is at the core of the Aspire AppHost orchestration functionality. It's responsible for orchestrating all resources defined in your app model, starting the developer dashboard, ensuring that everything is set up correctly for local development and testing. DCP manages the lifecycle of resources, applies network configurations, and resolves dependencies.
128128

src/frontend/src/content/docs/architecture/resource-api-patterns.mdx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import { Aside, Steps } from '@astrojs/starlight/components';
77

88
Aspire's resource model allows you to define and configure resources in a structured way, enabling seamless integration and management of your application's components. This guide provides details the common patterns for adding and configuring resources in Aspire.
99

10-
## API Patterns
10+
## API patterns
1111

1212
Aspire separates **resource data models** from **behavior** using **fluent extension methods**.
1313
- **Resource classes** define only constructors and properties.
1414
- **Extension methods** implement resource creation, configuration, and runtime wiring.
1515

1616
This guide describes each pattern and shows a **verbatim Redis example** at the end. It also covers how to publish manifests via custom resources.
1717

18-
## Adding Resources with `AddX(...)`
18+
## Adding resources with `AddX(...)`
1919

2020
An `AddX(...)` method executes:
2121

@@ -26,7 +26,7 @@ An `AddX(...)` method executes:
2626
1. **Optional wiring** of endpoints, health checks, container settings, environment variables, command-line arguments, and event subscriptions.
2727
</Steps>
2828

29-
### Signature Pattern
29+
### Signature pattern
3030

3131
```csharp
3232
public static IResourceBuilder<TResource> AddX(
@@ -47,7 +47,7 @@ public static IResourceBuilder<TResource> AddX(
4747
}
4848
```
4949

50-
### Optional Wiring Examples
50+
### Optional wiring examples
5151

5252
**Endpoints**:
5353

@@ -87,7 +87,7 @@ public static IResourceBuilder<TResource> AddX(
8787
builder.Eventing.Subscribe<EventType>(resource, handler);
8888
```
8989

90-
### Summary Table
90+
### Summary table
9191

9292
| Step | Call/Method | Purpose |
9393
|--|--|--|
@@ -96,11 +96,11 @@ builder.Eventing.Subscribe<EventType>(resource, handler);
9696
| Register | `builder.AddResource(resource)` | Add resource to the application model |
9797
| Optional wiring | `.WithEndpoint(…)`, `.WithHealthCheck(…)`, `.WithImage(…)`, `.WithEnvironment(…)`, `.WithArgs(…)`, `Eventing.Subscribe(…)` | Configure container details, wiring, and runtime hooks |
9898

99-
## Configuring Resources with `WithX(...)`
99+
## Configuring resources with `WithX(...)`
100100

101101
`WithX(...)` methods **attach annotations** to resource builders.
102102

103-
### Signature Pattern
103+
### Signature pattern
104104

105105
```csharp
106106
public static IResourceBuilder<TResource> WithX(
@@ -113,7 +113,7 @@ public static IResourceBuilder<TResource> WithX(
113113
- **Action**: `WithAnnotation(...)`.
114114
- **Returns**: `IResourceBuilder<TResource>`.
115115

116-
### Summary Table
116+
### Summary table
117117

118118
| Method | Target | Action |
119119
|--|--|--|
@@ -124,7 +124,7 @@ public static IResourceBuilder<TResource> WithX(
124124

125125
Annotations are **public** metadata types implementing `IResourceAnnotation`. They can be added or removed dynamically at runtime via hooks or events. Consumers can query annotations using `TryGetLastAnnotation<T>()` when necessary.
126126

127-
### Definition and Attachment
127+
### Definition and attachment
128128

129129
```csharp
130130
public sealed record PersistenceAnnotation(
@@ -136,19 +136,19 @@ builder.WithAnnotation(new PersistenceAnnotation(
136136
100));
137137
```
138138

139-
### Summary Table
139+
### Summary table
140140

141141
| Concept | Pattern | Notes |
142142
|--|--|--|
143143
| Annotation Type | `public record XAnnotation(...) : IResourceAnnotation` | Public to support dynamic runtime use. |
144144
| Attach | `builder.WithAnnotation(new XAnnotation(...))` | Adds metadata to resource builder. |
145145
| Query | `resource.TryGetLastAnnotation<XAnnotation>(out var a)` | Consumers inspect annotations as needed. |
146146

147-
## Custom Value Objects
147+
## Custom value objects
148148

149149
Custom value objects defer evaluation and allow the framework to discover dependencies between resources.
150150

151-
### Core Interfaces
151+
### Core interfaces
152152

153153
| Interface | Member | Mode | Purpose |
154154
|--|--|--|--|
@@ -159,7 +159,7 @@ Custom value objects defer evaluation and allow the framework to discover depend
159159
- **Implement** `IValueProvider` and `IManifestExpressionProvider` on all structured value types.
160160
- **Implement** `IValueWithReferences` only when your type holds resource references.
161161

162-
### Attaching to Resources
162+
### Attaching to resources
163163

164164
```csharp
165165
builder.WithEnvironment(context =>
@@ -190,7 +190,7 @@ public static IResourceBuilder<T> WithEnvironment<T>(
190190
}
191191
```
192192

193-
### Summary Table
193+
### Summary table
194194

195195
| Concept | Pattern | Purpose |
196196
|--|--|--|

src/frontend/src/content/docs/architecture/resource-hierarchies.mdx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Parent-child relationships serve two purposes:
1212
- **Lifecycle Containment**: The child's execution is tied to the parent's — starting, stopping, and failures cascade from parent to child automatically.
1313
- **Dashboard Visualization**: The child appears **nested beneath** the parent in dashboards and visualizations, improving readability.
1414

15-
### Lifecycle Containment
15+
### Lifecycle containment
1616

1717
When a resource implements the `IResourceWithParent` interface, it declares **true containment** — meaning its lifecycle is controlled by its parent:
1818

@@ -24,7 +24,7 @@ When a resource implements the `IResourceWithParent` interface, it declares **tr
2424
A logging sidecar container is tied to the lifecycle of a main application container — if the main app stops, the logging sidecar is also terminated.
2525
</Aside>
2626

27-
### Visual Grouping (Without Lifecycle Impact)
27+
### Visual grouping (without lifecycle impact)
2828

2929
Aspire also supports **visual-only parent-child relationships** using the `WithParentRelationship()` method during resource construction.
3030

@@ -49,7 +49,7 @@ You must **explicitly declare** relationships by either:
4949

5050
This explicitness ensures developers have full control over resource containment and presentation.
5151

52-
### Real-World Scenarios
52+
### Real-world scenarios
5353

5454
The following scenarios illustrate how Aspire models parent-child relationships:
5555

@@ -59,7 +59,7 @@ The following scenarios illustrate how Aspire models parent-child relationships:
5959
| Database with admin dashboard | Database container | Admin UI container |
6060
| Microservice with associated health monitor | API container | Health probe container |
6161

62-
## Values and References
62+
## Values and references
6363

6464
In Aspire, configuration, connectivity details, and dependencies between distributed resources are modeled using **structured values**. These values capture relationships explicitly—not just as simple strings—making the application graph **portable, inspectable, and evolvable**.
6565

@@ -90,7 +90,7 @@ architecture-beta
9090
epr:L <-- R:frontend
9191
```
9292

93-
### Special Case: Endpoints
93+
### Special case: Endpoints
9494

9595
Normally, resource references form an acyclic graph — **no cycles allowed**. However, **endpoint references are treated specially** and **may form cycles** intentionally.
9696

@@ -105,7 +105,7 @@ Endpoints are modeled as **external entities**:
105105
Endpoints are managed separately from strict dependency edges to allow flexible, real-world service wiring.
106106
</Aside>
107107

108-
### How the DAG Forms
108+
### How the DAG forms
109109

110110
Resources connect to each other through:
111111

@@ -123,7 +123,7 @@ Each reference **adds an edge** to the graph, allowing Aspire to:
123123
Aspire **never infers references automatically** — all value flows must be explicitly authored by developers.
124124
</Aside>
125125

126-
### Structured vs Literal Values
126+
### Structured vs literal values
127127

128128
Aspire distinguishes between **structured values** and **literal values**.
129129

@@ -139,7 +139,7 @@ At publish time and run time:
139139
**Flattening values too early destroys portability, environment substitution, and cross-platform compatibility.** Aspire delays flattening as long as possible to maintain graph fidelity.
140140
</Aside>
141141

142-
### Value Providers and Deferred Evaluation
142+
### Value providers and deferred evaluation
143143

144144
Every structured value type in Aspire implements two fundamental interfaces:
145145

@@ -159,7 +159,7 @@ Internally, value providers are attached to environment variables, CLI arguments
159159
Deferred evaluation guarantees that Aspire applications can be **published safely**, **deployed flexibly**, and **run consistently** across environments.
160160
</Aside>
161161

162-
### Core Value Types (Expanded)
162+
### Core value types (expanded)
163163

164164
| Type | Represents | Run Mode | Publish Mode |
165165
|------|------------|----------|--------------|
@@ -253,7 +253,7 @@ The following patterns are common mistakes when using `ReferenceExpression`:
253253
| Access `Endpoint.Url` during publish. | Use `Endpoint.Property(...)` in the expression. |
254254
| Mix resolved strings and placeholders. | Keep the entire value inside one `ReferenceExpression`. |
255255

256-
## Endpoint Primitives
256+
## Endpoint primitives
257257

258258
The `EndpointReference` is the fundamental type used to interact with another resource's endpoint. It provides properties such as:
259259

@@ -279,7 +279,7 @@ var endpoint = redis.GetEndpoint("tcp");
279279
builder.Build().Run();
280280
```
281281

282-
### What Does "Allocated" Mean?
282+
### What does "allocated" mean?
283283

284284
An endpoint is **allocated** when Aspire resolves its runtime values (e.g., `Host`, `Port`, `Url`) during **run mode**. Allocation happens as part of the **startup sequence**, ensuring endpoints are ready for use in local development.
285285

@@ -452,7 +452,7 @@ Key members:
452452

453453
`EndpointReferenceExpression` implements the same `IManifestExpressionProvider` / `IValueProvider` pair, so it can be embedded in a `ReferenceExpression` or resolved directly with `GetValueAsync()`.
454454

455-
## Context-Based Endpoint Resolution
455+
## Context-based endpoint resolution
456456

457457
Aspire resolves endpoints differently based on the relationship between the source and target resources. This ensures proper communication across all environments.
458458

0 commit comments

Comments
 (0)