diff --git a/src/App.tsx b/src/App.tsx
index 04d7980..faf600d 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -10,12 +10,10 @@ import { ToastContainer } from './components/notifications/Toast'
import { Settings } from './components/Settings'
import { initDeepLinks } from './lib/deeplinks'
-// Static imports for frequently used routes
-import { Home } from './pages/Home'
-import { Login } from './pages/Login'
-import { Landing } from './pages/Landing'
-
// Lazy-loaded routes for better code splitting
+const Home = lazy(() => import('./pages/Home').then(m => ({ default: m.Home })))
+const Login = lazy(() => import('./pages/Login').then(m => ({ default: m.Login })))
+const Landing = lazy(() => import('./pages/Landing').then(m => ({ default: m.Landing })))
const ListView = lazy(() => import('./pages/ListView').then(m => ({ default: m.ListView })))
const JoinList = lazy(() => import('./pages/JoinList').then(m => ({ default: m.JoinList })))
const PublicList = lazy(() => import('./pages/PublicList').then(m => ({ default: m.PublicList })))
diff --git a/src/components/Attachments.tsx b/src/components/Attachments.tsx
index 5d1410e..c1937b9 100644
--- a/src/components/Attachments.tsx
+++ b/src/components/Attachments.tsx
@@ -169,6 +169,7 @@ export function Attachments({ itemId, userDid, legacyDid, canEdit }: Attachments
{
// If image fails to load, show file icon
diff --git a/src/components/ListCard.tsx b/src/components/ListCard.tsx
index 1a7aafd..da4164c 100644
--- a/src/components/ListCard.tsx
+++ b/src/components/ListCard.tsx
@@ -5,6 +5,7 @@
* Features dark mode support and card hover effects.
*/
+import { memo } from "react";
import { Link } from "react-router-dom";
import type { Doc } from "../../convex/_generated/dataModel";
import { useSettings } from "../hooks/useSettings";
@@ -42,7 +43,7 @@ function formatRelativeTime(timestamp: number): string {
return new Date(timestamp).toLocaleDateString();
}
-export function ListCard({ list, currentUserDid, showOwner }: ListCardProps) {
+export const ListCard = memo(function ListCard({ list, currentUserDid, showOwner }: ListCardProps) {
const { haptic } = useSettings();
const isOwner = list.ownerDid === currentUserDid;
const emoji = getListEmoji(list.name);
@@ -125,4 +126,4 @@ export function ListCard({ list, currentUserDid, showOwner }: ListCardProps) {
);
-}
+});
diff --git a/src/components/ListItem.tsx b/src/components/ListItem.tsx
index 94e5864..d426c89 100644
--- a/src/components/ListItem.tsx
+++ b/src/components/ListItem.tsx
@@ -6,7 +6,7 @@
* Supports notes, due dates, URLs, and recurrence.
*/
-import { useState, useRef, lazy, Suspense } from "react";
+import { useState, useRef, lazy, Suspense, memo } from "react";
import { useMutation } from "convex/react";
import { api } from "../../convex/_generated/api";
import type { Id } from "../../convex/_generated/dataModel";
@@ -40,7 +40,7 @@ interface ListItemProps {
onLongPress?: () => void;
}
-export function ListItem({
+export const ListItem = memo(function ListItem({
item,
userDid,
legacyDid,
@@ -200,42 +200,48 @@ export function ListItem({
{/* Selection checkbox - show in select mode */}
{isSelectMode && canUserEdit && (