Skip to content

Redesign landing page with a simple static page - #1

Draft
yasmewad wants to merge 84 commits into
mainfrom
landing-page-ember-redesign
Draft

Redesign landing page with a simple static page#1
yasmewad wants to merge 84 commits into
mainfrom
landing-page-ember-redesign

Conversation

@yasmewad

@yasmewad yasmewad commented Jun 18, 2026

Copy link
Copy Markdown
Owner

Summary

Redesigns the smithy.io landing page as a single self-contained static page (docs/landing/index.html + assets/). The previous landing page was a React/Vite/Storybook app (docs/landing-page/) that required a Node toolchain and ~50 npm dependencies just to server-render one static index.html. The new page needs no framework, no build step, and no runtime dependency — the only external resource is the Google Fonts stylesheet.

Draft — opened for design review and feedback.

Reviewer note: screenshots and scroll recordings are attached in the comments / below (dark + light, plus each section).

Hero

Sections

Full-page scroll (recordings)

Social share card (og:image)

What changed

  • docs/landing/ — the new page (index.html), assets/, og-cover-source.html (the OG-image source card), README.md, CLAUDE.md, and BRAND.md.
  • docs/Makefilemerge-versions now copies landing/index.html + landing/assets/ into the site root (dropped the build-landing-page npm step). README/CLAUDE.md/BRAND.md/og-cover-source.html are not shipped.
  • CI / dependabot — removed the Node setup + npm-cache steps (ci.yml, make-docs.yml) and the npm dependabot entry.
  • Removed docs/landing-page/ — the old React app (144 files).

Design & content

  • Ember theme: warm charcoal (dark) / warm parchment (light), Smithy red as the single accent. Light/dark toggle that follows the OS preference with a persisted manual override.
  • Build pipeline: one model → smithy build → Client SDKs · Servers · Documentation · OpenAPI.
  • Protocol-agnostic section shows four real wire formats (REST JSON, RPC v2 CBOR, AWS JSON, AWS query/XML).
  • Declarative API governance: rules live in the model and are enforced by smithy build, not an external linter.
  • Backward-compatible evolution example adds @retryable to an error (genuinely additive).
  • Accurate to the docs: the Weather example matches source-2.0/; protocol details follow the Coral protocols reference.
  • Truthful credibility only — open source / Apache-2.0 / used at AWS / multi-language. No invented metrics or logos; the SiriusXM quote is the only testimonial.

Quality gates

  • Accessibility — WCAG 2.1 AA in both modes: skip link, :focus-visible rings, single <h1> + ordered headings, real <button> theme toggle with aria-pressed, mobile hamburger with aria-expanded/Esc/focus, prefers-reduced-motion, ≥44px tap targets, 200% zoom. Responsive 320–2560px with no horizontal overflow.
  • No third-party scripts, no eval/innerHTML; all target="_blank" carry rel="noopener"; localStorage limited to a validated smithy-mode key. Removing the React app is a meaningful supply-chain reduction.
  • All internal (/2.0/…, /implementations.html) and external links verified live.

Test plan

cd docs && make install && make html && make serve   # Python/Sphinx only — no Node
# the landing page is the site root

yasmewad and others added 30 commits May 4, 2026 10:48
…mithy-lang#3096)

* Fix trait-codegen failure when string literals contain dollar signs

Add defer() and writeLazy() to AbstractCodeWriter, enabling lazy
resolution of format expressions at toString() time without re-parsing
the entire output. Update TraitCodegenWriter to use defer() for type
name placeholders instead of a second format() pass that would
misinterpret literal $ characters in generated code.

* Add changelog entry
Add the aws.apigateway#minimumCompressionSize integer trait with @range(min: 0, max: 10485760) validation.
The OpenAPI mapper converts it to the x-amazon-apigateway-minimum-compression-size extension for REST APIs.
- Repoint retired /apigateway/api-reference/resource/<name>/ URLs to
  their current /apigateway/latest/api/API_<Name>.html replacements:
    - Integration.passthroughBehavior
    - VpcLink
    - API Gateway integration
    - IntegrationResponse
