AI Handoff: Figma Layout Sync
Context
This app is an Expo / React Native / TypeScript app for Golden Lotus Spa. The user asked to make the UI match the Figma design as closely as possible, using Figma as the source of truth and setting up Tailwind/NativeWind foundations.
Figma source of truth:
- File URL:
https://www.figma.com/design/ZllZIMyuuJY8rRniXtk5lW/Spa?node-id=0-1 - File key:
ZllZIMyuuJY8rRniXtk5lW - Root node:
0:1 - Figma auth: use
FIGMA_TOKENfrom local.env. Do not commit.env.
Do not use older local Figma exports or v2 screenshots as design sources. The stale local Figma cache folders/files were removed to avoid mixing this file with older extracted data.
Regenerate any local screenshots or node JSON directly from the Figma source of truth above
before doing a pixel pass. Do not reuse old _figma_extracted, _figma_screens, v2_*,
or /tmp/figma-* outputs unless they were freshly generated from ZllZIMyuuJY8rRniXtk5lW.
Figma Frame Map
Main frames mapped to routes:
72:157Home ->app/(tabs)/home.tsx104:735My Voucher ->app/(tabs)/voucher.tsx242:1357Rank / Membership ->app/(tabs)/rank.tsx180:1171GPoint ->app/(tabs)/point.tsx213:766User ->app/(tabs)/account.tsx349:1767Dat lich form ->app/booking/location.tsx365:4354Dat lich history ->app/schedule.tsx198:1005Noti ->app/notifications.tsx242:946Ma QR ->app/offers/qr.tsx958:7079HCM branch landing ->app/services/index.tsx885:2498Event detail ->app/offers/[id].tsx
Other useful Figma frames seen in the file:
92:227Voucher landing914:5146Heal914:5190Healthy & Beauty918:5837Event227:1050Edit information227:1297Security- Several scan/PIN/login frames around
232:*,956:*,958:*,976:*
Design Tokens Observed
Dominant Figma values:
- Width: mobile frames are
440px - Main content width: mostly
400px, centered, equivalent to20pxside margins - Backgrounds:
- Cream:
#FEF9F1 - Home gray:
#F6F6F6 - Surface/card:
#FFFEFC - Voucher gray:
#F1F1F1
- Cream:
- Gold:
#EAA31F - Gold soft:
#F7DBA8 - Dark brown header: approximately
#5A3600 - Text:
- Primary:
#212121 - Secondary:
#555555 - Tertiary:
#828282
- Primary:
- Success:
#4CAE4F - Error/red:
#F44034 - Cyan/accent:
#00C0E8 - Radius:
- Cards mostly
10px - Inputs/buttons often
3px - Some chips
5px
- Cards mostly
- Spacing:
- Common vertical gaps:
15px,20px,25px
- Common vertical gaps:
Fonts from Figma metadata:
- Mostly
Interweights400and700 - Sizes seen most often:
10,11,12,14,16,18,20,22,24,26,32 - Some labels use
Inria Serif:MEMBERGOLD- Account rank
Member
- A few tiny tab/system labels show
SF Pro 11; app currently uses Inter for these unless native system text is used.
What Was Changed
Tailwind/NativeWind setup:
- Added
nativewind,tailwindcss,prettier-plugin-tailwindcss,babel-preset-expo - Added
@expo-google-fonts/inria-serif - Added:
tailwind.config.jsglobal.cssbabel.config.jsmetro.config.jsnativewind-env.d.ts
- Updated
app/_layout.tsxto importglobal.cssand load:- Montserrat
- Inter
- Inria Serif
- Updated
app.jsonweb bundler tometro - Updated
tsconfig.jsoninclude fornativewind-env.d.ts - Added
.envto.gitignore
Token files updated:
constants/Colors.tsconstants/Layout.tsconstants/Typography.ts
Main layout refactors completed:
app/(tabs)/home.tsx: rebuilt around Figma Home72:157app/(tabs)/voucher.tsx: rebuilt around My Voucher104:735app/(tabs)/rank.tsx: rebuilt around Membership242:1357app/(tabs)/point.tsx: rebuilt around GPoint180:1171app/(tabs)/account.tsx: rebuilt around User213:766app/(tabs)/_layout.tsx: tab bar adjusted to Figma-like Inter/gold/center point buttonapp/booking/location.tsx: rebuilt around booking form349:1767app/schedule.tsx: rebuilt around booking history365:4354app/notifications.tsx: rebuilt around Noti198:1005app/offers/qr.tsx: rebuilt around Ma QR242:946app/services/index.tsx: rebuilt around HCM branch landing958:7079app/offers/[id].tsx: rebuilt around Event detail885:2498
Lint cleanup:
- Fixed old
react/no-unescaped-entitiesissues - Removed unused imports from several legacy files
- Fixed splash hook dependency warning
Validation Already Run
All passed:
npx tsc --noEmit
npm run lint
npx expo export --platform web
Notes:
npm run lintis clean with zero warnings after cleanup.expo export --platform webexports successfully todist.npx expo start --web --port 8082 --host localhosthit system file watcher limit on this machine:ENOSPC: System limit for number of file watchers reached
- As a workaround, the static export can be served:
python3 -m http.server 8083 --directory dist
It was verified with:
curl -I http://localhost:8083
Remaining Tasks
Pixel/design pass 2:
- Open the exported app route-by-route and compare against Figma PNGs.
- Adjust exact vertical offsets, shadows, image crops, and placeholder art.
- Replace Unsplash placeholders and drawn QR/barcode placeholders with real Figma-exported assets if needed.
Routes still worth deeper Figma matching:
app/services/[id].tsxapp/booking/time.tsxapp/booking/info.tsxapp/booking/cart.tsxapp/offers/index.tsxapp/offers/redeem.tsxapp/profile/index.tsxapp/profile/invite.tsxapp/profile/privacy.tsxapp/profile/settings.tsx- auth/PIN/login flows if required by the product scope
Dependency note:
- Expo CLI says these patch versions are expected for best SDK 54 compatibility:
expo@~54.0.34expo-linking@~8.0.12expo-web-browser@~15.0.11
- They were not upgraded in this pass.
Security note:
- The Figma token was placed in local
.envat the user's request and.envis ignored. Do not commit or paste the token. - The token was exposed in chat during the session, so it should be rotated after the work is done.