a tool for shared writing and social publishing
0

Configure Feed

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

seperate static landing page

Jared Pereira (May 22, 2026, 5:30 PM EDT) deb79477 e25645fe

+223 -201
+1 -1
actions/publications/subscribeEmail.tsx
··· 21 21 backfillAtprotoSubscriptionsForIdentity, 22 22 publishAtprotoSubscriptionForDid, 23 23 unsubscribeToPublication, 24 - } from "app/lish/subscribeToPublication"; 24 + } from "app/(app)/lish/subscribeToPublication"; 25 25 import type { OAuthSessionError } from "src/atproto-oauth"; 26 26 import { normalizePublicationRecord } from "src/utils/normalizeRecords"; 27 27 import { linkOrphanedEmailSubscribers } from "src/utils/linkOrphanedEmailSubscribers";
+32
app/(app)/layout.tsx
··· 1 + import { headers } from "next/headers"; 2 + import { Suspense } from "react"; 3 + import { IdentityProviderServer } from "components/IdentityProviderServer"; 4 + import { RequestHeadersProvider } from "components/Providers/RequestHeadersProvider"; 5 + import { RouteUIStateManager } from "components/RouteUIStateManger"; 6 + import { SubscriptionSuccessModal } from "components/SubscriptionSuccessModal"; 7 + 8 + export default async function AppLayout({ 9 + children, 10 + }: { 11 + children: React.ReactNode; 12 + }) { 13 + let headersList = await headers(); 14 + let ipLocation = headersList.get("X-Vercel-IP-Country"); 15 + let acceptLanguage = headersList.get("accept-language"); 16 + let ipTimezone = headersList.get("X-Vercel-IP-Timezone"); 17 + return ( 18 + <IdentityProviderServer> 19 + <RequestHeadersProvider 20 + country={ipLocation} 21 + language={acceptLanguage} 22 + timezone={ipTimezone} 23 + > 24 + {children} 25 + <Suspense> 26 + <SubscriptionSuccessModal /> 27 + </Suspense> 28 + <RouteUIStateManager /> 29 + </RequestHeadersProvider> 30 + </IdentityProviderServer> 31 + ); 32 + }
+10
app/(app)/lish/[did]/[publication]/[rkey]/l-quote/[quote]/page.tsx
··· 1 + import PostPage, { 2 + generateMetadata, 3 + } from "app/(app)/lish/[did]/[publication]/[rkey]/page"; 4 + 5 + export { generateMetadata } from "app/(app)/lish/[did]/[publication]/[rkey]/page"; 6 + export default async function Post(props: { 7 + params: Promise<{ publication: string; did: string; rkey: string }>; 8 + }) { 9 + return <PostPage {...props} />; 10 + }
+8
app/(app)/p/[didOrHandle]/[rkey]/l-quote/[quote]/page.tsx
··· 1 + import PostPage from "app/(app)/p/[didOrHandle]/[rkey]/page"; 2 + 3 + export { generateMetadata } from "app/(app)/p/[didOrHandle]/[rkey]/page"; 4 + export default async function Post(props: { 5 + params: Promise<{ didOrHandle: string; rkey: string }>; 6 + }) { 7 + return <PostPage {...props} />; 8 + }
app/(home-pages)/(writer)/WriterShell.tsx app/(app)/(home-pages)/(writer)/WriterShell.tsx
app/(home-pages)/(writer)/home/Actions/Actions.tsx app/(app)/(home-pages)/(writer)/home/Actions/Actions.tsx
app/(home-pages)/(writer)/home/Actions/CreateNewButton.tsx app/(app)/(home-pages)/(writer)/home/Actions/CreateNewButton.tsx
app/(home-pages)/(writer)/home/Actions/HomeThemeSetter.tsx app/(app)/(home-pages)/(writer)/home/Actions/HomeThemeSetter.tsx
app/(home-pages)/(writer)/home/HomeEmpty/DiscoverIllo.tsx app/(app)/(home-pages)/(writer)/home/HomeEmpty/DiscoverIllo.tsx
app/(home-pages)/(writer)/home/HomeEmpty/HomeEmpty.tsx app/(app)/(home-pages)/(writer)/home/HomeEmpty/HomeEmpty.tsx
app/(home-pages)/(writer)/home/HomeEmpty/WelcomeToLeafletIllo.tsx app/(app)/(home-pages)/(writer)/home/HomeEmpty/WelcomeToLeafletIllo.tsx
app/(home-pages)/(writer)/home/HomeLayout.tsx app/(app)/(home-pages)/(writer)/home/HomeLayout.tsx
app/(home-pages)/(writer)/home/IdentitySetter.tsx app/(app)/(home-pages)/(writer)/home/IdentitySetter.tsx
app/(home-pages)/(writer)/home/LeafletList/HomeLeafletFactsProvider.tsx app/(app)/(home-pages)/(writer)/home/LeafletList/HomeLeafletFactsProvider.tsx
app/(home-pages)/(writer)/home/LeafletList/LeafletCardReplicache.tsx app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletCardReplicache.tsx
app/(home-pages)/(writer)/home/LeafletList/LeafletContent.tsx app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletContent.tsx
app/(home-pages)/(writer)/home/LeafletList/LeafletInfo.tsx app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletInfo.tsx
app/(home-pages)/(writer)/home/LeafletList/LeafletListItem.tsx app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletListItem.tsx
+3 -3
app/(home-pages)/(writer)/home/LeafletList/LeafletOptions.tsx app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletOptions.tsx
··· 16 16 import { 17 17 deletePost, 18 18 unpublishPost, 19 - } from "app/lish/[did]/[publication]/dashboard/deletePost"; 19 + } from "app/(app)/lish/[did]/[publication]/dashboard/deletePost"; 20 20 import { ShareSmall } from "components/Icons/ShareSmall"; 21 21 import { HideSmall } from "components/Icons/HideSmall"; 22 22 import { hideDoc } from "../storage"; ··· 28 28 import { 29 29 usePublicationData, 30 30 mutatePublicationData, 31 - } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 32 - import { ShareButton } from "app/[leaflet_id]/actions/ShareOptions"; 31 + } from "app/(app)/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 32 + import { ShareButton } from "app/(app)/[leaflet_id]/actions/ShareOptions"; 33 33 import { useLeafletPublicationStatus } from "components/PageSWRDataProvider"; 34 34 35 35 export const LeafletOptions = (props: {
app/(home-pages)/(writer)/home/LeafletList/LeafletPreview.module.css app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletPreview.module.css
app/(home-pages)/(writer)/home/LeafletList/LeafletPreview.tsx app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletPreview.tsx
app/(home-pages)/(writer)/home/icon.tsx app/(app)/(home-pages)/(writer)/home/icon.tsx
app/(home-pages)/(writer)/home/page.tsx app/(app)/(home-pages)/(writer)/home/page.tsx
app/(home-pages)/(writer)/home/storage.ts app/(app)/(home-pages)/(writer)/home/storage.ts
app/(home-pages)/(writer)/layout.tsx app/(app)/(home-pages)/(writer)/layout.tsx
app/(home-pages)/(writer)/looseleafs/LooseleafsLayout.tsx app/(app)/(home-pages)/(writer)/looseleafs/LooseleafsLayout.tsx
app/(home-pages)/(writer)/looseleafs/page.tsx app/(app)/(home-pages)/(writer)/looseleafs/page.tsx
+1 -1
app/(home-pages)/(writer)/notifications/BskyPostEmbedNotification.tsx app/(app)/(home-pages)/(writer)/notifications/BskyPostEmbedNotification.tsx
··· 2 2 import { ContentLayout, Notification } from "./Notification"; 3 3 import { HydratedBskyPostEmbedNotification } from "src/notifications"; 4 4 import { AtUri } from "@atproto/api"; 5 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 5 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 6 6 7 7 export const BskyPostEmbedNotification = ( 8 8 props: HydratedBskyPostEmbedNotification,
+1 -1
app/(home-pages)/(writer)/notifications/CommentMentionNotification.tsx app/(app)/(home-pages)/(writer)/notifications/CommentMentionNotification.tsx
··· 8 8 Notification, 9 9 } from "./Notification"; 10 10 import { AtUri } from "@atproto/api"; 11 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 11 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 12 12 13 13 export const CommentMentionNotification = ( 14 14 props: HydratedCommentMentionNotification,
+2 -2
app/(home-pages)/(writer)/notifications/CommentNotication.tsx app/(app)/(home-pages)/(writer)/notifications/CommentNotication.tsx
··· 1 - import { BaseTextBlock } from "app/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock"; 1 + import { BaseTextBlock } from "app/(app)/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock"; 2 2 import { AppBskyActorProfile, PubLeafletComment } from "lexicons/api"; 3 3 import { HydratedCommentNotification } from "src/notifications"; 4 4 import { blobRefToSrc } from "src/utils/blobRefToSrc"; ··· 10 10 Notification, 11 11 } from "./Notification"; 12 12 import { AtUri } from "@atproto/api"; 13 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 13 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 14 14 15 15 export const CommentNotification = (props: HydratedCommentNotification) => { 16 16 const docRecord = props.normalizedDocument;
app/(home-pages)/(writer)/notifications/FollowNotification.tsx app/(app)/(home-pages)/(writer)/notifications/FollowNotification.tsx
+1 -1
app/(home-pages)/(writer)/notifications/MentionNotification.tsx app/(app)/(home-pages)/(writer)/notifications/MentionNotification.tsx
··· 2 2 import { ContentLayout, Notification } from "./Notification"; 3 3 import { HydratedMentionNotification } from "src/notifications"; 4 4 import { AtUri } from "@atproto/api"; 5 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 5 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 6 6 7 7 export const MentionNotification = (props: HydratedMentionNotification) => { 8 8 const docRecord = props.normalizedDocument;
+1 -1
app/(home-pages)/(writer)/notifications/Notification.tsx app/(app)/(home-pages)/(writer)/notifications/Notification.tsx
··· 1 1 "use client"; 2 2 import { Avatar } from "components/Avatar"; 3 - import { BaseTextBlock } from "app/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock"; 3 + import { BaseTextBlock } from "app/(app)/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock"; 4 4 import { PubLeafletRichtextFacet } from "lexicons/api"; 5 5 import { timeAgo } from "src/utils/timeAgo"; 6 6 import { useReplicache, useEntity } from "src/replicache";
app/(home-pages)/(writer)/notifications/NotificationList.tsx app/(app)/(home-pages)/(writer)/notifications/NotificationList.tsx
+1 -1
app/(home-pages)/(writer)/notifications/QuoteNotification.tsx app/(app)/(home-pages)/(writer)/notifications/QuoteNotification.tsx
··· 3 3 import { HydratedQuoteNotification } from "src/notifications"; 4 4 import { AtUri } from "@atproto/api"; 5 5 import { Avatar } from "components/Avatar"; 6 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 6 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 7 7 8 8 export const QuoteNotification = (props: HydratedQuoteNotification) => { 9 9 const postView = props.bskyPost.post_view as any;
+1 -1
app/(home-pages)/(writer)/notifications/RecommendNotification.tsx app/(app)/(home-pages)/(writer)/notifications/RecommendNotification.tsx
··· 5 5 import { Avatar } from "components/Avatar"; 6 6 import { AtUri } from "@atproto/api"; 7 7 import { RecommendTinyFilled } from "components/Icons/RecommendTiny"; 8 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 8 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 9 9 10 10 export const RecommendNotification = ( 11 11 props: HydratedRecommendNotification,
+2 -2
app/(home-pages)/(writer)/notifications/ReplyNotification.tsx app/(app)/(home-pages)/(writer)/notifications/ReplyNotification.tsx
··· 1 1 import { Avatar } from "components/Avatar"; 2 - import { BaseTextBlock } from "app/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock"; 2 + import { BaseTextBlock } from "app/(app)/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock"; 3 3 import { ReplyTiny } from "components/Icons/ReplyTiny"; 4 4 import { 5 5 CommentInNotification, ··· 10 10 import { PubLeafletComment } from "lexicons/api"; 11 11 import { AppBskyActorProfile, AtUri } from "@atproto/api"; 12 12 import { blobRefToSrc } from "src/utils/blobRefToSrc"; 13 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 13 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 14 14 15 15 export const ReplyNotification = (props: HydratedCommentNotification) => { 16 16 const docRecord = props.normalizedDocument;
app/(home-pages)/(writer)/notifications/getNotifications.ts app/(app)/(home-pages)/(writer)/notifications/getNotifications.ts
app/(home-pages)/(writer)/notifications/page.tsx app/(app)/(home-pages)/(writer)/notifications/page.tsx
app/(home-pages)/layout.tsx app/(app)/(home-pages)/layout.tsx
+1 -1
app/(home-pages)/p/[didOrHandle]/PostsContent.tsx app/(app)/(home-pages)/p/[didOrHandle]/PostsContent.tsx
··· 2 2 3 3 import { EmptyState } from "components/EmptyState"; 4 4 import { PostListing } from "components/PostListing"; 5 - import type { Post } from "app/(home-pages)/reader/getReaderFeed"; 5 + import type { Post } from "app/(app)/(home-pages)/reader/getReaderFeed"; 6 6 import type { Cursor } from "./getProfilePosts"; 7 7 import { getProfilePosts } from "./getProfilePosts"; 8 8 import useSWRInfinite from "swr/infinite";
app/(home-pages)/p/[didOrHandle]/ProfileHeader.tsx app/(app)/(home-pages)/p/[didOrHandle]/ProfileHeader.tsx
app/(home-pages)/p/[didOrHandle]/ProfileLayout.tsx app/(app)/(home-pages)/p/[didOrHandle]/ProfileLayout.tsx
app/(home-pages)/p/[didOrHandle]/ProfileTabs.tsx app/(app)/(home-pages)/p/[didOrHandle]/ProfileTabs.tsx
+1 -1
app/(home-pages)/p/[didOrHandle]/PubListing.tsx app/(app)/(home-pages)/p/[didOrHandle]/PubListing.tsx
··· 1 1 "use client"; 2 2 import { AtUri } from "@atproto/syntax"; 3 - import { PublicationSubscription } from "app/(home-pages)/reader/getSubscriptions"; 3 + import { PublicationSubscription } from "app/(app)/(home-pages)/reader/getSubscriptions"; 4 4 import { PubIcon } from "components/ActionBar/Publications"; 5 5 import { SubscribeInput } from "components/Subscribe/SubscribeButton"; 6 6 import { usePubTheme } from "components/ThemeManager/PublicationThemeProvider";
+2 -2
app/(home-pages)/p/[didOrHandle]/comments/CommentsContent.tsx app/(app)/(home-pages)/p/[didOrHandle]/comments/CommentsContent.tsx
··· 7 7 import { PubLeafletComment, PubLeafletDocument } from "lexicons/api"; 8 8 import { ReplyTiny } from "components/Icons/ReplyTiny"; 9 9 import { Avatar } from "components/Avatar"; 10 - import { BaseTextBlock } from "app/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock"; 10 + import { BaseTextBlock } from "app/(app)/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock"; 11 11 import { blobRefToSrc } from "src/utils/blobRefToSrc"; 12 12 import { 13 13 getProfileComments, ··· 15 15 type Cursor, 16 16 } from "./getProfileComments"; 17 17 import { timeAgo } from "src/utils/timeAgo"; 18 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 18 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 19 19 20 20 export const ProfileCommentsContent = (props: { 21 21 did: string;
app/(home-pages)/p/[didOrHandle]/comments/getProfileComments.ts app/(app)/(home-pages)/p/[didOrHandle]/comments/getProfileComments.ts
+1 -1
app/(home-pages)/p/[didOrHandle]/comments/page.tsx app/(app)/(home-pages)/p/[didOrHandle]/comments/page.tsx
··· 1 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 1 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 2 2 import { getProfileComments } from "./getProfileComments"; 3 3 import { ProfileCommentsContent } from "./CommentsContent"; 4 4
+2 -2
app/(home-pages)/p/[didOrHandle]/getProfilePosts.ts app/(app)/(home-pages)/p/[didOrHandle]/getProfilePosts.ts
··· 1 1 "use server"; 2 2 3 3 import { supabaseServerClient } from "supabase/serverClient"; 4 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 5 - import type { Post } from "app/(home-pages)/reader/getReaderFeed"; 4 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 5 + import type { Post } from "app/(app)/(home-pages)/reader/getReaderFeed"; 6 6 import { 7 7 normalizeDocumentRecord, 8 8 normalizePublicationRecord,
+1 -1
app/(home-pages)/p/[didOrHandle]/layout.tsx app/(app)/(home-pages)/p/[didOrHandle]/layout.tsx
··· 1 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 1 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 2 2 import { NotFoundLayout } from "components/PageLayouts/NotFoundLayout"; 3 3 import { supabaseServerClient } from "supabase/serverClient"; 4 4 import { Json } from "supabase/database.types";
+1 -1
app/(home-pages)/p/[didOrHandle]/page.tsx app/(app)/(home-pages)/p/[didOrHandle]/page.tsx
··· 1 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 1 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 2 2 import { getProfilePosts } from "./getProfilePosts"; 3 3 import { ProfilePostsContent } from "./PostsContent"; 4 4
+3 -3
app/(home-pages)/p/[didOrHandle]/subscriptions/SubscriptionsContent.tsx app/(app)/(home-pages)/p/[didOrHandle]/subscriptions/SubscriptionsContent.tsx
··· 3 3 import { EmptyState } from "components/EmptyState"; 4 4 import { useEffect, useRef } from "react"; 5 5 import useSWRInfinite from "swr/infinite"; 6 - import { PubListing } from "app/(home-pages)/p/[didOrHandle]/PubListing"; 6 + import { PubListing } from "app/(app)/(home-pages)/p/[didOrHandle]/PubListing"; 7 7 import { 8 8 getSubscriptions, 9 9 type PublicationSubscription, 10 - } from "app/(home-pages)/reader/getSubscriptions"; 11 - import { Cursor } from "app/(home-pages)/reader/getReaderFeed"; 10 + } from "app/(app)/(home-pages)/reader/getSubscriptions"; 11 + import { Cursor } from "app/(app)/(home-pages)/reader/getReaderFeed"; 12 12 13 13 export const ProfileSubscriptionsContent = (props: { 14 14 did: string;
+2 -2
app/(home-pages)/p/[didOrHandle]/subscriptions/page.tsx app/(app)/(home-pages)/p/[didOrHandle]/subscriptions/page.tsx
··· 1 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 2 - import { getSubscriptions } from "app/(home-pages)/reader/getSubscriptions"; 1 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 2 + import { getSubscriptions } from "app/(app)/(home-pages)/reader/getSubscriptions"; 3 3 import { ProfileSubscriptionsContent } from "./SubscriptionsContent"; 4 4 5 5 export default async function ProfileSubscriptionsPage(props: {
-23
app/(home-pages)/page.tsx
··· 1 - import type { Metadata } from "next"; 2 - import { cookies } from "next/headers"; 3 - import { redirect } from "next/navigation"; 4 - import { AboutPage } from "../about/AboutPage"; 5 - 6 - export const metadata: Metadata = { 7 - title: "Leaflet — social publishing on the Atmosphere", 8 - description: 9 - "A simple and powerful platform for social publishing — blogs, newsletters, and more!", 10 - }; 11 - 12 - export default async function RootPage() { 13 - const cookieStore = await cookies(); 14 - const hasAuth = 15 - cookieStore.has("auth_token") || cookieStore.has("external_auth_token"); 16 - 17 - if (!hasAuth) return <AboutPage />; 18 - 19 - const navState = cookieStore.get("nav-state")?.value; 20 - if (navState === "reader") redirect("/reader"); 21 - 22 - redirect("/home"); 23 - }
app/(home-pages)/reader/FeedLayout.tsx app/(app)/(home-pages)/reader/FeedLayout.tsx
app/(home-pages)/reader/FeedSkeleton.tsx app/(app)/(home-pages)/reader/FeedSkeleton.tsx
app/(home-pages)/reader/GlobalContent.tsx app/(app)/(home-pages)/reader/GlobalContent.tsx
app/(home-pages)/reader/InboxContent.tsx app/(app)/(home-pages)/reader/InboxContent.tsx
app/(home-pages)/reader/NewContent.tsx app/(app)/(home-pages)/reader/NewContent.tsx
app/(home-pages)/reader/PreviewDrawer.tsx app/(app)/(home-pages)/reader/PreviewDrawer.tsx
+1 -1
app/(home-pages)/reader/ReaderMentionsContent.tsx app/(app)/(home-pages)/reader/ReaderMentionsContent.tsx
··· 1 1 "use client"; 2 2 import useSWR from "swr"; 3 3 import { PostView } from "@atproto/api/dist/client/types/app/bsky/feed/defs"; 4 - import { BskyPostContent } from "app/lish/[did]/[publication]/[rkey]/BskyPostContent"; 4 + import { BskyPostContent } from "app/(app)/lish/[did]/[publication]/[rkey]/BskyPostContent"; 5 5 import { EmptyState } from "components/EmptyState"; 6 6 import { DotLoader } from "components/utils/DotLoader"; 7 7
+3 -3
app/(home-pages)/reader/enrichPost.ts app/(app)/(home-pages)/reader/enrichPost.ts
··· 1 1 import { AtUri } from "@atproto/api"; 2 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 3 - import { getConstellationBacklinks } from "app/lish/[did]/[publication]/[rkey]/getPostPageData"; 4 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 2 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 3 + import { getConstellationBacklinks } from "app/(app)/lish/[did]/[publication]/[rkey]/getPostPageData"; 4 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 5 5 import { 6 6 normalizeDocumentRecord, 7 7 normalizePublicationRecord,
app/(home-pages)/reader/getHotFeed.ts app/(app)/(home-pages)/reader/getHotFeed.ts
app/(home-pages)/reader/getNewFeed.ts app/(app)/(home-pages)/reader/getNewFeed.ts
app/(home-pages)/reader/getReaderFeed.ts app/(app)/(home-pages)/reader/getReaderFeed.ts
app/(home-pages)/reader/getSubscriptions.ts app/(app)/(home-pages)/reader/getSubscriptions.ts
app/(home-pages)/reader/hot/page.tsx app/(app)/(home-pages)/reader/hot/page.tsx
app/(home-pages)/reader/idResolver.ts app/(app)/(home-pages)/reader/idResolver.ts
app/(home-pages)/reader/layout.tsx app/(app)/(home-pages)/reader/layout.tsx
app/(home-pages)/reader/new/page.tsx app/(app)/(home-pages)/reader/new/page.tsx
app/(home-pages)/reader/page.tsx app/(app)/(home-pages)/reader/page.tsx
app/(home-pages)/reader/trending/page.tsx app/(app)/(home-pages)/reader/trending/page.tsx
+3 -3
app/(home-pages)/tag/[tag]/getDocumentsByTag.ts app/(app)/(home-pages)/tag/[tag]/getDocumentsByTag.ts
··· 1 1 "use server"; 2 2 3 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 3 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 4 4 import { supabaseServerClient } from "supabase/serverClient"; 5 5 import { AtUri } from "@atproto/api"; 6 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 7 - import type { Post } from "app/(home-pages)/reader/getReaderFeed"; 6 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 7 + import type { Post } from "app/(app)/(home-pages)/reader/getReaderFeed"; 8 8 import { 9 9 normalizeDocumentRecord, 10 10 normalizePublicationRecord,
app/(home-pages)/tag/[tag]/layout.tsx app/(app)/(home-pages)/tag/[tag]/layout.tsx
app/(home-pages)/tag/[tag]/page.tsx app/(app)/(home-pages)/tag/[tag]/page.tsx
+1 -1
app/[leaflet_id]/AddToHomeEffect.tsx app/(app)/[leaflet_id]/AddToHomeEffect.tsx
··· 3 3 import { usePathname, useRouter, useSearchParams } from "next/navigation"; 4 4 import { useEffect, useRef } from "react"; 5 5 import { mutate as swrMutate } from "swr"; 6 - import { addDocToHome } from "app/(home-pages)/(writer)/home/storage"; 6 + import { addDocToHome } from "app/(app)/(home-pages)/(writer)/home/storage"; 7 7 import { useIdentityData } from "components/IdentityProvider"; 8 8 import { useReplicache } from "src/replicache"; 9 9
+3 -3
app/[leaflet_id]/Footer.tsx app/(app)/[leaflet_id]/Footer.tsx
··· 5 5 import { ThemePopover } from "components/ThemeManager/ThemeSetter"; 6 6 import { Toolbar } from "components/Toolbar"; 7 7 import { FootnoteToolbar } from "components/Toolbar/FootnoteToolbarWrapper"; 8 - import { ShareOptions } from "app/[leaflet_id]/actions/ShareOptions"; 8 + import { ShareOptions } from "app/(app)/[leaflet_id]/actions/ShareOptions"; 9 9 import { 10 10 AddToHomeButton, 11 11 HomeButton, 12 - } from "app/[leaflet_id]/actions/HomeButton"; 12 + } from "app/(app)/[leaflet_id]/actions/HomeButton"; 13 13 import { PublishButton } from "./actions/PublishButton"; 14 14 import { useEntitySetContext } from "components/EntitySetProvider"; 15 15 import { Watermark } from "components/Watermark"; ··· 20 20 import { block } from "sharp"; 21 21 import { PostSettings } from "components/PostSettings"; 22 22 import useSWR from "swr"; 23 - import { getHomeDocs } from "app/(home-pages)/(writer)/home/storage"; 23 + import { getHomeDocs } from "app/(app)/(home-pages)/(writer)/home/storage"; 24 24 import { useAddToHomeParam } from "./AddToHomeEffect"; 25 25 26 26 export function hasBlockToolbar(blockType: string | null | undefined) {
app/[leaflet_id]/Leaflet.tsx app/(app)/[leaflet_id]/Leaflet.tsx
+4 -4
app/[leaflet_id]/Sidebar.tsx app/(app)/[leaflet_id]/Sidebar.tsx
··· 1 1 "use client"; 2 2 import { Sidebar } from "components/ActionBar/Sidebar"; 3 3 import { useEntitySetContext } from "components/EntitySetProvider"; 4 - import { HelpButton } from "app/[leaflet_id]/actions/HelpButton"; 4 + import { HelpButton } from "app/(app)/[leaflet_id]/actions/HelpButton"; 5 5 import { 6 6 AddToHomeButton, 7 7 HomeButton, 8 - } from "app/[leaflet_id]/actions/HomeButton"; 8 + } from "app/(app)/[leaflet_id]/actions/HomeButton"; 9 9 import { Media } from "components/Media"; 10 10 import { 11 11 useLeafletPublicationData, 12 12 useLeafletPublicationPage, 13 13 } from "components/PageSWRDataProvider"; 14 - import { ShareOptions } from "app/[leaflet_id]/actions/ShareOptions"; 14 + import { ShareOptions } from "app/(app)/[leaflet_id]/actions/ShareOptions"; 15 15 import { ThemePopover } from "components/ThemeManager/ThemeSetter"; 16 16 import { PublishButton } from "./actions/PublishButton"; 17 17 import { PostSettings } from "components/PostSettings"; ··· 20 20 import { useIdentityData } from "components/IdentityProvider"; 21 21 import { useReplicache } from "src/replicache"; 22 22 import useSWR from "swr"; 23 - import { getHomeDocs } from "app/(home-pages)/(writer)/home/storage"; 23 + import { getHomeDocs } from "app/(app)/(home-pages)/(writer)/home/storage"; 24 24 import { useAddToHomeParam } from "./AddToHomeEffect"; 25 25 26 26 export function LeafletSidebar() {
app/[leaflet_id]/WelcomeModal.tsx app/(app)/[leaflet_id]/WelcomeModal.tsx
+1 -1
app/[leaflet_id]/actions/BackToPubButton.tsx app/(app)/[leaflet_id]/actions/BackToPubButton.tsx
··· 1 - import { getBasePublicationURL } from "app/lish/createPub/getPublicationURL"; 1 + import { getBasePublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 2 2 import { ActionButton } from "components/ActionBar/ActionButton"; 3 3 import { GoBackSmall } from "components/Icons/GoBackSmall"; 4 4 import { SpeedyLink } from "components/SpeedyLink";
+5 -5
app/[leaflet_id]/actions/HelpButton.tsx app/(app)/[leaflet_id]/actions/HelpButton.tsx
··· 1 1 "use client"; 2 - import { ShortcutKey } from "../../../components/Layout"; 3 - import { Media } from "../../../components/Media"; 4 - import { Popover } from "../../../components/Popover"; 2 + import { ShortcutKey } from "components/Layout"; 3 + import { Media } from "components/Media"; 4 + import { Popover } from "components/Popover"; 5 5 import { metaKey } from "src/utils/metaKey"; 6 - import { useEntitySetContext } from "../../../components/EntitySetProvider"; 6 + import { useEntitySetContext } from "components/EntitySetProvider"; 7 7 import { useState } from "react"; 8 8 import { ActionButton } from "components/ActionBar/ActionButton"; 9 - import { HelpSmall } from "../../../components/Icons/HelpSmall"; 9 + import { HelpSmall } from "components/Icons/HelpSmall"; 10 10 import { isMac } from "src/utils/isDevice"; 11 11 import { useIsMobile } from "src/hooks/isMobile"; 12 12 import { HelpContent } from "components/ActionBar/DesktopNavigation";
+6 -6
app/[leaflet_id]/actions/HomeButton.tsx app/(app)/[leaflet_id]/actions/HomeButton.tsx
··· 1 1 "use client"; 2 2 import Link from "next/link"; 3 - import { useEntitySetContext } from "../../../components/EntitySetProvider"; 3 + import { useEntitySetContext } from "components/EntitySetProvider"; 4 4 import { ActionButton } from "components/ActionBar/ActionButton"; 5 5 import { useSearchParams } from "next/navigation"; 6 - import { useIdentityData } from "../../../components/IdentityProvider"; 6 + import { useIdentityData } from "components/IdentityProvider"; 7 7 import { useReplicache } from "src/replicache"; 8 8 import { addLeafletToHome } from "actions/addLeafletToHome"; 9 - import { useSmoker } from "../../../components/Toast"; 10 - import { AddToHomeSmall } from "../../../components/Icons/AddToHomeSmall"; 11 - import { HomeSmall } from "../../../components/Icons/HomeSmall"; 9 + import { useSmoker } from "components/Toast"; 10 + import { AddToHomeSmall } from "components/Icons/AddToHomeSmall"; 11 + import { HomeSmall } from "components/Icons/HomeSmall"; 12 12 import { produce } from "immer"; 13 - import { addDocToHome } from "app/(home-pages)/(writer)/home/storage"; 13 + import { addDocToHome } from "app/(app)/(home-pages)/(writer)/home/storage"; 14 14 import { mutate as swrMutate } from "swr"; 15 15 16 16 export function HomeButton() {
+1 -1
app/[leaflet_id]/actions/PublishButton.tsx app/(app)/[leaflet_id]/actions/PublishButton.tsx
··· 1 1 "use client"; 2 2 import { publishToPublication } from "actions/publishToPublication"; 3 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 3 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 4 4 import { ActionButton } from "components/ActionBar/ActionButton"; 5 5 import { 6 6 PubIcon,
app/[leaflet_id]/actions/ShareOptions/DomainOptions.tsx app/(app)/[leaflet_id]/actions/ShareOptions/DomainOptions.tsx
app/[leaflet_id]/actions/ShareOptions/getShareLink.ts app/(app)/[leaflet_id]/actions/ShareOptions/getShareLink.ts
+1 -1
app/[leaflet_id]/actions/ShareOptions/index.tsx app/(app)/[leaflet_id]/actions/ShareOptions/index.tsx
··· 17 17 import { 18 18 getPublicationURL, 19 19 getDocumentURL, 20 - } from "app/lish/createPub/getPublicationURL"; 20 + } from "app/(app)/lish/createPub/getPublicationURL"; 21 21 import { AtUri } from "@atproto/syntax"; 22 22 import { useIsMobile } from "src/hooks/isMobile"; 23 23 import { LoginModal } from "components/LoginButton";
+1 -1
app/[leaflet_id]/icon.tsx app/(app)/[leaflet_id]/icon.tsx
··· 1 1 import { ImageResponse } from "next/og"; 2 2 import type { Fact } from "src/replicache"; 3 3 import type { Attribute } from "src/replicache/attributes"; 4 - import { Database } from "../../supabase/database.types"; 4 + import { Database } from "supabase/database.types"; 5 5 import { createServerClient } from "@supabase/ssr"; 6 6 import { parseHSBToRGB } from "src/utils/parseHSB"; 7 7
app/[leaflet_id]/opengraph-image.tsx app/(app)/[leaflet_id]/opengraph-image.tsx
app/[leaflet_id]/page.tsx app/(app)/[leaflet_id]/page.tsx
+1 -1
app/[leaflet_id]/publish/BskyPostEditorProsemirror.tsx app/(app)/[leaflet_id]/publish/BskyPostEditorProsemirror.tsx
··· 9 9 import { history, undo, redo } from "prosemirror-history"; 10 10 import { inputRules, InputRule } from "prosemirror-inputrules"; 11 11 import { autolink } from "components/Blocks/TextBlock/autolink-plugin"; 12 - import { IOSBS } from "app/lish/[did]/[publication]/[rkey]/Interactions/Comments/CommentBox"; 12 + import { IOSBS } from "app/(app)/lish/[did]/[publication]/[rkey]/Interactions/Comments/CommentBox"; 13 13 import { schema } from "components/Blocks/TextBlock/schema"; 14 14 import { Mention, MentionAutocomplete } from "components/Mention"; 15 15
+1 -1
app/[leaflet_id]/publish/PublishIllustration/PublishIllustration.tsx app/(app)/[leaflet_id]/publish/PublishIllustration/PublishIllustration.tsx
··· 14 14 Star2, 15 15 Star3, 16 16 } from "./Stars"; 17 - import { usePublicationData } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 17 + import { usePublicationData } from "app/(app)/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 18 18 import { useLeafletPublicationData } from "components/PageSWRDataProvider"; 19 19 20 20 // TODO
app/[leaflet_id]/publish/PublishIllustration/Stars.tsx app/(app)/[leaflet_id]/publish/PublishIllustration/Stars.tsx
+2 -2
app/[leaflet_id]/publish/PublishPost.tsx app/(app)/[leaflet_id]/publish/PublishPost.tsx
··· 16 16 import { useSubscribe } from "src/replicache/useSubscribe"; 17 17 import { editorStateToFacetedText } from "./BskyPostEditorProsemirror"; 18 18 import { EditorState } from "prosemirror-state"; 19 - import { TagSelector } from "../../../components/Tags"; 19 + import { TagSelector } from "components/Tags"; 20 20 import { LooseLeafSmall } from "components/Icons/LooseleafSmall"; 21 21 import { PubIcon } from "components/ActionBar/Publications"; 22 22 import { OAuthErrorMessage, isOAuthSessionError } from "components/OAuthError"; ··· 34 34 PublicationBackgroundProvider, 35 35 } from "components/ThemeManager/PublicationThemeProvider"; 36 36 import { useEntity } from "src/replicache"; 37 - import { LeafletContent } from "app/(home-pages)/(writer)/home/LeafletList/LeafletContent"; 37 + import { LeafletContent } from "app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletContent"; 38 38 39 39 type Props = { 40 40 title: string;
app/[leaflet_id]/publish/ShareOptions.tsx app/(app)/[leaflet_id]/publish/ShareOptions.tsx
app/[leaflet_id]/publish/page.tsx app/(app)/[leaflet_id]/publish/page.tsx
app/[leaflet_id]/publish/publishBskyPost.ts app/(app)/[leaflet_id]/publish/publishBskyPost.ts
+2 -2
app/about/Examples.tsx
··· 1 1 import { GoToArrow } from "components/Icons/GoToArrow"; 2 2 import { supabaseServerClient } from "supabase/serverClient"; 3 3 import { normalizePublicationRecord } from "src/utils/normalizeRecords"; 4 - import { PubListing } from "app/(home-pages)/p/[didOrHandle]/PubListing"; 5 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 4 + import { PubListing } from "app/(app)/(home-pages)/p/[didOrHandle]/PubListing"; 5 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 6 6 import { SpeedyLink } from "components/SpeedyLink"; 7 7 8 8 const pubs = [
+3 -1
app/about/page.tsx
··· 6 6 "A simple and powerful platform for social publishing — blogs, newsletters, and more!", 7 7 }; 8 8 9 - export default async function About() { 9 + export const revalidate = 3600; 10 + 11 + export default function About() { 10 12 return <AboutPage />; 11 13 }
+1 -1
app/api/inngest/functions/index_post_mention.ts
··· 8 8 pingIdentityToUpdateNotification, 9 9 } from "src/notifications"; 10 10 import { v7 } from "uuid"; 11 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 11 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 12 12 import { documentUriFilter } from "src/utils/uriHelpers"; 13 13 14 14 export const index_post_mention = inngest.createFunction(
+1 -1
app/api/inngest/functions/sync_document_metadata.ts
··· 1 1 import { inngest, events } from "../client"; 2 2 import { supabaseServerClient } from "supabase/serverClient"; 3 3 import { AtpAgent, AtUri } from "@atproto/api"; 4 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 4 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 5 5 import type { Json } from "supabase/database.types"; 6 6 7 7 // 1m, 2m, 4m, 8m, 16m, 32m, 1h, 2h, 4h, 8h, 8h, 8h (~37h total)
+1 -1
app/api/oauth/[route]/route.ts
··· 1 1 import { 2 2 backfillAtprotoSubscriptionsForIdentity, 3 3 subscribeToPublication, 4 - } from "app/lish/subscribeToPublication"; 4 + } from "app/(app)/lish/subscribeToPublication"; 5 5 import { cookies } from "next/headers"; 6 6 import { redirect } from "next/navigation"; 7 7 import { NextRequest, NextResponse } from "next/server";
+2 -2
app/api/rpc/[command]/get_document_interactions.ts
··· 1 1 import { z } from "zod"; 2 2 import { makeRoute } from "../lib"; 3 3 import type { Env } from "./route"; 4 - import { getConstellationBacklinks } from "app/lish/[did]/[publication]/[rkey]/getPostPageData"; 5 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 4 + import { getConstellationBacklinks } from "app/(app)/lish/[did]/[publication]/[rkey]/getPostPageData"; 5 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 6 6 import { 7 7 normalizeDocumentRecord, 8 8 normalizePublicationRecord,
+2 -2
app/api/rpc/[command]/get_hot_feed.ts
··· 1 1 import { z } from "zod"; 2 2 import { makeRoute } from "../lib"; 3 3 import type { Env } from "./route"; 4 - import { getHotFeed } from "app/(home-pages)/reader/getHotFeed"; 5 - import type { Post } from "app/(home-pages)/reader/getReaderFeed"; 4 + import { getHotFeed } from "app/(app)/(home-pages)/reader/getHotFeed"; 5 + import type { Post } from "app/(app)/(home-pages)/reader/getReaderFeed"; 6 6 7 7 export type GetHotFeedReturnType = Awaited< 8 8 ReturnType<(typeof get_hot_feed)["handler"]>
+1 -1
app/api/rpc/[command]/get_profile_data.ts
··· 1 1 import { z } from "zod"; 2 2 import { makeRoute } from "../lib"; 3 3 import type { Env } from "./route"; 4 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 4 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 5 5 import { supabaseServerClient } from "supabase/serverClient"; 6 6 import { Agent } from "@atproto/api"; 7 7 import { getIdentityData } from "actions/getIdentityData";
+1 -1
app/api/rpc/[command]/search_publication_documents.ts
··· 2 2 import { z } from "zod"; 3 3 import { makeRoute } from "../lib"; 4 4 import type { Env } from "./route"; 5 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 5 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 6 6 import { normalizeDocumentRecord } from "src/utils/normalizeRecords"; 7 7 8 8 export type SearchPublicationDocumentsReturnType = Awaited<
+1 -1
app/api/rpc/[command]/search_publication_names.ts
··· 1 1 import { z } from "zod"; 2 2 import { makeRoute } from "../lib"; 3 3 import type { Env } from "./route"; 4 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 4 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 5 5 import { deduplicateByUri } from "src/utils/deduplicateRecords"; 6 6 7 7 export type SearchPublicationNamesReturnType = Awaited<
app/checkout/pro/ProCheckoutLogin.tsx app/(app)/checkout/pro/ProCheckoutLogin.tsx
app/checkout/pro/ProCheckoutTrigger.tsx app/(app)/checkout/pro/ProCheckoutTrigger.tsx
app/checkout/pro/page.tsx app/(app)/checkout/pro/page.tsx
+2 -24
app/layout.tsx
··· 5 5 import "./globals.css"; 6 6 import localFont from "next/font/local"; 7 7 import { PopUpProvider } from "components/Toast"; 8 - import { IdentityProviderServer } from "components/IdentityProviderServer"; 9 - import { headers } from "next/headers"; 10 - import { RequestHeadersProvider } from "components/Providers/RequestHeadersProvider"; 11 - import { RouteUIStateManager } from "components/RouteUIStateManger"; 12 - import { SubscriptionSuccessModal } from "components/SubscriptionSuccessModal"; 13 - import { Suspense } from "react"; 14 8 15 9 export const metadata = { 16 10 title: "Leaflet", ··· 53 47 variable: "--font-quattro", 54 48 }); 55 49 56 - export default async function RootLayout({ 50 + export default function RootLayout({ 57 51 children, 58 52 }: { 59 53 children: React.ReactNode; 60 54 }) { 61 - let headersList = await headers(); 62 - let ipLocation = headersList.get("X-Vercel-IP-Country"); 63 - let acceptLanguage = headersList.get("accept-language"); 64 - let ipTimezone = headersList.get("X-Vercel-IP-Timezone"); 65 55 return ( 66 56 <html suppressHydrationWarning lang="en" className={`${quattro.variable}`}> 67 57 <body> ··· 82 72 <ServiceWorker /> 83 73 <InitialPageLoad> 84 74 <PopUpProvider> 85 - <IdentityProviderServer> 86 - <RequestHeadersProvider 87 - country={ipLocation} 88 - language={acceptLanguage} 89 - timezone={ipTimezone} 90 - > 91 - <ViewportSizeLayout>{children}</ViewportSizeLayout> 92 - <Suspense> 93 - <SubscriptionSuccessModal /> 94 - </Suspense> 95 - <RouteUIStateManager /> 96 - </RequestHeadersProvider> 97 - </IdentityProviderServer> 75 + <ViewportSizeLayout>{children}</ViewportSizeLayout> 98 76 </PopUpProvider> 99 77 </InitialPageLoad> 100 78 </body>
app/lish/[did]/[publication]/.well-known/site.standard.publication/route.ts app/(app)/lish/[did]/[publication]/.well-known/site.standard.publication/route.ts
app/lish/[did]/[publication]/LocalizedDate.tsx app/(app)/lish/[did]/[publication]/LocalizedDate.tsx
app/lish/[did]/[publication]/PublicationAuthor.tsx app/(app)/lish/[did]/[publication]/PublicationAuthor.tsx
+1 -1
app/lish/[did]/[publication]/PublicationContent.tsx app/(app)/lish/[did]/[publication]/PublicationContent.tsx
··· 12 12 import { FontLoader } from "components/FontLoader"; 13 13 import { SpeedyLink } from "components/SpeedyLink"; 14 14 import { blobRefToSrc } from "src/utils/blobRefToSrc"; 15 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 15 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 16 16 import { SubscribeInput } from "components/Subscribe/SubscribeButton"; 17 17 import { 18 18 PublicationPostsList,
app/lish/[did]/[publication]/PublicationFullHeader.tsx app/(app)/lish/[did]/[publication]/PublicationFullHeader.tsx
app/lish/[did]/[publication]/PublicationHeader.tsx app/(app)/lish/[did]/[publication]/PublicationHeader.tsx
app/lish/[did]/[publication]/PublicationHomeLayout.tsx app/(app)/lish/[did]/[publication]/PublicationHomeLayout.tsx
app/lish/[did]/[publication]/PublicationNav.tsx app/(app)/lish/[did]/[publication]/PublicationNav.tsx
app/lish/[did]/[publication]/PublicationPostItem.tsx app/(app)/lish/[did]/[publication]/PublicationPostItem.tsx
+1 -1
app/lish/[did]/[publication]/PublicationPostsList.tsx app/(app)/lish/[did]/[publication]/PublicationPostsList.tsx
··· 1 1 import React from "react"; 2 2 import { AtUri } from "@atproto/api"; 3 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 3 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 4 4 import { InteractionPreview } from "components/InteractionsPreview"; 5 5 import { LocalizedDate } from "./LocalizedDate"; 6 6 import { PublicationPostItem } from "./PublicationContent";
app/lish/[did]/[publication]/PublicationStickyHeader.tsx app/(app)/lish/[did]/[publication]/PublicationStickyHeader.tsx
app/lish/[did]/[publication]/UpgradeModal.tsx app/(app)/lish/[did]/[publication]/UpgradeModal.tsx
app/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock.tsx app/(app)/lish/[did]/[publication]/[rkey]/Blocks/BaseTextBlock.tsx
app/lish/[did]/[publication]/[rkey]/Blocks/PubCodeBlock.tsx app/(app)/lish/[did]/[publication]/[rkey]/Blocks/PubCodeBlock.tsx
app/lish/[did]/[publication]/[rkey]/Blocks/PublishBskyPostBlock.tsx app/(app)/lish/[did]/[publication]/[rkey]/Blocks/PublishBskyPostBlock.tsx
app/lish/[did]/[publication]/[rkey]/Blocks/PublishedPageBlock.tsx app/(app)/lish/[did]/[publication]/[rkey]/Blocks/PublishedPageBlock.tsx
app/lish/[did]/[publication]/[rkey]/Blocks/PublishedPollBlock.tsx app/(app)/lish/[did]/[publication]/[rkey]/Blocks/PublishedPollBlock.tsx
app/lish/[did]/[publication]/[rkey]/Blocks/StaticMathBlock.tsx app/(app)/lish/[did]/[publication]/[rkey]/Blocks/StaticMathBlock.tsx
app/lish/[did]/[publication]/[rkey]/Blocks/TextBlock.tsx app/(app)/lish/[did]/[publication]/[rkey]/Blocks/TextBlock.tsx
app/lish/[did]/[publication]/[rkey]/Blocks/TextBlockCore.tsx app/(app)/lish/[did]/[publication]/[rkey]/Blocks/TextBlockCore.tsx
app/lish/[did]/[publication]/[rkey]/BlueskyQuotesPage.tsx app/(app)/lish/[did]/[publication]/[rkey]/BlueskyQuotesPage.tsx
app/lish/[did]/[publication]/[rkey]/BskyPostContent.tsx app/(app)/lish/[did]/[publication]/[rkey]/BskyPostContent.tsx
app/lish/[did]/[publication]/[rkey]/CanvasPage.tsx app/(app)/lish/[did]/[publication]/[rkey]/CanvasPage.tsx
+1 -1
app/lish/[did]/[publication]/[rkey]/DocumentPageRenderer.tsx app/(app)/lish/[did]/[publication]/[rkey]/DocumentPageRenderer.tsx
··· 18 18 import { FontLoader } from "components/FontLoader"; 19 19 import { mergePreferences } from "src/utils/mergePreferences"; 20 20 import { PublicationNav } from "../PublicationNav"; 21 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 21 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 22 22 23 23 export async function DocumentPageRenderer({ 24 24 did,
app/lish/[did]/[publication]/[rkey]/Footnotes/FootnoteCollectorContext.tsx app/(app)/lish/[did]/[publication]/[rkey]/Footnotes/FootnoteCollectorContext.tsx
app/lish/[did]/[publication]/[rkey]/Footnotes/PublishedFootnotePopover.tsx app/(app)/lish/[did]/[publication]/[rkey]/Footnotes/PublishedFootnotePopover.tsx
app/lish/[did]/[publication]/[rkey]/Footnotes/PublishedFootnoteSideColumn.tsx app/(app)/lish/[did]/[publication]/[rkey]/Footnotes/PublishedFootnoteSideColumn.tsx
app/lish/[did]/[publication]/[rkey]/Footnotes/PublishedFootnotes.tsx app/(app)/lish/[did]/[publication]/[rkey]/Footnotes/PublishedFootnotes.tsx
app/lish/[did]/[publication]/[rkey]/Interactions/Comments/CommentBox.tsx app/(app)/lish/[did]/[publication]/[rkey]/Interactions/Comments/CommentBox.tsx
app/lish/[did]/[publication]/[rkey]/Interactions/Comments/commentAction.ts app/(app)/lish/[did]/[publication]/[rkey]/Interactions/Comments/commentAction.ts
app/lish/[did]/[publication]/[rkey]/Interactions/Comments/index.tsx app/(app)/lish/[did]/[publication]/[rkey]/Interactions/Comments/index.tsx
app/lish/[did]/[publication]/[rkey]/Interactions/InteractionDrawer.tsx app/(app)/lish/[did]/[publication]/[rkey]/Interactions/InteractionDrawer.tsx
app/lish/[did]/[publication]/[rkey]/Interactions/Interactions.tsx app/(app)/lish/[did]/[publication]/[rkey]/Interactions/Interactions.tsx
app/lish/[did]/[publication]/[rkey]/Interactions/Quotes.tsx app/(app)/lish/[did]/[publication]/[rkey]/Interactions/Quotes.tsx
app/lish/[did]/[publication]/[rkey]/Interactions/recommendAction.ts app/(app)/lish/[did]/[publication]/[rkey]/Interactions/recommendAction.ts
app/lish/[did]/[publication]/[rkey]/LinearDocumentPage.tsx app/(app)/lish/[did]/[publication]/[rkey]/LinearDocumentPage.tsx
app/lish/[did]/[publication]/[rkey]/PostContent.tsx app/(app)/lish/[did]/[publication]/[rkey]/PostContent.tsx
+2 -2
app/lish/[did]/[publication]/[rkey]/PostHeader/PostHeader.tsx app/(app)/lish/[did]/[publication]/[rkey]/PostHeader/PostHeader.tsx
··· 1 1 "use client"; 2 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 2 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 3 3 import { 4 4 Interactions, 5 5 getQuoteCount, ··· 11 11 import { EditTiny } from "components/Icons/EditTiny"; 12 12 import { SpeedyLink } from "components/SpeedyLink"; 13 13 import { useLocalizedDate } from "src/hooks/useLocalizedDate"; 14 - import Post from "app/p/[didOrHandle]/[rkey]/l-quote/[quote]/page"; 14 + import Post from "app/(app)/p/[didOrHandle]/[rkey]/l-quote/[quote]/page"; 15 15 import { Separator } from "components/Layout"; 16 16 import { ProfilePopover } from "components/ProfilePopover"; 17 17
app/lish/[did]/[publication]/[rkey]/PostLinks.tsx app/(app)/lish/[did]/[publication]/[rkey]/PostLinks.tsx
app/lish/[did]/[publication]/[rkey]/PostPages.tsx app/(app)/lish/[did]/[publication]/[rkey]/PostPages.tsx
+1 -1
app/lish/[did]/[publication]/[rkey]/PostPrevNextButtons.tsx app/(app)/lish/[did]/[publication]/[rkey]/PostPrevNextButtons.tsx
··· 1 1 "use client"; 2 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 2 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 3 3 import { AtUri } from "@atproto/api"; 4 4 import { useDocument } from "contexts/DocumentContext"; 5 5 import { SpeedyLink } from "components/SpeedyLink";
+1 -1
app/lish/[did]/[publication]/[rkey]/PublicationPageRenderer.tsx app/(app)/lish/[did]/[publication]/[rkey]/PublicationPageRenderer.tsx
··· 27 27 import { PublicationHomeLayout } from "../PublicationHomeLayout"; 28 28 import { PublicationStickyHeader } from "../PublicationStickyHeader"; 29 29 import { PublicationFullHeader } from "../PublicationFullHeader"; 30 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 30 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 31 31 import { blobRefToSrc } from "src/utils/blobRefToSrc"; 32 32 33 33 import { collectAndFetchBlockResources } from "./collectAndFetchBlockResources";
app/lish/[did]/[publication]/[rkey]/QuoteHandler.tsx app/(app)/lish/[did]/[publication]/[rkey]/QuoteHandler.tsx
app/lish/[did]/[publication]/[rkey]/StaticPostContent.tsx app/(app)/lish/[did]/[publication]/[rkey]/StaticPostContent.tsx
+1 -1
app/lish/[did]/[publication]/[rkey]/ThreadPage.tsx app/(app)/lish/[did]/[publication]/[rkey]/ThreadPage.tsx
··· 25 25 prefetchThread, 26 26 } from "./PostLinks"; 27 27 import { useDocument } from "contexts/DocumentContext"; 28 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 28 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 29 29 import { QuoteContent } from "./Interactions/Quotes"; 30 30 import { 31 31 decodeQuotePosition,
app/lish/[did]/[publication]/[rkey]/collectAndFetchBlockResources.ts app/(app)/lish/[did]/[publication]/[rkey]/collectAndFetchBlockResources.ts
app/lish/[did]/[publication]/[rkey]/extractBlocksByType.ts app/(app)/lish/[did]/[publication]/[rkey]/extractBlocksByType.ts
app/lish/[did]/[publication]/[rkey]/extractCodeBlocks.ts app/(app)/lish/[did]/[publication]/[rkey]/extractCodeBlocks.ts
app/lish/[did]/[publication]/[rkey]/fetchPollData.ts app/(app)/lish/[did]/[publication]/[rkey]/fetchPollData.ts
+1 -1
app/lish/[did]/[publication]/[rkey]/getPostPageData.ts app/(app)/lish/[did]/[publication]/[rkey]/getPostPageData.ts
··· 6 6 } from "src/utils/normalizeRecords"; 7 7 import { PubLeafletPublication, SiteStandardPublication } from "lexicons/api"; 8 8 import { documentUriFilter } from "src/utils/uriHelpers"; 9 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 9 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 10 10 11 11 export async function getPostPageData(did: string, rkey: string) { 12 12 let { data: documents } = await supabaseServerClient
+1 -1
app/lish/[did]/[publication]/[rkey]/getVoterIdentities.ts app/(app)/lish/[did]/[publication]/[rkey]/getVoterIdentities.ts
··· 1 1 "use server"; 2 2 3 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 3 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 4 4 5 5 export type VoterIdentity = { 6 6 did: string;
app/lish/[did]/[publication]/[rkey]/l-quote/[quote]/opengraph-image.ts app/(app)/lish/[did]/[publication]/[rkey]/l-quote/[quote]/opengraph-image.ts
-10
app/lish/[did]/[publication]/[rkey]/l-quote/[quote]/page.tsx
··· 1 - import PostPage, { 2 - generateMetadata, 3 - } from "app/lish/[did]/[publication]/[rkey]/page"; 4 - 5 - export { generateMetadata } from "app/lish/[did]/[publication]/[rkey]/page"; 6 - export default async function Post(props: { 7 - params: Promise<{ publication: string; did: string; rkey: string }>; 8 - }) { 9 - return <PostPage {...props} />; 10 - }
app/lish/[did]/[publication]/[rkey]/opengraph-image.ts app/(app)/lish/[did]/[publication]/[rkey]/opengraph-image.ts
app/lish/[did]/[publication]/[rkey]/page.tsx app/(app)/lish/[did]/[publication]/[rkey]/page.tsx
app/lish/[did]/[publication]/[rkey]/postPageState.ts app/(app)/lish/[did]/[publication]/[rkey]/postPageState.ts
app/lish/[did]/[publication]/[rkey]/quotePosition.ts app/(app)/lish/[did]/[publication]/[rkey]/quotePosition.ts
app/lish/[did]/[publication]/[rkey]/useHighlight.tsx app/(app)/lish/[did]/[publication]/[rkey]/useHighlight.tsx
app/lish/[did]/[publication]/[rkey]/voteOnPublishedPoll.ts app/(app)/lish/[did]/[publication]/[rkey]/voteOnPublishedPoll.ts
app/lish/[did]/[publication]/atom/route.ts app/(app)/lish/[did]/[publication]/atom/route.ts
+1 -1
app/lish/[did]/[publication]/dashboard/Actions.tsx app/(app)/lish/[did]/[publication]/dashboard/Actions.tsx
··· 4 4 import { ActionButton } from "components/ActionBar/ActionButton"; 5 5 import { ShareSmall } from "components/Icons/ShareSmall"; 6 6 import { Menu, MenuItem } from "components/Menu"; 7 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 7 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 8 8 import { usePublicationData } from "./PublicationSWRProvider"; 9 9 import { useSmoker } from "components/Toast"; 10 10 import { useIsMobile } from "src/hooks/isMobile";
+1 -1
app/lish/[did]/[publication]/dashboard/DraftList.tsx app/(app)/lish/[did]/[publication]/dashboard/DraftList.tsx
··· 5 5 usePublicationData, 6 6 useNormalizedPublicationRecord, 7 7 } from "./PublicationSWRProvider"; 8 - import { LeafletList } from "app/(home-pages)/(writer)/home/HomeLayout"; 8 + import { LeafletList } from "app/(app)/(home-pages)/(writer)/home/HomeLayout"; 9 9 10 10 export function DraftList(props: { 11 11 searchValue: string;
app/lish/[did]/[publication]/dashboard/DraftsTab.tsx app/(app)/lish/[did]/[publication]/dashboard/DraftsTab.tsx
app/lish/[did]/[publication]/dashboard/EditPagesNavLink.tsx app/(app)/lish/[did]/[publication]/dashboard/EditPagesNavLink.tsx
app/lish/[did]/[publication]/dashboard/NewDraftButton.tsx app/(app)/lish/[did]/[publication]/dashboard/NewDraftButton.tsx
app/lish/[did]/[publication]/dashboard/PublicationSWRProvider.tsx app/(app)/lish/[did]/[publication]/dashboard/PublicationSWRProvider.tsx
+1 -1
app/lish/[did]/[publication]/dashboard/PublicationSubscribers.tsx app/(app)/lish/[did]/[publication]/dashboard/PublicationSubscribers.tsx
··· 1 1 "use client"; 2 2 import { usePublicationData } from "./PublicationSWRProvider"; 3 3 import { ButtonPrimary } from "components/Buttons"; 4 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 4 + import { getPublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 5 5 import { useSmoker } from "components/Toast"; 6 6 import { Menu, MenuItem } from "components/Menu"; 7 7 import { Separator } from "components/Layout";
+2 -2
app/lish/[did]/[publication]/dashboard/PublishedPostsLists.tsx app/(app)/lish/[did]/[publication]/dashboard/PublishedPostsLists.tsx
··· 13 13 import { 14 14 getPublicationURL, 15 15 getDocumentURL, 16 - } from "app/lish/createPub/getPublicationURL"; 16 + } from "app/(app)/lish/createPub/getPublicationURL"; 17 17 import { SpeedyLink } from "components/SpeedyLink"; 18 18 import { InteractionPreview } from "components/InteractionsPreview"; 19 19 import { useLocalizedDate } from "src/hooks/useLocalizedDate"; 20 - import { LeafletOptions } from "app/(home-pages)/(writer)/home/LeafletList/LeafletOptions"; 20 + import { LeafletOptions } from "app/(app)/(home-pages)/(writer)/home/LeafletList/LeafletOptions"; 21 21 import { StaticLeafletDataContext } from "components/PageSWRDataProvider"; 22 22 23 23 export function PublishedPostsList(props: {
app/lish/[did]/[publication]/dashboard/analytics/ChartTooltip.tsx app/(app)/lish/[did]/[publication]/dashboard/analytics/ChartTooltip.tsx
app/lish/[did]/[publication]/dashboard/analytics/PublicationAnalytics.tsx app/(app)/lish/[did]/[publication]/dashboard/analytics/PublicationAnalytics.tsx
app/lish/[did]/[publication]/dashboard/analytics/Skeletons.tsx app/(app)/lish/[did]/[publication]/dashboard/analytics/Skeletons.tsx
app/lish/[did]/[publication]/dashboard/analytics/SubscribersChart.tsx app/(app)/lish/[did]/[publication]/dashboard/analytics/SubscribersChart.tsx
app/lish/[did]/[publication]/dashboard/analytics/TrafficChart.tsx app/(app)/lish/[did]/[publication]/dashboard/analytics/TrafficChart.tsx
app/lish/[did]/[publication]/dashboard/analytics/dates.tsx app/(app)/lish/[did]/[publication]/dashboard/analytics/dates.tsx
app/lish/[did]/[publication]/dashboard/analytics/page.tsx app/(app)/lish/[did]/[publication]/dashboard/analytics/page.tsx
app/lish/[did]/[publication]/dashboard/deleteDraft.ts app/(app)/lish/[did]/[publication]/dashboard/deleteDraft.ts
app/lish/[did]/[publication]/dashboard/deletePost.ts app/(app)/lish/[did]/[publication]/dashboard/deletePost.ts
app/lish/[did]/[publication]/dashboard/layout.tsx app/(app)/lish/[did]/[publication]/dashboard/layout.tsx
app/lish/[did]/[publication]/dashboard/page.tsx app/(app)/lish/[did]/[publication]/dashboard/page.tsx
app/lish/[did]/[publication]/dashboard/posts/page.tsx app/(app)/lish/[did]/[publication]/dashboard/posts/page.tsx
app/lish/[did]/[publication]/dashboard/settings/GeneralSettings.tsx app/(app)/lish/[did]/[publication]/dashboard/settings/GeneralSettings.tsx
app/lish/[did]/[publication]/dashboard/settings/PostSettings.tsx app/(app)/lish/[did]/[publication]/dashboard/settings/PostSettings.tsx
app/lish/[did]/[publication]/dashboard/settings/ProSettings.tsx app/(app)/lish/[did]/[publication]/dashboard/settings/ProSettings.tsx
+1 -1
app/lish/[did]/[publication]/dashboard/settings/PubDomainSettings.tsx app/(app)/lish/[did]/[publication]/dashboard/settings/PubDomainSettings.tsx
··· 16 16 usePublicationData, 17 17 useNormalizedPublicationRecord, 18 18 } from "../PublicationSWRProvider"; 19 - import { updatePublicationBasePath } from "app/lish/createPub/updatePublication"; 19 + import { updatePublicationBasePath } from "app/(app)/lish/createPub/updatePublication"; 20 20 import { 21 21 assignDomainToPublication, 22 22 removeDomainAssignment,
+1 -1
app/lish/[did]/[publication]/dashboard/settings/SettingsContent.tsx app/(app)/lish/[did]/[publication]/dashboard/settings/SettingsContent.tsx
··· 9 9 usePublicationData, 10 10 useNormalizedPublicationRecord, 11 11 } from "../PublicationSWRProvider"; 12 - import { updatePublication } from "app/lish/createPub/updatePublication"; 12 + import { updatePublication } from "app/(app)/lish/createPub/updatePublication"; 13 13 import { PubDomainSettings } from "./PubDomainSettings"; 14 14 import { GeneralSettings } from "./GeneralSettings"; 15 15 import { PostSettings } from "./PostSettings";
app/lish/[did]/[publication]/dashboard/settings/ThemeSettings.tsx app/(app)/lish/[did]/[publication]/dashboard/settings/ThemeSettings.tsx
app/lish/[did]/[publication]/dashboard/settings/deletePublication.ts app/(app)/lish/[did]/[publication]/dashboard/settings/deletePublication.ts
app/lish/[did]/[publication]/dashboard/settings/page.tsx app/(app)/lish/[did]/[publication]/dashboard/settings/page.tsx
app/lish/[did]/[publication]/dashboard/subs/page.tsx app/(app)/lish/[did]/[publication]/dashboard/subs/page.tsx
app/lish/[did]/[publication]/edit/[[...route]]/PublicationEditHeader.tsx app/(app)/lish/[did]/[publication]/edit/[[...route]]/PublicationEditHeader.tsx
app/lish/[did]/[publication]/edit/[[...route]]/PublicationPageLeaflet.tsx app/(app)/lish/[did]/[publication]/edit/[[...route]]/PublicationPageLeaflet.tsx
app/lish/[did]/[publication]/edit/[[...route]]/PublicationPagesNav.tsx app/(app)/lish/[did]/[publication]/edit/[[...route]]/PublicationPagesNav.tsx
app/lish/[did]/[publication]/edit/[[...route]]/layout.tsx app/(app)/lish/[did]/[publication]/edit/[[...route]]/layout.tsx
app/lish/[did]/[publication]/edit/[[...route]]/page.tsx app/(app)/lish/[did]/[publication]/edit/[[...route]]/page.tsx
+1 -1
app/lish/[did]/[publication]/generateFeed.ts app/(app)/lish/[did]/[publication]/generateFeed.ts
··· 11 11 hasLeafletContent, 12 12 } from "src/utils/normalizeRecords"; 13 13 import { publicationNameOrUriFilter } from "src/utils/uriHelpers"; 14 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 14 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 15 15 16 16 export async function generateFeed( 17 17 did: string,
app/lish/[did]/[publication]/icon/route.ts app/(app)/lish/[did]/[publication]/icon/route.ts
app/lish/[did]/[publication]/json/route.ts app/(app)/lish/[did]/[publication]/json/route.ts
app/lish/[did]/[publication]/layout.tsx app/(app)/lish/[did]/[publication]/layout.tsx
app/lish/[did]/[publication]/opengraph-image.ts app/(app)/lish/[did]/[publication]/opengraph-image.ts
+1 -1
app/lish/[did]/[publication]/page.tsx app/(app)/lish/[did]/[publication]/page.tsx
··· 2 2 import { 3 3 getPublicationURL, 4 4 getDocumentURL, 5 - } from "app/lish/createPub/getPublicationURL"; 5 + } from "app/(app)/lish/createPub/getPublicationURL"; 6 6 import { BskyAgent } from "@atproto/api"; 7 7 import { publicationNameOrUriFilter } from "src/utils/uriHelpers"; 8 8 import React from "react";
app/lish/[did]/[publication]/rss/route.ts app/(app)/lish/[did]/[publication]/rss/route.ts
app/lish/[did]/[publication]/sortPublicationPages.ts app/(app)/lish/[did]/[publication]/sortPublicationPages.ts
app/lish/[did]/[publication]/subscribeSuccess/page.tsx app/(app)/lish/[did]/[publication]/subscribeSuccess/page.tsx
+2 -2
app/lish/[did]/[publication]/theme-settings/PostPreview.tsx app/(app)/lish/[did]/[publication]/theme-settings/PostPreview.tsx
··· 1 1 "use client"; 2 2 3 - import { LinearDocumentPage } from "app/lish/[did]/[publication]/[rkey]/LinearDocumentPage"; 3 + import { LinearDocumentPage } from "app/(app)/lish/[did]/[publication]/[rkey]/LinearDocumentPage"; 4 4 import { LeafletContentProvider } from "contexts/LeafletContentContext"; 5 5 import { 6 6 DocumentProvider, ··· 9 9 import { useIdentityData } from "components/IdentityProvider"; 10 10 import type { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs"; 11 11 import type { PubLeafletPagesLinearDocument } from "lexicons/api"; 12 - import type { PostPageData } from "app/lish/[did]/[publication]/[rkey]/getPostPageData"; 12 + import type { PostPageData } from "app/(app)/lish/[did]/[publication]/[rkey]/getPostPageData"; 13 13 import type { DocumentContextValue } from "contexts/DocumentContext"; 14 14 import { 15 15 usePublicationData,
+1 -1
app/lish/[did]/[publication]/theme-settings/PubPreview.tsx app/(app)/lish/[did]/[publication]/theme-settings/PubPreview.tsx
··· 3 3 import { 4 4 usePublicationData, 5 5 useNormalizedPublicationRecord, 6 - } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 6 + } from "app/(app)/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 7 7 import { useIdentityData } from "components/IdentityProvider"; 8 8 import { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs"; 9 9 import { PublicationContent } from "../PublicationContent";
app/lish/[did]/[publication]/theme-settings/ThemeSettingsContent.tsx app/(app)/lish/[did]/[publication]/theme-settings/ThemeSettingsContent.tsx
app/lish/[did]/[publication]/theme-settings/page.tsx app/(app)/lish/[did]/[publication]/theme-settings/page.tsx
app/lish/[did]/[publication]/theme-settings/postPreviewFakeBlocks.ts app/(app)/lish/[did]/[publication]/theme-settings/postPreviewFakeBlocks.ts
app/lish/[did]/[publication]/tryRenderPublicationPage.tsx app/(app)/lish/[did]/[publication]/tryRenderPublicationPage.tsx
app/lish/addFeed.tsx app/(app)/lish/addFeed.tsx
app/lish/createPub/CreatePubForm.tsx app/(app)/lish/createPub/CreatePubForm.tsx
app/lish/createPub/UpdatePubForm.tsx app/(app)/lish/createPub/UpdatePubForm.tsx
app/lish/createPub/createPublication.ts app/(app)/lish/createPub/createPublication.ts
app/lish/createPub/getPublicationURL.ts app/(app)/lish/createPub/getPublicationURL.ts
app/lish/createPub/page.tsx app/(app)/lish/createPub/page.tsx
app/lish/createPub/updatePublication.ts app/(app)/lish/createPub/updatePublication.ts
app/lish/feeds/[...path]/route.ts app/(app)/lish/feeds/[...path]/route.ts
app/lish/sorry-boris/fixFeeds.ts app/(app)/lish/sorry-boris/fixFeeds.ts
app/lish/sorry-boris/fixFeedsButton.tsx app/(app)/lish/sorry-boris/fixFeedsButton.tsx
app/lish/sorry-boris/page.tsx app/(app)/lish/sorry-boris/page.tsx
app/lish/subscribeToPublication.ts app/(app)/lish/subscribeToPublication.ts
app/lish/uri/[uri]/route.ts app/(app)/lish/uri/[uri]/route.ts
app/lish/url/[url]/route.tsx app/(app)/lish/url/[url]/route.tsx
app/merge-accounts/page.tsx app/(app)/merge-accounts/page.tsx
app/new/route.ts app/(app)/new/route.ts
+1 -1
app/p/[didOrHandle]/[rkey]/l-quote/[quote]/opengraph-image.ts app/(app)/p/[didOrHandle]/[rkey]/l-quote/[quote]/opengraph-image.ts
··· 1 1 import { getMicroLinkOgImage } from "src/utils/getMicroLinkOgImage"; 2 - import { decodeQuotePosition } from "app/lish/[did]/[publication]/[rkey]/quotePosition"; 2 + import { decodeQuotePosition } from "app/(app)/lish/[did]/[publication]/[rkey]/quotePosition"; 3 3 4 4 export const runtime = "edge"; 5 5 export const revalidate = 60;
-8
app/p/[didOrHandle]/[rkey]/l-quote/[quote]/page.tsx
··· 1 - import PostPage from "app/p/[didOrHandle]/[rkey]/page"; 2 - 3 - export { generateMetadata } from "app/p/[didOrHandle]/[rkey]/page"; 4 - export default async function Post(props: { 5 - params: Promise<{ didOrHandle: string; rkey: string }>; 6 - }) { 7 - return <PostPage {...props} />; 8 - }
+1 -1
app/p/[didOrHandle]/[rkey]/opengraph-image.ts app/(app)/p/[didOrHandle]/[rkey]/opengraph-image.ts
··· 1 1 import { getMicroLinkOgImage } from "src/utils/getMicroLinkOgImage"; 2 2 import { supabaseServerClient } from "supabase/serverClient"; 3 3 import { jsonToLex } from "@atproto/lexicon"; 4 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 4 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 5 5 import { fetchAtprotoBlob } from "app/api/atproto_images/route"; 6 6 import { normalizeDocumentRecord } from "src/utils/normalizeRecords"; 7 7 import { documentUriFilter } from "src/utils/uriHelpers";
+2 -2
app/p/[didOrHandle]/[rkey]/page.tsx app/(app)/p/[didOrHandle]/[rkey]/page.tsx
··· 1 1 import { supabaseServerClient } from "supabase/serverClient"; 2 2 import { Metadata } from "next"; 3 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 4 - import { DocumentPageRenderer } from "app/lish/[did]/[publication]/[rkey]/DocumentPageRenderer"; 3 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 4 + import { DocumentPageRenderer } from "app/(app)/lish/[did]/[publication]/[rkey]/DocumentPageRenderer"; 5 5 import { NotFoundLayout } from "components/PageLayouts/NotFoundLayout"; 6 6 import { normalizeDocumentRecord } from "src/utils/normalizeRecords"; 7 7 import { documentUriFilter } from "src/utils/uriHelpers";
+14
app/page.tsx
··· 1 + import type { Metadata } from "next"; 2 + import { AboutPage } from "./about/AboutPage"; 3 + 4 + export const metadata: Metadata = { 5 + title: "Leaflet — social publishing on the Atmosphere", 6 + description: 7 + "A simple and powerful platform for social publishing — blogs, newsletters, and more!", 8 + }; 9 + 10 + export const revalidate = 3600; 11 + 12 + export default function RootPage() { 13 + return <AboutPage />; 14 + }
+2 -2
components/ActionBar/ProfileButton.tsx
··· 10 10 import { SpeedyLink } from "components/SpeedyLink"; 11 11 import { Popover } from "components/Popover"; 12 12 import { Modal } from "components/Modal"; 13 - import { InlineUpgradeToPro } from "app/lish/[did]/[publication]/UpgradeModal"; 14 - import { ManageProSubscription } from "app/lish/[did]/[publication]/dashboard/settings/ProSettings"; 13 + import { InlineUpgradeToPro } from "app/(app)/lish/[did]/[publication]/UpgradeModal"; 14 + import { ManageProSubscription } from "app/(app)/lish/[did]/[publication]/dashboard/settings/ProSettings"; 15 15 import { ManageDomains } from "components/Domains/ManageDomains"; 16 16 import { WebSmall } from "components/Icons/WebSmall"; 17 17 import { useIsPro, useCanSeePro } from "src/hooks/useEntitlement";
+2 -2
components/ActionBar/Publications.tsx
··· 3 3 4 4 import { useIdentityData } from "components/IdentityProvider"; 5 5 import { theme } from "tailwind.config"; 6 - import { getBasePublicationURL } from "app/lish/createPub/getPublicationURL"; 6 + import { getBasePublicationURL } from "app/(app)/lish/createPub/getPublicationURL"; 7 7 import { Json } from "supabase/database.types"; 8 8 import { AtUri } from "@atproto/syntax"; 9 9 import { ActionButton } from "./ActionButton"; ··· 16 16 import { LooseLeafSmall } from "components/Icons/LooseleafSmall"; 17 17 import { LoginModal } from "components/LoginButton"; 18 18 import useSWR from "swr"; 19 - import { getHomeDocs } from "app/(home-pages)/(writer)/home/storage"; 19 + import { getHomeDocs } from "app/(app)/(home-pages)/(writer)/home/storage"; 20 20 21 21 export const PublicationButtons = (props: { className?: string }) => { 22 22 let { identity } = useIdentityData();
+1 -1
components/Blocks/BlueskyPostBlock/BlueskyEmbed.tsx
··· 14 14 import { 15 15 OpenPage, 16 16 openPage, 17 - } from "app/lish/[did]/[publication]/[rkey]/PostPages"; 17 + } from "app/(app)/lish/[did]/[publication]/[rkey]/PostPages"; 18 18 import { BlueskyVideoPlayer } from "./BlueskyVideoPlayer"; 19 19 20 20 export const BlueskyEmbed = (props: {
+1 -1
components/Blocks/BlueskyPostBlock/index.tsx
··· 9 9 import { PostNotAvailable } from "./BlueskyEmbed"; 10 10 import { BlueskyPostEmpty } from "./BlueskyEmpty"; 11 11 12 - import { BskyPostContent } from "app/lish/[did]/[publication]/[rkey]/BskyPostContent"; 12 + import { BskyPostContent } from "app/(app)/lish/[did]/[publication]/[rkey]/BskyPostContent"; 13 13 import { PostView } from "@atproto/api/dist/client/types/app/bsky/feed/defs"; 14 14 15 15 export const BlueskyPostBlock = (props: BlockProps & { preview?: boolean }) => {
+2 -2
components/Blocks/PostsListBlock.tsx
··· 5 5 import { 6 6 usePublicationData, 7 7 useNormalizedPublicationRecord, 8 - } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 9 - import { PublicationPostsList } from "app/lish/[did]/[publication]/PublicationPostsList"; 8 + } from "app/(app)/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 9 + import { PublicationPostsList } from "app/(app)/lish/[did]/[publication]/PublicationPostsList"; 10 10 import { Popover } from "components/Popover"; 11 11 import { Toggle } from "components/Toggle"; 12 12 import { ToggleGroup } from "components/ToggleGroup";
+3 -3
components/Blocks/StandardSitePostBlock/StandardSitePostItem.tsx
··· 5 5 PublicationPostItemSmall, 6 6 PublicationPostItemMedium, 7 7 PublicationPostItemLarge, 8 - } from "app/lish/[did]/[publication]/PublicationPostItem"; 9 - import { LocalizedDate } from "app/lish/[did]/[publication]/LocalizedDate"; 8 + } from "app/(app)/lish/[did]/[publication]/PublicationPostItem"; 9 + import { LocalizedDate } from "app/(app)/lish/[did]/[publication]/LocalizedDate"; 10 10 import { 11 11 getDocumentURL, 12 12 getPublicationURL, 13 - } from "app/lish/createPub/getPublicationURL"; 13 + } from "app/(app)/lish/createPub/getPublicationURL"; 14 14 import { getFirstParagraph } from "src/utils/getFirstParagraph"; 15 15 import { blobRefToSrc } from "src/utils/blobRefToSrc"; 16 16 import { useStandardSitePost } from "components/StandardSitePostDataProvider";
+1 -1
components/Blocks/TextBlock/index.tsx
··· 30 30 import { getAspectRatio } from "src/utils/aspectRatio"; 31 31 32 32 import { Mention, MentionAutocomplete } from "components/Mention"; 33 - import { addMentionToEditor } from "app/[leaflet_id]/publish/BskyPostEditorProsemirror"; 33 + import { addMentionToEditor } from "app/(app)/[leaflet_id]/publish/BskyPostEditorProsemirror"; 34 34 import { v7 } from "uuid"; 35 35 import { generateKeyBetween } from "fractional-indexing"; 36 36
+1 -1
components/DesktopFooter.tsx
··· 5 5 import { FootnoteToolbar } from "./Toolbar/FootnoteToolbarWrapper"; 6 6 import { useEntitySetContext } from "./EntitySetProvider"; 7 7 import { focusBlock } from "src/utils/focusBlock"; 8 - import { hasBlockToolbar } from "app/[leaflet_id]/Footer"; 8 + import { hasBlockToolbar } from "app/(app)/[leaflet_id]/Footer"; 9 9 import { useEntity } from "src/replicache"; 10 10 11 11 export function DesktopPageFooter(props: { pageID: string }) {
+2 -2
components/Domains/PublicationDomains.tsx
··· 11 11 import { 12 12 usePublicationData, 13 13 useNormalizedPublicationRecord, 14 - } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 15 - import { updatePublicationBasePath } from "app/lish/createPub/updatePublication"; 14 + } from "app/(app)/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 15 + import { updatePublicationBasePath } from "app/(app)/lish/createPub/updatePublication"; 16 16 import { 17 17 assignDomainToPublication, 18 18 removeDomainAssignment,
+1 -1
components/LoginButton.tsx
··· 19 19 confirmEmailAuthToken, 20 20 } from "actions/emailAuth"; 21 21 import { loginWithEmailToken } from "actions/login"; 22 - import { getHomeDocs } from "app/(home-pages)/(writer)/home/storage"; 22 + import { getHomeDocs } from "app/(app)/(home-pages)/(writer)/home/storage"; 23 23 import { mutate } from "swr"; 24 24 25 25 export const LoginModal = (props: {
+2 -2
components/PageLayouts/NotificationContent.tsx
··· 1 1 "use client"; 2 2 import { useEffect, useState } from "react"; 3 3 import { DashboardPageLayout } from "./DashboardPageLayout"; 4 - import { NotificationList } from "app/(home-pages)/(writer)/notifications/NotificationList"; 5 - import { getNotifications } from "app/(home-pages)/(writer)/notifications/getNotifications"; 4 + import { NotificationList } from "app/(app)/(home-pages)/(writer)/notifications/NotificationList"; 5 + import { getNotifications } from "app/(app)/(home-pages)/(writer)/notifications/getNotifications"; 6 6 import { HydratedNotification } from "src/notifications"; 7 7 8 8 export function NotificationContent() {
+1 -1
components/PageSWRDataProvider.tsx
··· 10 10 import { 11 11 getPublicationURL, 12 12 getDocumentURL, 13 - } from "app/lish/createPub/getPublicationURL"; 13 + } from "app/(app)/lish/createPub/getPublicationURL"; 14 14 import { AtUri } from "@atproto/syntax"; 15 15 import { 16 16 normalizeDocumentRecord,
+1 -1
components/Pages/Page.tsx
··· 16 16 import { focusPage } from "src/utils/focusPage"; 17 17 import { PageOptions } from "./PageOptions"; 18 18 import { CardThemeProvider } from "components/ThemeManager/ThemeProvider"; 19 - import { useDrawerOpen } from "app/lish/[did]/[publication]/[rkey]/Interactions/InteractionDrawer"; 19 + import { useDrawerOpen } from "app/(app)/lish/[did]/[publication]/[rkey]/Interactions/InteractionDrawer"; 20 20 import { usePreserveScroll } from "src/hooks/usePreserveScroll"; 21 21 import { usePageFootnotes } from "components/Footnotes/usePageFootnotes"; 22 22 import { FootnoteContext } from "components/Footnotes/FootnoteContext";
+1 -1
components/Pages/PageShareMenu.tsx
··· 2 2 import { 3 3 ShareButton, 4 4 useReadOnlyShareLink, 5 - } from "app/[leaflet_id]/actions/ShareOptions"; 5 + } from "app/(app)/[leaflet_id]/actions/ShareOptions"; 6 6 import { useEffect, useState } from "react"; 7 7 8 8 export const PageShareMenu = (props: { entityID: string }) => {
+2 -2
components/Pages/PublicationMetadata.tsx
··· 8 8 import { 9 9 getBasePublicationURL, 10 10 getPublicationURL, 11 - } from "app/lish/createPub/getPublicationURL"; 11 + } from "app/(app)/lish/createPub/getPublicationURL"; 12 12 import { useSubscribe } from "src/replicache/useSubscribe"; 13 13 import { useEntitySetContext } from "components/EntitySetProvider"; 14 14 import { timeAgo } from "src/utils/timeAgo"; ··· 18 18 import { Popover } from "components/Popover"; 19 19 import { TagSelector } from "components/Tags"; 20 20 import { useIdentityData } from "components/IdentityProvider"; 21 - import { PostHeaderLayout } from "app/lish/[did]/[publication]/[rkey]/PostHeader/PostHeader"; 21 + import { PostHeaderLayout } from "app/(app)/lish/[did]/[publication]/[rkey]/PostHeader/PostHeader"; 22 22 import { Backdater } from "./Backdater"; 23 23 import { RecommendTinyEmpty } from "components/Icons/RecommendTiny"; 24 24 import { mergePreferences } from "src/utils/mergePreferences";
+1 -1
components/Pages/index.tsx
··· 8 8 9 9 import { useCardBorderHidden } from "./useCardBorderHidden"; 10 10 import { BookendSpacer, SandwichSpacer } from "components/LeafletLayout"; 11 - import { LeafletSidebar } from "app/[leaflet_id]/Sidebar"; 11 + import { LeafletSidebar } from "app/(app)/[leaflet_id]/Sidebar"; 12 12 import { Page } from "./Page"; 13 13 import { IframePageView } from "./IframePageView"; 14 14 import { PageOptionButton } from "./PageOptions";
+2 -2
components/PostListing.tsx
··· 9 9 NormalizedPublication, 10 10 } from "src/utils/normalizeRecords"; 11 11 import { hasLeafletContent } from "lexicons/src/normalize"; 12 - import type { Post } from "app/(home-pages)/reader/getReaderFeed"; 12 + import type { Post } from "app/(app)/(home-pages)/reader/getReaderFeed"; 13 13 14 14 import Link from "next/link"; 15 15 import { useEffect, useRef, useState } from "react"; ··· 22 22 import { useSelectedPostListing } from "src/useSelectedPostState"; 23 23 import { mergePreferences } from "src/utils/mergePreferences"; 24 24 import { ExternalLinkTiny } from "./Icons/ExternalLinkTiny"; 25 - import { getDocumentURL } from "app/lish/createPub/getPublicationURL"; 25 + import { getDocumentURL } from "app/(app)/lish/createPub/getPublicationURL"; 26 26 import { RecommendButton } from "./RecommendButton"; 27 27 import { getFirstParagraph } from "src/utils/getFirstParagraph"; 28 28
+1 -1
components/ProfilePopover.tsx
··· 3 3 import useSWR from "swr"; 4 4 import { callRPC } from "app/api/rpc/client"; 5 5 import { useRef, useState } from "react"; 6 - import { ProfileHeader } from "app/(home-pages)/p/[didOrHandle]/ProfileHeader"; 6 + import { ProfileHeader } from "app/(app)/(home-pages)/p/[didOrHandle]/ProfileHeader"; 7 7 import { SpeedyLink } from "./SpeedyLink"; 8 8 import { Tooltip } from "./Tooltip"; 9 9 import { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs";
+1 -1
components/RecommendButton.tsx
··· 7 7 import { 8 8 recommendAction, 9 9 unrecommendAction, 10 - } from "app/lish/[did]/[publication]/[rkey]/Interactions/recommendAction"; 10 + } from "app/(app)/lish/[did]/[publication]/[rkey]/Interactions/recommendAction"; 11 11 import { callRPC } from "app/api/rpc/client"; 12 12 import { useSmoker, useToaster } from "./Toast"; 13 13 import { OAuthErrorMessage, isOAuthSessionError } from "./OAuthError";
+1 -1
components/Subscribe/HandleSubscribe.tsx
··· 4 4 import Link from "next/link"; 5 5 import { useState } from "react"; 6 6 import { encodeActionToSearchParam } from "app/api/oauth/[route]/afterSignInActions"; 7 - import { subscribeToPublication } from "app/lish/subscribeToPublication"; 7 + import { subscribeToPublication } from "app/(app)/lish/subscribeToPublication"; 8 8 import { isOAuthSessionError, OAuthErrorMessage } from "components/OAuthError"; 9 9 import { useToaster } from "components/Toast"; 10 10 import { DotLoader } from "components/utils/DotLoader";
+2 -2
components/ThemeManager/PubThemeSetter.tsx
··· 1 1 import { 2 2 usePublicationData, 3 3 useNormalizedPublicationRecord, 4 - } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 4 + } from "app/(app)/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 5 5 import { useState } from "react"; 6 6 import { pickers, SectionArrow } from "./ThemeSetter"; 7 7 import { PubLeafletThemeBackgroundImage } from "lexicons/api"; ··· 9 9 import { useLocalPubTheme } from "./PublicationThemeProvider"; 10 10 import { BaseThemeProvider, CardBorderHiddenContext } from "./ThemeProvider"; 11 11 import { blobRefToSrc } from "src/utils/blobRefToSrc"; 12 - import { updatePublicationTheme } from "app/lish/createPub/updatePublication"; 12 + import { updatePublicationTheme } from "app/(app)/lish/createPub/updatePublication"; 13 13 import { PagePickers } from "./PubPickers/PubTextPickers"; 14 14 import { BackgroundPicker } from "./PubPickers/PubBackgroundPickers"; 15 15 import { PubAccentPickers } from "./PubPickers/PubAcccentPickers";
+1 -1
components/ThemeManager/PublicationThemeProvider.tsx
··· 8 8 import { 9 9 usePublicationData, 10 10 useNormalizedPublicationRecord, 11 - } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 11 + } from "app/(app)/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; 12 12 import { blobRefToSrc } from "src/utils/blobRefToSrc"; 13 13 import { PubThemeDefaults } from "./themeDefaults"; 14 14
+1 -1
contexts/DocumentContext.tsx
··· 1 1 "use client"; 2 2 import { createContext, useContext } from "react"; 3 - import type { PostPageData } from "app/lish/[did]/[publication]/[rkey]/getPostPageData"; 3 + import type { PostPageData } from "app/(app)/lish/[did]/[publication]/[rkey]/getPostPageData"; 4 4 5 5 // Derive types from PostPageData 6 6 type NonNullPostPageData = NonNullable<PostPageData>;
+19
middleware.ts
··· 47 47 if (!ua) return false; 48 48 return botUserAgentRegex.test(ua); 49 49 } 50 + function isMainSiteHost(hostname: string): boolean { 51 + return ( 52 + hostname === "leaflet.pub" || 53 + hostname.startsWith("localhost") || 54 + hostname.startsWith("127.0.0.1") || 55 + hostname.endsWith(".vercel.app") 56 + ); 57 + } 58 + 50 59 export default async function middleware(req: NextRequest) { 51 60 let hostname = req.headers.get("host")!; 52 61 if (req.nextUrl.pathname === auth_callback_route) return authCallback(req); 53 62 if (req.nextUrl.pathname === receive_auth_callback_route) 54 63 return receiveAuthCallback(req); 64 + 65 + if (req.nextUrl.pathname === "/" && isMainSiteHost(hostname)) { 66 + let hasAuth = 67 + req.cookies.has("auth_token") || req.cookies.has("external_auth_token"); 68 + if (hasAuth) { 69 + let navState = req.cookies.get("nav-state")?.value; 70 + let target = navState === "reader" ? "/reader" : "/home"; 71 + return NextResponse.redirect(new URL(target, req.url)); 72 + } 73 + } 55 74 56 75 if (hostname === "leaflet.pub") return; 57 76 if (req.nextUrl.pathname === "/not-found") return;
+1 -1
src/mergeIdentity.ts
··· 11 11 } from "drizzle/schema"; 12 12 import { pool } from "supabase/pool"; 13 13 import { Err, Ok, type Result } from "src/result"; 14 - import { backfillAtprotoSubscriptionsForIdentity } from "app/lish/subscribeToPublication"; 14 + import { backfillAtprotoSubscriptionsForIdentity } from "app/(app)/lish/subscribeToPublication"; 15 15 16 16 export type MergeError = 17 17 | "merge_not_pending"
+1 -1
src/notifications.ts
··· 3 3 import { supabaseServerClient } from "supabase/serverClient"; 4 4 import { Tables, TablesInsert } from "supabase/database.types"; 5 5 import { AtUri } from "@atproto/syntax"; 6 - import { idResolver } from "app/(home-pages)/reader/idResolver"; 6 + import { idResolver } from "app/(app)/(home-pages)/reader/idResolver"; 7 7 import { 8 8 normalizeDocumentRecord, 9 9 normalizePublicationRecord,