- Correct the x-amazon-apigateway-request-validator label to point at
  the singular top-level extension page rather than the nested object
  schema page.
…utput buffer (smithy-lang#3100)

* Optimize deferred render to do a single input scan and use a single output buffer

* Use parallel linear storage of placeholders and suppliers

* Run spotlessApply to fix formatting
* Add three sub-fields to integration trait

The `@aws.apigateway#integration` trait was missing three public
REST API fields that customers configure via OpenAPI extensions:
`tlsConfig` for certificate validation, `responseTransferMode`
for response streaming, and `integrationTarget` for VPC Links V2
private integrations.

Add all three as optional members on the integration structure
with a new `TlsConfig` nested structure for the TLS configuration.
The OpenAPI mapper picks up the new fields automatically via
`NodeMapper` serialization. Add `integrationTarget` to the
`CloudFormationSubstitution` paths for `Fn::Sub` wrapping since
it contains ARN values.

* revert two buildinfo files
* Add apiKeyRequired trait and OpenAPI mapper

API Gateway supports requiring an API key on individual operations
for usage plan enforcement. This is separate from the
@httpApiKeyAuth authentication scheme.

Add the `aws.apigateway#apiKeyRequired` annotation trait, scoped
to operations. The OpenAPI mapper adds an `api_key` security
scheme to components and a per-operation security requirement on
annotated operations.

* Fix RST header length and changelog formatting

Fix overlong RST header underline for apiKeyRequired trait.
Lowercase 'is converted' in OpenAPI guide. Update changelog
to past tense with backticks. Apply code formatting.

* Update smithy-aws-apigateway-openapi/src/main/java/software/amazon/smithy/aws/apigateway/openapi/AddApiKeyRequired.java

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

* Update smithy-aws-apigateway-openapi/src/main/java/software/amazon/smithy/aws/apigateway/openapi/AddApiKeyRequired.java

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

---------

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>
* Add resourcePolicy trait and OpenAPI mapper

API Gateway REST APIs support resource policies that control which
principals can invoke the API. Until now, customers had to use
`jsonAdd` workarounds in smithy-build.json to attach a resource
policy to the generated OpenAPI document.

Add the `aws.apigateway#resourcePolicy` document trait, scoped to
service shapes, along with an OpenAPI mapper that converts the
trait value to the top-level `x-amazon-apigateway-policy` extension.
Smithy passes the policy document through without validation since
IAM validates the policy at API Gateway import time.

* Update docs/source-2.0/aws/amazon-apigateway.rst

* Update docs/source-2.0/guides/model-translations/converting-to-openapi.rst

* Apply suggestion from @kstich

---------

Co-authored-by: Kevin Stich <kevin@kstich.com>
* Add endpointConfiguration trait

API Gateway REST APIs have an endpoint configuration that specifies
the endpoint type (EDGE, REGIONAL, or PRIVATE), optional VPC
endpoint IDs, and whether the default execute-api endpoint is
disabled.

Add the `aws.apigateway#endpointConfiguration` structure trait with
a required `types` enum list, optional `vpcEndpointIds` list, and
optional `disableExecuteApiEndpoint` boolean. No OpenAPI mapper is
included; `vpcEndpointIds` and `disableExecuteApiEndpoint` exist
in the `x-amazon-apigateway-endpoint-configuration` extension but
a mapper can be added separately if needed.

* Update docs/source-2.0/aws/amazon-apigateway.rst

* Expand VPC acronym and link endpoint IDs docs

Expand 'VPC' to 'Virtual Private Cloud (VPC)' and link
'endpoint IDs' to the VPC PrivateLink documentation in the
trait summary. Update changelog to past tense with backticks.

---------

Co-authored-by: Kevin Stich <kevin@kstich.com>
* Add gatewayResponses trait and OpenAPI mapper

API Gateway REST APIs support custom gateway responses that
customize error responses for authentication failures, integration
errors, and other API Gateway-generated errors.

Add the `aws.apigateway#gatewayResponses` map trait that maps
response type keys to gateway response structures containing
statusCode, responseParameters, and responseTemplates. The OpenAPI
mapper writes the trait value to the
`x-amazon-apigateway-gateway-responses` extension. The mapper runs
before the CORS gateway responses mapper so that customer-defined
response parameters take precedence over CORS-generated headers.

* Refactor GatewayResponsesTrait to use builder pattern

Add GatewayResponse value class with builder following the same
pattern as AuthorizersTrait and DefineConditionKeysTrait. Add
DANGER validator for gatewayResponses and CORS conflicts. Fix
RST header formatting in documentation.

* Update smithy-aws-apigateway-openapi/src/main/java/software/amazon/smithy/aws/apigateway/openapi/AddGatewayResponses.java

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

* Replace streams with loops and add bulk builder methods

Replace stream-based serialization with plain loops in
GatewayResponse.toNode() and GatewayResponsesTrait.createNode().
Add responses(), responseParameters(), and responseTemplates()
bulk setter methods to the builders.

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponse.java

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponse.java

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

* Update smithy-aws-apigateway-openapi/src/main/java/software/amazon/smithy/aws/apigateway/openapi/AddGatewayResponses.java

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

* Update smithy-aws-apigateway-traits/src/main/java/software/amazon/smithy/aws/apigateway/traits/GatewayResponsesTrait.java

---------

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>
* Add apiTlsPolicy trait and OpenAPI mapper

API Gateway REST APIs have a TLS security policy and an optional
endpoint access mode that control the TLS version, cipher suite,
and how the API endpoint can be accessed. These were previously
only configurable via OpenAPI extensions.

Add the `aws.apigateway#apiTlsPolicy` structure trait with a
required `securityPolicy` field and an optional
`endpointAccessMode` field. The OpenAPI mapper writes
`securityPolicy` to `x-amazon-apigateway-security-policy` and
`endpointAccessMode` to `x-amazon-apigateway-endpoint-access-mode`
as separate top-level extensions, matching how API Gateway reads
them at import time.

* Update docs/source-2.0/aws/amazon-apigateway.rst

* Update docs/source-2.0/guides/model-translations/converting-to-openapi.rst

* Apply suggestion from @kstich

* Remove vscode settings and add .vscode/ to .gitignore

* Remove accidentally committed local files

* Fix docs to include all merged content plus TLS sections

---------

Co-authored-by: Kevin Stich <kevin@kstich.com>
API Gateway supports OAuth scopes on operations that use Cognito
authorizers. In OpenAPI, scopes appear in the security requirement
array for each operation. The existing @Authorizer trait is a
string and cannot be extended to include scopes without a breaking
change.

Add the `aws.apigateway#authorizationScopes` list trait, scoped to
operations that have the @Authorizer trait applied. The existing
`AddAuthorizers` mapper now includes the scope list in the security
requirement when the trait is present. The mapper writes
per-operation security when scopes are present, even if the
operation inherits its authorizer from the service.
…lang#3106)

* Add a new query test for empty output with response metadata

* Add changelog entry
…orrowed` (smithy-lang#3107)

* Add copy-on-write optimization for `toBuilder()` via `BuilderRef.setBorrowed`

* Apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Bumps the npm group in /docs/landing-page with 7 updates:

| Package | From | To |
| --- | --- | --- |
| [i18next](https://github.com/i18next/i18next) | `26.0.8` | `26.0.9` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.2.5` | `19.2.6` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.2.5` | `19.2.6` |
| [eslint](https://github.com/eslint/eslint) | `10.2.1` | `10.3.0` |
| [globals](https://github.com/sindresorhus/globals) | `17.5.0` | `17.6.0` |
| [postcss](https://github.com/postcss/postcss) | `8.5.12` | `8.5.14` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.59.1` | `8.59.2` |


Updates `i18next` from 26.0.8 to 26.0.9
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](i18next/i18next@v26.0.8...v26.0.9)

