Skip to content

docs(seo): 6 more slug-exact mock-X/local-X landings#685

Merged
vieiralucas merged 1 commit intomainfrom
content/seo-batch4-mocks
Apr 22, 2026
Merged

docs(seo): 6 more slug-exact mock-X/local-X landings#685
vieiralucas merged 1 commit intomainfrom
content/seo-batch4-mocks

Conversation

@vieiralucas
Copy link
Copy Markdown
Member

@vieiralucas vieiralucas commented Apr 22, 2026

Batch 4A. Six more slug-exact landing pages covering underserved upstream queries.

  • /mock-sns/ -- mock sns for tests, fake sns
  • /mock-kms/ -- mock kms, aws kms local
  • /mock-ses/ -- mock ses, local ses email testing, highlights the real-receipt-rule-execution differentiator (LocalStack Community stores inbound but does not execute)
  • /mock-cognito/ -- mock cognito, Cognito is LocalStack-paid-only post Mar 2026
  • /local-rds/ -- local rds postgres, RDS is LocalStack-paid
  • /local-elasticache/ -- local elasticache redis, ElastiCache is LocalStack-paid

Each follows the established page.html template and depth-first framing. Comparison tables highlight real engine execution vs stubs.


Summary by cubic

Adds six slug-exact SEO landing pages for SNS, KMS, SES, Cognito, RDS, and ElastiCache to capture upstream queries and highlight fakecloud’s real engine execution vs stubs. Each page uses the existing page.html template with concise how-tos and comparison tables.

  • New Features
    • /mock-sns — mock SNS; real fan-out to SQS/Lambda/HTTP; filter policies.
    • /mock-kms — mock KMS; real AES/RSA/ECDH; aliases, data keys, SSE-KMS.
    • /mock-ses — mock SES; v2 send/templates; real receipt rule execution.
    • /mock-cognito — mock Cognito; full auth flows and triggers; LocalStack paywalled.
    • /local-rds — local Postgres/MySQL/MariaDB; snapshots/replicas; upstream Pro-only.
    • /local-elasticache — local Redis/Valkey; replication groups/serverless; upstream Pro-only.

Written for commit 6500d19. Summary will update on new commits.

Each catches one upstream query:
- /mock-sns/ -- 'mock sns for tests', 'fake sns'
- /mock-kms/ -- 'mock kms', 'aws kms local'
- /mock-ses/ -- 'mock ses', 'local ses email testing'
- /mock-cognito/ -- 'mock cognito', 'cognito local auth testing' (Cognito is LocalStack-paid)
- /local-rds/ -- 'local rds postgres', 'mock rds' (RDS is LocalStack-paid)
- /local-elasticache/ -- 'local elasticache redis', 'mock elasticache' (ElastiCache is LocalStack-paid)

All depth-first framed. All reference real engine execution (Lambda containers,
Postgres/MySQL/MariaDB, Redis/Valkey) where applicable.
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 22, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 issues found across 6 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="website/content/mock-ses.md">

<violation number="1" location="website/content/mock-ses.md:50">
P2: The Node.js SESv2 client is not configured to use the local fakecloud endpoint, so the example may call real AWS instead of localhost.</violation>
</file>

<file name="website/content/local-rds.md">

<violation number="1" location="website/content/local-rds.md:144">
P2: The comparison table incorrectly marks `docker run postgres` as providing real MySQL support. This is factually wrong and can mislead readers comparing options.</violation>
</file>

<file name="website/content/mock-cognito.md">

<violation number="1" location="website/content/mock-cognito.md:40">
P2: The client config omits `ALLOW_USER_SRP_AUTH`, so the later `USER_SRP_AUTH` example will fail with this setup.</violation>
</file>

<file name="website/content/mock-kms.md">

<violation number="1" location="website/content/mock-kms.md:49">
P2: The `kms encrypt` CLI example passes raw text to `--plaintext` without `--cli-binary-format raw-in-base64-out`, so the command is invalid on AWS CLI v2 defaults.</violation>

<violation number="2" location="website/content/mock-kms.md:59">
P2: This `kms encrypt` example also uses raw `--plaintext` without `--cli-binary-format raw-in-base64-out`, making the snippet incorrect for default AWS CLI v2 behavior.</violation>
</file>

<file name="website/content/local-elasticache.md">

<violation number="1" location="website/content/local-elasticache.md:46">
P2: The connection command hard-codes port 6379, but ElastiCache endpoints use the mapped host port returned by `DescribeCacheClusters`.</violation>

<violation number="2" location="website/content/local-elasticache.md:104">
P2: The test snippet hard-codes `redis://localhost:6379` instead of using the endpoint returned by `DescribeCacheClusters`.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.


