diff --git a/app/lish/[did]/[publication]/PublicationHomeLayout.tsx b/app/lish/[did]/[publication]/PublicationHomeLayout.tsx
index 2a2e9787..d22a13ae 100644
--- a/app/lish/[did]/[publication]/PublicationHomeLayout.tsx
+++ b/app/lish/[did]/[publication]/PublicationHomeLayout.tsx
@@ -15,7 +15,7 @@ export function PublicationHomeLayout(props: {
>
{props.children}
--
2.51.2
From e30a0bc8c8007a37c203519a0a9ff14aa70ad036 Mon Sep 17 00:00:00 2001
From: Jared Pereira
Date: Tue, 21 Apr 2026 17:44:42 -0400
Subject: [PATCH 2/3] add confirmation code to newsletter settings
---
supabase/database.types.ts | 3 +++
.../20260421100000_add_newsletter_confirmation_code.sql | 5 +++++
2 files changed, 8 insertions(+)
create mode 100644 supabase/migrations/20260421100000_add_newsletter_confirmation_code.sql
diff --git a/supabase/database.types.ts b/supabase/database.types.ts
index 4210d201..7ce471d3 100644
--- a/supabase/database.types.ts
+++ b/supabase/database.types.ts
@@ -1155,6 +1155,7 @@ export type Database = {
}
publication_newsletter_settings: {
Row: {
+ confirmation_code: string | null
created_at: string
enabled: boolean
publication: string
@@ -1163,6 +1164,7 @@ export type Database = {
updated_at: string
}
Insert: {
+ confirmation_code?: string | null
created_at?: string
enabled?: boolean
publication: string
@@ -1171,6 +1173,7 @@ export type Database = {
updated_at?: string
}
Update: {
+ confirmation_code?: string | null
created_at?: string
enabled?: boolean
publication?: string
diff --git a/supabase/migrations/20260421100000_add_newsletter_confirmation_code.sql b/supabase/migrations/20260421100000_add_newsletter_confirmation_code.sql
new file mode 100644
index 00000000..98f5f9f0
--- /dev/null
+++ b/supabase/migrations/20260421100000_add_newsletter_confirmation_code.sql
@@ -0,0 +1,5 @@
+-- Phase 2: add pending confirmation code for reply-to verification.
+-- Lives on the settings row; nulled out on successful verification.
+
+alter table "public"."publication_newsletter_settings"
+ add column "confirmation_code" text;
--
2.51.2
From bdbdf0a619ec8fd29c438b1996caf31dd1c7529c Mon Sep 17 00:00:00 2001
From: Takashi Fujita
Date: Fri, 17 Apr 2026 09:23:47 +0900
Subject: [PATCH 3/3] focus next block after adding embed and button blocks
Fixes #3
---
components/Blocks/ButtonBlock.tsx | 20 ++++++++++++++++++++
components/Blocks/EmbedBlock.tsx | 19 +++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/components/Blocks/ButtonBlock.tsx b/components/Blocks/ButtonBlock.tsx
index c4207a2b..fa6ba4de 100644
--- a/components/Blocks/ButtonBlock.tsx
+++ b/components/Blocks/ButtonBlock.tsx
@@ -10,6 +10,7 @@ import { useSmoker } from "components/Toast";
import { Separator } from "components/Layout";
import { Input } from "components/Input";
import { isUrl } from "src/utils/isURL";
+import { focusBlock } from "src/utils/focusBlock";
import { ButtonPrimary } from "components/Buttons";
import { BlockButtonSmall } from "components/Icons/BlockButtonSmall";
import { CheckTiny } from "components/Icons/CheckTiny";
@@ -116,6 +117,25 @@ const ButtonBlockSettings = (props: BlockProps) => {
value: url,
},
});
+
+ let textEntity = v7();
+ await rep.mutate.addBlock({
+ permission_set: entity_set.set,
+ factID: v7(),
+ parent: props.parent,
+ type: "text",
+ position: generateKeyBetween(props.position, props.nextPosition),
+ newEntityID: textEntity,
+ });
+
+ focusBlock(
+ {
+ value: textEntity,
+ type: "text",
+ parent: props.parent,
+ },
+ { type: "start" },
+ );
};
return (
diff --git a/components/Blocks/EmbedBlock.tsx b/components/Blocks/EmbedBlock.tsx
index d84e5aca..93eda1fa 100644
--- a/components/Blocks/EmbedBlock.tsx
+++ b/components/Blocks/EmbedBlock.tsx
@@ -321,6 +321,25 @@ const BlockLinkInput = (props: BlockProps) => {
} finally {
setLoading(false);
}
+
+ let textEntity = v7();
+ await rep.mutate.addBlock({
+ permission_set: entity_set.set,
+ factID: v7(),
+ parent: props.parent,
+ type: "text",
+ position: generateKeyBetween(props.position, props.nextPosition),
+ newEntityID: textEntity,
+ });
+
+ focusBlock(
+ {
+ value: textEntity,
+ type: "text",
+ parent: props.parent,
+ },
+ { type: "start" },
+ );
};
let smoker = useSmoker();