From 5a8b0c31af9d3e69fe71ef39af59d555a1eed93c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Mar 2026 04:31:17 +0000 Subject: [PATCH 1/4] Initial plan From 4c2d15c51493a5ac5445c8995fa77a112e155673 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Mar 2026 04:42:08 +0000 Subject: [PATCH 2/4] feat: marketing improvements - hero rewrite, feature messaging, free messaging, guides integration Co-authored-by: andrew-bierman <94939237+andrew-bierman@users.noreply.github.com> --- apps/guides/app/guide/[slug]/page.tsx | 20 ++++++ apps/guides/app/page.tsx | 19 +++--- apps/guides/components/header.tsx | 8 +++ apps/guides/lib/config.ts | 11 +++- apps/landing/app/about/page.tsx | 39 ++++++++---- .../components/sections/landing-hero.tsx | 10 +++ apps/landing/config/site.ts | 63 ++++++++++--------- 7 files changed, 119 insertions(+), 51 deletions(-) diff --git a/apps/guides/app/guide/[slug]/page.tsx b/apps/guides/app/guide/[slug]/page.tsx index 4f5b0890eb..53e651d13c 100644 --- a/apps/guides/app/guide/[slug]/page.tsx +++ b/apps/guides/app/guide/[slug]/page.tsx @@ -111,6 +111,26 @@ export default async function GuidePage({ params }: { params: Promise<{ slug: st + {/* Download CTA */} +
+

Ready to put this into practice?

+

+ PackRat builds your personalised packing list based on your trip, the weather, and + your gear — completely free. +

+
+ + +
+
+ {relatedPosts.length > 0 && (

Related Guides

diff --git a/apps/guides/app/page.tsx b/apps/guides/app/page.tsx index b4df3053f3..b7e40fe701 100644 --- a/apps/guides/app/page.tsx +++ b/apps/guides/app/page.tsx @@ -57,13 +57,18 @@ function HomeContent() {

Expert advice for your next outdoor adventure

- +
+ + +
diff --git a/apps/guides/components/header.tsx b/apps/guides/components/header.tsx index 61091f29d3..68ef4ae2cf 100644 --- a/apps/guides/components/header.tsx +++ b/apps/guides/components/header.tsx @@ -101,6 +101,14 @@ export default function Header() { + {/* Download CTA - desktop */} + + Download Free + + {/* Mobile menu - Apple style */} diff --git a/apps/guides/lib/config.ts b/apps/guides/lib/config.ts index 7f5ece058e..2509202822 100644 --- a/apps/guides/lib/config.ts +++ b/apps/guides/lib/config.ts @@ -33,6 +33,10 @@ export const navigationConfig = { title: 'Safety', href: '/?category=safety', }, + { + title: '← packratai.com', + href: 'https://packratai.com', + }, ], // Maximum number of categories to show in header maxCategories: 4, @@ -81,9 +85,10 @@ export const footerConfig = { { title: 'Company', links: [ - { title: 'About Us', href: '#' }, - { title: 'Contact', href: '#' }, - { title: 'Privacy Policy', href: '#' }, + { title: 'About Us', href: 'https://packratai.com/about' }, + { title: 'Download App', href: 'https://packratai.com/#download' }, + { title: 'Contact', href: 'mailto:hello@packratai.com' }, + { title: 'Privacy Policy', href: 'https://packratai.com/privacy-policy' }, { title: 'Terms of Service', href: '#' }, ], }, diff --git a/apps/landing/app/about/page.tsx b/apps/landing/app/about/page.tsx index 766c753f3e..af3e7cd379 100644 --- a/apps/landing/app/about/page.tsx +++ b/apps/landing/app/about/page.tsx @@ -40,22 +40,39 @@ export default function AboutPage() {

About PackRat

We're a team of outdoor enthusiasts on a mission to make every adventure safer, - more organized, and more enjoyable. + more organised, and more enjoyable — completely free.

- {/* Mission */} + {/* Origin Story */}
-

Our Mission

+

Where It Started

+

+ PackRat was born out of a familiar frustration: standing at the trailhead realising + you've forgotten your rain jacket, your headlamp, or (worse) your water filter. + After one too many trips cut short or made miserable by missing gear, our founder set + out to build the app they always wished existed. +

+

+ The vision was simple — an intelligent packing assistant that knows your trip, the + forecast, and your gear, and builds a personalised list so you carry exactly what you + need and nothing you don't. No more overpacking. No more forgetting essentials. +

- PackRat was born out of a simple frustration: forgetting essential gear on a camping - trip. We built the app we always wished we had — one that intelligently helps you plan, - pack, and navigate your outdoor adventures with confidence. + What started as a side project quickly grew into something the outdoor community truly + needed. Today, PackRat is used by thousands of hikers, backpackers, trail runners, and + weekend campers across the globe — and it's completely free.

+
+ + {/* Mission */} +
+

Our Mission

- Today, PackRat is used by thousands of hikers, backpackers, trail runners, and weekend - campers across the globe. Whether you're heading out for an afternoon day hike or a - week-long backcountry expedition, PackRat has you covered. + Our mission is straightforward: help more people get outside with confidence. Whether + you're heading out for an afternoon day hike or a week-long backcountry expedition, + PackRat has you covered. We believe the barrier to outdoor adventure should be as low as + possible — which is why PackRat is, and always will be, free to use.

@@ -91,7 +108,7 @@ export default function AboutPage() { to hear from you.

- Send your resume and a note about your favorite trail to{' '} + Send your resume and a note about your favourite trail to{' '} Ready to hit the trails?

+ {siteConfig.hero.socialProof && ( + + + {siteConfig.hero.socialProof} + + )} +
@@ -108,7 +108,7 @@ export default function AboutPage() { to hear from you.

- Send your resume and a note about your favourite trail to{' '} + Send your resume and a note about your favorite trail to{' '} Date: Tue, 10 Mar 2026 17:10:18 +0000 Subject: [PATCH 4/4] fix: resolve merge conflict with main, fix ToS link, fix American spelling in guide CTA Co-authored-by: andrew-bierman <94939237+andrew-bierman@users.noreply.github.com> --- apps/expo/components/CategoriesFilter.tsx | 2 +- .../catalog/screens/CatalogItemsScreen.tsx | 45 ++++++++++--------- apps/guides/app/guide/[slug]/page.tsx | 2 +- apps/guides/lib/config.ts | 2 +- apps/landing/config/site.ts | 2 +- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/apps/expo/components/CategoriesFilter.tsx b/apps/expo/components/CategoriesFilter.tsx index 583d0e191c..a1cdb90203 100644 --- a/apps/expo/components/CategoriesFilter.tsx +++ b/apps/expo/components/CategoriesFilter.tsx @@ -62,7 +62,7 @@ export function CategoriesFilter({ )) : data.map(renderFilterChip)} diff --git a/apps/expo/features/catalog/screens/CatalogItemsScreen.tsx b/apps/expo/features/catalog/screens/CatalogItemsScreen.tsx index b9e937fc40..b3796cd5e3 100644 --- a/apps/expo/features/catalog/screens/CatalogItemsScreen.tsx +++ b/apps/expo/features/catalog/screens/CatalogItemsScreen.tsx @@ -33,7 +33,9 @@ function CatalogItemsScreen() { const [activeFilter, setActiveFilter] = useState<'All' | string>('All'); const [debouncedSearchValue] = useDebounce(searchValue, 400); - const isSearching = debouncedSearchValue.length > 0; + const isSearching = searchValue.trim().length > 0; + const trimmedQuery = debouncedSearchValue.trim(); + const isQueryReady = trimmedQuery.length > 0; const { data: categories, @@ -59,10 +61,9 @@ function CatalogItemsScreen() { const { data: vectorResult, isLoading: isVectorLoading, - isFetching: _isVectorFetching, error: vectorError, - } = useVectorSearch({ query: debouncedSearchValue, limit: 10 }); - const searchResults = vectorResult?.items; + } = useVectorSearch({ query: trimmedQuery, limit: 10 }); + const searchResults: CatalogItem[] = vectorResult?.items ?? []; const paginatedItems: CatalogItem[] = ( paginatedData?.pages.flatMap((page) => page.items) ?? [] @@ -102,7 +103,7 @@ function CatalogItemsScreen() { content: ( {isSearching ? ( - isVectorLoading ? ( + isVectorLoading || !isQueryReady ? ( @@ -161,14 +162,16 @@ function CatalogItemsScreen() { }} /> - + {!isSearching && ( + + )} } ListHeaderComponent={ - - - {totalItemsText} + !isSearching ? ( + + + {totalItemsText} + + {paginatedItems.length > 0 && ( + {showingText} + )} - {paginatedItems.length > 0 && ( - {showingText} - )} - + ) : null } ListEmptyComponent={ diff --git a/apps/guides/app/guide/[slug]/page.tsx b/apps/guides/app/guide/[slug]/page.tsx index 53e651d13c..d1e7708037 100644 --- a/apps/guides/app/guide/[slug]/page.tsx +++ b/apps/guides/app/guide/[slug]/page.tsx @@ -115,7 +115,7 @@ export default async function GuidePage({ params }: { params: Promise<{ slug: st

Ready to put this into practice?

- PackRat builds your personalised packing list based on your trip, the weather, and + PackRat builds your personalized packing list based on your trip, the weather, and your gear — completely free.

diff --git a/apps/guides/lib/config.ts b/apps/guides/lib/config.ts index 2509202822..1aea15498c 100644 --- a/apps/guides/lib/config.ts +++ b/apps/guides/lib/config.ts @@ -89,7 +89,7 @@ export const footerConfig = { { title: 'Download App', href: 'https://packratai.com/#download' }, { title: 'Contact', href: 'mailto:hello@packratai.com' }, { title: 'Privacy Policy', href: 'https://packratai.com/privacy-policy' }, - { title: 'Terms of Service', href: '#' }, + { title: 'Terms of Service', href: 'https://packratai.com/terms-of-service' }, ], }, ], diff --git a/apps/landing/config/site.ts b/apps/landing/config/site.ts index 78abe60191..1c610d50de 100644 --- a/apps/landing/config/site.ts +++ b/apps/landing/config/site.ts @@ -325,7 +325,7 @@ export const siteConfig = { title: 'Ready for your next adventure?', subtitle: 'Download PackRat free today and start planning your outdoor journeys with confidence.', - appStoreLink: 'https://apps.apple.com/ru/app/packrat-ai/id6499243187?l=en-GB', + appStoreLink: 'https://apps.apple.com/us/app/packrat-ai/id6499243187', googlePlayLink: 'https://play.google.com/store/apps/details?id=com.packratai.mobile&pli=1', image: '/download-now-ios-image.png', features: [