Updates `react` from 19.2.5 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react)

Updates `react-dom` from 19.2.5 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react-dom)

Updates `eslint` from 10.2.1 to 10.3.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v10.2.1...v10.3.0)

Updates `globals` from 17.5.0 to 17.6.0
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](sindresorhus/globals@v17.5.0...v17.6.0)

Updates `postcss` from 8.5.12 to 8.5.14
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](postcss/postcss@8.5.12...8.5.14)

Updates `typescript-eslint` from 8.59.1 to 8.59.2
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.59.2/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 26.0.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: react
  dependency-version: 19.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: react-dom
  dependency-version: 19.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: eslint
  dependency-version: 10.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm
- dependency-name: globals
  dependency-version: 17.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm
- dependency-name: postcss
  dependency-version: 8.5.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: typescript-eslint
  dependency-version: 8.59.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
...

Signed-off-by: dependabot[bot] <support@github.com>
…-lang#3108)

* Revert "Revert "Apply jsonName to examples trait in OpenAPI" (smithy-lang#2687)"

This reverts commit 195157f.

* Add changelog
* Fixed trait codegen to generate more specific return type for trait provider

* Added changelog entry
The renameShapes projection transform silently downgrades typed traits
to DynamicTrait. After running renameShapes, operation.getTrait(SomeTrait.class)
returns empty even though the trait is still on the shape — because what's
stored is now an untyped DynamicTrait.

