diff --git a/.gitignore b/.gitignore index 61c71a86..3f599ede 100644 --- a/.gitignore +++ b/.gitignore @@ -134,3 +134,5 @@ dist .env.* backups/ + +.DS_Store diff --git a/packages/apps/src/index.ts b/packages/apps/src/index.ts index 9f6143e0..9a85494a 100644 --- a/packages/apps/src/index.ts +++ b/packages/apps/src/index.ts @@ -8,6 +8,13 @@ export type AppManifest = { size?: number; devOriginOverride: string; demoVideoSrc: string; + paidDescription: string; + paidFeatures: PaidFeature[]; +}; + +export type PaidFeature = { + imageUrl: string; + description: string; }; export const apps = [ @@ -21,6 +28,15 @@ export const apps = [ size: 4, devOriginOverride: 'http://localhost:6220', demoVideoSrc: '/videos/gnocchi.mp4', + paidFeatures: [ + { + imageUrl: '/images/gnocchi/scanner.png', + description: + 'Scan web recipes to create a personal copy. Add notes, make changes, and collaborate on cooking with other plan members.', + }, + ], + paidDescription: + 'Your personal cooking app becomes a family groceries list and recipe box.', } satisfies AppManifest<'gnocchi'>, { id: 'trip-tick', @@ -31,6 +47,15 @@ export const apps = [ size: 2, devOriginOverride: 'http://localhost:6221', demoVideoSrc: '/videos/trip-tick.mp4', + paidFeatures: [ + { + imageUrl: '/images/trip-tick/weather.png', + description: + 'Get weather forecasts for your destination and the duration of your trip.', + }, + ], + paidDescription: + 'Now everyone can be on the same page when packing. Plus, get a weather forecast and more powerful trip planning tools.', } satisfies AppManifest<'trip-tick'>, ] as const; diff --git a/packages/client/src/components/UserMenu.tsx b/packages/client/src/components/UserMenu.tsx index aea4024d..bcd64bd2 100644 --- a/packages/client/src/components/UserMenu.tsx +++ b/packages/client/src/components/UserMenu.tsx @@ -46,15 +46,19 @@ export function UserMenu({ return ( - + + ) : ( + + )} {isOffline && ( diff --git a/web/index.html b/web/index.html index 232a4514..6626bfd6 100644 --- a/web/index.html +++ b/web/index.html @@ -6,29 +6,29 @@ content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover" /> Biscuits - + - - - - - + + + + + - + - + diff --git a/web/public/images/gnocchi/scanner.png b/web/public/images/gnocchi/scanner.png new file mode 100644 index 00000000..586d5bb2 Binary files /dev/null and b/web/public/images/gnocchi/scanner.png differ diff --git a/web/public/images/trip-tick/weather.png b/web/public/images/trip-tick/weather.png new file mode 100644 index 00000000..383c20c6 Binary files /dev/null and b/web/public/images/trip-tick/weather.png differ diff --git a/web/public/og-image.png b/web/public/og-image.png new file mode 100644 index 00000000..16a0961d Binary files /dev/null and b/web/public/og-image.png differ diff --git a/web/src/pages/HomePage.tsx b/web/src/pages/HomePage.tsx index fdb369da..aabc5ccb 100644 --- a/web/src/pages/HomePage.tsx +++ b/web/src/pages/HomePage.tsx @@ -1,4 +1,3 @@ -import { AppsGrid } from '@/components/AppsGrid.jsx'; import { UserMenu } from '@/components/auth/UserMenu.js'; import { Footer } from '@/components/help/Footer.jsx'; import { AppDemo } from '@/components/promo/AppDemo.jsx'; @@ -30,7 +29,7 @@ export default function HomePage() {

@@ -40,15 +39,19 @@ export default function HomePage() { -
+

Scratch-made apps

-

+

in Raleigh, NC

diff --git a/web/src/pages/JoinPage.tsx b/web/src/pages/JoinPage.tsx index ebe60ab8..082a4ab6 100644 --- a/web/src/pages/JoinPage.tsx +++ b/web/src/pages/JoinPage.tsx @@ -6,9 +6,10 @@ import { PageContent, PageFixedArea, PageRoot, - PageSection, PageSectionGrid, } from '@a-type/ui/components/layouts'; +import { Divider } from '@a-type/ui/components/divider'; +import { PaidFeature, apps, getAppUrl } from '@biscuits/apps'; import { graphql, useQuery } from '@biscuits/client'; import { Link } from '@verdant-web/react-router'; import classNames from 'classnames'; @@ -26,9 +27,9 @@ const startingPriceQuery = graphql(` export function JoinPage({}: JoinPageProps) { return ( - + -

+

Join Biscuits to unlock features and collaboration in every app

@@ -37,7 +38,7 @@ export function JoinPage({}: JoinPageProps) { across devices, use fancy new features, and even share with family and friends. Plans start at .

- + - -

Gnocchi

-

- Your personal cooking app becomes a family groceries list and - recipe box. -

- -
TODO: screenshots
-
-
- -

Trip Tick

-

- Now everyone can be on the same page when packing. Plus, get a - weather forecast and more powerful trip planning tools. -

-
+ {apps.map((app) => ( +
+
+ {app.name} +

{app.name}

+
+

{app.paidDescription}

+ + {app.paidFeatures.map((feature, index) => ( + + ))} + + +
+ ))}