Day 1:
I’ve committed to building & launching 50+ SaaS, Apps & Products over the next few years.
Today I’m starting with the foundation -> creating my Full stack Boilerplate that I’ll use for every project.
My Boilerplate Includes:
Paused everything today to think.
It’s not just about designing, coding, testing, or deploying…
It’s about getting the product out there.
Now shifting focus → launch, marketing, and sales 🚀
What do you suggest me to do?
Now three products at hand->
Saaskit -> https://t.co/1unwrhCwsk
DMConsole -> https://t.co/bUeYZwz6zR (Not Launched yet due to Meta App verifying remaining)
TrsutFlavour -> Deployment Remaining (Built With my own SAASKit)
#SAAS #buildinpublic #product
Day 105: Diving deep into manual testing for TrustFlavor — slow and steady wins the race!
With the full testing environment seeded yesterday (multiple roles, realistic data across restaurants/dishes/reviews/claims/etc.), today was all about hands-on manual testing before any hosting/deployment push.
Today's highlights:
✓ Started comprehensive manual testing flow:
-End-to-end user journeys: sign-up → email verification → login → profile → discover → add favorite → leave review → owner reply
-Role-specific testing: Admin (claim approvals, moderation, config changes), Owner (claim restaurant, manage menu/photos/reviews), Regular User (search, filters, nearby, reports), Unverified (limited access)
- Edge cases: reported/flagged reviews, pending claims, expired notifications, auth state switches (login/logout/header updates)
-Cross-device checks: desktop responsive, mobile menu/header, map interactions
✓ Bug hunt & quick fixes:
- Caught & fixed minor UI glitches in review cards on mobile
- Verified seed data integrity (no duplicate slugs, correct relations)
- Tested ownership transfer on claim approval — works smoothly!
- Checked amenity toggles & cuisine filters in discover + admin add forms
This phase is intentionally slow — thorough manual testing catches things automated tests might miss, especially around UX flows, permissions, and real-world data interactions. Hosting comes after confidence in stability!
#buildinpublic #100DaysOfCode #saas #nextjs #typescript #restauranttech #TrustFlavor #manualtesting
Day 104: Comprehensive seed data & auth-aware header — full testing environment ready! 🌱🔐
Today's highlights:
✓ Comprehensive Database Seeding for testing before deployment:
- 11 user accounts covering all roles: Admin, Owner (3), User, Viewer, Unverified, Reviewers (5)
- 15 restaurants: 12 active, 2 pending admin review, 1 closed
- 45 dishes across all restaurants with vegetarian, vegan, spicy, and popular tags
- 50 reviews with ratings 1-5, owner replies, and reported/flagged reviews
- 30 helpful votes on reviews
- Restaurant & dish favorites across multiple users
- 4 claim requests: 2 pending, 1 approved, 1 rejected
- 6 contact messages (read/unread mix)
- Notifications for all user types (system, success, warning, error, info)
- Audit logs for key actions (login, create, approve, reject)
- 2 organizations (Free + Pro plan) with members in all org roles
- Notification preferences for every user
- Amenities data on all restaurants (wifi, parking, delivery, etc.)
✓ Auth-Aware Header Fix:
- Header component was hardcoding "Log in" & "Get Started" regardless of auth state
- Integrated Zustand auth store into Header.tsx
- Logged-in users now see "Dashboard" (or "Admin Panel") + "Logout"
- Logged-out users see "Log in" + "Get Started"
- Works for both desktop and mobile menu
- Auto-fetches user on mount if token exists but user not loaded
✓ Schema Sync:
- Pushed amenities column to database via prisma db push
- All seed data runs cleanly with upsert for idempotent re-seeding
Tech: Prisma, PostgreSQL, Zustand, Next.js 14, TypeScript, Tailwind CSS, bcryptjs
#buildinpublic #100DaysOfCode #saas #nextjs #typescript #restauranttech
Day 102: Admin can now add restaurants with interactive maps — MapLibre + MapTiler integrated across admin & frontend! 🗺️📍
Today's highlights:
✓ Added Admin Create Restaurant functionality:
- New POST /admin/trustflavor/restaurants API route
- Full Zod validation on all restaurant fields
- Auto slug generation with uniqueness guarantee
- "Add Restaurant" button on admin restaurant list page
✓ Built Admin Add Restaurant Page (/trustflavor/restaurants/add):
- Complete form: name, description, cover image, address, city, area
- Cuisine multi-select with 17 cuisine type chips
- Price range selector: Budget/Moderate/Premium/Luxury
- Amenity toggles: WiFi, Parking, Delivery, AC, Bar, etc.
- Contact fields: phone, email, website
- Interactive MapLibre map for location selection
- Click-to-place or drag marker to set coordinates
- Live latitude/longitude display below map
✓ Added Map to Frontend Add Restaurant Page (/add-restaurant):
- MapLibre + MapTiler street map with draggable marker
- Click anywhere on map to reposition marker
- Coordinates auto-populated in form submission
- Centered on Kathmandu (27.7172, 85.324) by default
✓ Added Map View to Frontend Discover Page (/discover):
- Grid/Map view toggle with LayoutGrid and Map icons
- Interactive restaurant map with red markers for each listing
- Popup cards on marker click: image, name, location, rating, cuisine
- Auto-fits map bounds to show all restaurant markers
- Popups link directly to restaurant detail page
- Seamlessly switches between grid and map views
✓ Installed MapLibre GL JS in both admin-app and frontend
Tech: Next.js 14, TypeScript, Tailwind CSS, MapLibre GL JS, MapTiler, Prisma, Express, Zod
#buildinpublic #100DaysOfCode #saas #nextjs #maplibre #maptiler #typescript
Day 101: Admin app separation complete — standalone admin panel with 18 pages, full build passing! 🛡️🚀
Today's highlights:
✓ Built Review Moderation Page (admin /trustflavor/reviews):
- All reviews & reported reviews filter toggle
- Review cards with user info, star rating, photos
- Reported flag banner with reason display
- Approve and delete moderation actions
- Restaurant and dish context per review
✓ Built Flagged Content Page (admin /content/flagged):
- Summary cards: pending, resolved, dismissed counts
- Content type detection: review, photo, restaurant, dish
- Search and status filter (all/pending/resolved/dismissed)
- Resolve, dismiss, and delete actions for pending items
- Reporter info and content preview display
✓ Built System Configuration Page (admin /system/config):
- Sectioned settings: General, Billing, Notifications, Security, Email
- Sidebar navigation between config sections
- Text, number, boolean toggle, and select field types
- Save changes and reset to defaults functionality
- Field descriptions and validation
✓ Built System Health Page (admin /system/health):
- CPU, memory, disk, and network metric cards
- Color-coded progress bars with threshold warnings
- Service status grid: healthy/degraded/down indicators
- Response time and uptime per service
- Manual refresh with spinning icon
✓ Built Audit Logs Page (admin /system/audit-logs):
- Chronological log viewer with category icons
- Category filter: auth, user, system, data
- Search by user, action, or details
- IP address and timestamp display
- Paginated results with page navigation
✓ Built Notifications Page (admin /communication/notifications):
- Create notification form with title, message, type
- Target selection: all users, specific user, by role
- Type badges: info, warning, success, error
- Read count tracking per notification
- Delete sent notifications
✓ Built Email Templates Page (admin /communication/email-templates):
- Template card grid with active/inactive status
- Inline HTML body editor with monospace font
- Template variable tags display ({{variable}})
- Preview, edit, duplicate, toggle, delete actions
- Last modified timestamps
✓ Built Announcements Page (admin /communication/announcements):
- Create announcement with priority: low/normal/high/critical
- Draft and publish workflow
- Priority-colored left border indicators
- Target audience and publish date tracking
- Publish draft and delete actions
✓ Built Support Tickets Page (admin /communication/support):
- Split-panel layout: ticket list + conversation view
- Status management: open/in-progress/resolved/closed
- Priority badges: low/normal/high/urgent
- Reply system with admin message threading
- Inline status update dropdown
✓ Verified full admin app build:
- All 21 routes compiled successfully
- Production build passes with zero errors
- Updated tasks.md with completed checkboxes
Tech: Next.js 14, TypeScript, Tailwind CSS, Radix UI, Lucide React, Recharts, Zustand
#buildinpublic #100DaysOfCode #saas #nextjs #admin #typescript
Day 100: 🎉 MILESTONE — Mobile feature parity achieved! 8 new screens, full platform coverage! 📱🏆
Today's highlights:
✓ Built Nearby Restaurants Screen (mobile NearbyScreen):
- GPS-based restaurant discovery with expo-location
- Adjustable radius filter: 1km, 3km, 5km, 10km, 25km
- Distance display for each restaurant
- Location permission handling with retry flow
- Real card layout with images, ratings, cuisine tags
✓ Built Dish Search Screen (mobile DishSearchScreen):
- Cross-restaurant dish search with text query
- Dietary filters: Vegetarian, Vegan, Spicy toggles
- Sort options: Top Rated, Most Reviewed, A-Z
- Dish cards with price, rating, restaurant name
- Tags for Veg/Vegan/Spicy/Popular
- Infinite scroll pagination
✓ Built Cuisine Statistics Screen (mobile CuisineStatsScreen):
- Summary cards: total restaurants, cuisine types, most popular
- Horizontal bar chart: restaurants by cuisine with emoji icons
- Average rating chart by cuisine type
- Sorted by count and rating respectively
- Top cuisine highlighted in red
✓ Built Add Restaurant Screen (mobile AddRestaurantScreen):
- Full restaurant creation form
- Name, address, city, area, description fields
- Cuisine multi-select with 17 cuisine chip options
- Price range selector: Budget/Moderate/Premium/Luxury
- Contact fields: phone, email, website
- Success → navigates to new restaurant detail
✓ Built Contact/Support Screen (mobile ContactScreen):
- Full contact form with name, email, subject, message
- Quick subject chips: General, Bug Report, Feature Request, etc.
- Success state with confirmation message
- Pre-filled name/email for logged-in users
✓ Added Email Verification Flow (mobile EmailVerificationScreen):
- Verification code input screen
- Resend verification email button
- Success state with celebration UI
- Added verifyEmail() and resendVerificationEmail() API methods
✓ Added Report Review Feature (mobile RestaurantDetailScreen):
- Report button (⚑) on every review card
- Report reasons: Spam, Inappropriate, Fake Review
- Alert-based report flow with confirmation
- Added reportReview() API method
✓ Added Review Photo Uploads (mobile RestaurantDetailScreen):
- Photo picker using expo-image-picker in review modal
- Up to 5 photos per review
- Photo preview thumbnails with remove (✕) button
- Photos uploaded via uploadReviewPhotos() API
- Review cards now display photo thumbnails
✓ Updated Feature Parity Matrix:
- Email Verification: ❌ → ✅ Mobile
- Dish Management: Partial → ✅ Mobile
- File Uploads: Partial → ✅ Mobile
- Review Reports: ❌ → ✅ Mobile
- Cuisine Stats: ❌ → ✅ Mobile
- Nearby Restaurants: New ✅ Mobile
- Add Restaurant: New ✅ Mobile
- Contact Form: New ✅ Mobile
✓ Dashboard Feature Grid:
- New "Explore More" grid on dashboard
- Quick access: Nearby, Dishes, Stats, Add Place, Contact, Verify
- Consistent TrustFlavor red theme throughout
🎯 Day 100 = Full mobile platform parity! Every major feature now works on mobile. 🚀
#100DaysOfCode #Day100 #ReactNative #TrustFlavor #Nepal #MobileApp #FeatureParity #Milestone
Day 99: Massive mobile parity push — 6 features closing the gap! 📱🔥
Today's highlights:
✓ Added Forgot Password & Reset Password Flow (mobile):
- New "Forgot Password?" link on login screen
- Forgot password screen: enter email → sends reset link
- Reset password screen: enter token + new password
- Full error handling and success alerts
- Added forgotPassword() and resetPassword() API methods
✓ Built Search Autocomplete for Discover (mobile DiscoverScreen):
- Real-time search suggestions as user types (300ms debounce)
- Dropdown with restaurant name, location, and rating
- Tap suggestion → navigates directly to restaurant detail
- Results styled with 🍽️ icons, star ratings, and location meta
- Auto-hides on submit or clear
✓ Added Rating Distribution Chart (mobile RestaurantDetailScreen):
- Visual 5-star to 1-star horizontal bar chart
- Proportional fill bars with yellow accent
- Count labels per star rating
- Loads alongside reviews using getRatingDistribution API
- "Rating Breakdown" section below main rating display
✓ Built Restaurant Comparison Screen (mobile CompareScreen):
- Side-by-side comparison of two restaurants
- Hero images, names, city for each restaurant
- Red VS badge between restaurants
- Comparison rows: Rating, Reviews, Price, Cuisine, Taste, Service, Ambience
- Green highlight on winning metrics
- Uses compareRestaurants API
✓ Added Recently Viewed Restaurants (mobile):
- Tracks last 20 viewed restaurants in AsyncStorage
- Horizontal scroll on Dashboard with cover images
- Shows name, rating, city for each
- Tap → navigates to restaurant detail
- Added addRecentlyViewed() and getRecentlyViewed() to storage utils
- Auto-saves when opening any restaurant
✓ Built Restaurant Claim Flow (mobile ClaimScreen):
- New screen to submit ownership claims
- Message field + optional proof URL
- Checks for existing claim on same restaurant
- Status badge (PENDING/APPROVED/REJECTED) with colored indicators
- "My Claims" history section showing all user's claims
- "Claim This Restaurant" button on RestaurantDetailScreen
- Only shows for unclaimed restaurants when logged in
✓ Updated FEATURES.md Parity Matrix:
- Search Autocomplete: ❌ → ✅ Mobile
- Restaurant Comparison: ❌ → ✅ Mobile
- Recently Viewed: ❌ → ✅ Mobile
- Restaurant Claims: ❌ → ✅ Mobile
- Forgot Password: ❌ → ✅ Mobile
- Rating Distribution: ❌ → ✅ Mobile
New files: 3 (CompareScreen.tsx, ClaimScreen.tsx, Day99.md) | Updated files: 6 | Features: 6
6 mobile features in one day — mobile nearly at full parity with web! 📱🇳🇵
#buildinpublic #saas #nepal #trustflavor
Day 98: Full feature audit, documentation, mobile parity improvements & new screens! 📋🚀
Today's highlights:
✓ Created Comprehensive Feature Documentation (FEATURES.md):
- Full audit of every feature across backend, web, and mobile
- Documented all 100+ API endpoints with methods and routes
- Feature parity matrix showing web vs mobile coverage
- Categorized: Auth, Discovery, Reviews, Dishes, Favorites, Leaderboard, Claims, Subscriptions, Credits, Orgs, Notifications, Admin, Uploads, Webhooks, Analytics
- Data model reference with all enums and key models
- Tech stack documentation for all three platforms
✓ Rebuilt Mobile HomeScreen (native HomeScreen.tsx):
- Replaced generic "SaaS Boilerplate" with TrustFlavor branded home
- Red hero header with app branding
- Quick action grid: Discover, Favorites, Leaderboard, My Reviews
- Horizontal scroll of Top Rated restaurants with rank badges (#1, #2...)
- Horizontal scroll of Trending restaurants
- Browse by Cuisine section with emoji chips (Momo, Dal Bhat, Newari, etc.)
- Loads real data from getTopRatedRestaurants + getTrendingRestaurants APIs
✓ Added Advanced Filters to Mobile Discover (native DiscoverScreen.tsx):
- Expandable filter panel with filter count badge
- Price Range filter: Budget, Moderate, Premium, Luxury
- Amenities filter: WiFi, Parking, Outdoor, Delivery, Takeout, Live Music
- Sort options: Top Rated, Most Reviewed, Newest, A-Z
- Toggle amenity chips with multi-select
- All filters pass to getRestaurants API
✓ Built UserProfileScreen for Mobile (native UserProfileScreen.tsx):
- New screen showing public user profiles
- Avatar with initials fallback, user name, level badge
- Member since date display
- Stats row: Reviews, Avg Rating, Helpful votes, Favorites
- User badge pills with colored backgrounds
- Paginated review list with restaurant thumbnails
- Tap review to navigate to restaurant detail
- Load more reviews button with pagination
- Wired into App.tsx navigation with navigateToProfile()
✓ Rebuilt Mobile DashboardScreen (native DashboardScreen.tsx):
- Replaced generic "SaaS app" with real TrustFlavor dashboard
- Real-time stats: My Reviews, Favorites, Unread Notifications, Credits
- Loads actual data from API (credits, unread count, favorites, reviews)
- Quick action rows: Discover, Leaderboard, Settings
- Account info card with name and email
- Pull-to-refresh to reload all stats
- Sign out button with TrustFlavor styling
✓ Added Cuisine Filter to Top-Rated Page (web top-rated/page.tsx):
- New cuisine dropdown filter alongside existing city filter
- 12 cuisine options: Momo, Dal Bhat, Newari, Thakali, Cafe, etc.
- Client-side filtering on loaded data for instant response
- Combined city + cuisine filtering
✓ Updated App.tsx Navigation:
- Imported and wired UserProfileScreen
- Added profileUserId state for profile navigation
- navigateToProfile() function for screen transitions
- user-profile case in getCurrentScreen switch
New files: 2 (FEATURES.md, UserProfileScreen.tsx) | Updated files: 5 | Features: 6
Full platform audit complete — every feature documented, mobile catching up to web! 📋🇳🇵
#buildinpublic #saas #nepal #trustflavor
Day 97: Leaderboard, restaurant comparison, amenity filters, report system & recently viewed! 🏆🍽️
Today's highlights:
✓ Built Top Reviewers Leaderboard (Backend + Frontend + Native):
- GET /api/reviews/leaderboard — public endpoint with limit & period params
- Aggregates review count, average rating, helpful votes per user
- Auto-assigns levels: Newcomer → Regular Reviewer → Expert Taster → Food Critic
- Period filter: All Time, This Month, This Week
- Frontend /leaderboard page with podium top-3 cards + full ranked list
- Avatars, level badges, review stats, profile links
- Native LeaderboardScreen with pull-to-refresh + period toggle
- Dashboard quick-action card linking to leaderboard
✓ Built Restaurant Comparison (Backend + Frontend):
- GET /api/restaurants/compare?id1=...&id2= — side-by-side data
- Returns full restaurant details with dishes, review counts, ratings
- Frontend /compare page with dual restaurant picker (search-driven)
- Visual CompareBar with red vs blue bar charts for ratings
- Amenity check/cross comparison table
- Top dishes side-by-side display
- View detail links for each restaurant
✓ Built Cuisine Statistics API:
- GET /api/restaurants/cuisine-stats — groupBy cuisine with counts
- Frontend hook useCuisineStats for data consumption
✓ Built Amenity-based Restaurant Filtering (Backend + Frontend):
- Added amenities query param to GET /api/restaurants
- Prisma hasEvery filter for matching all selected amenities
- Amenity toggle pills on Discover page filter section
- Filter count badge includes amenity selections
- Clear filters resets amenities
✓ Built Restaurant Report System (Backend + Frontend):
- POST /api/restaurants/:id/report — authenticated report submission
- Stores as ContactMessage for admin management via existing admin UI
- Report modal on restaurant detail page with reason dropdown
- Reason options: Incorrect Info, Closed, Spam, Inappropriate, Other
- Optional details textarea for additional context
- Report button with AlertTriangle icon in hero section
✓ Built Recently Viewed Restaurants (Frontend):
- Auto-tracks last 20 viewed restaurants in localStorage
- Stores id, name, slug, coverImage, avgRating, city, timestamp
- Horizontal scroll section on Discover page
- Compact cards with image, name, rating, city
- Deduplication on re-visit (moves to top)
✓ Extended Native App APIs:
- Added getTopReviewers(limit, period)
- Added compareRestaurants(id1, id2)
- Added getCuisineStats()
- Added reportRestaurant(id, reason, details)
New backend endpoints: 5 | New frontend pages: 2 | New native screen: 1 | Features: 7
From reviews → rankings. The community now has a leaderboard to compete on! 🏆🇳🇵
#buildinpublic #saas #nepal #trustflavor
Day 96: Restaurant claims, contact API, add-restaurant flow & dynamic city filters! 🚀🍽️
Today's highlights:
✓ Built Restaurant Claim System (Backend + Frontend):
- Added ClaimRequest model to Prisma schema with status tracking (PENDING/APPROVED/REJECTED)
- POST /api/claims — authenticated claim request submission
- GET /api/claims/mine — view user's claim history
- Admin endpoints: GET /admin/all, POST /admin/:id/approve, POST /admin/:id/reject
- Approval auto-sets restaurant ownerId and rejects other pending claims
- Claim button on restaurant detail page sidebar (only shows for unclaimed restaurants)
- Modal form with explanation field + submit/cancel flow
- Owner badge displayed when restaurant is already claimed
✓ Built Contact/Feedback API (Backend + Frontend):
- Added ContactMessage model to Prisma schema
- POST /api/contact — public endpoint, works for logged-in and anonymous users
- Admin endpoints: list, mark-read, delete, unread count
- Connected existing Contact page to real backend API
- Added loading state + toast notifications on submit
✓ Built Dynamic Cities API:
- GET /api/restaurants/cities — returns all cities with restaurant counts
- Discover page city filter now shows live cities from database
- Displays count per city (e.g., "Kathmandu (12)")
- Fallback to default cities when API unavailable
✓ Built Nearby Restaurants API:
- GET /api/restaurants/nearby?lat=...&lng=...&radius=...&limit=...
- Haversine distance calculation for accurate proximity matching
- Returns restaurants sorted by distance with distance field
- Full backend + frontend hook + native API method
✓ Built Add Restaurant Page (/add-restaurant):
- Multi-section form: Basic Info, Location, Contact, Cuisine & Price Range
- Cuisine type multi-select with toggle chips
- Price range selector (Budget → Luxury)
- Cover image URL preview
- Auth-gated with sign-in redirect
- "Add Restaurant" button on Discover page header
- Auto-redirects to new restaurant page on success
✓ Extended Native App APIs:
- Added getCities, getNearbyRestaurants
- Added submitClaim, getMyClaims
- Added submitContact
- Added createRestaurant
✓ Updated Prisma Schema:
- New ClaimRequest model with unique user+restaurant constraint
- New ContactMessage model with user relation
- New ClaimStatus enum (PENDING/APPROVED/REJECTED)
- Added relations to User and Restaurant models
New backend endpoints: 10 | New frontend pages: 1 | Features: 6
From browsing → owning. Restaurant owners can now claim their listings. 🚀🇳🇵
#buildinpublic #saas #nepal #trustflavor
Day 95: Helpful vote tracking, amenities system, similar restaurants & 7 improvements across the stack! 🚀🍽️
Today's highlights:
✓ Built Helpful Vote Tracking System (Backend + Frontend):
- Added HelpfulVote model to Prisma schema (prevents double voting)
- Unique constraint: one vote per user per review
- Toggle behavior: vote on → vote off on second click
- POST /api/reviews/:id/helpful now requires auth, tracks voter
- POST /api/reviews/check-helpful — batch check which reviews user has voted on
- Replaced naive helpfulCount increment with proper vote tracking
✓ Built Restaurant Amenities System (Backend + Frontend):
- Added amenities[] field to Restaurant model (Prisma migration)
- PUT /api/restaurants/:id/amenities — owner/creator-only endpoint
- Amenity labels with icons: WiFi, Parking, Outdoor Seating, Delivery, Takeout, Reservations, Live Music, Pet Friendly, AC, Card Payment, Private Dining, Bar
- Amenities section displayed on restaurant detail page (main content + sidebar)
- Green-tagged amenity badges with emoji icons
✓ Built Similar Restaurants Feature (Backend + Frontend):
- GET /api/restaurants/:id/similar — finds restaurants with matching cuisine or same city
- Ranked by avgRating, excludes current restaurant
- Card grid on restaurant detail page with image, name, rating, location
- Links directly to similar restaurant detail pages
✓ Built Review Rating Filter:
- Added minRating/maxRating query params to GET /api/reviews/restaurant/:id
- Filter dropdown on restaurant page: All Ratings, 5★, 4★, 3★, 2★, 1★
- Combined with existing sort (newest, highest, lowest, most helpful)
✓ Built Operating Hours Management (Backend + Frontend):
- PUT /api/restaurants/:id/opening-hours — owner/creator-only endpoint
- Improved frontend display: full day names, Mon-Sun ordering
- "Today" badge highlights current day in green
✓ Built Restaurant Owner Stats API:
- GET /api/restaurants/:id/owner-stats — auth-protected, owner-only
- Returns: total reviews, recent reviews (30d), avg ratings breakdown
- Favorite count, top 5 dishes by rating, weekly rating trend (4 weeks)
✓ Built Share Restaurant Feature:
- Share button in restaurant hero area
- Uses Web Share API on mobile (native sharing)
- Falls back to clipboard copy on desktop
- "Link copied!" toast confirmation
✓ Updated Prisma Schema:
- New HelpfulVote model with userId + reviewId unique constraint
- Added amenities String[] to Restaurant model
- Created migration: 20260305_add_helpful_votes_and_amenities
8 features shipped — reviews, discovery, and restaurant management all leveled up. 🚀🇳🇵
#buildinpublic #saas #nepal #trustflavor
Day 94: Owner replies, user profiles, search autocomplete & 8 new features across the stack! 🚀🍽️
Today's highlights:
✓ Built Owner Reply System (Backend + Frontend):
- Added ownerReply + ownerReplyAt fields to Review model (Prisma migration)
- POST /api/reviews/:id/owner-reply — owner-only endpoint with auth check
- Blue-styled owner response cards displayed under reviews
- Reply form appears for restaurant owners on their restaurant's reviews
- Authorization: only the restaurant's ownerId can post replies
✓ Built User Public Profile System:
- GET /api/users/:userId/profile — public profile with stats, badges, and level
- GET /api/users/:userId/reviews — paginated public review history
- Created /user/[id] frontend page with profile header, stats grid, badges, and review list
- Computed user badges: First Review, Regular Reviewer, Food Critic, Master Foodie, Helpful Voice, Community Hero, Explorer
- Gamification levels: Newbie → Food Explorer → Regular Reviewer → Food Critic → Master Foodie
- Review cards on profile link to restaurant detail pages
- Reviewer names on restaurant pages now link to their public profiles
✓ Built Search Autocomplete:
- GET /api/restaurants/search/suggestions?q=... — returns matching restaurants AND dishes
- Live dropdown on Discover page search bar with restaurant + dish suggestions
- Shows restaurant images, ratings, city/area info in suggestions
- Shows dish prices and parent restaurant in dish suggestions
- Auto-hides on blur, clears with X button
✓ Built Dish Search API:
- GET /api/dishes/search — global dish search across all active restaurants
- Filters: search, isVegetarian, isVegan, isSpicy, minPrice, maxPrice
- Sort: avgRating, price_asc, price_desc, name
- Full pagination support
✓ Built Trending Restaurants API:
- GET /api/restaurants/trending — based on review activity in last 7 days
- Groups recent reviews by restaurant, ranks by count
- Fallback to most-reviewed when no recent activity
✓ Built Rating Distribution Chart:
- GET /api/reviews/restaurant/:id/distribution — returns count per rating (1-5)
- Visual bar chart in restaurant detail sidebar
- Shows count + percentage fills for each star level
✓ Built Photo Gallery Lightbox:
- Grid display of all restaurant photos
- Full-screen lightbox modal with navigation arrows
- Photo counter (1/N), keyboard-friendly, click-outside-to-close
- Responsive grid: 3 cols mobile, 4 cols desktop
✓ Extended Native App APIs:
- Added getTrendingRestaurants, searchSuggestions, searchDishes
- Added getUserPublicProfile, getUserPublicReviews
- Added addOwnerReply, getRatingDistribution
- Full feature parity with web frontend API layer
New backend endpoints: 8 | New frontend features: 6 | Files modified: 16+
From reviews → owner conversations, anonymous users → public profiles. TrustFlavor is becoming a real community platform. 🚀🇳🇵
#buildinpublic #saas #nepal #trustflavor #reactnative
Day 93: Squashed auth bugs + built the full TrustFlavor mobile app!
Today's highlights:
✓ Fixed critical auth bugs across the web frontend:
- Root cause: dual token storage mismatch — login stored in localStorage, but axios read from cookies
- Unified token storage: all auth flows now sync to BOTH cookie (accessToken) and localStorage (token)
- Created AuthInitializer component to sync tokens on app mount
- Rewrote Navbar to use Zustand auth store instead of raw localStorage checks
- Fixed login page to use axios API instance + update auth store
- Fixed dashboard to use auth store instead of raw fetch
- Fixed Google & GitHub OAuth callbacks to set cookies + update store
- Result: login state, reviews, and favorites all work correctly now
✓ Rebranded native onboarding to TrustFlavor:
- Welcome to TrustFlavor 🍽️
- Honest Reviews ⭐
- Save Your Favorites ❤️
- Explore Nepal 🇳🇵
- Red/orange/pink/green color scheme
✓ Built full TrustFlavor native app (React Native + Expo):
- DiscoverScreen: search, cuisine filter chips, paginated restaurant list
- RestaurantDetailScreen: hero image, info, reviews, review writing modal with star picker
- FavoritesScreen: saved restaurants with pull-to-refresh and remove
- MyReviewsScreen: user's reviews with ratings and helpful counts
- Extended API service with restaurant, review, and favorite endpoints
- Added TrustFlavor types (Restaurant, Dish, Review, CuisineType, PriceRange)
✓ Rebranded App.tsx:
- New tabs: Home 🏠, Discover 🔍, Favorites ❤️, Reviews ⭐, Alerts 🔔, Settings ⚙️
- Red color scheme (#dc2626) replacing blue
- TrustFlavor dashboard with food-themed stats
Web auth bugs crushed + native app fully functional. 🚀🍽️
#buildinpublic #saas #nepal #trustflavor #reactnative