Two issues compound:

1. smithy-build/transforms/RenameShapes calls ModelTransformer.create()
   (the global singleton) instead of using context.getTransformer(). Every
   other transform in smithy-build/transforms/ already uses the context's
   transformer; RenameShapes is the lone holdout. The singleton is built
   once with smithy-model's classloader and can't see trait providers in
   sibling jars.

2. smithy-model/transform/ModelTransformer — even when callers construct a
   transformer via createWithServiceProviders(cl), the classloader is used
   to discover plugins and then thrown away. The 2-arg renameShapes(model,
   renamed) overload calls Model.assembler() with no classloader, so trait
   reassembly uses smithy-model's classloader and SPI providers from sibling
   jars (e.g. rules-engine traits) are never found. Anything not in
   smithy-model itself falls through to DynamicTrait.

Adds a regression test in each module: an empty URLClassLoader (no SPI
providers) is passed to the transformer/context, and we assert that a
typed DeprecatedTrait becomes a DynamicTrait after renameShapes — which
only happens if the empty classloader is honored end-to-end.
Scoping models when converting to JSON Schema no longer
routes through filterShapes, instead constructing a model
piecemeal via Model.Builder. This, combined with using the
iterator directly, produces a 40-80% improvement in the
speed of converting to JSON Schema.

The two paths that performed this work are now consolidated
and a JMH benchmark is added.
API Gateway supports OAuth scopes on operations that use Cognito User
Pools authorizers. The aws.apigateway#authorizationScopes trait added
in smithy-lang#3084 targeted only the operations annotated with @Authorizer.
That trait pairs scopes with the generic API Gateway authorizer trait,
but scopes only apply when the authorizer is Cognito so the trait
belongs alongside @cognitoUserPools in the aws.auth namespace.

Add the `aws.auth#cognitoUserPoolsScopes` list trait, selectable only
on operations bound to a service with the @cognitoUserPools trait
applied. The new `AddCognitoUserPoolsScopes` OpenAPI mapper writes a
per-operation security requirement using the Cognito scheme name when
the trait is present.
API Gateway REST APIs support an ipAddressType property on the
endpoint configuration that controls whether an API accepts IPv4,
IPv6, or both. The @endpointConfiguration trait did not model this
property, and the trait had no OpenAPI mapper, so VPC endpoint IDs
and the default-endpoint disable flag had to be set via jsonAdd
workarounds.

