diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 3383c71..c864739 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -11,6 +11,11 @@ on: pull_request: branches: [ "main" ] +defaults: + run: + working-directory: mobile/ + + jobs: build: runs-on: ubuntu-latest diff --git a/ANTIGRAVITY_BOOKBRIDGE_BRIEF_v2.md b/ANTIGRAVITY_BOOKBRIDGE_BRIEF_v2.md deleted file mode 100644 index b43e981..0000000 --- a/ANTIGRAVITY_BOOKBRIDGE_BRIEF_v2.md +++ /dev/null @@ -1,464 +0,0 @@ -# πŸ€– Antigravity 2.0 β€” BookBridge Development Agent Brief (v2) -> Feed this entire document as your starting prompt into Antigravity 2.0. -> NOTE: You have already pulled the latest repo and analyzed its state. -> Issue #14 (APK download link) is confirmed fixed in commit `a0a4b7a`. -> Begin from Issue #15 (screenshot overflow) and Issue #9 (Terms & Conditions), -> then proceed through Priorities 2–7 in order. - ---- - -## 🎯 YOUR MISSION - -You are a senior Flutter/Dart engineer resuming development on **BookBridge** β€” a peer-to-peer textbook marketplace for Cameroonian students. The lead developer (Mr. DCT) has been away from this repo for ~2 months. Your job is to pick up exactly where he left off and execute the next development sprint based on both the existing roadmap and the strategic recommendations document below. - -**Repository:** https://github.com/DCT-Berinyuy/book-bridge -**Active Branch:** `dev` -**Current Version:** v1.4.0+4 -**Tech Stack:** Flutter 3.10.7+ / Dart, Supabase (PostgreSQL + Auth + Storage + Realtime), Provider, GetIt, go_router, dartz, Fapshi (payments) - ---- - -## πŸ“¦ REPO STATE (Already Confirmed) - -- βœ… `dev` and `main` are fully synced, clean, no conflicts -- βœ… Issue #14 (APK link) fixed in commit `a0a4b7a` -- βœ… Fapshi webhook phone formatting fixed (issues #20/#21) -- βœ… Default light theme set -- βœ… 135 commits, 5 releases, 47 Dart files, ~15,000 LOC - -**Read these files before writing any code:** -- `GEMINI.md` β€” full AI context with architectural decisions -- `lib/injection_container.dart` β€” all registered dependencies -- `lib/config/router.dart` β€” all routes -- `lib/features/listings/data/datasources/supabase_listings_datasource.dart` β€” datasource pattern -- `pubspec.yaml` β€” current dependencies - ---- - -## πŸ—οΈ ARCHITECTURE OVERVIEW - -### Clean Architecture β€” 3 Layers -``` -lib/ -β”œβ”€β”€ core/ # Errors, theme, base use cases, shared widgets -β”œβ”€β”€ features/ -β”‚ β”œβ”€β”€ auth/ # 11 files β€” Supabase Auth, sign in/up, profile -β”‚ β”œβ”€β”€ listings/ # 22 files β€” Browse, sell, search, listing details -β”‚ └── notifications/ # Placeholder only -β”œβ”€β”€ config/ # app_config.dart, router.dart -β”œβ”€β”€ injection_container.dart -└── main.dart -``` - -### Key Patterns -- **State:** `Provider` + `ChangeNotifier` ViewModels -- **DI:** `GetIt` service locator (30+ registered deps) -- **Navigation:** `go_router` with `StatefulShellRoute` -- **Error handling:** `Either` via `dartz` -- **DB:** Supabase PostgreSQL with RLS on all tables - -### Brand Identity: "Knowledge & Trust" -- Scholar Blue: `#1A4D8C` (primary) -- Bridge Orange: `#F2994A` (secondary) -- Growth Green: `#27AE60` (tertiary) -- Font: Montserrat (headings), Inter (body) - ---- - -## βœ… ALREADY BUILT β€” DO NOT REBUILD - -- User authentication (email/password via Supabase) -- Browse listings (grid, infinite scroll, 50/page) -- Full-text search (PostgreSQL tsvector) -- Sell books (image upload, form validation) -- Profile management -- WhatsApp seller contact -- Category filtering -- Fapshi payments (MTN MoMo + Orange Money) β€” v1.4.0 -- Multi-language support (EN/FR) -- SvelteKit landing page (book-bridge-three.vercel.app) -- Clean Architecture with 0 flutter analyze issues - ---- - -## 🚧 DEVELOPMENT SPRINT β€” PRIORITY ORDER - -Work through these in strict order. Complete and commit each before moving to the next. - ---- - -### PRIORITY 1 β€” Fix Remaining Open Issues - -**Issue #15:** Screenshot overflow on landing page phone widget -- File: `landingPage/` (SvelteKit) -- Find the phone mockup component and fix CSS overflow/clipping on the screenshot images - -**Issue #9:** Missing Terms & Conditions page -- Create `lib/features/auth/presentation/screens/terms_screen.dart` -- Add route `/terms` in `config/router.dart` -- Link from Sign Up screen with checkbox: "I agree to the Terms & Conditions" -- Content to include: - - User responsibilities (accurate listings, honest condition grading) - - Prohibited items (counterfeit, stolen books) - - Payment policy (Fapshi terms, refund conditions) - - Safety guidelines for in-person meetups - - Data privacy statement - - Platform commission disclosure (5–15% success fee) - ---- - -### PRIORITY 2 β€” Standardized Book Condition Grading System - -**Goal:** Reduce buyer/seller disputes by standardizing how book conditions are described and displayed. Directly addresses the #1 complaint on global platforms like Better World Books. - -**Implementation:** - -1. Update the `condition` field display throughout the app with color-coded badges: - - `new` β†’ Green `#27AE60` - - `like_new` β†’ Teal `#1ABC9C` - - `good` β†’ Scholar Blue `#1A4D8C` - - `fair` β†’ Bridge Orange `#F2994A` - - `poor` β†’ Red `#E74C3C` - -2. Create `lib/core/widgets/condition_badge.dart` β€” reusable badge widget used on ListingCard and ListingDetailsScreen - -3. Add a **Condition Guide Modal** β€” tappable info icon on SellScreen and ListingDetailsScreen: - - Create `lib/core/widgets/condition_guide_modal.dart` - - Each condition shows: name, color, description, what to expect - - Content: - ``` - NEW: Unused, unopened, original packaging if applicable - LIKE NEW: Read once, no markings, minimal wear - GOOD: Some highlighting/notes, intact binding, all pages present - FAIR: Heavy use, significant markings, may have creases - POOR: Functional but heavily worn, all content readable - ``` - -4. On SellScreen, replace plain condition dropdown with visual condition selector cards showing color + description - ---- - -### PRIORITY 3 β€” Offline Cache with sqflite - -**Goal:** Users can browse listings without active internet β€” critical for Cameroonian low-bandwidth context. - -**Dependencies to add in pubspec.yaml:** -```yaml -sqflite: ^2.3.0 -path: ^1.9.0 -``` - -**Files to create:** -- `lib/core/local_db/local_database.dart` β€” SQLite setup and schema -- `lib/features/listings/data/datasources/local_listings_datasource.dart` - -**Schema:** -```sql -CREATE TABLE cached_listings ( - id TEXT PRIMARY KEY, - title TEXT, - author TEXT, - price_fcfa INTEGER, - condition TEXT, - image_url TEXT, - description TEXT, - seller_id TEXT, - status TEXT, - category TEXT, - cached_at INTEGER -); -``` - -**Modify `ListingsRepositoryImpl` to:** -- On successful fetch β†’ cache results to SQLite -- On network failure β†’ serve from cache with `OfflineBanner` widget -- Cache TTL: 24 hours (check `cached_at` Unix timestamp) - -**Add `OfflineBanner` widget:** -- Yellow banner at top of HomeScreen: "You're offline β€” showing saved results" -- Only visible when serving from cache - -**Register `SqfliteCacheService` in `injection_container.dart`** - ---- - -### PRIORITY 4 β€” Social Impact Tracker (Book-for-Book Model) - -**Goal:** Formalize BookBridge's social mission with measurable impact metrics. Based on Better World Books' model β€” every transaction generates trackable social good. Critical for investor pitch at PROMOTE 2026. - -**Database β€” Add to Supabase:** -```sql -CREATE TABLE impact_metrics ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - metric_type TEXT NOT NULL CHECK (metric_type IN ( - 'book_circulated', - 'money_saved', - 'co2_avoided', - 'student_reached' - )), - value FLOAT NOT NULL, - transaction_id UUID, - recorded_at TIMESTAMP DEFAULT NOW() -); - -CREATE TABLE platform_stats ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - total_books_circulated INTEGER DEFAULT 0, - total_students_reached INTEGER DEFAULT 0, - total_money_saved_fcfa BIGINT DEFAULT 0, - total_co2_avoided_kg FLOAT DEFAULT 0, - updated_at TIMESTAMP DEFAULT NOW() -); -``` - -**Calculation logic:** -- `money_saved` = average new book price (15,000 FCFA) βˆ’ sale price -- `co2_avoided` = 2.7kg CO2 per book reused (industry standard) -- `student_reached` = unique buyers + unique sellers - -**Flutter implementation:** -1. Create `lib/features/impact/` feature -2. `ImpactStatsWidget` β€” displayed on HomeScreen below the featured carousel: - ``` - πŸ“š 1,247 books circulated - πŸ’° 18.7M FCFA saved by students - 🌱 3.4 tonnes CO2 avoided - ``` -3. Stats fetched from `platform_stats` table (cached locally, updated on each transaction) -4. Animated number counters on first load (use `CountUp` animation) -5. Update `platform_stats` via Supabase trigger after each completed transaction - ---- - -### PRIORITY 5 β€” Seller Ratings & Trust System - -**Goal:** Verified post-transaction ratings. Only buyers who completed a purchase can rate sellers. Core trust mechanism for investor pitch. - -**Database:** -```sql -CREATE TABLE ratings ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - listing_id UUID REFERENCES listings(id) ON DELETE CASCADE, - buyer_id UUID REFERENCES profiles(id) ON DELETE CASCADE, - seller_id UUID REFERENCES profiles(id) ON DELETE CASCADE, - score INTEGER CHECK (score BETWEEN 1 AND 5), - comment TEXT, - created_at TIMESTAMP DEFAULT NOW(), - UNIQUE(listing_id, buyer_id) -); - -ALTER TABLE profiles ADD COLUMN rating_score FLOAT DEFAULT 0; -ALTER TABLE profiles ADD COLUMN rating_count INTEGER DEFAULT 0; -``` - -**Bayesian Rating Formula:** -``` -adjusted_rating = (v / (v + m)) * R + (m / (v + m)) * C -where: v = rating_count, R = raw average, m = 5, C = global average -``` - -**Flutter:** -1. Create `lib/features/ratings/` feature (domain/data/presentation) -2. `RatingEntity`, `SubmitRatingUseCase`, `GetSellerRatingsUseCase` -3. `RatingViewModel` with Provider -4. `SubmitRatingSheet` β€” bottom sheet with 5-star selector + optional comment -5. Seller rating badge on `ListingDetailsScreen` and `ProfileScreen` -6. Trigger rating prompt after Fapshi transaction marked complete - ---- - -### PRIORITY 6 β€” Safety Guidelines & Campus Meetup Zones - -**Goal:** Increase trust and safety for in-person book exchanges. Based on P2P marketplace best practices β€” explicit safety infrastructure reduces fraud and increases platform confidence. - -**Flutter:** -1. Create `lib/features/safety/presentation/screens/safety_guidelines_screen.dart` -2. Add route `/safety` accessible from ListingDetailsScreen ("Arrange Meetup" section) -3. Content sections: - - **Safe Meetup Locations**: Public campus areas, library entrances, student union buildings - - **What to Check**: Verify book condition before paying, match ISBN if possible - - **Payment Safety**: Always use in-app Fapshi payment, never send money in advance via WhatsApp - - **Report Issues**: Link to report form -4. Add `MeetupTipsCard` widget on `ListingDetailsScreen` below the WhatsApp contact button -5. Create a `campus_zones` table in Supabase for verified safe exchange points: -```sql -CREATE TABLE campus_zones ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - name TEXT NOT NULL, - university TEXT NOT NULL, - city TEXT NOT NULL, - description TEXT, - latitude FLOAT, - longitude FLOAT, - is_verified BOOLEAN DEFAULT FALSE -); -``` -Pre-populate with known ICT University, University of YaoundΓ© I, University of Buea locations. - ---- - -### PRIORITY 7 β€” Push Notifications (FCM) - -**Goal:** Notify users about payment confirmations, new listings matching their interests, and listing inquiries. - -**Dependencies:** -```yaml -firebase_messaging: ^14.0.0 -flutter_local_notifications: ^17.0.0 -``` - -**Database:** -```sql -CREATE TABLE notifications ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - user_id UUID REFERENCES profiles(id) ON DELETE CASCADE, - type TEXT NOT NULL, - title TEXT NOT NULL, - body TEXT, - data JSONB, - is_read BOOLEAN DEFAULT FALSE, - created_at TIMESTAMP DEFAULT NOW() -); -``` - -**Notification types:** -- `payment_confirmed` β€” Fapshi payment success -- `new_inquiry` β€” Someone contacted about your listing -- `new_listing_match` β€” New book in a category you've browsed -- `impact_milestone` β€” "BookBridge just circulated its 500th book! πŸŽ‰" - -**Implementation:** -1. Create `lib/core/notifications/notification_service.dart` -2. Update `NotificationsScreen` (currently placeholder) with real notification list -3. Unread badge on bottom nav Notifications icon -4. Impact milestone notifications tie into Priority 4's impact tracker - ---- - -### PRIORITY 8 β€” Wishlist / Favorites - -**Database:** -```sql -CREATE TABLE wishlists ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - user_id UUID REFERENCES profiles(id) ON DELETE CASCADE, - listing_id UUID REFERENCES listings(id) ON DELETE CASCADE, - created_at TIMESTAMP DEFAULT NOW(), - UNIQUE(user_id, listing_id) -); -``` - -**Flutter:** -1. Create `lib/features/wishlist/` feature -2. Heart icon on `ListingCard` and `ListingDetailsScreen` -3. `WishlistScreen` accessible from Profile tab -4. Optimistic UI updates (toggle immediately, sync to Supabase) -5. `WishlistViewModel` with Provider - ---- - -### PRIORITY 9 β€” Escrow Payment Flow - -**Goal:** Trust layer on top of existing Fapshi integration. - -**Flow:** -``` -Buyer pays β†’ Funds held in escrow β†’ -Buyer confirms receipt (or 48h auto-release) β†’ -Funds released to seller β†’ Rating prompt shown β†’ Impact metrics updated -``` - -**Database:** -```sql -CREATE TABLE escrow_transactions ( - id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, - listing_id UUID REFERENCES listings(id), - buyer_id UUID REFERENCES profiles(id), - seller_id UUID REFERENCES profiles(id), - amount_fcfa INTEGER NOT NULL, - fapshi_transaction_id TEXT, - status TEXT DEFAULT 'held' CHECK ( - status IN ('held', 'released', 'refunded', 'disputed') - ), - held_at TIMESTAMP DEFAULT NOW(), - released_at TIMESTAMP, - release_deadline TIMESTAMP -); -``` - -**Steps:** -1. Modify Fapshi payment flow to route through escrow -2. "Confirm Receipt" button on buyer's transaction history -3. Supabase Edge Function for auto-release after 48h -4. Dispute flow: "There's a problem" β†’ manual review queue -5. On release β†’ trigger rating prompt (Priority 5) + update impact metrics (Priority 4) - ---- - -## 🎨 UI/UX IMPROVEMENTS (Implement Alongside Above) - -- **Shimmer skeleton loaders** on HomeScreen grid β€” replace `CircularProgressIndicator` -- **Image compression** before upload β€” max 800px width, 80% quality using `flutter_image_compress` -- **Empty state illustrations** β€” custom SVG for empty search, empty wishlist, empty profile -- **Book swap badge** on listings β€” sellers can optionally mark a book as "Swap Available" in addition to sale price -- **Featured listings carousel** refinement β€” ensure impact stats widget sits cleanly below it - ---- - -## πŸ“‹ CODING STANDARDS β€” NON-NEGOTIABLE - -1. **Zero flutter analyze issues** β€” run before every commit -2. **Clean Architecture** β€” every new feature: domain/data/presentation layers -3. **Either pattern** β€” all repository methods return `Either` -4. **Provider for state** β€” new ViewModels extend `ChangeNotifier` -5. **Register in GetIt** β€” all new services/repos/use cases in `injection_container.dart` -6. **Before every commit:** - ```bash - dart fix --apply - flutter analyze - dart format . - ``` -7. **Branch naming:** `feature/condition-grading`, `feature/offline-cache`, `feature/impact-tracker`, etc. -8. **Commit messages:** Conventional commits β€” `feat:`, `fix:`, `refactor:`, `docs:` - ---- - -## πŸ† CONTEXT: WHY THIS MATTERS - -BookBridge is a candidate for **PROMOTE 2026** β€” an investor showcase at Palais des CongrΓ¨s, YaoundΓ© (June 15–21, 2026). ICT University will present 5 student projects to 200+ investors. **Pre-selection deadline: June 1, 2026.** - -**Features investors will care about most (in order):** -1. **Impact metrics** β€” books circulated, money saved, CO2 avoided (Priority 4) -2. **Seller ratings** β€” trust = monetization potential (Priority 5) -3. **Escrow payments** β€” fraud prevention = scale (Priority 9) -4. **Offline cache** β€” African market fit = TAM story (Priority 3) -5. **Safety infrastructure** β€” platform maturity signal (Priority 6) - -The social mission framing (book-for-book model, SDG alignment, B-Corp direction) is what differentiates BookBridge from a generic marketplace. Every feature should reinforce that story. - -Build like investors are watching. πŸš€ - ---- - -## πŸ“Š STRATEGIC CONTEXT (From Analysis Document) - -BookBridge should model itself after these global platforms while staying African-first: - -| Platform | Key Lesson for BookBridge | -|---|---| -| Better World Books | Book-for-book donations, impact reporting, B-Corp mission | -| World of Books (Wob) | Author revenue sharing, zero-waste pledge, library sourcing | -| Bookshop.org | 80% margin to local ecosystem partners | -| ThriftBooks | Standardized condition grading, tiered loyalty | -| Kenya's Text Book Centre | Curriculum-aligned inventory, East African market proof | - -**Target metrics to display at PROMOTE 2026:** -- Books circulated: track from day 1 -- Students reached: unique active users -- Money saved: (avg new price βˆ’ sale price) Γ— transactions -- CO2 avoided: 2.7kg Γ— books reused - ---- - -*Brief v2 prepared by Claude (Anthropic) for Mr. DCT / DevSafe* -*BookBridge v1.4.0 β†’ v2.0.0 sprint | PROMOTE 2026 ready* diff --git a/GEMINI.md b/GEMINI.md deleted file mode 100644 index a853bb5..0000000 --- a/GEMINI.md +++ /dev/null @@ -1,89 +0,0 @@ -# Gemini CLI Context for BookBridge - -This document provides instructional context for interacting with the BookBridge project. - -## Project Overview - -BookBridge is a mobile application built with **Flutter** that serves as a peer-to-peer marketplace for students in Cameroon to buy and sell used physical books. The backend is powered by **Supabase**, handling user authentication and the database of book listings. - -The project follows a **Clean Architecture** pattern, separating concerns into `Domain`, `Data`, and `Presentation` layers. - -Additionally, there is a `landingPage` directory containing a separate web project built with **SvelteKit** and **Vite**, presumably for marketing or as a web front-end for the service. - -### Key Technologies - -- **Mobile App (Flutter):** - - **State Management:** `provider` with `ChangeNotifier` - - **Navigation:** `go_router` - - **Dependency Injection:** `get_it` - - **Backend Integration:** `supabase_flutter` - - **Error Handling:** `dartz` for functional error handling (`Either`) -- **Landing Page (Web):** - - **Framework:** SvelteKit - - **Build Tool:** Vite -- **Backend:** - - Supabase (Auth, PostgreSQL Database, Storage) - -## Building and Running - -### Flutter Mobile App - -1. **Install Dependencies:** - - ```bash - flutter pub get - ``` - -2. **Configure Environment:** - Create a `.env` file in the project root. You can copy the example: - - ```bash - cp .env.example .env - ``` - - Then, fill in your Supabase project credentials in the `.env` file: - - ``` - SUPABASE_URL=your_supabase_project_url - SUPABASE_ANON_KEY=your_supabase_anon_key - ``` - -3. **Run the App:** - Use the `--dart-define` flags to pass the environment variables from the `.env` file to the Flutter app. - ```bash - flutter run \ - --dart-define="SUPABASE_URL=$(grep SUPABASE_URL .env | cut -d'=' -f2)" \ - --dart-define="SUPABASE_ANON_KEY=$(grep SUPABASE_ANON_KEY .env | cut -d'=' -f2)" \ - --dart-define="GOOGLE_CLIENT_ID=$(grep GOOGLE_CLIENT_ID .env | cut -d'=' -f2)" \ - --dart-define="FAPSHI_API_USER=$(grep FAPSHI_API_USER .env | cut -d'=' -f2)" \ - --dart-define="FAPSHI_API_KEY=$(grep FAPSHI_API_KEY .env | cut -d'=' -f2)" \ - --dart-define="FAPSHI_BASE_URL=$(grep FAPSHI_BASE_URL .env | cut -d'=' -f2)" - ``` - -### SvelteKit Landing Page - -1. **Navigate to Directory:** - - ```bash - cd landingPage - ``` - -2. **Install Dependencies:** - - ```bash - npm install - ``` - -3. **Run the Development Server:** - ```bash - npm run dev - ``` - -## Development Conventions - -- **Architecture:** The codebase is structured using Clean Architecture principles. When adding new features, create or modify files within the `lib/features` directory, respecting the `domain`, `data`, and `presentation` layers. -- **Code Quality:** Maintain high code quality by using the standard Dart/Flutter tools. Before committing, it's good practice to run: - - `flutter analyze` - To check for any static analysis issues. - - `dart format .` - To ensure consistent code formatting. -- **State Management:** App state is managed using the `provider` package. For new UI features requiring state, create a `ChangeNotifier` and provide it to the relevant widget tree. -- **Navigation:** All routing is handled by `go_router`. Add new routes or modify existing ones in `lib/config/router.dart`. diff --git a/assets/Founder.jpg b/assets/Founder.jpg deleted file mode 100644 index c65f741..0000000 Binary files a/assets/Founder.jpg and /dev/null differ diff --git a/bookbridge-rust-core/src/routes/escrow.rs b/bookbridge-rust-core/src/routes/escrow.rs index c1eb786..c88d181 100644 --- a/bookbridge-rust-core/src/routes/escrow.rs +++ b/bookbridge-rust-core/src/routes/escrow.rs @@ -1,12 +1,12 @@ -use axum::{extract::State, Json, response::IntoResponse}; -use serde::Serialize; +use crate::AppState; use crate::error::AppError; use crate::fapshi::FapshiClient; -use crate::AppState; -use sqlx::Row; +use axum::{Json, extract::State, response::IntoResponse}; +use chrono::Utc; +use serde::Serialize; use sqlx::PgConnection; +use sqlx::Row; use uuid::Uuid; -use chrono::Utc; #[derive(Serialize)] pub struct ProcessReleasesResponse { @@ -64,7 +64,7 @@ pub async fn handle_purchase_success_db( sqlx::query( "INSERT INTO escrow_transactions (transaction_id, status, created_at, updated_at) \ VALUES ($1, 'held', $2, $2) \ - ON CONFLICT (transaction_id) DO UPDATE SET status = 'held', updated_at = $2" + ON CONFLICT (transaction_id) DO UPDATE SET status = 'held', updated_at = $2", ) .bind(tx_id) .bind(now) @@ -87,17 +87,18 @@ pub async fn handle_purchase_success_db( Ok(()) } -pub async fn release_escrow( - state: &AppState, - tx_id: Uuid, -) -> Result<(), AppError> { +pub async fn release_escrow(state: &AppState, tx_id: Uuid) -> Result<(), AppError> { // 1. Claim in-progress lock to mitigate concurrent execution / double payout risk { - let mut in_progress = state.in_progress_payouts.lock().map_err(|_| { - AppError::Internal("Failed to acquire in-progress lock".to_string()) - })?; + let mut in_progress = state + .in_progress_payouts + .lock() + .map_err(|_| AppError::Internal("Failed to acquire in-progress lock".to_string()))?; if in_progress.contains(&tx_id) { - return Err(AppError::BadRequest(format!("Payout for transaction {} is already in progress", tx_id))); + return Err(AppError::BadRequest(format!( + "Payout for transaction {} is already in progress", + tx_id + ))); } in_progress.insert(tx_id); } @@ -127,7 +128,7 @@ pub async fn release_escrow( t.status as tx_status, e.status as escrow_status \ FROM transactions t \ JOIN escrow_transactions e ON t.id = e.transaction_id \ - WHERE t.id = $1" + WHERE t.id = $1", ) .bind(tx_id) .fetch_optional(&state.pool) @@ -145,7 +146,12 @@ pub async fn release_escrow( } row } - None => return Err(AppError::BadRequest(format!("Transaction {} not found", tx_id))), + None => { + return Err(AppError::BadRequest(format!( + "Transaction {} not found", + tx_id + ))); + } }; let listing_id: Uuid = tx.get("listing_id"); @@ -155,16 +161,19 @@ pub async fn release_escrow( let payment_reference: String = tx.get("payment_reference"); // 3. Fetch seller profile - let seller_row = sqlx::query( - "SELECT whatsapp_number, full_name FROM profiles WHERE id = $1" - ) - .bind(seller_id) - .fetch_optional(&state.pool) - .await?; + let seller_row = sqlx::query("SELECT whatsapp_number, full_name FROM profiles WHERE id = $1") + .bind(seller_id) + .fetch_optional(&state.pool) + .await?; let seller = match seller_row { Some(row) => row, - None => return Err(AppError::BadRequest(format!("Seller profile {} not found", seller_id))), + None => { + return Err(AppError::BadRequest(format!( + "Seller profile {} not found", + seller_id + ))); + } }; let whatsapp_number: Option = seller.get("whatsapp_number"); @@ -172,7 +181,11 @@ pub async fn release_escrow( let phone = match whatsapp_number { Some(num) if !num.trim().is_empty() => num, - _ => return Err(AppError::BadRequest("Seller has no payout number configured".to_string())), + _ => { + return Err(AppError::BadRequest( + "Seller has no payout number configured".to_string(), + )); + } }; let payout_amount = amount - commission_amount.unwrap_or(0.0); @@ -180,30 +193,42 @@ pub async fn release_escrow( let seller_name_str = full_name.unwrap_or_else(|| "BookBridge Seller".to_string()); // Check if payout was already executed successfully on Fapshi in a previous run - let mut trans_id = match fapshi.check_existing_payout(&state.pool, &external_id).await { + let mut trans_id = match fapshi + .check_existing_payout(&state.pool, &external_id) + .await + { Ok(Some(tid)) => { - tracing::info!("Payout for transaction {} already completed on Fapshi (transId: {}). Skipping payout call.", tx_id, tid); + tracing::info!( + "Payout for transaction {} already completed on Fapshi (transId: {}). Skipping payout call.", + tx_id, + tid + ); Some(tid) } Ok(None) => None, // Safe to proceed with payout Err(e) => { - tracing::error!("Could not verify prior payout status for tx {}: {:?}. Aborting to prevent potential double-payout.", tx_id, e); + tracing::error!( + "Could not verify prior payout status for tx {}: {:?}. Aborting to prevent potential double-payout.", + tx_id, + e + ); return Err(e); // Fail closed - let the next cron run retry } }; // If not already processed, execute payout if trans_id.is_none() { - let tid = fapshi.execute_payout( - &state.pool, - tx_id, - payout_amount, - &phone, - &seller_name_str, - &external_id, - listing_id, - ) - .await?; + let tid = fapshi + .execute_payout( + &state.pool, + tx_id, + payout_amount, + &phone, + &seller_name_str, + &external_id, + listing_id, + ) + .await?; trans_id = Some(tid); } @@ -215,7 +240,7 @@ pub async fn release_escrow( sqlx::query( "UPDATE escrow_transactions SET status = 'released', updated_at = $1 \ - WHERE transaction_id = $2 AND status = 'held'" + WHERE transaction_id = $2 AND status = 'held'", ) .bind(now) .bind(tx_id) @@ -244,7 +269,7 @@ pub async fn process_releases_handler( // Find all held escrows whose release_deadline has passed let expired_rows = sqlx::query( "SELECT transaction_id FROM escrow_transactions \ - WHERE status = 'held' AND release_deadline <= $1" + WHERE status = 'held' AND release_deadline <= $1", ) .bind(now) .fetch_all(&state.pool) @@ -293,11 +318,11 @@ pub async fn poll_pending_handler( // Find all transactions stuck in pending_payment for more than 10 minutes let ten_minutes_ago = Utc::now() - chrono::Duration::minutes(10); - + let txs = sqlx::query( "SELECT id, payment_reference, listing_id, buyer_id, seller_id, amount \ FROM transactions \ - WHERE status = 'pending_payment' AND created_at <= $1" + WHERE status = 'pending_payment' AND created_at <= $1", ) .bind(ten_minutes_ago) .fetch_all(&state.pool) @@ -314,7 +339,10 @@ pub async fn poll_pending_handler( tracing::info!("Checking Fapshi status for transaction ref: {}", reference); - match fapshi.poll_payment_status(&state.pool, tx_id, &reference).await { + match fapshi + .poll_payment_status(&state.pool, tx_id, &reference) + .await + { Ok(fapshi_status) => { let status_upper = fapshi_status.to_uppercase(); if status_upper == "SUCCESSFUL" || status_upper == "SUCCESS" { @@ -329,8 +357,13 @@ pub async fn poll_pending_handler( seller_id, tx_id, now, - ).await { - tracing::error!("Error writing successful purchase updates to DB during poll: {:?}", e); + ) + .await + { + tracing::error!( + "Error writing successful purchase updates to DB during poll: {:?}", + e + ); transaction.rollback().await?; results.push(PollResult { id: tx_id, @@ -374,7 +407,11 @@ pub async fn poll_pending_handler( } Err(e) => { let err_str = e.to_string(); - tracing::error!("Error polling transaction status for {}: {}", reference, err_str); + tracing::error!( + "Error polling transaction status for {}: {}", + reference, + err_str + ); results.push(PollResult { id: tx_id, reference: reference.clone(), diff --git a/git_final_out.txt b/git_final_out.txt deleted file mode 100644 index 8b76e05..0000000 --- a/git_final_out.txt +++ /dev/null @@ -1,9 +0,0 @@ -[dev 908a831] feat: implement boost listing priority, visual badge, and fix keyboard overlap in payment sheet - 1 file changed, 0 insertions(+), 0 deletions(-) - create mode 100644 git_final_out.txt -To https://github.com/DCT-Berinyuy/book-bridge.git - f5834ea..908a831 dev -> dev -error: Your local changes to the following files would be overwritten by checkout: - git_final_out.txt -Please commit your changes or stash them before you switch branches. -Aborting diff --git a/git_log_final.txt b/git_log_final.txt deleted file mode 100644 index d53bae2..0000000 --- a/git_log_final.txt +++ /dev/null @@ -1,39 +0,0 @@ -commit c53a46e3a4072d7b10d7429524a87b41d8f7bd3d -Author: DCT-Berinyuy -Date: Sat Feb 28 03:40:25 2026 +0100 - - feat: add Sold and Boosted badges to ListingDetailsScreen - - - Fix missing 'boosted' translation key in ARB files - - Implement _buildSoldBadge and _buildBoostedBadge in ListingDetailsScreen - - Add badges to the header of the details view - -commit b7ccb736ac5e3df203a2861c040f36b687f7d4f3 -Author: DCT-Berinyuy -Date: Sat Feb 28 02:51:21 2026 +0100 - - feat: complete Phase 4 In-App Payments - - - Create and migrate transactions table - - Implement Purchase logic in Svelte webhook to update 'Sold' listing status - - Handle initial automated Buyer<>Seller message creation on successful purchase - - Show localized 'Sold' UI badge and disable buying/chatting - - Added English/French localizations for Sold state - -commit 908a831d591efd7ae60d58739e4e191c708a6f9f -Author: DCT-Berinyuy -Date: Fri Feb 27 18:47:15 2026 +0100 - - feat: implement boost listing priority, visual badge, and fix keyboard overlap in payment sheet - -commit 4e5c7ff0b1aaa3684e5437695cffffce14883f49 -Author: DCT-Berinyuy -Date: Fri Feb 27 18:15:57 2026 +0100 - - feat: implement boost listing priority, visual badge, and fix keyboard overlap in payment sheet - -commit f5834eaaafb6955532b9ad280c925b560cfa4a51 -Author: DCT-Berinyuy -Date: Fri Feb 27 17:29:40 2026 +0100 - - feat: implement in-app chat, unread badge, and buy/pay now buttons diff --git a/git_log_now.txt b/git_log_now.txt deleted file mode 100644 index 7ab8e03..0000000 --- a/git_log_now.txt +++ /dev/null @@ -1,11 +0,0 @@ -commit b7ccb736ac5e3df203a2861c040f36b687f7d4f3 -Author: DCT-Berinyuy -Date: Sat Feb 28 02:51:21 2026 +0100 - - feat: complete Phase 4 In-App Payments - - - Create and migrate transactions table - - Implement Purchase logic in Svelte webhook to update 'Sold' listing status - - Handle initial automated Buyer<>Seller message creation on successful purchase - - Show localized 'Sold' UI badge and disable buying/chatting - - Added English/French localizations for Sold state diff --git a/git_merge_push_log.txt b/git_merge_push_log.txt deleted file mode 100644 index 93013ad..0000000 --- a/git_merge_push_log.txt +++ /dev/null @@ -1,2 +0,0 @@ -To https://github.com/DCT-Berinyuy/book-bridge.git - f335180..f5834ea dev -> dev diff --git a/git_status_debug.txt b/git_status_debug.txt deleted file mode 100644 index d748e31..0000000 --- a/git_status_debug.txt +++ /dev/null @@ -1,25 +0,0 @@ -On branch dev -Your branch is up to date with 'origin/dev'. - -Changes not staged for commit: - (use "git add ..." to update what will be committed) - (use "git restore ..." to discard changes in working directory) - modified: lib/config/router.dart - modified: lib/core/presentation/widgets/scaffold_with_navbar.dart - modified: lib/features/listings/presentation/screens/listing_details_screen.dart - modified: lib/injection_container.dart - modified: lib/l10n/app_en.arb - modified: lib/l10n/app_fr.arb - modified: lib/l10n/app_localizations.dart - modified: lib/l10n/app_localizations_en.dart - modified: lib/l10n/app_localizations_fr.dart - modified: lib/main.dart - modified: pubspec.yaml - -Untracked files: - (use "git add ..." to include in what will be committed) - git_status_debug.txt - lib/features/chat/ - test/ - -no changes added to commit (use "git add" and/or "git commit -a") diff --git a/git_status_now.txt b/git_status_now.txt deleted file mode 100644 index 9e49354..0000000 --- a/git_status_now.txt +++ /dev/null @@ -1,9 +0,0 @@ -On branch dev -Your branch is ahead of 'origin/dev' by 1 commit. - (use "git push" to publish your local commits) - -Untracked files: - (use "git add ..." to include in what will be committed) - git_status_now.txt - -nothing added to commit but untracked files present (use "git add" to track) diff --git a/landingPage/.gitignore b/landing-page/.gitignore similarity index 100% rename from landingPage/.gitignore rename to landing-page/.gitignore diff --git a/landingPage/.npmrc b/landing-page/.npmrc similarity index 100% rename from landingPage/.npmrc rename to landing-page/.npmrc diff --git a/landingPage/jsconfig.json b/landing-page/jsconfig.json similarity index 100% rename from landingPage/jsconfig.json rename to landing-page/jsconfig.json diff --git a/landingPage/package-lock.json b/landing-page/package-lock.json similarity index 100% rename from landingPage/package-lock.json rename to landing-page/package-lock.json diff --git a/landingPage/package.json b/landing-page/package.json similarity index 100% rename from landingPage/package.json rename to landing-page/package.json diff --git a/landingPage/src/app.css b/landing-page/src/app.css similarity index 100% rename from landingPage/src/app.css rename to landing-page/src/app.css diff --git a/landingPage/src/app.d.ts b/landing-page/src/app.d.ts similarity index 100% rename from landingPage/src/app.d.ts rename to landing-page/src/app.d.ts diff --git a/landingPage/src/app.html b/landing-page/src/app.html similarity index 100% rename from landingPage/src/app.html rename to landing-page/src/app.html diff --git a/landingPage/src/lib/assets/favicon.svg b/landing-page/src/lib/assets/favicon.svg similarity index 100% rename from landingPage/src/lib/assets/favicon.svg rename to landing-page/src/lib/assets/favicon.svg diff --git a/assets/logo.png b/landing-page/src/lib/assets/logo.png similarity index 100% rename from assets/logo.png rename to landing-page/src/lib/assets/logo.png diff --git a/landingPage/src/lib/assets/screenshot.png b/landing-page/src/lib/assets/screenshot.png similarity index 100% rename from landingPage/src/lib/assets/screenshot.png rename to landing-page/src/lib/assets/screenshot.png diff --git a/landingPage/src/lib/components/AppShowcase.svelte b/landing-page/src/lib/components/AppShowcase.svelte similarity index 100% rename from landingPage/src/lib/components/AppShowcase.svelte rename to landing-page/src/lib/components/AppShowcase.svelte diff --git a/landingPage/src/lib/components/Features.svelte b/landing-page/src/lib/components/Features.svelte similarity index 100% rename from landingPage/src/lib/components/Features.svelte rename to landing-page/src/lib/components/Features.svelte diff --git a/landingPage/src/lib/components/Footer.svelte b/landing-page/src/lib/components/Footer.svelte similarity index 100% rename from landingPage/src/lib/components/Footer.svelte rename to landing-page/src/lib/components/Footer.svelte diff --git a/landingPage/src/lib/components/Founder.svelte b/landing-page/src/lib/components/Founder.svelte similarity index 100% rename from landingPage/src/lib/components/Founder.svelte rename to landing-page/src/lib/components/Founder.svelte diff --git a/landingPage/src/lib/components/Hero.svelte b/landing-page/src/lib/components/Hero.svelte similarity index 100% rename from landingPage/src/lib/components/Hero.svelte rename to landing-page/src/lib/components/Hero.svelte diff --git a/landingPage/src/lib/components/HowItWorks.svelte b/landing-page/src/lib/components/HowItWorks.svelte similarity index 100% rename from landingPage/src/lib/components/HowItWorks.svelte rename to landing-page/src/lib/components/HowItWorks.svelte diff --git a/landingPage/src/lib/components/Navbar.svelte b/landing-page/src/lib/components/Navbar.svelte similarity index 100% rename from landingPage/src/lib/components/Navbar.svelte rename to landing-page/src/lib/components/Navbar.svelte diff --git a/landingPage/src/lib/components/TrustBar.svelte b/landing-page/src/lib/components/TrustBar.svelte similarity index 100% rename from landingPage/src/lib/components/TrustBar.svelte rename to landing-page/src/lib/components/TrustBar.svelte diff --git a/landingPage/src/lib/index.js b/landing-page/src/lib/index.js similarity index 100% rename from landingPage/src/lib/index.js rename to landing-page/src/lib/index.js diff --git a/landingPage/src/lib/links.js b/landing-page/src/lib/links.js similarity index 100% rename from landingPage/src/lib/links.js rename to landing-page/src/lib/links.js diff --git a/landingPage/src/lib/theme.svelte.js b/landing-page/src/lib/theme.svelte.js similarity index 100% rename from landingPage/src/lib/theme.svelte.js rename to landing-page/src/lib/theme.svelte.js diff --git a/landingPage/src/routes/+layout.svelte b/landing-page/src/routes/+layout.svelte similarity index 100% rename from landingPage/src/routes/+layout.svelte rename to landing-page/src/routes/+layout.svelte diff --git a/landingPage/src/routes/+page.svelte b/landing-page/src/routes/+page.svelte similarity index 100% rename from landingPage/src/routes/+page.svelte rename to landing-page/src/routes/+page.svelte diff --git a/landingPage/src/routes/api/webhooks/campay/+server.js b/landing-page/src/routes/api/webhooks/campay/+server.js similarity index 100% rename from landingPage/src/routes/api/webhooks/campay/+server.js rename to landing-page/src/routes/api/webhooks/campay/+server.js diff --git a/landingPage/src/routes/api/webhooks/fapshi-payouts/+server.js b/landing-page/src/routes/api/webhooks/fapshi-payouts/+server.js similarity index 100% rename from landingPage/src/routes/api/webhooks/fapshi-payouts/+server.js rename to landing-page/src/routes/api/webhooks/fapshi-payouts/+server.js diff --git a/landingPage/src/routes/api/webhooks/fapshi/+server.js b/landing-page/src/routes/api/webhooks/fapshi/+server.js similarity index 100% rename from landingPage/src/routes/api/webhooks/fapshi/+server.js rename to landing-page/src/routes/api/webhooks/fapshi/+server.js diff --git a/landingPage/static/favicon.png b/landing-page/static/favicon.png similarity index 100% rename from landingPage/static/favicon.png rename to landing-page/static/favicon.png diff --git a/landingPage/static/robots.txt b/landing-page/static/robots.txt similarity index 100% rename from landingPage/static/robots.txt rename to landing-page/static/robots.txt diff --git a/landingPage/svelte.config.js b/landing-page/svelte.config.js similarity index 100% rename from landingPage/svelte.config.js rename to landing-page/svelte.config.js diff --git a/landingPage/vite.config.js b/landing-page/vite.config.js similarity index 100% rename from landingPage/vite.config.js rename to landing-page/vite.config.js diff --git a/landingPage/check_db.py b/landingPage/check_db.py deleted file mode 100644 index 1b251c4..0000000 --- a/landingPage/check_db.py +++ /dev/null @@ -1,43 +0,0 @@ -import os -import sys -import json -import urllib.request -import urllib.error - -def load_env(): - env = {} - env_path = os.path.join(os.path.dirname(__file__), '../.env') - try: - with open(env_path, 'r') as f: - for line in f: - if '=' in line: - key, val = line.strip().split('=', 1) - env[key.strip()] = val.strip() - except Exception as e: - print(f"Error loading .env: {e}") - return env - -def main(): - env = load_env() - supabase_url = env.get('SUPABASE_URL') - supabase_key = env.get('SUPABASE_SERVICE_ROLE_KEY') - - if not supabase_url or not supabase_key: - print("Missing credentials in .env") - sys.exit(1) - - url = f"{supabase_url}/rest/v1/transactions?select=*&order=created_at.desc&limit=5" - req = urllib.request.Request(url, headers={ - 'apikey': supabase_key, - 'Authorization': f'Bearer {supabase_key}' - }) - - try: - with urllib.request.urlopen(req) as response: - data = json.loads(response.read().decode()) - print(json.dumps(data, indent=2)) - except urllib.error.URLError as e: - print(f"Request failed: {e}") - -if __name__ == "__main__": - main() diff --git a/landingPage/check_supabase_fast.py b/landingPage/check_supabase_fast.py deleted file mode 100644 index 9bc5b47..0000000 --- a/landingPage/check_supabase_fast.py +++ /dev/null @@ -1,50 +0,0 @@ -import os -import json -import urllib.request -import urllib.error - -def load_env(): - env = {} - env_path = os.path.join(os.path.dirname(__file__), '../.env') - try: - with open(env_path, 'r') as f: - for line in f: - if '=' in line: - key, val = line.strip().split('=', 1) - env[key.strip()] = val.strip() - except Exception as e: - print("Error:", e) - return env - -def main(): - env = load_env() - supabase_url = env.get('SUPABASE_URL') - supabase_key = env.get('SUPABASE_SERVICE_ROLE_KEY') - - url = f"{supabase_url}/rest/v1/profiles?select=id,full_name,whatsapp_number&limit=5" - req = urllib.request.Request(url, headers={ - 'apikey': supabase_key, - 'Authorization': f'Bearer {supabase_key}' - }) - - try: - with urllib.request.urlopen(req, timeout=10) as response: - data = json.loads(response.read().decode()) - print("Profiles:", json.dumps(data, indent=2)) - except Exception as e: - print(f"Request failed: {e}") - - url_tx = f"{supabase_url}/rest/v1/transactions?select=payment_reference,status,payout_status,payout_reference,amount,commission_amount&order=created_at.desc&limit=5" - req_tx = urllib.request.Request(url_tx, headers={ - 'apikey': supabase_key, - 'Authorization': f'Bearer {supabase_key}' - }) - try: - with urllib.request.urlopen(req_tx, timeout=10) as response: - data = json.loads(response.read().decode()) - print("Transactions:", json.dumps(data, indent=2)) - except Exception as e: - print(f"Request failed: {e}") - -if __name__ == "__main__": - main() diff --git a/landingPage/check_tx.js b/landingPage/check_tx.js deleted file mode 100644 index f57dfb7..0000000 --- a/landingPage/check_tx.js +++ /dev/null @@ -1,32 +0,0 @@ -import { createClient } from '@supabase/supabase-js'; -import dotenv from 'dotenv'; -import path from 'path'; -import { fileURLToPath } from 'url'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const envPath = path.resolve(__dirname, '../.env'); - -dotenv.config({ path: envPath }); - -const supabase = createClient( - process.env.SUPABASE_URL, - process.env.SUPABASE_SERVICE_ROLE_KEY -); - -async function run() { - const { data, error } = await supabase - .from('transactions') - .select('*') - .order('created_at', { ascending: false }) - .limit(5); - - if (error) { - console.error('Error fetching transactions:', error); - } else { - console.log('Transactions Data:'); - console.log(JSON.stringify(data, null, 2)); - } -} - -run(); diff --git a/landingPage/src/lib/assets/Founder.jpg b/landingPage/src/lib/assets/Founder.jpg deleted file mode 100644 index c65f741..0000000 Binary files a/landingPage/src/lib/assets/Founder.jpg and /dev/null differ diff --git a/analysis_options.yaml b/mobile/analysis_options.yaml similarity index 100% rename from analysis_options.yaml rename to mobile/analysis_options.yaml diff --git a/android/.gitignore b/mobile/android/.gitignore similarity index 100% rename from android/.gitignore rename to mobile/android/.gitignore diff --git a/android/app/build.gradle.kts b/mobile/android/app/build.gradle.kts similarity index 100% rename from android/app/build.gradle.kts rename to mobile/android/app/build.gradle.kts diff --git a/android/app/google-services.json b/mobile/android/app/google-services.json similarity index 100% rename from android/app/google-services.json rename to mobile/android/app/google-services.json diff --git a/android/app/src/debug/AndroidManifest.xml b/mobile/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from android/app/src/debug/AndroidManifest.xml rename to mobile/android/app/src/debug/AndroidManifest.xml diff --git a/android/app/src/main/AndroidManifest.xml b/mobile/android/app/src/main/AndroidManifest.xml similarity index 100% rename from android/app/src/main/AndroidManifest.xml rename to mobile/android/app/src/main/AndroidManifest.xml diff --git a/android/app/src/main/kotlin/com/example/book_bridge/MainActivity.kt b/mobile/android/app/src/main/kotlin/com/example/book_bridge/MainActivity.kt similarity index 100% rename from android/app/src/main/kotlin/com/example/book_bridge/MainActivity.kt rename to mobile/android/app/src/main/kotlin/com/example/book_bridge/MainActivity.kt diff --git a/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/mobile/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png similarity index 100% rename from android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png rename to mobile/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png diff --git a/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/mobile/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png similarity index 100% rename from android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png rename to mobile/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/mobile/android/app/src/main/res/drawable-v21/launch_background.xml similarity index 100% rename from android/app/src/main/res/drawable-v21/launch_background.xml rename to mobile/android/app/src/main/res/drawable-v21/launch_background.xml diff --git a/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/mobile/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png similarity index 100% rename from android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png rename to mobile/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/mobile/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png rename to mobile/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/mobile/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png rename to mobile/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png diff --git a/android/app/src/main/res/drawable/launch_background.xml b/mobile/android/app/src/main/res/drawable/launch_background.xml similarity index 100% rename from android/app/src/main/res/drawable/launch_background.xml rename to mobile/android/app/src/main/res/drawable/launch_background.xml diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/android/app/src/main/res/values-night/styles.xml b/mobile/android/app/src/main/res/values-night/styles.xml similarity index 100% rename from android/app/src/main/res/values-night/styles.xml rename to mobile/android/app/src/main/res/values-night/styles.xml diff --git a/android/app/src/main/res/values/colors.xml b/mobile/android/app/src/main/res/values/colors.xml similarity index 100% rename from android/app/src/main/res/values/colors.xml rename to mobile/android/app/src/main/res/values/colors.xml diff --git a/android/app/src/main/res/values/styles.xml b/mobile/android/app/src/main/res/values/styles.xml similarity index 100% rename from android/app/src/main/res/values/styles.xml rename to mobile/android/app/src/main/res/values/styles.xml diff --git a/android/app/src/profile/AndroidManifest.xml b/mobile/android/app/src/profile/AndroidManifest.xml similarity index 100% rename from android/app/src/profile/AndroidManifest.xml rename to mobile/android/app/src/profile/AndroidManifest.xml diff --git a/android/build.gradle.kts b/mobile/android/build.gradle.kts similarity index 100% rename from android/build.gradle.kts rename to mobile/android/build.gradle.kts diff --git a/android/gradle.properties b/mobile/android/gradle.properties similarity index 100% rename from android/gradle.properties rename to mobile/android/gradle.properties diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/mobile/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from android/gradle/wrapper/gradle-wrapper.properties rename to mobile/android/gradle/wrapper/gradle-wrapper.properties diff --git a/android/settings.gradle.kts b/mobile/android/settings.gradle.kts similarity index 100% rename from android/settings.gradle.kts rename to mobile/android/settings.gradle.kts diff --git a/assets/Antigravity_Prompt_BookBridge_Rust_Phase1.md b/mobile/assets/Antigravity_Prompt_BookBridge_Rust_Phase1.md similarity index 100% rename from assets/Antigravity_Prompt_BookBridge_Rust_Phase1.md rename to mobile/assets/Antigravity_Prompt_BookBridge_Rust_Phase1.md diff --git a/assets/Antigravity_Prompt_BookBridge_Rust_Phase2.md b/mobile/assets/Antigravity_Prompt_BookBridge_Rust_Phase2.md similarity index 100% rename from assets/Antigravity_Prompt_BookBridge_Rust_Phase2.md rename to mobile/assets/Antigravity_Prompt_BookBridge_Rust_Phase2.md diff --git a/assets/BookBridge_v2_Implementation_Plan.md b/mobile/assets/BookBridge_v2_Implementation_Plan.md similarity index 100% rename from assets/BookBridge_v2_Implementation_Plan.md rename to mobile/assets/BookBridge_v2_Implementation_Plan.md diff --git a/assets/app_icon.png b/mobile/assets/app_icon.png similarity index 100% rename from assets/app_icon.png rename to mobile/assets/app_icon.png diff --git a/assets/flow_diagram.png b/mobile/assets/flow_diagram.png similarity index 100% rename from assets/flow_diagram.png rename to mobile/assets/flow_diagram.png diff --git a/landingPage/src/lib/assets/logo.png b/mobile/assets/logo.png similarity index 100% rename from landingPage/src/lib/assets/logo.png rename to mobile/assets/logo.png diff --git a/assets/sreenshots/screenshot1.png b/mobile/assets/sreenshots/screenshot1.png similarity index 100% rename from assets/sreenshots/screenshot1.png rename to mobile/assets/sreenshots/screenshot1.png diff --git a/assets/sreenshots/screenshot2.png b/mobile/assets/sreenshots/screenshot2.png similarity index 100% rename from assets/sreenshots/screenshot2.png rename to mobile/assets/sreenshots/screenshot2.png diff --git a/assets/sreenshots/screenshot3.png b/mobile/assets/sreenshots/screenshot3.png similarity index 100% rename from assets/sreenshots/screenshot3.png rename to mobile/assets/sreenshots/screenshot3.png diff --git a/firebase.json b/mobile/firebase.json similarity index 100% rename from firebase.json rename to mobile/firebase.json diff --git a/ios/.gitignore b/mobile/ios/.gitignore similarity index 100% rename from ios/.gitignore rename to mobile/ios/.gitignore diff --git a/ios/Flutter/AppFrameworkInfo.plist b/mobile/ios/Flutter/AppFrameworkInfo.plist similarity index 100% rename from ios/Flutter/AppFrameworkInfo.plist rename to mobile/ios/Flutter/AppFrameworkInfo.plist diff --git a/ios/Flutter/Debug.xcconfig b/mobile/ios/Flutter/Debug.xcconfig similarity index 100% rename from ios/Flutter/Debug.xcconfig rename to mobile/ios/Flutter/Debug.xcconfig diff --git a/ios/Flutter/Release.xcconfig b/mobile/ios/Flutter/Release.xcconfig similarity index 100% rename from ios/Flutter/Release.xcconfig rename to mobile/ios/Flutter/Release.xcconfig diff --git a/ios/Runner.xcodeproj/project.pbxproj b/mobile/ios/Runner.xcodeproj/project.pbxproj similarity index 100% rename from ios/Runner.xcodeproj/project.pbxproj rename to mobile/ios/Runner.xcodeproj/project.pbxproj diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mobile/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to mobile/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mobile/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to mobile/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/mobile/ios/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from ios/Runner.xcworkspace/contents.xcworkspacedata rename to mobile/ios/Runner.xcworkspace/contents.xcworkspacedata diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobile/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to mobile/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mobile/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to mobile/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/ios/Runner/AppDelegate.swift b/mobile/ios/Runner/AppDelegate.swift similarity index 100% rename from ios/Runner/AppDelegate.swift rename to mobile/ios/Runner/AppDelegate.swift diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png rename to mobile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json similarity index 100% rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json rename to mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png similarity index 100% rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png rename to mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png similarity index 100% rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png rename to mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png similarity index 100% rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png rename to mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md similarity index 100% rename from ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md rename to mobile/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/mobile/ios/Runner/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from ios/Runner/Base.lproj/LaunchScreen.storyboard rename to mobile/ios/Runner/Base.lproj/LaunchScreen.storyboard diff --git a/ios/Runner/Base.lproj/Main.storyboard b/mobile/ios/Runner/Base.lproj/Main.storyboard similarity index 100% rename from ios/Runner/Base.lproj/Main.storyboard rename to mobile/ios/Runner/Base.lproj/Main.storyboard diff --git a/ios/Runner/Info.plist b/mobile/ios/Runner/Info.plist similarity index 100% rename from ios/Runner/Info.plist rename to mobile/ios/Runner/Info.plist diff --git a/ios/Runner/Runner-Bridging-Header.h b/mobile/ios/Runner/Runner-Bridging-Header.h similarity index 100% rename from ios/Runner/Runner-Bridging-Header.h rename to mobile/ios/Runner/Runner-Bridging-Header.h diff --git a/ios/RunnerTests/RunnerTests.swift b/mobile/ios/RunnerTests/RunnerTests.swift similarity index 100% rename from ios/RunnerTests/RunnerTests.swift rename to mobile/ios/RunnerTests/RunnerTests.swift diff --git a/lib/config/app_config.dart b/mobile/lib/config/app_config.dart similarity index 100% rename from lib/config/app_config.dart rename to mobile/lib/config/app_config.dart diff --git a/lib/config/router.dart b/mobile/lib/config/router.dart similarity index 100% rename from lib/config/router.dart rename to mobile/lib/config/router.dart diff --git a/lib/core/constants/categories.dart b/mobile/lib/core/constants/categories.dart similarity index 100% rename from lib/core/constants/categories.dart rename to mobile/lib/core/constants/categories.dart diff --git a/lib/core/error/exceptions.dart b/mobile/lib/core/error/exceptions.dart similarity index 100% rename from lib/core/error/exceptions.dart rename to mobile/lib/core/error/exceptions.dart diff --git a/lib/core/error/failures.dart b/mobile/lib/core/error/failures.dart similarity index 100% rename from lib/core/error/failures.dart rename to mobile/lib/core/error/failures.dart diff --git a/lib/core/local_db/local_database.dart b/mobile/lib/core/local_db/local_database.dart similarity index 100% rename from lib/core/local_db/local_database.dart rename to mobile/lib/core/local_db/local_database.dart diff --git a/lib/core/presentation/viewmodels/theme_viewmodel.dart b/mobile/lib/core/presentation/viewmodels/theme_viewmodel.dart similarity index 100% rename from lib/core/presentation/viewmodels/theme_viewmodel.dart rename to mobile/lib/core/presentation/viewmodels/theme_viewmodel.dart diff --git a/lib/core/presentation/widgets/notification_icon.dart b/mobile/lib/core/presentation/widgets/notification_icon.dart similarity index 100% rename from lib/core/presentation/widgets/notification_icon.dart rename to mobile/lib/core/presentation/widgets/notification_icon.dart diff --git a/lib/core/presentation/widgets/offline_banner.dart b/mobile/lib/core/presentation/widgets/offline_banner.dart similarity index 100% rename from lib/core/presentation/widgets/offline_banner.dart rename to mobile/lib/core/presentation/widgets/offline_banner.dart diff --git a/lib/core/presentation/widgets/scaffold_with_navbar.dart b/mobile/lib/core/presentation/widgets/scaffold_with_navbar.dart similarity index 100% rename from lib/core/presentation/widgets/scaffold_with_navbar.dart rename to mobile/lib/core/presentation/widgets/scaffold_with_navbar.dart diff --git a/lib/core/theme/app_theme.dart b/mobile/lib/core/theme/app_theme.dart similarity index 100% rename from lib/core/theme/app_theme.dart rename to mobile/lib/core/theme/app_theme.dart diff --git a/lib/core/usecases/usecase.dart b/mobile/lib/core/usecases/usecase.dart similarity index 100% rename from lib/core/usecases/usecase.dart rename to mobile/lib/core/usecases/usecase.dart diff --git a/lib/features/auth/data/datasources/supabase_auth_data_source.dart b/mobile/lib/features/auth/data/datasources/supabase_auth_data_source.dart similarity index 100% rename from lib/features/auth/data/datasources/supabase_auth_data_source.dart rename to mobile/lib/features/auth/data/datasources/supabase_auth_data_source.dart diff --git a/lib/features/auth/data/models/user_model.dart b/mobile/lib/features/auth/data/models/user_model.dart similarity index 100% rename from lib/features/auth/data/models/user_model.dart rename to mobile/lib/features/auth/data/models/user_model.dart diff --git a/lib/features/auth/data/repositories/auth_repository_impl.dart b/mobile/lib/features/auth/data/repositories/auth_repository_impl.dart similarity index 100% rename from lib/features/auth/data/repositories/auth_repository_impl.dart rename to mobile/lib/features/auth/data/repositories/auth_repository_impl.dart diff --git a/lib/features/auth/domain/entities/user.dart b/mobile/lib/features/auth/domain/entities/user.dart similarity index 100% rename from lib/features/auth/domain/entities/user.dart rename to mobile/lib/features/auth/domain/entities/user.dart diff --git a/lib/features/auth/domain/repositories/auth_repository.dart b/mobile/lib/features/auth/domain/repositories/auth_repository.dart similarity index 100% rename from lib/features/auth/domain/repositories/auth_repository.dart rename to mobile/lib/features/auth/domain/repositories/auth_repository.dart diff --git a/lib/features/auth/domain/usecases/get_current_user_usecase.dart b/mobile/lib/features/auth/domain/usecases/get_current_user_usecase.dart similarity index 100% rename from lib/features/auth/domain/usecases/get_current_user_usecase.dart rename to mobile/lib/features/auth/domain/usecases/get_current_user_usecase.dart diff --git a/lib/features/auth/domain/usecases/send_password_reset_email_usecase.dart b/mobile/lib/features/auth/domain/usecases/send_password_reset_email_usecase.dart similarity index 100% rename from lib/features/auth/domain/usecases/send_password_reset_email_usecase.dart rename to mobile/lib/features/auth/domain/usecases/send_password_reset_email_usecase.dart diff --git a/lib/features/auth/domain/usecases/sign_in_usecase.dart b/mobile/lib/features/auth/domain/usecases/sign_in_usecase.dart similarity index 100% rename from lib/features/auth/domain/usecases/sign_in_usecase.dart rename to mobile/lib/features/auth/domain/usecases/sign_in_usecase.dart diff --git a/lib/features/auth/domain/usecases/sign_in_with_google_usecase.dart b/mobile/lib/features/auth/domain/usecases/sign_in_with_google_usecase.dart similarity index 100% rename from lib/features/auth/domain/usecases/sign_in_with_google_usecase.dart rename to mobile/lib/features/auth/domain/usecases/sign_in_with_google_usecase.dart diff --git a/lib/features/auth/domain/usecases/sign_out_usecase.dart b/mobile/lib/features/auth/domain/usecases/sign_out_usecase.dart similarity index 100% rename from lib/features/auth/domain/usecases/sign_out_usecase.dart rename to mobile/lib/features/auth/domain/usecases/sign_out_usecase.dart diff --git a/lib/features/auth/domain/usecases/sign_up_usecase.dart b/mobile/lib/features/auth/domain/usecases/sign_up_usecase.dart similarity index 100% rename from lib/features/auth/domain/usecases/sign_up_usecase.dart rename to mobile/lib/features/auth/domain/usecases/sign_up_usecase.dart diff --git a/lib/features/auth/domain/usecases/update_user_usecase.dart b/mobile/lib/features/auth/domain/usecases/update_user_usecase.dart similarity index 100% rename from lib/features/auth/domain/usecases/update_user_usecase.dart rename to mobile/lib/features/auth/domain/usecases/update_user_usecase.dart diff --git a/lib/features/auth/presentation/screens/complete_profile_screen.dart b/mobile/lib/features/auth/presentation/screens/complete_profile_screen.dart similarity index 100% rename from lib/features/auth/presentation/screens/complete_profile_screen.dart rename to mobile/lib/features/auth/presentation/screens/complete_profile_screen.dart diff --git a/lib/features/auth/presentation/screens/edit_profile_screen.dart b/mobile/lib/features/auth/presentation/screens/edit_profile_screen.dart similarity index 100% rename from lib/features/auth/presentation/screens/edit_profile_screen.dart rename to mobile/lib/features/auth/presentation/screens/edit_profile_screen.dart diff --git a/lib/features/auth/presentation/screens/sign_in_screen.dart b/mobile/lib/features/auth/presentation/screens/sign_in_screen.dart similarity index 100% rename from lib/features/auth/presentation/screens/sign_in_screen.dart rename to mobile/lib/features/auth/presentation/screens/sign_in_screen.dart diff --git a/lib/features/auth/presentation/screens/sign_up_screen.dart b/mobile/lib/features/auth/presentation/screens/sign_up_screen.dart similarity index 100% rename from lib/features/auth/presentation/screens/sign_up_screen.dart rename to mobile/lib/features/auth/presentation/screens/sign_up_screen.dart diff --git a/lib/features/auth/presentation/screens/terms_screen.dart b/mobile/lib/features/auth/presentation/screens/terms_screen.dart similarity index 100% rename from lib/features/auth/presentation/screens/terms_screen.dart rename to mobile/lib/features/auth/presentation/screens/terms_screen.dart diff --git a/lib/features/auth/presentation/viewmodels/auth_viewmodel.dart b/mobile/lib/features/auth/presentation/viewmodels/auth_viewmodel.dart similarity index 100% rename from lib/features/auth/presentation/viewmodels/auth_viewmodel.dart rename to mobile/lib/features/auth/presentation/viewmodels/auth_viewmodel.dart diff --git a/lib/features/auth/presentation/widgets/marketplace_agreement_sheet.dart b/mobile/lib/features/auth/presentation/widgets/marketplace_agreement_sheet.dart similarity index 100% rename from lib/features/auth/presentation/widgets/marketplace_agreement_sheet.dart rename to mobile/lib/features/auth/presentation/widgets/marketplace_agreement_sheet.dart diff --git a/lib/features/chat/data/datasources/supabase_chat_data_source.dart b/mobile/lib/features/chat/data/datasources/supabase_chat_data_source.dart similarity index 100% rename from lib/features/chat/data/datasources/supabase_chat_data_source.dart rename to mobile/lib/features/chat/data/datasources/supabase_chat_data_source.dart diff --git a/lib/features/chat/data/models/message_model.dart b/mobile/lib/features/chat/data/models/message_model.dart similarity index 100% rename from lib/features/chat/data/models/message_model.dart rename to mobile/lib/features/chat/data/models/message_model.dart diff --git a/lib/features/chat/data/repositories/chat_repository_impl.dart b/mobile/lib/features/chat/data/repositories/chat_repository_impl.dart similarity index 100% rename from lib/features/chat/data/repositories/chat_repository_impl.dart rename to mobile/lib/features/chat/data/repositories/chat_repository_impl.dart diff --git a/lib/features/chat/domain/entities/conversation.dart b/mobile/lib/features/chat/domain/entities/conversation.dart similarity index 100% rename from lib/features/chat/domain/entities/conversation.dart rename to mobile/lib/features/chat/domain/entities/conversation.dart diff --git a/lib/features/chat/domain/entities/message.dart b/mobile/lib/features/chat/domain/entities/message.dart similarity index 100% rename from lib/features/chat/domain/entities/message.dart rename to mobile/lib/features/chat/domain/entities/message.dart diff --git a/lib/features/chat/domain/repositories/chat_repository.dart b/mobile/lib/features/chat/domain/repositories/chat_repository.dart similarity index 100% rename from lib/features/chat/domain/repositories/chat_repository.dart rename to mobile/lib/features/chat/domain/repositories/chat_repository.dart diff --git a/lib/features/chat/presentation/screens/chat_list_screen.dart b/mobile/lib/features/chat/presentation/screens/chat_list_screen.dart similarity index 100% rename from lib/features/chat/presentation/screens/chat_list_screen.dart rename to mobile/lib/features/chat/presentation/screens/chat_list_screen.dart diff --git a/lib/features/chat/presentation/screens/chat_screen.dart b/mobile/lib/features/chat/presentation/screens/chat_screen.dart similarity index 100% rename from lib/features/chat/presentation/screens/chat_screen.dart rename to mobile/lib/features/chat/presentation/screens/chat_screen.dart diff --git a/lib/features/chat/presentation/viewmodels/chat_viewmodel.dart b/mobile/lib/features/chat/presentation/viewmodels/chat_viewmodel.dart similarity index 100% rename from lib/features/chat/presentation/viewmodels/chat_viewmodel.dart rename to mobile/lib/features/chat/presentation/viewmodels/chat_viewmodel.dart diff --git a/lib/features/favorites/data/datasources/supabase_favorites_data_source.dart b/mobile/lib/features/favorites/data/datasources/supabase_favorites_data_source.dart similarity index 100% rename from lib/features/favorites/data/datasources/supabase_favorites_data_source.dart rename to mobile/lib/features/favorites/data/datasources/supabase_favorites_data_source.dart diff --git a/lib/features/favorites/data/models/favorite_model.dart b/mobile/lib/features/favorites/data/models/favorite_model.dart similarity index 100% rename from lib/features/favorites/data/models/favorite_model.dart rename to mobile/lib/features/favorites/data/models/favorite_model.dart diff --git a/lib/features/favorites/data/repositories/favorites_repository_impl.dart b/mobile/lib/features/favorites/data/repositories/favorites_repository_impl.dart similarity index 100% rename from lib/features/favorites/data/repositories/favorites_repository_impl.dart rename to mobile/lib/features/favorites/data/repositories/favorites_repository_impl.dart diff --git a/lib/features/favorites/domain/entities/favorite.dart b/mobile/lib/features/favorites/domain/entities/favorite.dart similarity index 100% rename from lib/features/favorites/domain/entities/favorite.dart rename to mobile/lib/features/favorites/domain/entities/favorite.dart diff --git a/lib/features/favorites/domain/repositories/favorites_repository.dart b/mobile/lib/features/favorites/domain/repositories/favorites_repository.dart similarity index 100% rename from lib/features/favorites/domain/repositories/favorites_repository.dart rename to mobile/lib/features/favorites/domain/repositories/favorites_repository.dart diff --git a/lib/features/favorites/domain/usecases/get_favorites_usecase.dart b/mobile/lib/features/favorites/domain/usecases/get_favorites_usecase.dart similarity index 100% rename from lib/features/favorites/domain/usecases/get_favorites_usecase.dart rename to mobile/lib/features/favorites/domain/usecases/get_favorites_usecase.dart diff --git a/lib/features/favorites/domain/usecases/is_favorite_usecase.dart b/mobile/lib/features/favorites/domain/usecases/is_favorite_usecase.dart similarity index 100% rename from lib/features/favorites/domain/usecases/is_favorite_usecase.dart rename to mobile/lib/features/favorites/domain/usecases/is_favorite_usecase.dart diff --git a/lib/features/favorites/domain/usecases/toggle_favorite_usecase.dart b/mobile/lib/features/favorites/domain/usecases/toggle_favorite_usecase.dart similarity index 100% rename from lib/features/favorites/domain/usecases/toggle_favorite_usecase.dart rename to mobile/lib/features/favorites/domain/usecases/toggle_favorite_usecase.dart diff --git a/lib/features/favorites/presentation/screens/favorites_screen.dart b/mobile/lib/features/favorites/presentation/screens/favorites_screen.dart similarity index 100% rename from lib/features/favorites/presentation/screens/favorites_screen.dart rename to mobile/lib/features/favorites/presentation/screens/favorites_screen.dart diff --git a/lib/features/favorites/presentation/viewmodels/favorites_viewmodel.dart b/mobile/lib/features/favorites/presentation/viewmodels/favorites_viewmodel.dart similarity index 100% rename from lib/features/favorites/presentation/viewmodels/favorites_viewmodel.dart rename to mobile/lib/features/favorites/presentation/viewmodels/favorites_viewmodel.dart diff --git a/lib/features/favorites/presentation/widgets/pulse_heart_icon.dart b/mobile/lib/features/favorites/presentation/widgets/pulse_heart_icon.dart similarity index 100% rename from lib/features/favorites/presentation/widgets/pulse_heart_icon.dart rename to mobile/lib/features/favorites/presentation/widgets/pulse_heart_icon.dart diff --git a/lib/features/favorites/presentation/widgets/skeleton_listing_card.dart b/mobile/lib/features/favorites/presentation/widgets/skeleton_listing_card.dart similarity index 100% rename from lib/features/favorites/presentation/widgets/skeleton_listing_card.dart rename to mobile/lib/features/favorites/presentation/widgets/skeleton_listing_card.dart diff --git a/lib/features/impact/data/datasources/supabase_impact_data_source.dart b/mobile/lib/features/impact/data/datasources/supabase_impact_data_source.dart similarity index 100% rename from lib/features/impact/data/datasources/supabase_impact_data_source.dart rename to mobile/lib/features/impact/data/datasources/supabase_impact_data_source.dart diff --git a/lib/features/impact/data/models/platform_stats_model.dart b/mobile/lib/features/impact/data/models/platform_stats_model.dart similarity index 100% rename from lib/features/impact/data/models/platform_stats_model.dart rename to mobile/lib/features/impact/data/models/platform_stats_model.dart diff --git a/lib/features/impact/data/repositories/impact_repository_impl.dart b/mobile/lib/features/impact/data/repositories/impact_repository_impl.dart similarity index 100% rename from lib/features/impact/data/repositories/impact_repository_impl.dart rename to mobile/lib/features/impact/data/repositories/impact_repository_impl.dart diff --git a/lib/features/impact/domain/entities/platform_stats.dart b/mobile/lib/features/impact/domain/entities/platform_stats.dart similarity index 100% rename from lib/features/impact/domain/entities/platform_stats.dart rename to mobile/lib/features/impact/domain/entities/platform_stats.dart diff --git a/lib/features/impact/domain/repositories/impact_repository.dart b/mobile/lib/features/impact/domain/repositories/impact_repository.dart similarity index 100% rename from lib/features/impact/domain/repositories/impact_repository.dart rename to mobile/lib/features/impact/domain/repositories/impact_repository.dart diff --git a/lib/features/impact/domain/usecases/get_platform_stats_usecase.dart b/mobile/lib/features/impact/domain/usecases/get_platform_stats_usecase.dart similarity index 100% rename from lib/features/impact/domain/usecases/get_platform_stats_usecase.dart rename to mobile/lib/features/impact/domain/usecases/get_platform_stats_usecase.dart diff --git a/lib/features/impact/presentation/widgets/count_up_text.dart b/mobile/lib/features/impact/presentation/widgets/count_up_text.dart similarity index 100% rename from lib/features/impact/presentation/widgets/count_up_text.dart rename to mobile/lib/features/impact/presentation/widgets/count_up_text.dart diff --git a/lib/features/impact/presentation/widgets/impact_stats_widget.dart b/mobile/lib/features/impact/presentation/widgets/impact_stats_widget.dart similarity index 100% rename from lib/features/impact/presentation/widgets/impact_stats_widget.dart rename to mobile/lib/features/impact/presentation/widgets/impact_stats_widget.dart diff --git a/lib/features/listings/data/datasources/local_listings_datasource.dart b/mobile/lib/features/listings/data/datasources/local_listings_datasource.dart similarity index 100% rename from lib/features/listings/data/datasources/local_listings_datasource.dart rename to mobile/lib/features/listings/data/datasources/local_listings_datasource.dart diff --git a/lib/features/listings/data/datasources/supabase_listings_data_source.dart b/mobile/lib/features/listings/data/datasources/supabase_listings_data_source.dart similarity index 100% rename from lib/features/listings/data/datasources/supabase_listings_data_source.dart rename to mobile/lib/features/listings/data/datasources/supabase_listings_data_source.dart diff --git a/lib/features/listings/data/datasources/supabase_storage_data_source.dart b/mobile/lib/features/listings/data/datasources/supabase_storage_data_source.dart similarity index 100% rename from lib/features/listings/data/datasources/supabase_storage_data_source.dart rename to mobile/lib/features/listings/data/datasources/supabase_storage_data_source.dart diff --git a/lib/features/listings/data/models/listing_model.dart b/mobile/lib/features/listings/data/models/listing_model.dart similarity index 100% rename from lib/features/listings/data/models/listing_model.dart rename to mobile/lib/features/listings/data/models/listing_model.dart diff --git a/lib/features/listings/data/repositories/listing_repository_impl.dart b/mobile/lib/features/listings/data/repositories/listing_repository_impl.dart similarity index 100% rename from lib/features/listings/data/repositories/listing_repository_impl.dart rename to mobile/lib/features/listings/data/repositories/listing_repository_impl.dart diff --git a/lib/features/listings/domain/entities/book_condition.dart b/mobile/lib/features/listings/domain/entities/book_condition.dart similarity index 100% rename from lib/features/listings/domain/entities/book_condition.dart rename to mobile/lib/features/listings/domain/entities/book_condition.dart diff --git a/lib/features/listings/domain/entities/category.dart b/mobile/lib/features/listings/domain/entities/category.dart similarity index 100% rename from lib/features/listings/domain/entities/category.dart rename to mobile/lib/features/listings/domain/entities/category.dart diff --git a/lib/features/listings/domain/entities/listing.dart b/mobile/lib/features/listings/domain/entities/listing.dart similarity index 100% rename from lib/features/listings/domain/entities/listing.dart rename to mobile/lib/features/listings/domain/entities/listing.dart diff --git a/lib/features/listings/domain/repositories/listing_repository.dart b/mobile/lib/features/listings/domain/repositories/listing_repository.dart similarity index 100% rename from lib/features/listings/domain/repositories/listing_repository.dart rename to mobile/lib/features/listings/domain/repositories/listing_repository.dart diff --git a/lib/features/listings/domain/usecases/create_listing_usecase.dart b/mobile/lib/features/listings/domain/usecases/create_listing_usecase.dart similarity index 100% rename from lib/features/listings/domain/usecases/create_listing_usecase.dart rename to mobile/lib/features/listings/domain/usecases/create_listing_usecase.dart diff --git a/lib/features/listings/domain/usecases/delete_listing_usecase.dart b/mobile/lib/features/listings/domain/usecases/delete_listing_usecase.dart similarity index 100% rename from lib/features/listings/domain/usecases/delete_listing_usecase.dart rename to mobile/lib/features/listings/domain/usecases/delete_listing_usecase.dart diff --git a/lib/features/listings/domain/usecases/get_listing_details_usecase.dart b/mobile/lib/features/listings/domain/usecases/get_listing_details_usecase.dart similarity index 100% rename from lib/features/listings/domain/usecases/get_listing_details_usecase.dart rename to mobile/lib/features/listings/domain/usecases/get_listing_details_usecase.dart diff --git a/lib/features/listings/domain/usecases/get_listings_usecase.dart b/mobile/lib/features/listings/domain/usecases/get_listings_usecase.dart similarity index 100% rename from lib/features/listings/domain/usecases/get_listings_usecase.dart rename to mobile/lib/features/listings/domain/usecases/get_listings_usecase.dart diff --git a/lib/features/listings/domain/usecases/get_user_listings_usecase.dart b/mobile/lib/features/listings/domain/usecases/get_user_listings_usecase.dart similarity index 100% rename from lib/features/listings/domain/usecases/get_user_listings_usecase.dart rename to mobile/lib/features/listings/domain/usecases/get_user_listings_usecase.dart diff --git a/lib/features/listings/domain/usecases/search_listings_usecase.dart b/mobile/lib/features/listings/domain/usecases/search_listings_usecase.dart similarity index 100% rename from lib/features/listings/domain/usecases/search_listings_usecase.dart rename to mobile/lib/features/listings/domain/usecases/search_listings_usecase.dart diff --git a/lib/features/listings/domain/usecases/update_listing_usecase.dart b/mobile/lib/features/listings/domain/usecases/update_listing_usecase.dart similarity index 100% rename from lib/features/listings/domain/usecases/update_listing_usecase.dart rename to mobile/lib/features/listings/domain/usecases/update_listing_usecase.dart diff --git a/lib/features/listings/presentation/screens/about_screen.dart b/mobile/lib/features/listings/presentation/screens/about_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/about_screen.dart rename to mobile/lib/features/listings/presentation/screens/about_screen.dart diff --git a/lib/features/listings/presentation/screens/categories_screen.dart b/mobile/lib/features/listings/presentation/screens/categories_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/categories_screen.dart rename to mobile/lib/features/listings/presentation/screens/categories_screen.dart diff --git a/lib/features/listings/presentation/screens/contact_us_screen.dart b/mobile/lib/features/listings/presentation/screens/contact_us_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/contact_us_screen.dart rename to mobile/lib/features/listings/presentation/screens/contact_us_screen.dart diff --git a/lib/features/listings/presentation/screens/faq_screen.dart b/mobile/lib/features/listings/presentation/screens/faq_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/faq_screen.dart rename to mobile/lib/features/listings/presentation/screens/faq_screen.dart diff --git a/lib/features/listings/presentation/screens/feedback_screen.dart b/mobile/lib/features/listings/presentation/screens/feedback_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/feedback_screen.dart rename to mobile/lib/features/listings/presentation/screens/feedback_screen.dart diff --git a/lib/features/listings/presentation/screens/home_screen.dart b/mobile/lib/features/listings/presentation/screens/home_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/home_screen.dart rename to mobile/lib/features/listings/presentation/screens/home_screen.dart diff --git a/lib/features/listings/presentation/screens/listing_details_screen.dart b/mobile/lib/features/listings/presentation/screens/listing_details_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/listing_details_screen.dart rename to mobile/lib/features/listings/presentation/screens/listing_details_screen.dart diff --git a/lib/features/listings/presentation/screens/my_books_screen.dart b/mobile/lib/features/listings/presentation/screens/my_books_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/my_books_screen.dart rename to mobile/lib/features/listings/presentation/screens/my_books_screen.dart diff --git a/lib/features/listings/presentation/screens/privacy_policy_screen.dart b/mobile/lib/features/listings/presentation/screens/privacy_policy_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/privacy_policy_screen.dart rename to mobile/lib/features/listings/presentation/screens/privacy_policy_screen.dart diff --git a/lib/features/listings/presentation/screens/profile_screen.dart b/mobile/lib/features/listings/presentation/screens/profile_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/profile_screen.dart rename to mobile/lib/features/listings/presentation/screens/profile_screen.dart diff --git a/lib/features/listings/presentation/screens/search_screen.dart b/mobile/lib/features/listings/presentation/screens/search_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/search_screen.dart rename to mobile/lib/features/listings/presentation/screens/search_screen.dart diff --git a/lib/features/listings/presentation/screens/sell_screen.dart b/mobile/lib/features/listings/presentation/screens/sell_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/sell_screen.dart rename to mobile/lib/features/listings/presentation/screens/sell_screen.dart diff --git a/lib/features/listings/presentation/screens/seller_profile_screen.dart b/mobile/lib/features/listings/presentation/screens/seller_profile_screen.dart similarity index 100% rename from lib/features/listings/presentation/screens/seller_profile_screen.dart rename to mobile/lib/features/listings/presentation/screens/seller_profile_screen.dart diff --git a/lib/features/listings/presentation/viewmodels/home_viewmodel.dart b/mobile/lib/features/listings/presentation/viewmodels/home_viewmodel.dart similarity index 100% rename from lib/features/listings/presentation/viewmodels/home_viewmodel.dart rename to mobile/lib/features/listings/presentation/viewmodels/home_viewmodel.dart diff --git a/lib/features/listings/presentation/viewmodels/listing_details_viewmodel.dart b/mobile/lib/features/listings/presentation/viewmodels/listing_details_viewmodel.dart similarity index 100% rename from lib/features/listings/presentation/viewmodels/listing_details_viewmodel.dart rename to mobile/lib/features/listings/presentation/viewmodels/listing_details_viewmodel.dart diff --git a/lib/features/listings/presentation/viewmodels/locale_viewmodel.dart b/mobile/lib/features/listings/presentation/viewmodels/locale_viewmodel.dart similarity index 100% rename from lib/features/listings/presentation/viewmodels/locale_viewmodel.dart rename to mobile/lib/features/listings/presentation/viewmodels/locale_viewmodel.dart diff --git a/lib/features/listings/presentation/viewmodels/location_viewmodel.dart b/mobile/lib/features/listings/presentation/viewmodels/location_viewmodel.dart similarity index 100% rename from lib/features/listings/presentation/viewmodels/location_viewmodel.dart rename to mobile/lib/features/listings/presentation/viewmodels/location_viewmodel.dart diff --git a/lib/features/listings/presentation/viewmodels/profile_viewmodel.dart b/mobile/lib/features/listings/presentation/viewmodels/profile_viewmodel.dart similarity index 100% rename from lib/features/listings/presentation/viewmodels/profile_viewmodel.dart rename to mobile/lib/features/listings/presentation/viewmodels/profile_viewmodel.dart diff --git a/lib/features/listings/presentation/viewmodels/search_viewmodel.dart b/mobile/lib/features/listings/presentation/viewmodels/search_viewmodel.dart similarity index 100% rename from lib/features/listings/presentation/viewmodels/search_viewmodel.dart rename to mobile/lib/features/listings/presentation/viewmodels/search_viewmodel.dart diff --git a/lib/features/listings/presentation/viewmodels/sell_viewmodel.dart b/mobile/lib/features/listings/presentation/viewmodels/sell_viewmodel.dart similarity index 100% rename from lib/features/listings/presentation/viewmodels/sell_viewmodel.dart rename to mobile/lib/features/listings/presentation/viewmodels/sell_viewmodel.dart diff --git a/lib/features/listings/presentation/viewmodels/seller_profile_viewmodel.dart b/mobile/lib/features/listings/presentation/viewmodels/seller_profile_viewmodel.dart similarity index 100% rename from lib/features/listings/presentation/viewmodels/seller_profile_viewmodel.dart rename to mobile/lib/features/listings/presentation/viewmodels/seller_profile_viewmodel.dart diff --git a/lib/features/listings/presentation/widgets/listing_card.dart b/mobile/lib/features/listings/presentation/widgets/listing_card.dart similarity index 100% rename from lib/features/listings/presentation/widgets/listing_card.dart rename to mobile/lib/features/listings/presentation/widgets/listing_card.dart diff --git a/lib/features/notifications/data/datasources/supabase_notifications_data_source.dart b/mobile/lib/features/notifications/data/datasources/supabase_notifications_data_source.dart similarity index 100% rename from lib/features/notifications/data/datasources/supabase_notifications_data_source.dart rename to mobile/lib/features/notifications/data/datasources/supabase_notifications_data_source.dart diff --git a/lib/features/notifications/data/models/notification_model.dart b/mobile/lib/features/notifications/data/models/notification_model.dart similarity index 100% rename from lib/features/notifications/data/models/notification_model.dart rename to mobile/lib/features/notifications/data/models/notification_model.dart diff --git a/lib/features/notifications/data/repositories/notifications_repository_impl.dart b/mobile/lib/features/notifications/data/repositories/notifications_repository_impl.dart similarity index 100% rename from lib/features/notifications/data/repositories/notifications_repository_impl.dart rename to mobile/lib/features/notifications/data/repositories/notifications_repository_impl.dart diff --git a/lib/features/notifications/data/services/push_notification_service.dart b/mobile/lib/features/notifications/data/services/push_notification_service.dart similarity index 100% rename from lib/features/notifications/data/services/push_notification_service.dart rename to mobile/lib/features/notifications/data/services/push_notification_service.dart diff --git a/lib/features/notifications/domain/entities/notification.dart b/mobile/lib/features/notifications/domain/entities/notification.dart similarity index 100% rename from lib/features/notifications/domain/entities/notification.dart rename to mobile/lib/features/notifications/domain/entities/notification.dart diff --git a/lib/features/notifications/domain/repositories/notifications_repository.dart b/mobile/lib/features/notifications/domain/repositories/notifications_repository.dart similarity index 100% rename from lib/features/notifications/domain/repositories/notifications_repository.dart rename to mobile/lib/features/notifications/domain/repositories/notifications_repository.dart diff --git a/lib/features/notifications/presentation/screens/notifications_screen.dart b/mobile/lib/features/notifications/presentation/screens/notifications_screen.dart similarity index 100% rename from lib/features/notifications/presentation/screens/notifications_screen.dart rename to mobile/lib/features/notifications/presentation/screens/notifications_screen.dart diff --git a/lib/features/notifications/presentation/viewmodels/notifications_viewmodel.dart b/mobile/lib/features/notifications/presentation/viewmodels/notifications_viewmodel.dart similarity index 100% rename from lib/features/notifications/presentation/viewmodels/notifications_viewmodel.dart rename to mobile/lib/features/notifications/presentation/viewmodels/notifications_viewmodel.dart diff --git a/lib/features/payments/data/datasources/fapshi_data_source.dart b/mobile/lib/features/payments/data/datasources/fapshi_data_source.dart similarity index 100% rename from lib/features/payments/data/datasources/fapshi_data_source.dart rename to mobile/lib/features/payments/data/datasources/fapshi_data_source.dart diff --git a/lib/features/payments/data/repositories/payment_repository_impl.dart b/mobile/lib/features/payments/data/repositories/payment_repository_impl.dart similarity index 100% rename from lib/features/payments/data/repositories/payment_repository_impl.dart rename to mobile/lib/features/payments/data/repositories/payment_repository_impl.dart diff --git a/lib/features/payments/domain/repositories/payment_repository.dart b/mobile/lib/features/payments/domain/repositories/payment_repository.dart similarity index 100% rename from lib/features/payments/domain/repositories/payment_repository.dart rename to mobile/lib/features/payments/domain/repositories/payment_repository.dart diff --git a/lib/features/payments/domain/usecases/collect_payment_usecase.dart b/mobile/lib/features/payments/domain/usecases/collect_payment_usecase.dart similarity index 100% rename from lib/features/payments/domain/usecases/collect_payment_usecase.dart rename to mobile/lib/features/payments/domain/usecases/collect_payment_usecase.dart diff --git a/lib/features/payments/domain/usecases/get_payment_status_usecase.dart b/mobile/lib/features/payments/domain/usecases/get_payment_status_usecase.dart similarity index 100% rename from lib/features/payments/domain/usecases/get_payment_status_usecase.dart rename to mobile/lib/features/payments/domain/usecases/get_payment_status_usecase.dart diff --git a/lib/features/payments/presentation/viewmodels/payment_viewmodel.dart b/mobile/lib/features/payments/presentation/viewmodels/payment_viewmodel.dart similarity index 100% rename from lib/features/payments/presentation/viewmodels/payment_viewmodel.dart rename to mobile/lib/features/payments/presentation/viewmodels/payment_viewmodel.dart diff --git a/lib/features/payments/presentation/widgets/payment_bottom_sheet.dart b/mobile/lib/features/payments/presentation/widgets/payment_bottom_sheet.dart similarity index 100% rename from lib/features/payments/presentation/widgets/payment_bottom_sheet.dart rename to mobile/lib/features/payments/presentation/widgets/payment_bottom_sheet.dart diff --git a/lib/features/reviews/data/datasources/supabase_reviews_data_source.dart b/mobile/lib/features/reviews/data/datasources/supabase_reviews_data_source.dart similarity index 100% rename from lib/features/reviews/data/datasources/supabase_reviews_data_source.dart rename to mobile/lib/features/reviews/data/datasources/supabase_reviews_data_source.dart diff --git a/lib/features/reviews/data/repositories/review_repository_impl.dart b/mobile/lib/features/reviews/data/repositories/review_repository_impl.dart similarity index 100% rename from lib/features/reviews/data/repositories/review_repository_impl.dart rename to mobile/lib/features/reviews/data/repositories/review_repository_impl.dart diff --git a/lib/features/reviews/domain/entities/review_entity.dart b/mobile/lib/features/reviews/domain/entities/review_entity.dart similarity index 100% rename from lib/features/reviews/domain/entities/review_entity.dart rename to mobile/lib/features/reviews/domain/entities/review_entity.dart diff --git a/lib/features/reviews/domain/repositories/review_repository.dart b/mobile/lib/features/reviews/domain/repositories/review_repository.dart similarity index 100% rename from lib/features/reviews/domain/repositories/review_repository.dart rename to mobile/lib/features/reviews/domain/repositories/review_repository.dart diff --git a/lib/features/reviews/domain/usecases/create_review_usecase.dart b/mobile/lib/features/reviews/domain/usecases/create_review_usecase.dart similarity index 100% rename from lib/features/reviews/domain/usecases/create_review_usecase.dart rename to mobile/lib/features/reviews/domain/usecases/create_review_usecase.dart diff --git a/lib/features/reviews/domain/usecases/get_user_reviews_usecase.dart b/mobile/lib/features/reviews/domain/usecases/get_user_reviews_usecase.dart similarity index 100% rename from lib/features/reviews/domain/usecases/get_user_reviews_usecase.dart rename to mobile/lib/features/reviews/domain/usecases/get_user_reviews_usecase.dart diff --git a/lib/features/reviews/domain/usecases/has_reviewed_usecase.dart b/mobile/lib/features/reviews/domain/usecases/has_reviewed_usecase.dart similarity index 100% rename from lib/features/reviews/domain/usecases/has_reviewed_usecase.dart rename to mobile/lib/features/reviews/domain/usecases/has_reviewed_usecase.dart diff --git a/lib/features/reviews/presentation/viewmodels/review_viewmodel.dart b/mobile/lib/features/reviews/presentation/viewmodels/review_viewmodel.dart similarity index 100% rename from lib/features/reviews/presentation/viewmodels/review_viewmodel.dart rename to mobile/lib/features/reviews/presentation/viewmodels/review_viewmodel.dart diff --git a/lib/features/reviews/presentation/widgets/review_dialog.dart b/mobile/lib/features/reviews/presentation/widgets/review_dialog.dart similarity index 100% rename from lib/features/reviews/presentation/widgets/review_dialog.dart rename to mobile/lib/features/reviews/presentation/widgets/review_dialog.dart diff --git a/lib/features/reviews/presentation/widgets/seller_rating_badge.dart b/mobile/lib/features/reviews/presentation/widgets/seller_rating_badge.dart similarity index 100% rename from lib/features/reviews/presentation/widgets/seller_rating_badge.dart rename to mobile/lib/features/reviews/presentation/widgets/seller_rating_badge.dart diff --git a/lib/features/reviews/presentation/widgets/seller_trust_card.dart b/mobile/lib/features/reviews/presentation/widgets/seller_trust_card.dart similarity index 100% rename from lib/features/reviews/presentation/widgets/seller_trust_card.dart rename to mobile/lib/features/reviews/presentation/widgets/seller_trust_card.dart diff --git a/lib/features/reviews/presentation/widgets/star_rating_display.dart b/mobile/lib/features/reviews/presentation/widgets/star_rating_display.dart similarity index 100% rename from lib/features/reviews/presentation/widgets/star_rating_display.dart rename to mobile/lib/features/reviews/presentation/widgets/star_rating_display.dart diff --git a/lib/features/safety/data/datasources/safety_remote_datasource.dart b/mobile/lib/features/safety/data/datasources/safety_remote_datasource.dart similarity index 100% rename from lib/features/safety/data/datasources/safety_remote_datasource.dart rename to mobile/lib/features/safety/data/datasources/safety_remote_datasource.dart diff --git a/lib/features/safety/data/models/campus_zone_model.dart b/mobile/lib/features/safety/data/models/campus_zone_model.dart similarity index 100% rename from lib/features/safety/data/models/campus_zone_model.dart rename to mobile/lib/features/safety/data/models/campus_zone_model.dart diff --git a/lib/features/safety/data/repositories/safety_repository_impl.dart b/mobile/lib/features/safety/data/repositories/safety_repository_impl.dart similarity index 100% rename from lib/features/safety/data/repositories/safety_repository_impl.dart rename to mobile/lib/features/safety/data/repositories/safety_repository_impl.dart diff --git a/lib/features/safety/domain/entities/campus_zone.dart b/mobile/lib/features/safety/domain/entities/campus_zone.dart similarity index 100% rename from lib/features/safety/domain/entities/campus_zone.dart rename to mobile/lib/features/safety/domain/entities/campus_zone.dart diff --git a/lib/features/safety/domain/repositories/safety_repository.dart b/mobile/lib/features/safety/domain/repositories/safety_repository.dart similarity index 100% rename from lib/features/safety/domain/repositories/safety_repository.dart rename to mobile/lib/features/safety/domain/repositories/safety_repository.dart diff --git a/lib/features/safety/domain/usecases/get_campus_zones_usecase.dart b/mobile/lib/features/safety/domain/usecases/get_campus_zones_usecase.dart similarity index 100% rename from lib/features/safety/domain/usecases/get_campus_zones_usecase.dart rename to mobile/lib/features/safety/domain/usecases/get_campus_zones_usecase.dart diff --git a/lib/features/safety/presentation/screens/safety_guidelines_screen.dart b/mobile/lib/features/safety/presentation/screens/safety_guidelines_screen.dart similarity index 100% rename from lib/features/safety/presentation/screens/safety_guidelines_screen.dart rename to mobile/lib/features/safety/presentation/screens/safety_guidelines_screen.dart diff --git a/lib/features/safety/presentation/viewmodels/safety_viewmodel.dart b/mobile/lib/features/safety/presentation/viewmodels/safety_viewmodel.dart similarity index 100% rename from lib/features/safety/presentation/viewmodels/safety_viewmodel.dart rename to mobile/lib/features/safety/presentation/viewmodels/safety_viewmodel.dart diff --git a/lib/features/safety/presentation/widgets/meetup_tips_card.dart b/mobile/lib/features/safety/presentation/widgets/meetup_tips_card.dart similarity index 100% rename from lib/features/safety/presentation/widgets/meetup_tips_card.dart rename to mobile/lib/features/safety/presentation/widgets/meetup_tips_card.dart diff --git a/lib/features/transactions/data/datasources/supabase_transactions_data_source.dart b/mobile/lib/features/transactions/data/datasources/supabase_transactions_data_source.dart similarity index 100% rename from lib/features/transactions/data/datasources/supabase_transactions_data_source.dart rename to mobile/lib/features/transactions/data/datasources/supabase_transactions_data_source.dart diff --git a/lib/features/transactions/data/repositories/transaction_repository_impl.dart b/mobile/lib/features/transactions/data/repositories/transaction_repository_impl.dart similarity index 100% rename from lib/features/transactions/data/repositories/transaction_repository_impl.dart rename to mobile/lib/features/transactions/data/repositories/transaction_repository_impl.dart diff --git a/lib/features/transactions/domain/entities/transaction_entity.dart b/mobile/lib/features/transactions/domain/entities/transaction_entity.dart similarity index 100% rename from lib/features/transactions/domain/entities/transaction_entity.dart rename to mobile/lib/features/transactions/domain/entities/transaction_entity.dart diff --git a/lib/features/transactions/domain/repositories/transaction_repository.dart b/mobile/lib/features/transactions/domain/repositories/transaction_repository.dart similarity index 100% rename from lib/features/transactions/domain/repositories/transaction_repository.dart rename to mobile/lib/features/transactions/domain/repositories/transaction_repository.dart diff --git a/lib/features/transactions/domain/usecases/get_transaction_by_external_ref_usecase.dart b/mobile/lib/features/transactions/domain/usecases/get_transaction_by_external_ref_usecase.dart similarity index 100% rename from lib/features/transactions/domain/usecases/get_transaction_by_external_ref_usecase.dart rename to mobile/lib/features/transactions/domain/usecases/get_transaction_by_external_ref_usecase.dart diff --git a/lib/features/transactions/domain/usecases/get_user_transactions_usecase.dart b/mobile/lib/features/transactions/domain/usecases/get_user_transactions_usecase.dart similarity index 100% rename from lib/features/transactions/domain/usecases/get_user_transactions_usecase.dart rename to mobile/lib/features/transactions/domain/usecases/get_user_transactions_usecase.dart diff --git a/lib/features/transactions/presentation/screens/transaction_history_screen.dart b/mobile/lib/features/transactions/presentation/screens/transaction_history_screen.dart similarity index 100% rename from lib/features/transactions/presentation/screens/transaction_history_screen.dart rename to mobile/lib/features/transactions/presentation/screens/transaction_history_screen.dart diff --git a/lib/features/transactions/presentation/viewmodels/transaction_history_viewmodel.dart b/mobile/lib/features/transactions/presentation/viewmodels/transaction_history_viewmodel.dart similarity index 100% rename from lib/features/transactions/presentation/viewmodels/transaction_history_viewmodel.dart rename to mobile/lib/features/transactions/presentation/viewmodels/transaction_history_viewmodel.dart diff --git a/lib/firebase_options.dart b/mobile/lib/firebase_options.dart similarity index 100% rename from lib/firebase_options.dart rename to mobile/lib/firebase_options.dart diff --git a/lib/injection_container.dart b/mobile/lib/injection_container.dart similarity index 100% rename from lib/injection_container.dart rename to mobile/lib/injection_container.dart diff --git a/lib/l10n/app_en.arb b/mobile/lib/l10n/app_en.arb similarity index 100% rename from lib/l10n/app_en.arb rename to mobile/lib/l10n/app_en.arb diff --git a/lib/l10n/app_fr.arb b/mobile/lib/l10n/app_fr.arb similarity index 100% rename from lib/l10n/app_fr.arb rename to mobile/lib/l10n/app_fr.arb diff --git a/lib/l10n/app_localizations.dart b/mobile/lib/l10n/app_localizations.dart similarity index 100% rename from lib/l10n/app_localizations.dart rename to mobile/lib/l10n/app_localizations.dart diff --git a/lib/l10n/app_localizations_en.dart b/mobile/lib/l10n/app_localizations_en.dart similarity index 100% rename from lib/l10n/app_localizations_en.dart rename to mobile/lib/l10n/app_localizations_en.dart diff --git a/lib/l10n/app_localizations_fr.dart b/mobile/lib/l10n/app_localizations_fr.dart similarity index 100% rename from lib/l10n/app_localizations_fr.dart rename to mobile/lib/l10n/app_localizations_fr.dart diff --git a/lib/main.dart b/mobile/lib/main.dart similarity index 100% rename from lib/main.dart rename to mobile/lib/main.dart diff --git a/linux/.gitignore b/mobile/linux/.gitignore similarity index 100% rename from linux/.gitignore rename to mobile/linux/.gitignore diff --git a/linux/CMakeLists.txt b/mobile/linux/CMakeLists.txt similarity index 100% rename from linux/CMakeLists.txt rename to mobile/linux/CMakeLists.txt diff --git a/linux/flutter/CMakeLists.txt b/mobile/linux/flutter/CMakeLists.txt similarity index 100% rename from linux/flutter/CMakeLists.txt rename to mobile/linux/flutter/CMakeLists.txt diff --git a/linux/flutter/generated_plugin_registrant.cc b/mobile/linux/flutter/generated_plugin_registrant.cc similarity index 100% rename from linux/flutter/generated_plugin_registrant.cc rename to mobile/linux/flutter/generated_plugin_registrant.cc diff --git a/linux/flutter/generated_plugin_registrant.h b/mobile/linux/flutter/generated_plugin_registrant.h similarity index 100% rename from linux/flutter/generated_plugin_registrant.h rename to mobile/linux/flutter/generated_plugin_registrant.h diff --git a/linux/flutter/generated_plugins.cmake b/mobile/linux/flutter/generated_plugins.cmake similarity index 100% rename from linux/flutter/generated_plugins.cmake rename to mobile/linux/flutter/generated_plugins.cmake diff --git a/linux/runner/CMakeLists.txt b/mobile/linux/runner/CMakeLists.txt similarity index 100% rename from linux/runner/CMakeLists.txt rename to mobile/linux/runner/CMakeLists.txt diff --git a/linux/runner/main.cc b/mobile/linux/runner/main.cc similarity index 100% rename from linux/runner/main.cc rename to mobile/linux/runner/main.cc diff --git a/linux/runner/my_application.cc b/mobile/linux/runner/my_application.cc similarity index 100% rename from linux/runner/my_application.cc rename to mobile/linux/runner/my_application.cc diff --git a/linux/runner/my_application.h b/mobile/linux/runner/my_application.h similarity index 100% rename from linux/runner/my_application.h rename to mobile/linux/runner/my_application.h diff --git a/macos/.gitignore b/mobile/macos/.gitignore similarity index 100% rename from macos/.gitignore rename to mobile/macos/.gitignore diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/mobile/macos/Flutter/Flutter-Debug.xcconfig similarity index 100% rename from macos/Flutter/Flutter-Debug.xcconfig rename to mobile/macos/Flutter/Flutter-Debug.xcconfig diff --git a/macos/Flutter/Flutter-Release.xcconfig b/mobile/macos/Flutter/Flutter-Release.xcconfig similarity index 100% rename from macos/Flutter/Flutter-Release.xcconfig rename to mobile/macos/Flutter/Flutter-Release.xcconfig diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/mobile/macos/Flutter/GeneratedPluginRegistrant.swift similarity index 100% rename from macos/Flutter/GeneratedPluginRegistrant.swift rename to mobile/macos/Flutter/GeneratedPluginRegistrant.swift diff --git a/macos/Runner.xcodeproj/project.pbxproj b/mobile/macos/Runner.xcodeproj/project.pbxproj similarity index 100% rename from macos/Runner.xcodeproj/project.pbxproj rename to mobile/macos/Runner.xcodeproj/project.pbxproj diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobile/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to mobile/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mobile/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to mobile/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/mobile/macos/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from macos/Runner.xcworkspace/contents.xcworkspacedata rename to mobile/macos/Runner.xcworkspace/contents.xcworkspacedata diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobile/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to mobile/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/macos/Runner/AppDelegate.swift b/mobile/macos/Runner/AppDelegate.swift similarity index 100% rename from macos/Runner/AppDelegate.swift rename to mobile/macos/Runner/AppDelegate.swift diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png rename to mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png rename to mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png rename to mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png rename to mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png rename to mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png rename to mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png rename to mobile/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png diff --git a/macos/Runner/Base.lproj/MainMenu.xib b/mobile/macos/Runner/Base.lproj/MainMenu.xib similarity index 100% rename from macos/Runner/Base.lproj/MainMenu.xib rename to mobile/macos/Runner/Base.lproj/MainMenu.xib diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/mobile/macos/Runner/Configs/AppInfo.xcconfig similarity index 100% rename from macos/Runner/Configs/AppInfo.xcconfig rename to mobile/macos/Runner/Configs/AppInfo.xcconfig diff --git a/macos/Runner/Configs/Debug.xcconfig b/mobile/macos/Runner/Configs/Debug.xcconfig similarity index 100% rename from macos/Runner/Configs/Debug.xcconfig rename to mobile/macos/Runner/Configs/Debug.xcconfig diff --git a/macos/Runner/Configs/Release.xcconfig b/mobile/macos/Runner/Configs/Release.xcconfig similarity index 100% rename from macos/Runner/Configs/Release.xcconfig rename to mobile/macos/Runner/Configs/Release.xcconfig diff --git a/macos/Runner/Configs/Warnings.xcconfig b/mobile/macos/Runner/Configs/Warnings.xcconfig similarity index 100% rename from macos/Runner/Configs/Warnings.xcconfig rename to mobile/macos/Runner/Configs/Warnings.xcconfig diff --git a/macos/Runner/DebugProfile.entitlements b/mobile/macos/Runner/DebugProfile.entitlements similarity index 100% rename from macos/Runner/DebugProfile.entitlements rename to mobile/macos/Runner/DebugProfile.entitlements diff --git a/macos/Runner/Info.plist b/mobile/macos/Runner/Info.plist similarity index 100% rename from macos/Runner/Info.plist rename to mobile/macos/Runner/Info.plist diff --git a/macos/Runner/MainFlutterWindow.swift b/mobile/macos/Runner/MainFlutterWindow.swift similarity index 100% rename from macos/Runner/MainFlutterWindow.swift rename to mobile/macos/Runner/MainFlutterWindow.swift diff --git a/macos/Runner/Release.entitlements b/mobile/macos/Runner/Release.entitlements similarity index 100% rename from macos/Runner/Release.entitlements rename to mobile/macos/Runner/Release.entitlements diff --git a/macos/RunnerTests/RunnerTests.swift b/mobile/macos/RunnerTests/RunnerTests.swift similarity index 100% rename from macos/RunnerTests/RunnerTests.swift rename to mobile/macos/RunnerTests/RunnerTests.swift diff --git a/pubspec.yaml b/mobile/pubspec.yaml similarity index 100% rename from pubspec.yaml rename to mobile/pubspec.yaml diff --git a/test/.gitkeep b/mobile/test/.gitkeep similarity index 100% rename from test/.gitkeep rename to mobile/test/.gitkeep diff --git a/test/features/chat/presentation/viewmodels/chat_viewmodel_test.dart b/mobile/test/features/chat/presentation/viewmodels/chat_viewmodel_test.dart similarity index 100% rename from test/features/chat/presentation/viewmodels/chat_viewmodel_test.dart rename to mobile/test/features/chat/presentation/viewmodels/chat_viewmodel_test.dart diff --git a/test/features/listings/presentation/screens/seller_profile_screen_test.dart b/mobile/test/features/listings/presentation/screens/seller_profile_screen_test.dart similarity index 100% rename from test/features/listings/presentation/screens/seller_profile_screen_test.dart rename to mobile/test/features/listings/presentation/screens/seller_profile_screen_test.dart diff --git a/test/features/listings/presentation/viewmodels/seller_profile_viewmodel_test.dart b/mobile/test/features/listings/presentation/viewmodels/seller_profile_viewmodel_test.dart similarity index 100% rename from test/features/listings/presentation/viewmodels/seller_profile_viewmodel_test.dart rename to mobile/test/features/listings/presentation/viewmodels/seller_profile_viewmodel_test.dart diff --git a/web/favicon.png b/mobile/web/favicon.png similarity index 100% rename from web/favicon.png rename to mobile/web/favicon.png diff --git a/web/icons/Icon-192.png b/mobile/web/icons/Icon-192.png similarity index 100% rename from web/icons/Icon-192.png rename to mobile/web/icons/Icon-192.png diff --git a/web/icons/Icon-512.png b/mobile/web/icons/Icon-512.png similarity index 100% rename from web/icons/Icon-512.png rename to mobile/web/icons/Icon-512.png diff --git a/web/icons/Icon-maskable-192.png b/mobile/web/icons/Icon-maskable-192.png similarity index 100% rename from web/icons/Icon-maskable-192.png rename to mobile/web/icons/Icon-maskable-192.png diff --git a/web/icons/Icon-maskable-512.png b/mobile/web/icons/Icon-maskable-512.png similarity index 100% rename from web/icons/Icon-maskable-512.png rename to mobile/web/icons/Icon-maskable-512.png diff --git a/web/index.html b/mobile/web/index.html similarity index 100% rename from web/index.html rename to mobile/web/index.html diff --git a/web/manifest.json b/mobile/web/manifest.json similarity index 100% rename from web/manifest.json rename to mobile/web/manifest.json diff --git a/windows/.gitignore b/mobile/windows/.gitignore similarity index 100% rename from windows/.gitignore rename to mobile/windows/.gitignore diff --git a/windows/CMakeLists.txt b/mobile/windows/CMakeLists.txt similarity index 100% rename from windows/CMakeLists.txt rename to mobile/windows/CMakeLists.txt diff --git a/windows/flutter/CMakeLists.txt b/mobile/windows/flutter/CMakeLists.txt similarity index 100% rename from windows/flutter/CMakeLists.txt rename to mobile/windows/flutter/CMakeLists.txt diff --git a/windows/flutter/generated_plugin_registrant.cc b/mobile/windows/flutter/generated_plugin_registrant.cc similarity index 100% rename from windows/flutter/generated_plugin_registrant.cc rename to mobile/windows/flutter/generated_plugin_registrant.cc diff --git a/windows/flutter/generated_plugin_registrant.h b/mobile/windows/flutter/generated_plugin_registrant.h similarity index 100% rename from windows/flutter/generated_plugin_registrant.h rename to mobile/windows/flutter/generated_plugin_registrant.h diff --git a/windows/flutter/generated_plugins.cmake b/mobile/windows/flutter/generated_plugins.cmake similarity index 100% rename from windows/flutter/generated_plugins.cmake rename to mobile/windows/flutter/generated_plugins.cmake diff --git a/windows/runner/CMakeLists.txt b/mobile/windows/runner/CMakeLists.txt similarity index 100% rename from windows/runner/CMakeLists.txt rename to mobile/windows/runner/CMakeLists.txt diff --git a/windows/runner/Runner.rc b/mobile/windows/runner/Runner.rc similarity index 100% rename from windows/runner/Runner.rc rename to mobile/windows/runner/Runner.rc diff --git a/windows/runner/flutter_window.cpp b/mobile/windows/runner/flutter_window.cpp similarity index 100% rename from windows/runner/flutter_window.cpp rename to mobile/windows/runner/flutter_window.cpp diff --git a/windows/runner/flutter_window.h b/mobile/windows/runner/flutter_window.h similarity index 100% rename from windows/runner/flutter_window.h rename to mobile/windows/runner/flutter_window.h diff --git a/windows/runner/main.cpp b/mobile/windows/runner/main.cpp similarity index 100% rename from windows/runner/main.cpp rename to mobile/windows/runner/main.cpp diff --git a/windows/runner/resource.h b/mobile/windows/runner/resource.h similarity index 100% rename from windows/runner/resource.h rename to mobile/windows/runner/resource.h diff --git a/windows/runner/resources/app_icon.ico b/mobile/windows/runner/resources/app_icon.ico similarity index 100% rename from windows/runner/resources/app_icon.ico rename to mobile/windows/runner/resources/app_icon.ico diff --git a/windows/runner/runner.exe.manifest b/mobile/windows/runner/runner.exe.manifest similarity index 100% rename from windows/runner/runner.exe.manifest rename to mobile/windows/runner/runner.exe.manifest diff --git a/windows/runner/utils.cpp b/mobile/windows/runner/utils.cpp similarity index 100% rename from windows/runner/utils.cpp rename to mobile/windows/runner/utils.cpp diff --git a/windows/runner/utils.h b/mobile/windows/runner/utils.h similarity index 100% rename from windows/runner/utils.h rename to mobile/windows/runner/utils.h diff --git a/windows/runner/win32_window.cpp b/mobile/windows/runner/win32_window.cpp similarity index 100% rename from windows/runner/win32_window.cpp rename to mobile/windows/runner/win32_window.cpp diff --git a/windows/runner/win32_window.h b/mobile/windows/runner/win32_window.h similarity index 100% rename from windows/runner/win32_window.h rename to mobile/windows/runner/win32_window.h diff --git a/test.txt b/test.txt deleted file mode 100644 index 9daeafb..0000000 --- a/test.txt +++ /dev/null @@ -1 +0,0 @@ -test