welife/ ├── .cursor/ │ ├── rules/ │ │ ├── agent-autonomous-loop.mdc │ │ ├── agent-queue.mdc │ │ ├── ai-safety.mdc │ │ ├── api-nestjs.mdc │ │ ├── code-quality.mdc │ │ ├── doc-matrix.mdc │ │ ├── fe-figma-matrix.mdc │ │ ├── image-to-ui.mdc │ │ ├── mandatory-wp-gate.mdc │ │ ├── mobile-rn.mdc │ │ ├── monorepo-boundaries.mdc │ │ ├── swagger-contract.mdc │ │ └── welife-core.mdc │ └── skills/ │ ├── image-to-ui/ │ │ └── SKILL.md │ └── welife-mandatory/ │ └── SKILL.md ├── .env-backups/ │ └── 20260731-133124/ │ └── .env ├── .github/ │ └── workflows/ │ └── ci.yml ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── api/ │ ├── .agents/ │ │ └── skills/ │ │ ├── prisma-cli/ │ │ │ ├── references/ │ │ │ │ ├── db-execute.md │ │ │ │ ├── db-pull.md │ │ │ │ ├── db-push.md │ │ │ │ ├── db-seed.md │ │ │ │ ├── debug.md │ │ │ │ ├── dev.md │ │ │ │ ├── format.md │ │ │ │ ├── generate.md │ │ │ │ ├── init.md │ │ │ │ ├── mcp.md │ │ │ │ ├── migrate-deploy.md │ │ │ │ ├── migrate-dev.md │ │ │ │ ├── migrate-diff.md │ │ │ │ ├── migrate-reset.md │ │ │ │ ├── migrate-resolve.md │ │ │ │ ├── migrate-status.md │ │ │ │ ├── studio.md │ │ │ │ └── validate.md │ │ │ └── SKILL.md │ │ ├── prisma-client-api/ │ │ │ ├── references/ │ │ │ │ ├── client-methods.md │ │ │ │ ├── constructor.md │ │ │ │ ├── filters.md │ │ │ │ ├── model-queries.md │ │ │ │ ├── query-options.md │ │ │ │ ├── raw-queries.md │ │ │ │ ├── relations.md │ │ │ │ └── transactions.md │ │ │ └── SKILL.md │ │ ├── prisma-compute/ │ │ │ ├── references/ │ │ │ │ ├── app-deploy-cli.md │ │ │ │ ├── compute-config.md │ │ │ │ ├── create-prisma.md │ │ │ │ ├── frameworks.md │ │ │ │ ├── sdk-api.md │ │ │ │ └── troubleshooting.md │ │ │ └── SKILL.md │ │ ├── prisma-database-setup/ │ │ │ ├── references/ │ │ │ │ ├── cockroachdb.md │ │ │ │ ├── mongodb.md │ │ │ │ ├── mysql.md │ │ │ │ ├── postgresql.md │ │ │ │ ├── prisma-client-setup.md │ │ │ │ ├── prisma-postgres.md │ │ │ │ ├── sqlite.md │ │ │ │ └── sqlserver.md │ │ │ └── SKILL.md │ │ ├── prisma-driver-adapter-implementation/ │ │ │ └── SKILL.md │ │ ├── prisma-mongodb-upgrade/ │ │ │ ├── references/ │ │ │ │ ├── client-api-mapping.md │ │ │ │ ├── decision-stay-or-migrate.md │ │ │ │ ├── migrations-mapping.md │ │ │ │ ├── schema-contract-mapping.md │ │ │ │ └── verify-cutover-checklist.md │ │ │ └── SKILL.md │ │ ├── prisma-postgres/ │ │ │ ├── references/ │ │ │ │ ├── console-and-connections.md │ │ │ │ ├── create-db-cli.md │ │ │ │ ├── management-api-sdk.md │ │ │ │ └── management-api.md │ │ │ └── SKILL.md │ │ ├── prisma-postgres-setup/ │ │ │ ├── references/ │ │ │ │ ├── api-basics.md │ │ │ │ ├── auth.md │ │ │ │ ├── endpoints.md │ │ │ │ └── prisma7-client.md │ │ │ └── SKILL.md │ │ └── prisma-upgrade-v7/ │ │ ├── references/ │ │ │ ├── accelerate-users.md │ │ │ ├── driver-adapters.md │ │ │ ├── env-variables.md │ │ │ ├── esm-support.md │ │ │ ├── prisma-config.md │ │ │ ├── removed-features.md │ │ │ └── schema-changes.md │ │ └── SKILL.md │ ├── .claude/ │ │ └── skills/ │ │ ├── prisma-cli │ │ ├── prisma-client-api │ │ ├── prisma-compute │ │ ├── prisma-database-setup │ │ ├── prisma-driver-adapter-implementation │ │ ├── prisma-mongodb-upgrade │ │ ├── prisma-postgres │ │ ├── prisma-postgres-setup │ │ └── prisma-upgrade-v7 │ ├── .windsurf/ │ │ └── skills/ │ │ ├── prisma-cli │ │ ├── prisma-client-api │ │ ├── prisma-compute │ │ ├── prisma-database-setup │ │ ├── prisma-driver-adapter-implementation │ │ ├── prisma-mongodb-upgrade │ │ ├── prisma-postgres │ │ ├── prisma-postgres-setup │ │ └── prisma-upgrade-v7 │ ├── http/ │ │ └── welife.http │ ├── prisma/ │ │ ├── migrations/ │ │ │ ├── 20260724040901_init_user_media/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724041153_add_addresses/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724041307_add_wallet/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724041420_add_fnb/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724041738_add_rides/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724043202_auth_driver_profile/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724063446_add_partner_org/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724071016_driver_kyc_media/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724072439_driver_kyc_full/ │ │ │ │ └── migration.sql │ │ │ ├── 20260724100000_payment_intents/ │ │ │ │ └── migration.sql │ │ │ ├── 20260725090000_geo_verticals_ratings_order_pay/ │ │ │ │ └── migration.sql │ │ │ ├── 20260725093000_chat_social_calls_notifications/ │ │ │ │ └── migration.sql │ │ │ ├── 20260728050000_email_auth_optional_phone/ │ │ │ │ └── migration.sql │ │ │ ├── 20260728160000_place_map_fields/ │ │ │ │ └── migration.sql │ │ │ ├── 20260729090000_place_catalog_wp_place_02/ │ │ │ │ └── migration.sql │ │ │ ├── 20260729103000_cms_pages_adm_04/ │ │ │ │ └── migration.sql │ │ │ ├── 20260729120000_place_claim_wp_place_03/ │ │ │ │ └── migration.sql │ │ │ ├── 20260730100000_medical_rx_partner/ │ │ │ │ └── migration.sql │ │ │ ├── 20260731120000_ride_vehicle_type/ │ │ │ │ └── migration.sql │ │ │ ├── 20260731130000_ride_payment_method/ │ │ │ │ └── migration.sql │ │ │ ├── 20260804120000_p8_gap_verticals/ │ │ │ │ └── migration.sql │ │ │ ├── 20260804140000_media_kind_audio/ │ │ │ │ └── migration.sql │ │ │ └── migration_lock.toml │ │ ├── schema.prisma │ │ └── seed.ts │ ├── scripts/ │ │ ├── generate-swagger-stubs.mjs │ │ └── stub-modules.snippet.txt │ ├── src/ │ │ ├── common/ │ │ │ ├── decorators/ │ │ │ │ ├── current-user.decorator.ts │ │ │ │ └── roles.decorator.ts │ │ │ ├── dto/ │ │ │ │ └── nearby-geo-query.dto.ts │ │ │ ├── enums/ │ │ │ │ ├── auth-surface.enum.ts │ │ │ │ └── role.enum.ts │ │ │ ├── filters/ │ │ │ │ └── safe-http-exception.filter.ts │ │ │ ├── geo/ │ │ │ │ ├── geocoding.ts │ │ │ │ ├── haversine.ts │ │ │ │ ├── map-bounds-postgis.ts │ │ │ │ └── nearby-postgis.ts │ │ │ ├── guards/ │ │ │ │ ├── jwt-auth.guard.ts │ │ │ │ ├── optional-jwt-auth.guard.ts │ │ │ │ └── roles.guard.ts │ │ │ ├── realtime/ │ │ │ │ └── socket-root.module.ts │ │ │ ├── redis/ │ │ │ │ └── create-redis.ts │ │ │ ├── security/ │ │ │ │ ├── assert-secure-boot.spec.ts │ │ │ │ └── assert-secure-boot.ts │ │ │ ├── dev-http-log.interceptor.ts │ │ │ └── stub.ts │ │ ├── modules/ │ │ │ ├── addresses/ │ │ │ │ ├── dto/ │ │ │ │ │ └── address.dto.ts │ │ │ │ ├── addresses.controller.ts │ │ │ │ ├── addresses.module.ts │ │ │ │ ├── addresses.service.spec.ts │ │ │ │ └── addresses.service.ts │ │ │ ├── assistant/ │ │ │ │ ├── dto/ │ │ │ │ │ └── assistant.dto.ts │ │ │ │ ├── assistant.controller.ts │ │ │ │ ├── assistant.module.ts │ │ │ │ └── assistant.service.ts │ │ │ ├── atm/ │ │ │ │ ├── atm.controller.ts │ │ │ │ ├── atm.module.ts │ │ │ │ └── atm.service.ts │ │ │ ├── auth/ │ │ │ │ ├── dto/ │ │ │ │ │ └── auth.dto.ts │ │ │ │ ├── auth.controller.ts │ │ │ │ ├── auth.module.ts │ │ │ │ ├── auth.service.ts │ │ │ │ ├── google-auth.util.spec.ts │ │ │ │ ├── google-auth.util.ts │ │ │ │ ├── jwt.strategy.ts │ │ │ │ ├── mail.service.ts │ │ │ │ ├── otp-store.service.ts │ │ │ │ ├── sms.service.spec.ts │ │ │ │ ├── sms.service.ts │ │ │ │ ├── token-blacklist.service.ts │ │ │ │ └── totp.util.ts │ │ │ ├── bills/ │ │ │ │ ├── dto/ │ │ │ │ │ └── bills.dto.ts │ │ │ │ ├── bills.controller.ts │ │ │ │ ├── bills.module.ts │ │ │ │ └── bills.service.ts │ │ │ ├── cart/ │ │ │ │ ├── dto/ │ │ │ │ │ └── cart.dto.ts │ │ │ │ ├── cart.controller.ts │ │ │ │ ├── cart.module.ts │ │ │ │ └── cart.service.ts │ │ │ ├── charging/ │ │ │ │ ├── dto/ │ │ │ │ │ └── charging.dto.ts │ │ │ │ ├── charging.controller.ts │ │ │ │ ├── charging.module.ts │ │ │ │ └── charging.service.ts │ │ │ ├── chat/ │ │ │ │ ├── dto/ │ │ │ │ │ └── chat.dto.ts │ │ │ │ ├── chat-realtime.service.ts │ │ │ │ ├── chat-socket.bootstrap.ts │ │ │ │ ├── chat.controller.ts │ │ │ │ ├── chat.module.ts │ │ │ │ └── chat.service.ts │ │ │ ├── cms/ │ │ │ │ ├── dto/ │ │ │ │ │ └── cms-admin.dto.ts │ │ │ │ ├── cms.controller.ts │ │ │ │ ├── cms.module.ts │ │ │ │ └── cms.service.ts │ │ │ ├── delivery/ │ │ │ │ ├── dto/ │ │ │ │ │ └── delivery.dto.ts │ │ │ │ ├── delivery.controller.ts │ │ │ │ ├── delivery.module.ts │ │ │ │ └── delivery.service.ts │ │ │ ├── driver/ │ │ │ │ ├── dto/ │ │ │ │ │ └── driver.dto.ts │ │ │ │ ├── driver.controller.ts │ │ │ │ ├── driver.module.ts │ │ │ │ ├── driver.service.spec.ts │ │ │ │ └── driver.service.ts │ │ │ ├── favorites/ │ │ │ │ ├── dto/ │ │ │ │ │ └── favorite.dto.ts │ │ │ │ ├── favorites.controller.ts │ │ │ │ ├── favorites.module.ts │ │ │ │ └── favorites.service.ts │ │ │ ├── fuel/ │ │ │ │ ├── dto/ │ │ │ │ │ └── fuel.dto.ts │ │ │ │ ├── fuel.controller.ts │ │ │ │ ├── fuel.module.ts │ │ │ │ └── fuel.service.ts │ │ │ ├── health/ │ │ │ │ ├── api-root.controller.spec.ts │ │ │ │ ├── api-root.controller.ts │ │ │ │ ├── health.controller.ts │ │ │ │ └── health.module.ts │ │ │ ├── homeservices/ │ │ │ │ ├── dto/ │ │ │ │ │ └── homeservices.dto.ts │ │ │ │ ├── homeservices.controller.ts │ │ │ │ ├── homeservices.module.ts │ │ │ │ └── homeservices.service.ts │ │ │ ├── hotels/ │ │ │ │ ├── dto/ │ │ │ │ │ └── hotels.dto.ts │ │ │ │ ├── hotels.controller.ts │ │ │ │ ├── hotels.module.ts │ │ │ │ └── hotels.service.ts │ │ │ ├── kyc/ │ │ │ │ ├── dto/ │ │ │ │ │ └── kyc.dto.ts │ │ │ │ ├── kyc.controller.ts │ │ │ │ ├── kyc.module.ts │ │ │ │ └── kyc.service.ts │ │ │ ├── media/ │ │ │ │ ├── dto/ │ │ │ │ │ └── media.dto.ts │ │ │ │ ├── media.constants.ts │ │ │ │ ├── media.controller.ts │ │ │ │ ├── media.module.ts │ │ │ │ ├── media.service.spec.ts │ │ │ │ ├── media.service.ts │ │ │ │ └── s3.service.ts │ │ │ ├── medical/ │ │ │ │ ├── dto/ │ │ │ │ │ └── medical.dto.ts │ │ │ │ ├── health-history.mapper.spec.ts │ │ │ │ ├── health-history.mapper.ts │ │ │ │ ├── medical.controller.ts │ │ │ │ ├── medical.module.ts │ │ │ │ └── medical.service.ts │ │ │ ├── merchants/ │ │ │ │ ├── dto/ │ │ │ │ │ └── merchants.dto.ts │ │ │ │ ├── merchants.controller.ts │ │ │ │ ├── merchants.module.ts │ │ │ │ ├── merchants.service.spec.ts │ │ │ │ └── merchants.service.ts │ │ │ ├── notifications/ │ │ │ │ ├── dto/ │ │ │ │ │ └── notifications.dto.ts │ │ │ │ ├── notifications.controller.ts │ │ │ │ ├── notifications.module.ts │ │ │ │ └── notifications.service.ts │ │ │ ├── orders/ │ │ │ │ ├── dto/ │ │ │ │ │ └── orders.dto.ts │ │ │ │ ├── orders.controller.ts │ │ │ │ ├── orders.module.ts │ │ │ │ ├── orders.service.spec.ts │ │ │ │ └── orders.service.ts │ │ │ ├── parking/ │ │ │ │ ├── dto/ │ │ │ │ │ └── parking.dto.ts │ │ │ │ ├── parking.controller.ts │ │ │ │ ├── parking.module.ts │ │ │ │ └── parking.service.ts │ │ │ ├── partners/ │ │ │ │ ├── dto/ │ │ │ │ │ └── partners.dto.ts │ │ │ │ ├── partners.controller.ts │ │ │ │ ├── partners.module.ts │ │ │ │ ├── partners.service.spec.ts │ │ │ │ └── partners.service.ts │ │ │ ├── payments/ │ │ │ │ ├── dto/ │ │ │ │ │ └── payments.dto.ts │ │ │ │ ├── payments.controller.ts │ │ │ │ ├── payments.crypto.spec.ts │ │ │ │ ├── payments.crypto.ts │ │ │ │ ├── payments.module.ts │ │ │ │ └── payments.service.ts │ │ │ ├── pharmacy/ │ │ │ │ ├── dto/ │ │ │ │ │ └── pharmacy.dto.ts │ │ │ │ ├── pharmacy.controller.ts │ │ │ │ ├── pharmacy.module.ts │ │ │ │ └── pharmacy.service.ts │ │ │ ├── places/ │ │ │ │ ├── dto/ │ │ │ │ │ ├── map-places.dto.ts │ │ │ │ │ ├── nearby-places.dto.ts │ │ │ │ │ ├── nearby-query.dto.spec.ts │ │ │ │ │ ├── place-category.dto.ts │ │ │ │ │ └── place.dto.ts │ │ │ │ ├── entities/ │ │ │ │ │ └── place.entity.ts │ │ │ │ ├── hub-places.service.ts │ │ │ │ ├── place-audit.service.ts │ │ │ │ ├── place-categories.controller.ts │ │ │ │ ├── place-categories.service.ts │ │ │ │ ├── place-category.mapper.ts │ │ │ │ ├── place-claim.service.ts │ │ │ │ ├── place-distance.service.ts │ │ │ │ ├── place-errors.ts │ │ │ │ ├── place-import.service.ts │ │ │ │ ├── places.controller.ts │ │ │ │ ├── places.module.ts │ │ │ │ ├── places.repository.ts │ │ │ │ ├── places.service.spec.ts │ │ │ │ └── places.service.ts │ │ │ ├── promotions/ │ │ │ │ ├── dto/ │ │ │ │ │ └── promotions.dto.ts │ │ │ │ ├── promotions.controller.ts │ │ │ │ ├── promotions.module.ts │ │ │ │ └── promotions.service.ts │ │ │ ├── qr/ │ │ │ │ ├── dto/ │ │ │ │ │ └── qr.dto.ts │ │ │ │ ├── qr.controller.ts │ │ │ │ ├── qr.module.ts │ │ │ │ └── qr.service.ts │ │ │ ├── rentals/ │ │ │ │ ├── dto/ │ │ │ │ │ └── rentals.dto.ts │ │ │ │ ├── rentals.controller.ts │ │ │ │ ├── rentals.module.ts │ │ │ │ └── rentals.service.ts │ │ │ ├── reviews/ │ │ │ │ ├── dto/ │ │ │ │ │ └── reviews.dto.ts │ │ │ │ ├── reviews.controller.ts │ │ │ │ ├── reviews.module.ts │ │ │ │ └── reviews.service.ts │ │ │ ├── rides/ │ │ │ │ ├── dto/ │ │ │ │ │ └── rides.dto.ts │ │ │ │ ├── rides-realtime.service.ts │ │ │ │ ├── rides-socket.bootstrap.ts │ │ │ │ ├── rides.controller.ts │ │ │ │ ├── rides.module.ts │ │ │ │ ├── rides.service.spec.ts │ │ │ │ └── rides.service.ts │ │ │ ├── routing/ │ │ │ │ ├── dto/ │ │ │ │ │ └── routing.dto.ts │ │ │ │ ├── routing.controller.ts │ │ │ │ ├── routing.module.ts │ │ │ │ └── routing.service.ts │ │ │ ├── schools/ │ │ │ │ ├── dto/ │ │ │ │ │ └── schools.dto.ts │ │ │ │ ├── schools.controller.ts │ │ │ │ ├── schools.module.ts │ │ │ │ └── schools.service.ts │ │ │ ├── social/ │ │ │ │ ├── dto/ │ │ │ │ │ └── social.dto.ts │ │ │ │ ├── social.controller.ts │ │ │ │ ├── social.module.ts │ │ │ │ └── social.service.ts │ │ │ ├── support/ │ │ │ │ ├── dto/ │ │ │ │ │ └── support.dto.ts │ │ │ │ ├── support.controller.ts │ │ │ │ ├── support.module.ts │ │ │ │ └── support.service.ts │ │ │ ├── transit/ │ │ │ │ ├── transit.controller.ts │ │ │ │ ├── transit.module.ts │ │ │ │ └── transit.service.ts │ │ │ ├── users/ │ │ │ │ ├── dto/ │ │ │ │ │ └── update-profile.dto.ts │ │ │ │ ├── users.controller.ts │ │ │ │ ├── users.module.ts │ │ │ │ └── users.service.ts │ │ │ └── wallet/ │ │ │ ├── dto/ │ │ │ │ └── wallet.dto.ts │ │ │ ├── wallet.controller.ts │ │ │ ├── wallet.module.ts │ │ │ ├── wallet.service.spec.ts │ │ │ └── wallet.service.ts │ │ ├── prisma/ │ │ │ ├── prisma.module.ts │ │ │ └── prisma.service.ts │ │ ├── app.module.ts │ │ └── main.ts │ ├── test/ │ │ ├── app.e2e-spec.ts │ │ └── jest-e2e.json │ ├── .dockerignore │ ├── .env │ ├── .env.bak-owner-import-2026-07-31T0943 │ ├── .env.bak-owner-import-2026-07-31T0944 │ ├── .env.example │ ├── .env.production.example │ ├── .gitignore │ ├── .prettierrc │ ├── Dockerfile │ ├── eslint.config.mjs │ ├── nest-cli.json │ ├── package-lock.json │ ├── package.json │ ├── README.md │ ├── skills-lock.json │ ├── tsconfig.build.json │ └── tsconfig.json ├── assets/ │ └── sound-pack-v1/ │ ├── _wav/ │ │ ├── call_busy.wav │ │ ├── call_connected.wav │ │ ├── call_connecting.wav │ │ ├── call_ended.wav │ │ ├── call_missed.wav │ │ ├── call_ringtone_incoming.wav │ │ ├── call_ringtone_outgoing.wav │ │ ├── notif_default.wav │ │ ├── notif_message.wav │ │ ├── notif_order.wav │ │ ├── notif_payment.wav │ │ ├── notif_promo.wav │ │ ├── notif_ride.wav │ │ ├── notif_urgent.wav │ │ ├── ride_driver_arriving.wav │ │ ├── ride_driver_assigned.wav │ │ ├── ride_trip_completed.wav │ │ ├── ride_trip_started.wav │ │ ├── ui_add_cart.wav │ │ ├── ui_checkout.wav │ │ ├── ui_error.wav │ │ ├── ui_scan_qr.wav │ │ ├── ui_send_message.wav │ │ ├── ui_success.wav │ │ ├── wallet_payment_fail.wav │ │ ├── wallet_topup_success.wav │ │ ├── wallet_transfer_received.wav │ │ └── wallet_transfer_sent.wav │ ├── call_busy.mp3 │ ├── call_connected.mp3 │ ├── call_connecting.mp3 │ ├── call_ended.mp3 │ ├── call_missed.mp3 │ ├── call_ringtone_incoming.mp3 │ ├── call_ringtone_outgoing.mp3 │ ├── MANIFEST.csv │ ├── notif_default.mp3 │ ├── notif_message.mp3 │ ├── notif_order.mp3 │ ├── notif_payment.mp3 │ ├── notif_promo.mp3 │ ├── notif_ride.mp3 │ ├── notif_urgent.mp3 │ ├── ride_driver_arriving.mp3 │ ├── ride_driver_assigned.mp3 │ ├── ride_trip_completed.mp3 │ ├── ride_trip_started.mp3 │ ├── ui_add_cart.mp3 │ ├── ui_checkout.mp3 │ ├── ui_error.mp3 │ ├── ui_scan_qr.mp3 │ ├── ui_send_message.mp3 │ ├── ui_success.mp3 │ ├── wallet_payment_fail.mp3 │ ├── wallet_topup_success.mp3 │ ├── wallet_transfer_received.mp3 │ └── wallet_transfer_sent.mp3 ├── dashboard/ │ ├── src/ │ │ ├── modules/ │ │ │ ├── auth/ │ │ │ │ └── LoginPanel.tsx │ │ │ ├── cms/ │ │ │ │ └── CmsModule.tsx │ │ │ ├── driver/ │ │ │ │ └── DriverModule.tsx │ │ │ ├── fuel/ │ │ │ │ └── FuelModule.tsx │ │ │ ├── health/ │ │ │ │ └── HealthModule.tsx │ │ │ ├── hotels/ │ │ │ │ └── HotelsModule.tsx │ │ │ ├── kyc/ │ │ │ │ └── KycModule.tsx │ │ │ ├── medical/ │ │ │ │ └── MedicalModule.tsx │ │ │ ├── ops/ │ │ │ │ └── OpsModule.tsx │ │ │ ├── overview/ │ │ │ │ └── OverviewModule.tsx │ │ │ ├── parking/ │ │ │ │ └── ParkingModule.tsx │ │ │ ├── partners/ │ │ │ │ └── PartnersModule.tsx │ │ │ ├── pharmacy/ │ │ │ │ └── PharmacyModule.tsx │ │ │ ├── places/ │ │ │ │ └── PlacesModule.tsx │ │ │ ├── rentals/ │ │ │ │ └── RentalsModule.tsx │ │ │ ├── schools/ │ │ │ │ └── SchoolsModule.tsx │ │ │ ├── support/ │ │ │ │ └── SupportModule.tsx │ │ │ └── wallet/ │ │ │ └── LedgerModule.tsx │ │ ├── shared/ │ │ │ ├── api.ts │ │ │ └── ApproveQueue.tsx │ │ ├── App.tsx │ │ ├── main.tsx │ │ ├── styles.css │ │ └── vite-env.d.ts │ ├── .env │ ├── .env.example │ ├── .env.production │ ├── .env.production.example │ ├── .gitignore │ ├── index.html │ ├── package-lock.json │ ├── package.json │ ├── README.md │ ├── tsconfig.json │ └── vite.config.ts ├── deploy/ │ ├── osrm/ │ │ ├── bootstrap-osrm.sh │ │ └── docker-compose.osrm.yml │ ├── postgres/ │ │ └── init.sql │ ├── .api-dev-err.log │ ├── .api-dev-out.log │ ├── backup-postgres.sh │ ├── bind-api-localhost.sh │ ├── bootstrap-existing-aapanel.sh │ ├── debug-acme.sh │ ├── dedupe-api-env.py │ ├── deploy-dashboard.sh │ ├── docker-compose.mail.yml │ ├── finalize-prod-env.sh │ ├── finalize-vps.sh │ ├── fix-db.sh │ ├── fix-nginx-http2.sh │ ├── fix-prod-env.sh │ ├── fix-schema.sh │ ├── health-check.sh │ ├── health-watch.sh │ ├── inspect-db.sh │ └── … (+23 more) ├── design/ │ ├── mockups/ │ │ ├── 0293115396ae17f04ebf1.jpg │ │ ├── 031df9d87e25ff7ba63431.jpg │ │ ├── 090d36cbb1363068692713.jpg │ │ ├── 0beb7020f7dd76832fcc7.jpg │ │ ├── 0ea609678e9a0fc4568b23.jpg │ │ ├── 14e5e62061dde083b9cc17.jpg │ │ ├── 160bc3ce4433c56d9c2211.jpg │ │ ├── 197070b6f74b76152f5a20.jpg │ │ ├── 1b58659ce261633f3a7014.jpg │ │ ├── 1eabc56a4297c3c99a8621.jpg │ │ ├── 24c319059ef81fa646e933.jpg │ │ ├── 25af5769d09451ca088510.jpg │ │ ├── 2905f7c0703df163a82c4.jpg │ │ ├── 2debcf2d48d0c98e90c139.jpg │ │ ├── 2e0177c0f03d7163282c24.jpg │ │ ├── 40e75426d3db52850bca16.jpg │ │ ├── 44ba267ea18320dd799235.jpg │ │ ├── 47da3111b6ec37b26efd3.jpg │ │ ├── 51ff343eb3c3329d6bd238.jpg │ │ ├── 56cd580cdff15eaf07e027.jpg │ │ ├── 5ad2d51752ead3b48afb15.jpg │ │ ├── 6183f04777baf6e4afab37.jpg │ │ ├── 61a37b62fc9f7dc1248e2.jpg │ │ ├── 679afd5e7aa3fbfda2b226.jpg │ │ ├── 6c9b6451e3ac62f23bbd6.jpg │ │ ├── 706f4ba9cc544d0a14459.jpg │ │ ├── 7971a4b42349a217fb5834.jpg │ │ ├── 7b7693b0144d9513cc5c29.jpg │ │ ├── 868c944613bb92e5cbaa22.jpg │ │ ├── 884bc08f4772c62c9f6325.jpg │ │ ├── 934d7f88f875792b20645.jpg │ │ ├── 9a1118d49f291e77473812.jpg │ │ ├── ad9d5058d7a556fb0fb436.jpg │ │ ├── b6ccd00857f5d6ab8fe430.jpg │ │ ├── bfb02874af892ed7779819.jpg │ │ ├── c884bd423abfbbe1e2ae18.jpg │ │ ├── cfcfca054df8cca695e932.jpg │ │ ├── f16b6dadea506b0e32418.jpg │ │ └── f31123d7a42a25747c3b28.jpg │ ├── pdfs/ │ │ └── README.md │ └── README.md ├── docs/ │ ├── design-boards/ │ │ └── README.md │ ├── references/ │ │ ├── agent-work-queue.json │ │ ├── homefix-swagger-snapshot.json │ │ ├── imp-stub-audit.json │ │ └── welife-openapi-ops.csv │ ├── reports/ │ │ ├── DOCS-API-FE-CONNECTIVITY.md │ │ ├── ENV-SECURITY-AUDIT.md │ │ ├── LOCAL-STABILITY-REPORT-2026-08-06-REVISED.md │ │ ├── LOCAL-STABILITY-REPORT-2026-08-06.md │ │ ├── place-audit.json │ │ ├── place-audit.md │ │ ├── RIDE-RENTAL-DIRECTIONS-AUDIT.md │ │ ├── Tiến độ test App.xlsx │ │ └── VPS-VS-APP-DESIGN-BUILD-AUDIT.md │ ├── 00-DOC-MAP.md │ ├── 01-MATRIX-TRACEABILITY.md │ ├── 02-ARCHITECTURE.md │ ├── 03-AI-WORKFLOW.md │ ├── 04-SURFACES-CONTRACT.md │ ├── 05-PHASE-BACKLOG.md │ ├── 06-AI-RULES-EXTENSIONS.md │ ├── 07-ENVIRONMENT.md │ ├── 08-FE-ROADMAP-FIGMA-MATRIX.md │ ├── 09-AGENT-AUDIT-QUEUE.md │ ├── 10-AGENT-AUTONOMOUS-LOOP.md │ ├── 11-FE-SURFACE-AUDIT.md │ ├── 12-NEXT-WORK-PLAN.md │ ├── 13-FE-SCREEN-GAP-MATRIX.md │ ├── 14-SCREEN-MATRIX-OFFICIAL.md │ ├── 15-COMPLETION-AUDIT-MATRIX.md │ ├── 16-PHASE-P7-HARDEN.md │ └── … (+25 more) ├── driver/ │ ├── src/ │ │ ├── features/ │ │ │ ├── auth/ │ │ │ │ ├── AuthContext.tsx │ │ │ │ └── LoginScreen.tsx │ │ │ ├── chat/ │ │ │ │ └── ChatInboxScreen.tsx │ │ │ ├── home/ │ │ │ │ └── HomeScreen.tsx │ │ │ ├── kyc/ │ │ │ │ └── KycScreen.tsx │ │ │ ├── ratings/ │ │ │ │ └── RatingsScreen.tsx │ │ │ ├── register/ │ │ │ │ └── RegisterScreen.tsx │ │ │ ├── settings/ │ │ │ │ └── SettingsScreen.tsx │ │ │ ├── shell/ │ │ │ ├── trips/ │ │ │ │ ├── InTripScreen.tsx │ │ │ │ ├── TripDetailScreen.tsx │ │ │ │ └── TripsScreen.tsx │ │ │ └── wallet/ │ │ │ ├── TxDetailScreen.tsx │ │ │ └── WalletScreen.tsx │ │ ├── navigation/ │ │ │ └── MainShell.tsx │ │ ├── services/ │ │ │ ├── api.ts │ │ │ ├── liveGps.ts │ │ │ ├── ridesSocket.ts │ │ │ └── secure-token.ts │ │ ├── shared/ │ │ │ ├── device/ │ │ │ │ ├── captureUpload.ts │ │ │ │ ├── index.ts │ │ │ │ ├── media.ts │ │ │ │ └── permissions.ts │ │ │ ├── ui/ │ │ │ │ ├── Button.tsx │ │ │ │ └── SlideToConfirm.tsx │ │ │ └── format.ts │ │ └── theme/ │ │ └── tokens.ts │ ├── .env │ ├── .env.example │ ├── .env.production.example │ ├── app.json │ ├── App.tsx │ ├── eas.json │ ├── index.ts │ ├── package-lock.json │ ├── package.json │ ├── README.md │ └── tsconfig.json ├── mobile/ │ ├── .claude/ │ │ └── settings.json │ ├── assets/ │ │ ├── android-icon-background.png │ │ ├── android-icon-foreground.png │ │ ├── android-icon-monochrome.png │ │ ├── favicon.png │ │ ├── icon.png │ │ └── splash-icon.png │ ├── scripts/ │ │ └── fix-hermes-parser.js │ ├── src/ │ │ ├── features/ │ │ │ ├── addresses/ │ │ │ │ └── screens/ │ │ │ │ ├── AddressFormScreen.tsx │ │ │ │ └── AddressListScreen.tsx │ │ │ ├── assistant/ │ │ │ │ └── screens/ │ │ │ │ └── AssistantScreen.tsx │ │ │ ├── atm/ │ │ │ │ ├── screens/ │ │ │ │ │ ├── AtmDetailScreen.tsx │ │ │ │ │ └── AtmNearbyScreen.tsx │ │ │ │ └── atmHelpers.ts │ │ │ ├── auth/ │ │ │ │ ├── screens/ │ │ │ │ │ ├── LocationPermissionScreen.tsx │ │ │ │ │ ├── OnboardingScreen.tsx │ │ │ │ │ ├── SessionExpiredScreen.tsx │ │ │ │ │ ├── SplashScreen.tsx │ │ │ │ │ └── TwoFaSetupScreen.tsx │ │ │ │ ├── AuthContext.tsx │ │ │ │ ├── AuthGate.tsx │ │ │ │ ├── googleClientIds.ts │ │ │ │ ├── GoogleLoginBlock.tsx │ │ │ │ ├── GoogleSignInActive.tsx │ │ │ │ ├── LoginScreen.tsx │ │ │ │ ├── onboardingStorage.ts │ │ │ │ ├── sessionEvents.ts │ │ │ │ └── useGoogleSignIn.ts │ │ │ ├── bills/ │ │ │ │ └── screens/ │ │ │ │ ├── BillsHomeScreen.tsx │ │ │ │ ├── BillsInvoiceDetailScreen.tsx │ │ │ │ └── BillsInvoicesScreen.tsx │ │ │ ├── charging/ │ │ │ │ └── screens/ │ │ │ │ ├── ChargingDetailScreen.tsx │ │ │ │ └── ChargingNearbyScreen.tsx │ │ │ ├── chat/ │ │ │ │ └── screens/ │ │ │ │ ├── CallScreen.tsx │ │ │ │ ├── ChatThreadScreen.tsx │ │ │ │ └── ConversationsScreen.tsx │ │ │ ├── delivery/ │ │ │ │ └── screens/ │ │ │ │ ├── DeliveryDetailScreen.tsx │ │ │ │ ├── DeliveryHomeScreen.tsx │ │ │ │ └── DeliveryOrdersScreen.tsx │ │ │ ├── favorites/ │ │ │ │ └── screens/ │ │ │ │ └── FavoritesScreen.tsx │ │ │ ├── fnb/ │ │ │ │ └── screens/ │ │ │ │ ├── CartScreen.tsx │ │ │ │ ├── MerchantListScreen.tsx │ │ │ │ ├── MerchantMapScreen.tsx │ │ │ │ ├── MerchantMenuScreen.tsx │ │ │ │ ├── OrderListScreen.tsx │ │ │ │ ├── OrderRateScreen.tsx │ │ │ │ ├── OrderSuccessScreen.tsx │ │ │ │ └── OrderTrackScreen.tsx │ │ │ ├── fuel/ │ │ │ │ ├── components/ │ │ │ │ │ └── FuelFilterModal.tsx │ │ │ │ ├── screens/ │ │ │ │ │ ├── FuelDetailScreen.tsx │ │ │ │ │ ├── FuelNearbyScreen.tsx │ │ │ │ │ └── FuelRouteScreen.tsx │ │ │ │ ├── fuelFilter.test.ts │ │ │ │ └── fuelFilter.ts │ │ │ ├── geo/ │ │ │ │ └── screens/ │ │ │ ├── grocery/ │ │ │ │ ├── components/ │ │ │ │ │ └── GroceryFilterModal.tsx │ │ │ │ └── screens/ │ │ │ │ ├── GroceryCheckoutScreen.tsx │ │ │ │ ├── GroceryHomeScreen.tsx │ │ │ │ ├── GroceryStoreScreen.tsx │ │ │ │ └── GrocerySuccessScreen.tsx │ │ │ ├── health/ │ │ │ │ ├── mock/ │ │ │ │ │ └── healthMock.ts │ │ │ │ └── screens/ │ │ │ │ ├── HealthHistoryScreen.tsx │ │ │ │ ├── HealthHomeScreen.tsx │ │ │ │ └── HealthVaxDetailScreen.tsx │ │ │ ├── home/ │ │ │ │ ├── components/ │ │ │ │ │ ├── ExploreNearSection.tsx │ │ │ │ │ ├── HomeBrandHeader.tsx │ │ │ │ │ ├── HomeMapPreview.tsx │ │ │ │ │ ├── NearbyPlacesSection.tsx │ │ │ │ │ ├── QuickDestinationPills.tsx │ │ │ │ │ ├── RidePromoBanner.tsx │ │ │ │ │ ├── SectionTitle.tsx │ │ │ │ │ └── ServiceGridItem.tsx │ │ │ │ ├── mock/ │ │ │ │ │ └── homeMapMock.ts │ │ │ │ ├── screens/ │ │ │ │ │ ├── AllServicesScreen.tsx │ │ │ │ │ ├── HomeMapScreen.tsx │ │ │ │ │ └── ServiceStubScreen.tsx │ │ │ │ └── serviceCatalog.ts │ │ │ ├── homeservices/ │ │ │ │ └── screens/ │ │ │ │ ├── HomeServicesBookingsScreen.tsx │ │ │ │ ├── HomeServicesDetailScreen.tsx │ │ │ │ └── HomeServicesHomeScreen.tsx │ │ │ ├── hotels/ │ │ │ │ ├── components/ │ │ │ │ │ └── HotelFilterModal.tsx │ │ │ │ └── screens/ │ │ │ │ ├── HotelBookingsScreen.tsx │ │ │ │ ├── HotelBookingSuccessScreen.tsx │ │ │ │ ├── HotelConfirmScreen.tsx │ │ │ │ ├── HotelDetailScreen.tsx │ │ │ │ └── HotelListScreen.tsx │ │ │ ├── kyc/ │ │ │ │ └── screens/ │ │ │ │ └── KycSubmitScreen.tsx │ │ │ ├── medical/ │ │ │ │ └── screens/ │ │ │ │ ├── MedicalAppointmentsScreen.tsx │ │ │ │ ├── MedicalBookingSuccessScreen.tsx │ │ │ │ ├── MedicalChatScreen.tsx │ │ │ │ ├── MedicalDetailScreen.tsx │ │ │ │ ├── MedicalDoctorScreen.tsx │ │ │ │ ├── MedicalErScreen.tsx │ │ │ │ ├── MedicalListScreen.tsx │ │ │ │ ├── MedicalMapScreen.tsx │ │ │ │ └── MedicalSpecialtyScreen.tsx │ │ │ ├── notifications/ │ │ │ │ └── screens/ │ │ │ │ ├── NotificationDetailScreen.tsx │ │ │ │ └── NotificationsScreen.tsx │ │ │ ├── parking/ │ │ │ │ ├── components/ │ │ │ │ │ └── ParkFilterModal.tsx │ │ │ │ └── screens/ │ │ │ │ ├── ParkingBookingsScreen.tsx │ │ │ │ ├── ParkingLotScreen.tsx │ │ │ │ ├── ParkingNearbyScreen.tsx │ │ │ │ └── ParkingPayOkScreen.tsx │ │ │ ├── payments/ │ │ │ │ └── settleOrderPayment.ts │ │ │ ├── pharmacy/ │ │ │ │ ├── screens/ │ │ │ │ │ ├── PharmacyCartScreen.tsx │ │ │ │ │ ├── PharmacyDetailScreen.tsx │ │ │ │ │ ├── PharmacyListScreen.tsx │ │ │ │ │ ├── PharmacyPrescriptionsScreen.tsx │ │ │ │ │ └── PharmacySuccessScreen.tsx │ │ │ │ └── pharmacyCart.ts │ │ │ ├── places/ │ │ │ │ ├── screens/ │ │ │ │ │ ├── PlaceDetailScreen.tsx │ │ │ │ │ ├── PlaceSearchScreen.tsx │ │ │ │ │ ├── PlacesNearbyScreen.tsx │ │ │ │ │ └── WelifeMapScreen.tsx │ │ │ │ ├── clusterMapMarkers.test.ts │ │ │ │ ├── clusterMapMarkers.ts │ │ │ │ ├── mapCategories.ts │ │ │ │ ├── placeCatalog.ts │ │ │ │ ├── placeCatalogMappers.test.ts │ │ │ │ ├── placeCatalogMappers.ts │ │ │ │ └── useDeviceLocation.ts │ │ │ ├── profile/ │ │ │ │ └── screens/ │ │ │ │ ├── AccountHomeScreen.tsx │ │ │ │ ├── ActivityHistoryScreen.tsx │ │ │ │ ├── LegalScreens.tsx │ │ │ │ ├── ProfileEditScreen.tsx │ │ │ │ ├── SettingsScreen.tsx │ │ │ │ └── SystemStatesScreen.tsx │ │ │ ├── promotions/ │ │ │ │ ├── components/ │ │ │ │ │ └── PromoCheckoutField.tsx │ │ │ │ └── screens/ │ │ │ │ └── PromotionsScreen.tsx │ │ │ ├── qr/ │ │ │ │ └── screens/ │ │ │ │ ├── QrHomeScreen.tsx │ │ │ │ └── QrResultScreen.tsx │ │ │ ├── rentals/ │ │ │ │ └── screens/ │ │ │ │ ├── RentalCompareScreen.tsx │ │ │ │ ├── RentalDetailScreen.tsx │ │ │ │ ├── RentalListScreen.tsx │ │ │ │ ├── RentalViewingsScreen.tsx │ │ │ │ └── RentalViewingSuccessScreen.tsx │ │ │ ├── reviews/ │ │ │ │ └── screens/ │ │ │ │ └── MyReviewsScreen.tsx │ │ │ ├── rides/ │ │ │ │ ├── screens/ │ │ │ │ │ ├── RideDetailScreen.tsx │ │ │ │ │ ├── RideHomeScreen.tsx │ │ │ │ │ ├── RideMatchingScreen.tsx │ │ │ │ │ ├── RideQuoteScreen.tsx │ │ │ │ │ └── RideRateScreen.tsx │ │ │ │ └── rideVehicles.ts │ │ │ ├── routing/ │ │ │ │ ├── components/ │ │ │ │ │ └── RoutePolylinePreview.tsx │ │ │ │ ├── screens/ │ │ │ │ │ ├── RouteActiveScreen.tsx │ │ │ │ │ ├── RouteStepsScreen.tsx │ │ │ │ │ └── RoutingDirectionsScreen.tsx │ │ │ │ ├── routeCamera.ts │ │ │ │ └── routeHelpers.ts │ │ │ ├── schools/ │ │ │ │ ├── components/ │ │ │ │ │ ├── SchoolContactSheet.tsx │ │ │ │ │ └── SchoolFilterModal.tsx │ │ │ │ └── screens/ │ │ │ │ ├── SchoolBookingSuccessScreen.tsx │ │ │ │ ├── SchoolCompareScreen.tsx │ │ │ │ ├── SchoolConsultationsScreen.tsx │ │ │ │ ├── SchoolDetailScreen.tsx │ │ │ │ └── SchoolListScreen.tsx │ │ │ ├── social/ │ │ │ │ ├── components/ │ │ │ │ │ └── CommentsSheet.tsx │ │ │ │ └── screens/ │ │ │ │ ├── CreatePostScreen.tsx │ │ │ │ ├── FriendsScreen.tsx │ │ │ │ ├── ReelsFeedScreen.tsx │ │ │ │ ├── SocialFeedScreen.tsx │ │ │ │ └── SocialProfileScreen.tsx │ │ │ ├── support/ │ │ │ │ ├── screens/ │ │ │ │ │ ├── SupportCreateTicketScreen.tsx │ │ │ │ │ ├── SupportFaqScreen.tsx │ │ │ │ │ ├── SupportScreen.tsx │ │ │ │ │ ├── SupportTicketDetailScreen.tsx │ │ │ │ │ └── SupportTicketsScreen.tsx │ │ │ │ └── supportMeta.ts │ │ │ ├── transit/ │ │ │ │ └── screens/ │ │ │ │ ├── TransitDetailScreen.tsx │ │ │ │ └── TransitNearbyScreen.tsx │ │ │ └── wallet/ │ │ │ ├── screens/ │ │ │ │ ├── WalletActionScreen.tsx │ │ │ │ ├── WalletAddCardScreen.tsx │ │ │ │ ├── WalletExpenseStatsScreen.tsx │ │ │ │ ├── WalletHomeScreen.tsx │ │ │ │ ├── WalletPaymentMethodsScreen.tsx │ │ │ │ ├── WalletTxDetailScreen.tsx │ │ │ │ └── WalletTxHistoryScreen.tsx │ │ │ └── utils/ │ │ │ └── txCategory.ts │ │ ├── navigation/ │ │ │ ├── MainTabs.tsx │ │ │ ├── MapStackNavigator.tsx │ │ │ ├── RootNavigator.tsx │ │ │ └── types.ts │ │ ├── services/ │ │ │ ├── api.ts │ │ │ ├── chatSocket.ts │ │ │ ├── push.ts │ │ │ ├── ridesSocket.ts │ │ │ └── secure-token.ts │ │ ├── shared/ │ │ │ ├── device/ │ │ │ │ ├── captureUpload.ts │ │ │ │ ├── index.ts │ │ │ │ ├── media.ts │ │ │ │ ├── permissions.ts │ │ │ │ ├── useVoiceDictation.ts │ │ │ │ └── VoiceMicButton.tsx │ │ │ ├── ui/ │ │ │ │ ├── Button.tsx │ │ │ │ ├── ConfirmModal.tsx │ │ │ │ ├── GatewayModeBanner.tsx │ │ │ │ ├── ListRow.tsx │ │ │ │ ├── PlaceholderScreen.tsx │ │ │ │ ├── Screen.tsx │ │ │ │ ├── StateBlocks.tsx │ │ │ │ └── TextField.tsx │ │ │ ├── geo.test.ts │ │ │ └── geo.ts │ │ └── theme/ │ │ └── tokens.ts │ ├── .easignore │ ├── .env │ ├── .env.example │ ├── .env.local │ ├── .env.production │ ├── .env.production.example │ ├── .gitignore │ ├── AGENTS.md │ ├── app.json │ ├── App.tsx │ ├── CLAUDE.md │ ├── eas.json │ ├── google-services.json │ ├── GoogleService-Info.plist │ ├── index.ts │ ├── LICENSE │ ├── metro.config.js │ ├── package-lock.json │ ├── package.json │ ├── README.md │ └── tsconfig.json ├── partner/ │ ├── src/ │ │ ├── features/ │ │ │ ├── auth/ │ │ │ │ ├── AuthContext.tsx │ │ │ │ └── LoginScreen.tsx │ │ │ ├── chat/ │ │ │ │ └── ChatInboxScreen.tsx │ │ │ ├── fnb/ │ │ │ │ ├── FnbAccountTab.tsx │ │ │ │ ├── FnbBottomNav.tsx │ │ │ │ ├── FnbMenuForm.tsx │ │ │ │ ├── FnbMenuTab.tsx │ │ │ │ ├── FnbOrdersTab.tsx │ │ │ │ ├── FnbOverviewTab.tsx │ │ │ │ ├── FnbPartnerScreen.tsx │ │ │ │ ├── FnbPromoPanel.tsx │ │ │ │ ├── FnbRevenueTab.tsx │ │ │ │ ├── format.ts │ │ │ │ └── types.ts │ │ │ ├── fuel/ │ │ │ │ ├── format.ts │ │ │ │ ├── FuelBottomNav.tsx │ │ │ │ ├── FuelMoreTab.tsx │ │ │ │ ├── FuelOverviewTab.tsx │ │ │ │ ├── FuelPartnerScreen.tsx │ │ │ │ ├── FuelPricesTab.tsx │ │ │ │ ├── FuelStaffTab.tsx │ │ │ │ ├── FuelStockTab.tsx │ │ │ │ └── types.ts │ │ │ ├── home/ │ │ │ │ └── HomeScreen.tsx │ │ │ ├── hotels/ │ │ │ │ ├── format.ts │ │ │ │ ├── HotelAccountTab.tsx │ │ │ │ ├── HotelBookingsTab.tsx │ │ │ │ ├── HotelBottomNav.tsx │ │ │ │ ├── HotelOverviewTab.tsx │ │ │ │ ├── HotelPartnerScreen.tsx │ │ │ │ ├── HotelRevenueTab.tsx │ │ │ │ ├── HotelRoomsTab.tsx │ │ │ │ └── types.ts │ │ │ ├── medical/ │ │ │ │ ├── format.ts │ │ │ │ ├── MedAccountTab.tsx │ │ │ │ ├── MedBottomNav.tsx │ │ │ │ ├── MedicalPartnerScreen.tsx │ │ │ │ ├── MedOverviewTab.tsx │ │ │ │ ├── MedPatientEditModal.tsx │ │ │ │ ├── MedPatientsTab.tsx │ │ │ │ ├── MedRevenueTab.tsx │ │ │ │ ├── MedRxForm.tsx │ │ │ │ ├── MedScheduleTab.tsx │ │ │ │ └── types.ts │ │ │ ├── onboarding/ │ │ │ │ └── OnboardingScreen.tsx │ │ │ ├── parking/ │ │ │ │ ├── format.ts │ │ │ │ ├── ParkAccountTab.tsx │ │ │ │ ├── ParkBottomNav.tsx │ │ │ │ ├── ParkingPartnerScreen.tsx │ │ │ │ ├── ParkOverviewTab.tsx │ │ │ │ ├── ParkRevenueTab.tsx │ │ │ │ ├── ParkSlotsTab.tsx │ │ │ │ ├── ParkVehiclesTab.tsx │ │ │ │ └── types.ts │ │ │ ├── pharmacy/ │ │ │ │ ├── format.ts │ │ │ │ ├── PharmAccountTab.tsx │ │ │ │ ├── PharmacyPartnerScreen.tsx │ │ │ │ ├── PharmBottomNav.tsx │ │ │ │ ├── PharmOrdersTab.tsx │ │ │ │ ├── PharmOverviewTab.tsx │ │ │ │ ├── PharmRevenueTab.tsx │ │ │ │ ├── PharmStockTab.tsx │ │ │ │ └── types.ts │ │ │ ├── places/ │ │ │ │ └── PlacesClaimScreen.tsx │ │ │ ├── rentals/ │ │ │ │ ├── format.ts │ │ │ │ ├── RentalPartnerScreen.tsx │ │ │ │ ├── RentBottomNav.tsx │ │ │ │ ├── RentLeadsTab.tsx │ │ │ │ ├── RentListingsTab.tsx │ │ │ │ ├── RentOverviewTab.tsx │ │ │ │ ├── RentProfileTab.tsx │ │ │ │ ├── RentRevenueTab.tsx │ │ │ │ ├── RentTenantsTab.tsx │ │ │ │ └── types.ts │ │ │ └── schools/ │ │ │ ├── format.ts │ │ │ ├── SchAccountTab.tsx │ │ │ ├── SchBottomNav.tsx │ │ │ ├── SchFinanceTab.tsx │ │ │ ├── SchoolPartnerScreen.tsx │ │ │ ├── SchOverviewTab.tsx │ │ │ ├── SchScheduleTab.tsx │ │ │ ├── SchStudentForm.tsx │ │ │ ├── SchStudentsTab.tsx │ │ │ └── types.ts │ │ ├── services/ │ │ │ ├── api.ts │ │ │ └── secure-token.ts │ │ ├── shared/ │ │ │ ├── device/ │ │ │ │ ├── captureUpload.ts │ │ │ │ ├── index.ts │ │ │ │ ├── media.ts │ │ │ │ └── permissions.ts │ │ │ └── ui/ │ │ │ ├── Button.tsx │ │ │ └── StateBlocks.tsx │ │ └── theme/ │ │ └── tokens.ts │ ├── .env │ ├── .env.example │ ├── .env.production.example │ ├── app.json │ ├── App.tsx │ ├── eas.json │ ├── index.ts │ ├── package-lock.json │ ├── package.json │ ├── README.md │ └── tsconfig.json ├── scripts/ │ ├── audit-imp-stub.mjs │ ├── env-bootstrap.mjs │ ├── env-check.mjs │ ├── export-owner-env-b64.mjs │ ├── gen-agent-queue.mjs │ ├── gen-secrets.mjs │ ├── generate-sound-pack.mjs │ ├── import-owner-env-from-app.mjs │ ├── normalize-env-files.mjs │ ├── places-audit.mjs │ ├── repo-tree-audit.mjs │ ├── routing-mapbox-smoke.mjs │ ├── routing-osm-smoke.mjs │ ├── setup.mjs │ ├── smoke-chain-audit.mjs │ ├── upload-sound-pack.sh │ └── wallet-transfer-smoke.mjs ├── secrets/ │ ├── LOCAL-CREDENTIALS.md │ └── README.md ├── .cursorignore ├── .cursorindexingignore ├── .easignore ├── .editorconfig ├── .env ├── .env.example ├── .gitignore ├── .nvmrc ├── .prettierrc.json ├── AGENTS.md ├── docker-compose.yml ├── package-lock.json ├── package.json └── README.md