Add an ipAddressType string member to the trait with supported
values `ipv4` and `dualstack`. Add the AddEndpointConfiguration
OpenAPI mapper that writes vpcEndpointIds and disableExecuteApiEndpoint
to the x-amazon-apigateway-endpoint-configuration extension. The
types and ipAddressType members are omitted because they are
configured outside of the OpenAPI document at API import time.
Add a CloudFormation substitution path for vpcEndpointIds.
setx reads from the session %PATH% (system + user combined) and silently
truncates at 1024 characters, corrupting the user PATH on install. Use
PowerShell's SetEnvironmentVariable to append only to the user PATH from
the registry, with no length limit.

Also fix the warmup call to use the full installed path instead of relying
on the new PATH entry being active in the current session.
Group traits by task (authentication, method/response, integrations,
endpoint and access control) and alphabetize within each group. Add
Validation sub-sections for traits with validators, cross-references
between aws.apigateway and aws.auth authorization traits, and a
section listing public traits from other namespaces that influence
API Gateway OpenAPI generation. Fix dead developer-guide links. In
the OpenAPI guide, expand the Other traits table, demote Cognito and
API key sections under Authorizers, and add a Recommendations section
covering jsonAdd, substitutions, and CloudFormation Fn::Sub patterns.
The `HttpBindingsMissingValidator` had a top-level short-circuit that
returned early when no shape in the model carried `@http`. Services
with a protocol like `restJson1` that requires `@http` on all
operations would pass validation silently when no operations had the
trait yet.
The error deconflicting logic in `OpenApiConverter` read
`config.getOnErrorStatusConflict()` before either
`composedMapper.updateDefaultSettings` or
`openApiProtocol.updateDefaultSettings` was called. This made it
impossible for protocols or mappers to set the strategy.

Move the deconflict block to after both `updateDefaultSettings`
calls, and set the model and config on the JSON schema converter
builder afterward so they reflect the final state.
JordonPhillips and others added 24 commits June 3, 2026 12:08
This adds a shapeClosures metadata key that allows users to define
closures of shapes that are not necessarily rooted in a service
shape.

This is primarily motivated by the desire to code-generate types
without service or client framing, but is left open enough to be
used for other purposes.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This adds a method to get the root shapes in a closure. That is,
shapes directly matched by the selector or directly part of an
included namespace.

This also removes the prelude filter. People can do that themselves.
This fixes a bug in smithy-syntax where comments (including doc
comments) after an unused import would be removed along with the
unused import. This is because those comments live in the BR tree
at the end of the import tree, and that entire tree was being
removed.

This updates the removal logic to preserve those comments by
moving them up into the nearest surviving statement.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Add message property to waiter acceptors

Add an optional `message` field to waiter acceptors that allows
extracting a human-readable message from the operation output via a
JMESPath expression. This enables waiter consumers (e.g., SDKs, CLIs,
CloudFormation) to surface actionable failure reasons to users.

The expression must resolve to a string or array of strings and is
only valid on acceptors with a failure state.

Validations:
- ERROR if message is set on a non-failure acceptor
- ERROR if the JMESPath expression has invalid syntax
- DANGER if the expression resolves to a type other than string or
  array of strings

* Update .changes/next-release/feature-1120732e68f3ba35880b7a61adb4cb988ad08422.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Simplify message to string-only, use ERROR severity for all invalid cases

* Strict type check: reject ANY, require provably STRING

* Support list<string> in message JMESPath with element type validation

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This adds a custom smithyFormat task that formats all Smithy model
sources in the repo. This has to be done as a custom task for most
packages because they are upstream dependencies of smithy-cli. Using
the gradle plugin's formatting capability for these packages would
create a gradle task cycle.

