The LaraClassifier Mobile App is a native iOS and Android app for your LaraClassifier website. Your visitors browse, search, post and manage classified ads from their phone, with the same listings, accounts and messages as on the website.
The app has no back-end of its own: everything goes through the REST API of your LaraClassifier website. A listing posted from the app shows up on the website, a message sent from the website shows up in the app, and your admin panel controls both.
Highlights
- Your own brand: the app name, store identifiers, colors, icon and launch screen are all set in a single file,
brand.json. - 18 languages: English, Arabic, Bengali, Chinese, French, Georgian, German, Hebrew, Hindi, Italian, Japanese, Portuguese, Romanian, Russian, Spanish, Thai, Turkish and Ukrainian, with a right-to-left layout for Arabic and Hebrew.
- A complete account: post and edit listings with photos and custom fields, take them offline, chat with buyers, save listings, manage search alerts and the profile.
- Light and dark modes, following the phone setting or the user's choice, and layouts adapted to tablets.
To connect the app to your website, rebrand it and publish it in the stores, read Publishing the Mobile App on Google Play and the App Store.
Requirements
Your website
- LaraClassifier 19.1.13 or later. The app relies on API endpoints and fixes added in that version, so update your website first.
- HTTPS with a valid certificate: iOS and Android block plain HTTP connections in published apps.
- The API token of your website: the
APP_API_TOKENvalue in the/.envfile of your LaraClassifier installation. - The Mobile App settings of your admin panel (Admin panel → Settings → Mobile App), used for push notifications, Google sign-in and app links.
Your computer (to build the app)
- Node.js 22.13 or later (the current LTS version is recommended) with npm, on Windows, macOS or Linux.
- A free Expo account (expo.dev). The apps are built in the cloud by Expo (EAS Build), so you need neither Xcode nor Android Studio.
To publish
- A Google Play Console account (one-time registration fee) for Android.
- An Apple Developer Program membership (yearly fee) for iOS.
What's in the Package
| File or folder | Content |
|---|---|
brand.json | The app name, store identifiers, version, colors and icon files. The only file you need to edit to rebrand the app. |
.env.example | Template of the connection settings (API address and token of your website), to copy to .env.local. |
assets/brand/ | Placeholder app icon, Android adaptive icon, launch image and favicon, to replace with your own. |
src/ | The source code of the app (TypeScript, React Native, Expo), with its texts in 18 languages in src/i18n/locales/. |
app.config.ts, eas.json | Build configuration, generated from brand.json. You normally don't edit them. |
docs/ | The full documentation of the app, to open in your browser. |
Try It on Your Phone
You can run the app on your own phone in a few minutes, connected to your website:
- Unzip the package and open a terminal in the app folder.
- Install the dependencies with
npm install. - Copy
.env.exampleto.env.localand enter the API address and token of your website:EXPO_PUBLIC_API_URL=https://www.your-website.com/api EXPO_PUBLIC_API_TOKEN=your-app-api-token - Start the app with
npx expo start. - Install Expo Go on your phone (App Store or Google Play), sign in with your Expo account and scan the QR code shown in the terminal.
localhost or a local domain), your phone can't reach it directly: see the "Testing with a website on your computer" section of the publishing article.
Browsing and Search
Five tabs sit at the bottom of the screen: Home, Search, Sell (the central button), Messages and Account. Browsing and searching don't require an account.
Home
- Country selector (top left): the listings, cities and prices follow the selected country, chosen among the countries activated in your admin panel.
- Search bar: opens the Search tab.
- Categories: the top-level categories of your website, with the icons set in the admin panel. All shows the full list with subcategories.
- Featured: the premium (promoted) listings.
- Fresh listings: the latest listings, loaded page by page while scrolling. Pull down to refresh.
Search and filters
Results update as the user types. The available filters are:
- Category and subcategory.
- Location: a city of the selected country, found by its name.
- Price: minimum and maximum.
- Sort: best match, newest first, lowest price or highest price.
The heart icon on each result saves the listing (the user is asked to sign in first when needed).
Listing page
- Photo carousel, price, Negotiable label, title, city, date and number of views.
- The custom fields of the listing (as set up per category in the admin panel) and its description.
- The seller, with a link to all their listings, and a safety tip.
- Message seller opens a contact form with quick replies (guests enter their name and email). Call is shown when the seller didn't hide their phone number.
- Share, save and similar listings, plus Report and Block seller.
- On the user's own listing, the buttons become Edit listing and Manage.
Signing In and Account
- Sign in or create an account with an email address, or with a phone number when your website allows it (the phone as authentication field option of the SMS settings).
- Continue with Google and Continue with Facebook are shown when these providers are enabled on your website and configured in the app.
- Forgotten password: email accounts receive a reset link (which opens your website); phone accounts receive a code by SMS and choose their new password in the app.
- Verification: when your website requires a confirmed email or phone, the app shows the next step (a code to type for phones, a link to open for emails) with a send again button. Guests posting a listing go through the same step.
- Two-step verification: users who turned it on for their account type the code they receive after their password.
- Creating an account requires accepting the terms of use and the privacy policy, which open the pages of type Terms and Privacy of your website. The About section of the Account tab links to the same pages.
- The Account tab shows the user's stats (live listings, total views, unread messages) and links to every account page.
- Edit profile: name, email, phone, photo, and the option to hide the phone number on listings. Change password asks for the current password.
- Delete my account: permanently removes the account after a confirmation (required by the App Store and Google Play).
- Signing in on the app signs the user out of the app on their other devices. Their website session is not affected.
Notifications and Links
- Push notifications: new messages, listing approved or expired, payments and account changes, once push is enabled in Admin panel → Settings → Mobile App. Tapping a notification opens the conversation or the listing. Users choose which types they receive in the notification preferences of their account on the website, as for emails.
- Links to your website: a link to one of your listings (shared by email, chat or social networks) opens straight in the app when it is installed.
Both features need a few setup steps on your side: see Mobile App: Push Notifications, Social Sign-In and App Links.
Posting a Listing
The central Sell button opens a form in 3 steps:
- Photos and title: photos from the phone library (the first one is the cover), title, category, and the seller type (individual or professional) when your website shows it. Photos are resized and compressed on the phone to fit the maximum picture size of your website.
- Details: price, Open to offers, description, and the custom fields of the chosen category.
- Location and contact: city, name, email and an optional phone number. Guests also accept the terms of use.
When your website rejects a value (a title that is too short, for example), the error is shown next to the field and the form goes back to the step that contains it. Depending on your settings, the new listing goes live right away or after review. Guests can post when your website allows it.
Managing Listings
Account → My listings has three tabs: Live, In review and Archived. The … button of each listing gives these actions:
| Action | Available for | Result |
|---|---|---|
| View listing | All | Opens the listing page. |
| Edit | All | The posting form with all its fields filled in. Photos added or removed are saved immediately. |
| Take offline | Live | Hides the listing, which moves to Archived. |
| Put back online | Archived | Publishes the listing again. |
| Promote | Live, In review (Android only) | Opens the promotion page of your website, already signed in, to pick a premium plan and pay with your payment add-ons. |
| Delete | All | Deletes the listing permanently, after a confirmation. |
Saved Listings
The heart icon saves a listing. Account → Saved listings (or the heart at the top of the Home tab) shows the saved listings of the selected country; tapping the heart again removes one. Saved listings are shared with the website.
Messages
- The Messages tab lists the conversations, with All, Unread and Important filters. Unread conversations have a blue dot.
- A conversation shows its messages and a reply field. While it is open, new messages are fetched every 15 seconds.
- A long press on a conversation (or the ⋮ button inside it) marks it as read, unread or important, or deletes it.
Users are told about new messages by push notification (when enabled) and by email, as configured on your website.
Search Alerts
Account → Search alerts lists the searches the user saved on the website. Tapping one runs the search in the app; the trash icon deletes it.
Reporting and Blocking
The App Store and Google Play require these tools in apps with user-generated content:
- Report (listing page): the user picks a reason (the report types of your admin panel), adds details and sends the report to your website, which notifies you as for reports made on the website.
- Block seller (listing page) and Block this user (conversation options): the blocked user's listings, saved listings and conversations are hidden from the person who blocked them. Account → Blocked users lists them, with an Unblock button.
Language, Country and Appearance
- Language (Account → Preferences): Same as device by default, or any language activated on your website. Both the app's texts and the content sent by your website (category names, messages) switch. For Arabic and Hebrew, the layout turns right-to-left after the app restarts.
- Country: changes the listings, cities and prices shown.
- Appearance: same as the device, light or dark.
A language activated on your website but not translated in the app shows the app's texts in English and your website's content in that language.
Admin Panel Settings Used by the App
The app follows the settings of your admin panel. Changing them never requires an app update:
| Admin panel setting | Effect in the app |
|---|---|
| Countries, cities, categories, category icons, custom fields | Country and city pickers, category lists, fields of the listing form and listing details. |
| Languages and their translations | Languages offered in the Language screen; translated categories and messages. |
| Listing form: pictures limit, show listing type, title and description lengths | Number of photos per listing, the Sold by field, form validation. |
| Listing form: guests can submit listings | Whether the Sell button asks guests to sign in. |
| Listings review / verification | Whether new listings go to In review before going live. |
| Security: password length | Password hints on the sign-up and change password screens. |
| Upload: maximum picture size | Photos are compressed on the phone to fit it. |
| Report types | Reasons offered in the report form. |
| Pages of type Terms and Privacy | Linked from the sign-up form and the About section of the Account tab. |
| Premium plans and payment add-ons | Promoted listings appear under Featured. On Android, Promote opens the payment page of your website. iOS users promote their listings on the website, since Apple requires its own in-app purchase system for digital services sold in iOS apps. |
| SMS: phone as authentication field | Choice between email and phone on the sign-in and sign-up screens. |
| Social login: Google, Facebook | Social sign-in buttons (with the client IDs of the app). |
| Mobile App: push notifications, app links | Push notifications; links that open in the app. |
FAQ
The app shows "Setup required".
EXPO_PUBLIC_API_URL or EXPO_PUBLIC_API_TOKEN is missing from .env.local. Add it and restart the app with npx expo start --clear.
The app shows "Couldn't load this" or "Can't reach the server".
The usual causes are a wrong API address, a wrong API token or a certificate problem. See Mobile App Troubleshooting.
Categories or cities are empty in some languages.
Your website returns the translation of the language asked by the app, and falls back to the FALLBACK_LOCALE_FOR_DB language set in its /.env file. Set it to the language of your categories and cities data (usually en).
Can my users sign in with Google, Facebook or a phone number?
Yes (since version 1.1 of the app), when these options are enabled on your website. Google and Facebook also need the client IDs of the app, as explained in Mobile App: Push Notifications, Social Sign-In and App Links.
Can users buy premium plans in the app?
On Android, yes: Promote opens the payment page of your website with the user signed in, and works with your payment add-ons. On iOS, no: Apple requires in-app purchases for digital services, so iOS users promote their listings on the website.
Do I need to publish an app update when I change my website?
No. Categories, countries, languages, custom fields, settings and content are read from your website while the app runs. You only rebuild the app to change its name, icon or colors, or to install a new version of the app.
Support
Before opening a ticket, check Mobile App Troubleshooting. Then contact us through the Help Center with your purchase code, your LaraClassifier version, the app version, the platform (iOS or Android) and the steps to reproduce the issue.
Support covers the app as delivered. Customizations, store account setup, and store review issues caused by your content or your store listing are not covered.