Replace the heavy `google-libphonenumber` dependency with a custom,
ultra-lightweight (~3KB) mapping of country calling codes to reduce
bundle size.
- Remove `google-libphonenumber` and `react-icons` from dependencies
- Add `src/data/country-calling-codes.ts` for efficient lookup
- Update `src/lib/geo-region.ts` to use the new lookup utility
- Add font preloading for Faminela and YekanX in `src/app/layout.tsx` to
improve perceived performance
- Improve cookie parsing robustness in `auth-bridge` and add tests for
URI-encoded Persian text support
- Add new test suite for marriage cookie encoding/decoding strategies
- Update `next.config.ts` to use `stale-while-revalidate` for application HTML shells to improve WebView rendering speed.
- Implement immutable caching for static assets in `/assets/fonts/`.
- Add `.woff2` versions of various fonts to `public/assets/fonts/` and `public/fonts/` to improve performance and reduce payload size.
- Update `globals.css` to prioritize `.woff2` font formats.
- Increase `staleTime` from 30s to 3m for various marriage-related queries in `use-form-schema.ts` and client components to reduce redundant network requests.
- Refactor `QuestionSheet` to use CSS-based `min-h-[52px]` instead of dynamic inline style calculations for option buttons, improving layout stability and simplifying the component.
- Improve loading state handling in `QuestionDetailClient` by incorporating `isPending` from TanStack Query.
- Update test assertions in `question-sheet.test.tsx` to reflect the shift from inline styles to Tailwind CSS classes.
Refactor the `TermsSheet` component to achieve better parity with Flutter's
`DraggableScrollableSheet`. This includes implementing a snapping mechanism
between two resting states (0.75 and 1.0) and updating the CSS to handle
safe area insets and dynamic height calculations.
- Add `.flutter-draggable-sheet` class to `globals.css` for height scaling
against available screen space below the status bar.
- Implement `snapTo` logic in `TermsSheet` to handle transitions between
initial and expanded states.
- Add `restingStateRef` to track the current snapped position.
- Update `TermsSheet` touch event handlers to support snapping based on
drag distance and current size.
- Add unit tests to verify snapping behavior for pulling up, pulling down,
and reaching the minimum size threshold.
Update client-side redirection logic across multiple routes to ensure
routing decisions are only made after the profile data has been
successfully fetched from the server. This prevents premature or
incorrect redirects based on stale or incomplete hydrated data.
- Add `isFetched` check to `useEffect` guards in candidate-contact,
finding-match, new-match, request-accepted, and request-sent clients
- Update `QuestionsListClient` to wait for `isProfileFetched` before
triggering redirects
- Clean up dependency arrays to include new fetch status variables
Implement server-side extraction of marriage profile data from cookies
to seed the React Query cache during initial application load. This
reduces client-side loading states by providing immediate access to
profile information.
- Extract and parse marriage data in `RootLayout`
- Pass initial profile data to `Providers` component
- Seed `QueryClient` with `initialProfile` using `setQueryData`
- Update `getInitialMarriageProfile` to support data overrides
- Refine loading conditional in `NewMatchClient` to prevent flickering
when summary data is already present
Update client components to signal readiness to the Flutter wrapper
immediately upon mounting, rather than waiting for data hydration.
Additionally, adjust profile query settings to prioritize fresh
server-side data.
- Force `useHabibWebReady(true)` in all client-side route components
- Set `staleTime` to 0 in `useMarriageProfileQuery` to ensure fresh
data on mount
- Simplify `queryClient.setQueryData` logic in profile hook