```ts
import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';
const ses = new SESv2Client({});
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The Node.js SESv2 client is not configured to use the local fakecloud endpoint, so the example may call real AWS instead of localhost.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/mock-ses.md, line 50:

<comment>The Node.js SESv2 client is not configured to use the local fakecloud endpoint, so the example may call real AWS instead of localhost.</comment>

<file context>
@@ -0,0 +1,169 @@
+
+```ts
+import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';
+const ses = new SESv2Client({});
+
+await ses.send(new SendEmailCommand({
</file context>
Fix with Cubic

| fakecloud | Yes (Docker) | Yes (Docker) | Yes | Yes | Free |
| LocalStack Pro | Yes | Yes | Yes | Yes | Paid |
| LocalStack Community | **No** | No | No | No | — (not available) |
| Plain `docker run postgres` | Yes (DB only) | Yes | Manual | Manual | Free, but no RDS API |
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The comparison table incorrectly marks docker run postgres as providing real MySQL support. This is factually wrong and can mislead readers comparing options.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/local-rds.md, line 144:

<comment>The comparison table incorrectly marks `docker run postgres` as providing real MySQL support. This is factually wrong and can mislead readers comparing options.</comment>

<file context>
@@ -0,0 +1,153 @@
+| fakecloud | Yes (Docker) | Yes (Docker) | Yes | Yes | Free |
+| LocalStack Pro | Yes | Yes | Yes | Yes | Paid |
+| LocalStack Community | **No** | No | No | No | — (not available) |
+| Plain `docker run postgres` | Yes (DB only) | Yes | Manual | Manual | Free, but no RDS API |
+| Moto | Stubbed | Stubbed | Stubbed | Stubbed | Free |
+
</file context>
Fix with Cubic

client = cog.create_user_pool_client(
UserPoolId=pool['UserPool']['Id'],
ClientName='web',
ExplicitAuthFlows=['ALLOW_USER_PASSWORD_AUTH', 'ALLOW_REFRESH_TOKEN_AUTH'])
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The client config omits ALLOW_USER_SRP_AUTH, so the later USER_SRP_AUTH example will fail with this setup.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/mock-cognito.md, line 40:

<comment>The client config omits `ALLOW_USER_SRP_AUTH`, so the later `USER_SRP_AUTH` example will fail with this setup.</comment>

<file context>
@@ -0,0 +1,144 @@
+client = cog.create_user_pool_client(
+    UserPoolId=pool['UserPool']['Id'],
+    ClientName='web',
+    ExplicitAuthFlows=['ALLOW_USER_PASSWORD_AUTH', 'ALLOW_REFRESH_TOKEN_AUTH'])
+```
+
</file context>
Fix with Cubic

--alias-name alias/my-key --target-key-id <key-id>

aws --endpoint-url http://localhost:4566 kms encrypt \
--key-id alias/my-key --plaintext "hello"
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: This kms encrypt example also uses raw --plaintext without --cli-binary-format raw-in-base64-out, making the snippet incorrect for default AWS CLI v2 behavior.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/mock-kms.md, line 59:

<comment>This `kms encrypt` example also uses raw `--plaintext` without `--cli-binary-format raw-in-base64-out`, making the snippet incorrect for default AWS CLI v2 behavior.</comment>

<file context>
@@ -0,0 +1,105 @@
+  --alias-name alias/my-key --target-key-id <key-id>
+
+aws --endpoint-url http://localhost:4566 kms encrypt \
+  --key-id alias/my-key --plaintext "hello"
+```
+
</file context>
Fix with Cubic

```sh
aws --endpoint-url http://localhost:4566 kms create-key --description "test-key"
aws --endpoint-url http://localhost:4566 kms encrypt \
--key-id <key-id> --plaintext "hello world" --query CiphertextBlob --output text
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The kms encrypt CLI example passes raw text to --plaintext without --cli-binary-format raw-in-base64-out, so the command is invalid on AWS CLI v2 defaults.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/mock-kms.md, line 49:

<comment>The `kms encrypt` CLI example passes raw text to `--plaintext` without `--cli-binary-format raw-in-base64-out`, so the command is invalid on AWS CLI v2 defaults.</comment>

<file context>
@@ -0,0 +1,105 @@
+```sh
+aws --endpoint-url http://localhost:4566 kms create-key --description "test-key"
+aws --endpoint-url http://localhost:4566 kms encrypt \
+  --key-id <key-id> --plaintext "hello world" --query CiphertextBlob --output text
+```
+
</file context>
Fix with Cubic

Connect:

```sh
redis-cli -h <endpoint> -p 6379
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The connection command hard-codes port 6379, but ElastiCache endpoints use the mapped host port returned by DescribeCacheClusters.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/local-elasticache.md, line 46:

<comment>The connection command hard-codes port 6379, but ElastiCache endpoints use the mapped host port returned by `DescribeCacheClusters`.</comment>

<file context>
@@ -0,0 +1,125 @@
+Connect:
+
+```sh
+redis-cli -h <endpoint> -p 6379
+```
+
</file context>
Suggested change
redis-cli -h <endpoint> -p 6379
redis-cli -h <endpoint-address> -p <endpoint-port>
Fix with Cubic

});

test('app caches via real redis behind ElastiCache emulation', async () => {
const redis = createClient({ url: 'redis://localhost:6379' });
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The test snippet hard-codes redis://localhost:6379 instead of using the endpoint returned by DescribeCacheClusters.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/local-elasticache.md, line 104:

<comment>The test snippet hard-codes `redis://localhost:6379` instead of using the endpoint returned by `DescribeCacheClusters`.</comment>

<file context>
@@ -0,0 +1,125 @@
+});
+
+test('app caches via real redis behind ElastiCache emulation', async () => {
+  const redis = createClient({ url: 'redis://localhost:6379' });
+  await redis.connect();
+  await redis.set('key', 'value');
</file context>
Fix with Cubic

@vieiralucas vieiralucas merged commit 5d7c5f8 into main Apr 22, 2026
19 checks passed
@vieiralucas vieiralucas deleted the content/seo-batch4-mocks branch April 22, 2026 21:56
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.

1 participant