Packages that are downstream of smithy-cli (such as the AWS protocol
tests package) can safely use the smithyFormat task provided by the
gradle plugin without creating a task cycle.

An alternative to fixing this cycle would be to just use the published
smithy-cli, but that's unsuitable since we really do want to be using
the local copy with updated changes.

This also adds a top-level smithyFormat task that runs the formatter
in every subproject that has it (either via the custom task or via
the gradle plugin).

Fixes smithy-lang#2231
This runs the Smithy formatter on all IDL sources.
…thy-lang#3157)

* Add test cases for AWS JSON protocols using different namespaces

* Update .changes/next-release/feature-115f276aaf230e5e0b9502b6d0bcc9594962b529.json

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>

---------

Co-authored-by: Manuel Sugawara <sugmanue@amazon.com>
Bumps the gradle group with 2 updates: [software.amazon.api.models:s3](https://github.com/aws/api-models-aws) and [com.gradleup.shadow](https://github.com/GradleUp/shadow).


Updates `software.amazon.api.models:s3` from 1.0.18 to 1.0.19
- [Commits](https://github.com/aws/api-models-aws/commits)

Updates `com.gradleup.shadow` from 9.4.1 to 9.4.2
- [Release notes](https://github.com/GradleUp/shadow/releases)
- [Commits](GradleUp/shadow@9.4.1...9.4.2)

---
updated-dependencies:
- dependency-name: software.amazon.api.models:s3
  dependency-version: 1.0.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gradle
- dependency-name: com.gradleup.shadow
  dependency-version: 9.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gradle
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Gradle was pinned to 9.1.0 since spotless started failing with more
recent versions of it. This change upgrades to 9.5.1, and to avoid
spotless failures does: 1) disables Kotlin linting, 2) sets the
eclipse version to 4.40 in the plugin.
…ng#3161)

Bumps org.mock-server:mockserver-netty from 5.15.0 to 7.0.0.

---
updated-dependencies:
- dependency-name: org.mock-server:mockserver-netty
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…mithy-lang#3103)

Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 3.0.6 to 4.0.0.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](i18next/i18next-http-backend@v3.0.6...v4.0.0)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Add tlsConfig, responseTransferMode, and integrationTarget to the
@integration trait table and the converting-to-openapi guide.
Add the "Minimum compression size" section with a Smithy-to-OpenAPI
conversion example, and add integrationTarget to the CloudFormation
substitution paths list.
* Skip clientOptional members in AddedRequiredMember

The AddedRequiredMember evaluator flagged any net-new member carrying
@required without @default as backwards-incompatible, even when the
member was also marked @clientOptional. That contradicts the model
evolution design: @clientOptional is the sanctioned escape hatch for
adding a @required member, since clients treat the member as optional
and the service owns validation.

The sibling ChangedNullability evaluator already exempts
@clientOptional members; AddedRequiredMember now does the same so the
two agree on what counts as a safe nullability change.

* Update .changes/next-release/bugfix-f5f810abf0f6986480e08df52c82c8201eb20f42.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Bumps the npm group with 23 updates in the /docs/landing-page directory:

