diff --git a/apps/web/package.json b/apps/web/package.json index f670558..6cbd6dc 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -30,6 +30,7 @@ "@types/validator": "^13.15.3", "@vercel/og": "^0.0.20", "canvas-confetti": "^1.9.3", + "capture-node": "^2.2.0", "chrono-node": "^2.7.6", "classnames": "^2.3.1", "easymde": "^2.18.0", diff --git a/apps/web/pages/pages/index.tsx b/apps/web/pages/pages/index.tsx index 0a3ee2c..1ba6d18 100644 --- a/apps/web/pages/pages/index.tsx +++ b/apps/web/pages/pages/index.tsx @@ -1,10 +1,10 @@ import { PageType, PageTypeToLabel } from "@changes-page/supabase/types/page"; import { PlusIcon, UserGroupIcon } from "@heroicons/react/solid"; import classNames from "classnames"; -import { InferGetServerSidePropsType } from "next"; +import type { InferGetServerSidePropsType } from "next"; import Link from "next/link"; import { useRouter } from "next/router"; -import { useEffect, type JSX } from "react"; +import { type JSX, useEffect } from "react"; import { useHotkeys } from "react-hotkeys-hook"; import { PrimaryRouterButton } from "../../components/core/buttons.component"; import { notifyError } from "../../components/core/toast.component"; @@ -13,6 +13,7 @@ import AuthLayout from "../../components/layout/auth-layout.component"; import Page from "../../components/layout/page.component"; import Changelog from "../../components/marketing/changelog"; import { ROUTES } from "../../data/routes.data"; +import { getPageScreenshotUrl } from "../../utils/capture"; import { getAppBaseURL } from "../../utils/helpers"; import { withSupabase } from "../../utils/supabase/withSupabase"; import { useUserData } from "../../utils/useUser"; @@ -33,9 +34,20 @@ export const getServerSideProps = withSupabase(async (_, { supabase }) => { ) .order("updated_at", { ascending: false }); + const screenshots = pages.map((page) => + page + ? getPageScreenshotUrl( + page.page_settings?.custom_domain + ? `https://${page.page_settings.custom_domain}` + : `https://${page.url_slug}.changes.page` + ) + : null + ); + return { props: { pages: pages ?? [], + screenshots, error, }, }; @@ -43,6 +55,7 @@ export const getServerSideProps = withSupabase(async (_, { supabase }) => { export default function Pages({ pages, + screenshots, error, }: InferGetServerSidePropsType) { const { billingDetails, user } = useUserData(); @@ -80,7 +93,7 @@ export default function Pages({ message="Get started by creating your first page." buttonLink={ billingDetails?.has_active_subscription - ? `/pages/new` + ? "/pages/new" : `/api/billing/redirect-to-checkout?return_url=${getAppBaseURL()}/pages` } buttonLabel={ @@ -107,69 +120,81 @@ export default function Pages({ {pages.length ? (