SDK 56 requires a newer Expo Go version not yet available on the
Play Store. Downgrade to SDK 55 which is compatible with the
currently published Expo Go app.
- expo: ~55.0.26, react-native: 0.83.6, react: 19.2.0
- All expo-* packages aligned to SDK 55
- Added metro.config.js extending expo/metro-config
- Removed newArchEnabled from app.json (not in SDK 55 schema)
- Added expo-dev-client as fallback for development builds
- expo-doctor passes 19/19 checks
- TypeScript clean, Convex functions deploy successfully
Reflects the actual tech choices made during implementation:
- Custom auth instead of @convex-dev/auth
- Inline styles instead of NativeWind
- self-deployed Convex constraints (no searchIndex, no v.union)
- Auth token pattern, role system, route structure
- Deployment commands and constraints
- Error boundary with Macedonian fallback screen and retry button
wrapping all navigation
- Pull-to-refresh on all list/detail screens (home, explore, posts,
chat, profile, ad detail, post detail)
- Accessibility: labels on all interactive elements, roles on
Pressable/Button, selectable text for user data
- Deep linking: mojmajstor:// scheme configured in app.json,
ad/[id] and chat/[id] routes work via Expo Router auto-routing
- Pagination: cursor-based paginated queries for ads, posts,
messages, chats, reviews with Load More buttons on frontend
- Profile: shows customer posts with PostCard, loading/error states,
create-post navigation
- Auth error messages in Macedonian (Невалидни акредитиви, итн.)
All UI text in Macedonian. TypeScript clean, Convex functions deployed.
- Review create mutation with auth, customer-only role check,
self-review prevention, and ad ratingAvg/reviewCount recomputation
- ReviewCard component: reviewer avatar, name, relative time in
Macedonian, star rating, comment
- Create review screen: interactive 5-star selector (Многу лошо–Отлично),
comment field, auth gate, submit and navigate back
- Ad detail: review section listing all reviews with reviewer names,
overall rating summary with count, 'Напиши оценка' button
- AdCard: rating stars shown next to title when ad has reviews
All UI text in Macedonian. TypeScript clean, Convex functions deployed.
- Chat list: auth-gated, shows all conversations for current user
with other participant's avatar/name, last message preview,
and relative time in Macedonian (пред X мин/ч/д)
- Chat conversation: FlatList with inverted scroll, message bubbles
aligned left (other) and right (self), colored backgrounds,
timestamps, KeyboardAvoidingView send bar
- Chat mutations: getOrCreate finds or creates a 1:1 chat,
send creates message and updates lastMessageAt
- Message queries: listByChat with participant auth check
- Wired ad detail 'Започни разговор' button to create/open chat
- ChatListItem component with avatar, preview, time, link to detail
All UI text in Macedonian. TypeScript clean, Convex functions deployed.
- Add create/update/remove ad mutations with auth & ownership checks
- Ad detail screen: gallery placeholder, title, description, category
badge, location, price range, availability, rating, handyman info
card, start-chat and write-review buttons for non-owners,
edit/delete for ad owner, auth redirect for anonymous
- Create ad screen: 4-step form (category → title/description →
location → price/availability/submit), handyman-only guard,
edit mode via editId param
- Profile screen: user avatar/name/role/email/phone, my-ads
section for handymen with edit/delete, new-ad button, placeholder
my-posts section for customers, proper logout mutation
All UI text in Macedonian. TypeScript clean, Convex functions deployed.
- Add seedCategories mutation (idempotent) and getBySlug query
- Add ad queries: list, getByCategory, getById, search, getByHandyman
- Home screen: search bar, CategoryGrid, recent ads list with real-time
Convex queries and search-by-keyword
- Explore screen: category filter via search param, filtered ad list,
full category grid when unfiltered
- AdCard component: title, category badge, location, rating stars,
price range, navigation to ad detail
- CategoryGrid component: 3-column emoji grid linking to filtered explore
- Add CATEGORY_EMOJI map and getCategoryName() helper in constants
All UI text in Macedonian. TypeScript clean, Convex functions deployed.