| Package | From | To |
| --- | --- | --- |
| [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.15` | `1.1.16` |
| [@radix-ui/react-navigation-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/navigation-menu) | `1.2.14` | `1.2.15` |
| [i18next](https://github.com/i18next/i18next) | `26.3.0` | `26.3.1` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `1.16.0` | `1.18.0` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.2.6` | `19.2.7` |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.2.15` | `19.2.17` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.2.6` | `19.2.7` |
| [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/docs) | `10.4.1` | `10.4.5` |
| [@storybook/addon-links](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links) | `10.4.1` | `10.4.5` |
| [@storybook/addon-onboarding](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/onboarding) | `10.4.1` | `10.4.5` |
| [@storybook/addon-themes](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/themes) | `10.4.1` | `10.4.5` |
| [@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite) | `10.4.1` | `10.4.5` |
| [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) | `4.3.0` | `4.3.1` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.9.1` | `25.9.3` |
| [eslint](https://github.com/eslint/eslint) | `10.4.0` | `10.5.0` |
| [eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh) | `0.5.2` | `0.5.3` |
| [eslint-plugin-storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/eslint-plugin) | `10.4.1` | `10.4.5` |
| [lint-staged](https://github.com/lint-staged/lint-staged) | `17.0.5` | `17.0.7` |
| [prettier](https://github.com/prettier/prettier) | `3.8.3` | `3.8.4` |
| [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core) | `10.4.1` | `10.4.5` |
| [tsx](https://github.com/privatenumber/tsx) | `4.22.3` | `4.22.4` |
| [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.60.0` | `8.61.0` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `8.0.14` | `8.0.16` |



Updates `@radix-ui/react-dialog` from 1.1.15 to 1.1.16
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog)

Updates `@radix-ui/react-navigation-menu` from 1.2.14 to 1.2.15
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/navigation-menu/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/navigation-menu)

Updates `@radix-ui/react-slot` from 1.2.4 to 1.2.5
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/slot/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/slot)

Updates `i18next` from 26.3.0 to 26.3.1
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](i18next/i18next@v26.3.0...v26.3.1)

Updates `lucide-react` from 1.16.0 to 1.18.0
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/1.18.0/packages/lucide-react)

Updates `react` from 19.2.6 to 19.2.7
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.7/packages/react)

Updates `@types/react` from 19.2.15 to 19.2.17
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `react-dom` from 19.2.6 to 19.2.7
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.2.7/packages/react-dom)

Updates `@storybook/addon-docs` from 10.4.1 to 10.4.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.4.5/code/addons/docs)

Updates `@storybook/addon-links` from 10.4.1 to 10.4.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.4.5/code/addons/links)

Updates `@storybook/addon-onboarding` from 10.4.1 to 10.4.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.4.5/code/addons/onboarding)

Updates `@storybook/addon-themes` from 10.4.1 to 10.4.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.4.5/code/addons/themes)

Updates `@storybook/react-vite` from 10.4.1 to 10.4.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.4.5/code/frameworks/react-vite)

Updates `@tailwindcss/postcss` from 4.3.0 to 4.3.1
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/@tailwindcss-postcss)

