a tool for shared writing and social publishing
0

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'main' into feature/newsletter

Jared Pereira (Apr 21, 2026, 5:49 PM EDT) b63e2185 ceb9103d

+48 -1
+1 -1
app/lish/[did]/[publication]/PublicationHomeLayout.tsx
··· 15 15 > 16 16 <div 17 17 ref={!props.showPageBackground ? null : ref} 18 - className={`pubContent sm:max-w-(--page-width-units) w-full mx-auto px-3 sm:px-4 py-5 ${props.showPageBackground ? "overflow-auto h-full bg-[rgba(var(--bg-page),var(--bg-page-alpha))] border border-border rounded-lg" : "h-fit"}`} 18 + className={`pubContent sm:max-w-(--page-width-units) sm:min-w-(--page-width-units) w-full mx-auto px-3 sm:px-4 py-5 ${props.showPageBackground ? "overflow-auto h-full bg-[rgba(var(--bg-page),var(--bg-page-alpha))] border border-border rounded-lg" : "h-fit"}`} 19 19 > 20 20 {props.children} 21 21 </div>
+20
components/Blocks/ButtonBlock.tsx
··· 10 10 import { Separator } from "components/Layout"; 11 11 import { Input } from "components/Input"; 12 12 import { isUrl } from "src/utils/isURL"; 13 + import { focusBlock } from "src/utils/focusBlock"; 13 14 import { ButtonPrimary } from "components/Buttons"; 14 15 import { BlockButtonSmall } from "components/Icons/BlockButtonSmall"; 15 16 import { CheckTiny } from "components/Icons/CheckTiny"; ··· 116 117 value: url, 117 118 }, 118 119 }); 120 + 121 + let textEntity = v7(); 122 + await rep.mutate.addBlock({ 123 + permission_set: entity_set.set, 124 + factID: v7(), 125 + parent: props.parent, 126 + type: "text", 127 + position: generateKeyBetween(props.position, props.nextPosition), 128 + newEntityID: textEntity, 129 + }); 130 + 131 + focusBlock( 132 + { 133 + value: textEntity, 134 + type: "text", 135 + parent: props.parent, 136 + }, 137 + { type: "start" }, 138 + ); 119 139 }; 120 140 121 141 return (
+19
components/Blocks/EmbedBlock.tsx
··· 321 321 } finally { 322 322 setLoading(false); 323 323 } 324 + 325 + let textEntity = v7(); 326 + await rep.mutate.addBlock({ 327 + permission_set: entity_set.set, 328 + factID: v7(), 329 + parent: props.parent, 330 + type: "text", 331 + position: generateKeyBetween(props.position, props.nextPosition), 332 + newEntityID: textEntity, 333 + }); 334 + 335 + focusBlock( 336 + { 337 + value: textEntity, 338 + type: "text", 339 + parent: props.parent, 340 + }, 341 + { type: "start" }, 342 + ); 324 343 }; 325 344 let smoker = useSmoker(); 326 345
+3
supabase/database.types.ts
··· 1155 1155 } 1156 1156 publication_newsletter_settings: { 1157 1157 Row: { 1158 + confirmation_code: string | null 1158 1159 created_at: string 1159 1160 enabled: boolean 1160 1161 publication: string ··· 1163 1164 updated_at: string 1164 1165 } 1165 1166 Insert: { 1167 + confirmation_code?: string | null 1166 1168 created_at?: string 1167 1169 enabled?: boolean 1168 1170 publication: string ··· 1171 1173 updated_at?: string 1172 1174 } 1173 1175 Update: { 1176 + confirmation_code?: string | null 1174 1177 created_at?: string 1175 1178 enabled?: boolean 1176 1179 publication?: string
+5
supabase/migrations/20260421100000_add_newsletter_confirmation_code.sql
··· 1 + -- Phase 2: add pending confirmation code for reply-to verification. 2 + -- Lives on the settings row; nulled out on successful verification. 3 + 4 + alter table "public"."publication_newsletter_settings" 5 + add column "confirmation_code" text;