Updates `@types/node` from 25.9.1 to 25.9.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@types/react` from 19.2.15 to 19.2.17
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `eslint` from 10.4.0 to 10.5.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v10.4.0...v10.5.0)

Updates `eslint-plugin-react-refresh` from 0.5.2 to 0.5.3
- [Release notes](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/releases)
- [Changelog](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/CHANGELOG.md)
- [Commits](ArnaudBarre/eslint-plugin-react-refresh@v0.5.2...v0.5.3)

Updates `eslint-plugin-storybook` from 10.4.1 to 10.4.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.4.5/code/lib/eslint-plugin)

Updates `lint-staged` from 17.0.5 to 17.0.7
- [Release notes](https://github.com/lint-staged/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)
- [Commits](lint-staged/lint-staged@v17.0.5...v17.0.7)

Updates `prettier` from 3.8.3 to 3.8.4
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](prettier/prettier@3.8.3...3.8.4)

Updates `storybook` from 10.4.1 to 10.4.5
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.4.5/code/core)

Updates `tailwindcss` from 4.3.0 to 4.3.1
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.1/packages/tailwindcss)

Updates `tsx` from 4.22.3 to 4.22.4
- [Release notes](https://github.com/privatenumber/tsx/releases)
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs)
- [Commits](privatenumber/tsx@v4.22.3...v4.22.4)

Updates `typescript-eslint` from 8.60.0 to 8.61.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/typescript-eslint)

Updates `vite` from 8.0.14 to 8.0.16
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.16/packages/vite)

---
updated-dependencies:
- dependency-name: "@radix-ui/react-dialog"
  dependency-version: 1.1.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@radix-ui/react-navigation-menu"
  dependency-version: 1.2.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@radix-ui/react-slot"
  dependency-version: 1.2.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: i18next
  dependency-version: 26.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: lucide-react
  dependency-version: 1.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: npm
- dependency-name: react
  dependency-version: 19.2.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@types/react"
  dependency-version: 19.2.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: react-dom
  dependency-version: 19.2.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@storybook/addon-docs"
  dependency-version: 10.4.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@storybook/addon-links"
  dependency-version: 10.4.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@storybook/addon-onboarding"
  dependency-version: 10.4.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@storybook/addon-themes"
  dependency-version: 10.4.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@storybook/react-vite"
  dependency-version: 10.4.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@types/node"
  dependency-version: 25.9.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@types/react"
  dependency-version: 19.2.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: eslint
  dependency-version: 10.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm
- dependency-name: eslint-plugin-react-refresh
  dependency-version: 0.5.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: eslint-plugin-storybook
  dependency-version: 10.4.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: lint-staged
  dependency-version: 17.0.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: prettier
  dependency-version: 3.8.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: storybook
  dependency-version: 10.4.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: tailwindcss
  dependency-version: 4.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: tsx
  dependency-version: 4.22.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: typescript-eslint
  dependency-version: 8.61.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm
- dependency-name: vite
  dependency-version: 8.0.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Removes the old vendored JSON parsing code that required
creating the entire model as a Node before loading. Now
we stream from JSON and only create Nodes for traits
and metadata and things that need Nodes. Loading a model
from a Node or unparsed string still work correctly.
@yasmewad
yasmewad force-pushed the landing-page-ember-redesign branch from 5391a0b to 83751ac Compare June 18, 2026 15:53
yasmewad added 2 commits June 18, 2026 15:14
The smithy.io landing page was a React/Vite/Storybook app under
docs/landing-page/ that pulled in a Node toolchain and roughly 50 npm
dependencies solely to server-render a single static index.html. The
build step and dependency tree were disproportionate to the output and
were a recurring maintenance and supply-chain burden.

Replace it with docs/landing/index.html: one self-contained page with
inline style and script, no framework and no build step. The only
external resource is the Google Fonts stylesheet. The Makefile's
merge-versions target copies the page and its assets into the site
root, so the page ships by file copy rather than a Node build, and the
Setup Node steps and npm dependabot entry are no longer needed.

The page documents its own architecture and invariants in CLAUDE.md so
future contributors can extend it without reintroducing tooling.
The page declared Open Graph and Twitter card metadata but had no
image, so link previews rendered without a thumbnail. Add a 1200x630
share image (assets/og-cover.png) rendered from og-cover-source.html,
referenced by absolute URL as og:image and twitter:image. The image is
a raster PNG because most unfurlers do not render SVG.

Add BRAND.md as the canonical design-system artifact: the color tokens
for both modes, typography, layout and motion tokens, the accessibility
bar, and guidance for propagating the theme to the rest of the docs
site, so future visual updates have a single reference to follow.
@yasmewad
yasmewad force-pushed the landing-page-ember-redesign branch from 0b22a31 to 07b9ac9 Compare June 18, 2026 22:15
yasmewad added 2 commits June 18, 2026 15:45
Remove the "One model. Every language." eyebrow from the share card so
it matches the landing page, which dropped that line, and regenerate
assets/og-cover.png.

Drop the docs/landing/.gitignore that listed local-only scratch
directories; those are excluded locally instead so the published tree
carries no reference to them.
Java has a Smithy server generator (smithy-java), so include it in the
Servers showcase alongside TypeScript; bump the count to 5.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.