LIVE PREVIEWBUY FOR $58

Listaro - a classified ads marketplace with a Flutter app, a Laravel API and a web admin panel

A market, not a set of screens

Most classifieds templates are screens with nothing behind them. You purchase 40 stunning pages, and you then write the server your self.

Listaro ships all three elements: the Flutter app consumers and sellers use, the Laravel API behind it, and the online admin panel you run {the marketplace} from. They have been constructed collectively, towards one another, and the API the app talks to is similar one within the obtain.

It additionally runs the second you unzip it. The app opens on bundled pattern knowledge — actual photographs, actual classes, actual conversations — so each display screen works earlier than any server exists. If you find yourself prepared, one flag on the construct command factors it on the API as an alternative:

flutter run --dart-define=LISTARO_API=https://your-server.take a look at/api/v1

No display screen adjustments. The repositories the pattern knowledge implements are the identical interfaces the API layer implements, which can be what makes swapping in your backend a matter of writing one class.

Stay admin panel: listaro.webkodingtheme.com/admin/login — the demo account is printed on the login web page and fills itself with one click on.
Stay API: /api/v1/listings solutions in your browser proper now.

The three parts of Listaro - 36 Flutter screens, 29 Laravel API endpoints and an 11-screen admin panel over 27 database tables

What’s within the field

Flutter app 36 screens, a five-step posting circulation, 10,326 traces of Dart, 118 exams
Laravel API 29 endpoints, Sanctum authentication, 27 tables with migrations, 73 exams
Admin panel 11 screens: moderation, classes and fields, customers, studies, funds, promotions, settings

The app covers the entire lifetime of an advert: browse and search, filter, favorite, put up in 5 steps, chat, negotiate, increase, mark offered, evaluate the opposite aspect, and each account display screen round it — verification, blocked customers, pockets, notifications, assist, account deletion.

Per-category fields - a car ad asks for year and mileage, a flat asks for rooms and floor area, defined in the admin panel

The factor that makes it classifieds

A market isn’t a store. A automobile wants a 12 months, a mileage and a gearbox; a flat wants rooms, flooring space and a flooring quantity; a telephone wants storage and situation. A product catalogue can not categorical that, and hardcoding it means an app launch each time you add a class.

Fields belong to classes, and also you outline them within the panel. 5 varieties ship — textual content, quantity, choose, multi-select and boolean. Mark a area filterable and it seems in three locations directly: the posting kind, the advert element sheet, and the search filters. No app launch, no migration, no deploy.

That single resolution is why the admin panel exists in any respect, and it’s the distinction between an merchandise you’ll be able to launch an actual market on and one you must fork.

Offers inside the chat thread with accept, decline and a real expiry

Affords, not simply chat

Each classifieds app has a chat. What sellers truly do in that chat is haggle, and a plain message thread makes that unreadable — no one can inform what was agreed.

In Listaro an provide is a message. It sits within the thread the place it was made, it carries its personal quantity, it has an settle for and a decline that either side can see, and it expires by itself. The dialog stays a dialog, and the negotiation stays legible.

Round it: per-side unread counters, marking a thread learn, blocking, and reporting that lands within the admin panel’s queue.

Four boost packages, a wallet and a ledger - Bump up, Featured, Urgent and Bundle

The income mannequin is already constructed

A market with no solution to cost is a pastime. Listaro ships the usual classifieds mannequin, working finish to finish:

  • 4 increase packages — Bump up, Featured, Pressing and a Bundle — every with its personal value, period and profit record.
  • A pockets with an actual ledger. Each credit score and debit is a row; balances are derived, by no means edited.
  • Cash in integer minor items in every single place, from the database to the API to the app. No float arithmetic wherever close to a value.
  • An admin display screen to cost the packages, flip them on and off, and mark one as in style.

Costs, durations and advantages are knowledge, not code. Repricing your market is a kind, not a launch.

The Listaro admin panel - dashboard, listing moderation, category fields, users, reports, payments and settings

The panel runs on unusual internet hosting

The admin panel is plain Blade and one hand-written stylesheet. There isn’t any Vite, no Tailwind construct, no npm manifest and no compiled bundle wherever within the obtain — as a result of the particular person deploying that is on shared internet hosting, the place there is no such thing as a Node and infrequently no shell.

Add, level the doc root at public/, run the migrations, and it’s dwell. What you learn within the supply is what runs.

Two extra issues which are finished reasonably than promised: a listaro:upkeep command expires promotions and presents on a schedule that’s truly registered, and listaro:admin creates your first administrator with out touching the database by hand.

Below the hood

  • Repository interfaces, not suppliers. Screens by no means know whether or not they’re speaking to pattern knowledge or to your server.
  • Search that works on each engines. MySQL FULLTEXT the place it’s obtainable, with a token-wise fallback — as a result of InnoDB ignores phrases underneath three letters, and “television” is a search folks make.
  • 191 exams, 118 in Flutter and 73 in PHP, inexperienced on each SQLite and MySQL 8.
  • Fonts and photographs are bundled, not fetched. Sora and Inter ship with their OFL licences, and the 9 pattern photographs are property — open the app on a airplane and it nonetheless seems to be just like the screenshots.
  • Auth tokens in platform safe storage. Signing in towards your server places the Sanctum token within the iOS Keychain and the Android Keystore via flutter_secure_storage — by no means SharedPreferences, by no means a file. It’s checked at launch, so a token revoked from the panel indicators that machine out, and a sign-out clears the machine whether or not or not the server answered.
  • Full unlocked supply. Nothing minified, nothing obfuscated, nothing phoning house.

What’s not included

Said plainly, as a result of discovering this out after shopping for is how objects earn one-star evaluations.

No dwell fee gateway The pockets, the ledger and shopping for a lift with pockets credit score all work finish to finish. What’s lacking is the gateway that places cash into the pockets — WalletService::credit score() is the place your Stripe or PayPal name goes, and the app’s Prime up button says so reasonably than doing nothing.
No map tiles Location, radius search and the situation picker all work. The map display screen plots actual adverts on a drawn road grid reasonably than fetched tiles, so the app wants no key and no billing account to run.
No push supply Notifications are saved, listed and counted. Wiring FCM is your key and your certificates.
No SMS The phone-verification screens are constructed — code entry, resend timer, the fraud warning — however nothing sends an SMS. There isn’t any OTP endpoint within the API; including your supplier is one route and one display screen callback.

Every one has a single documented place to vary, named within the documentation. And within the app itself the affected management tells you what’s lacking reasonably than doing nothing once you faucet it — there’s a take a look at that fails the construct if a management is ever wired to an empty handler once more.

Please learn this earlier than shopping for: the exterior companies above usually are not included within the buy value and can value you further. Firebase Cloud Messaging, SMS gateways equivalent to Twilio or Vonage, fee suppliers equivalent to Stripe or PayPal, map tile suppliers, and the Apple Developer account iOS push requires are all separate third-party merchandise. You open these accounts your self, they invoice you straight, and their pricing is theirs to set and alter. Nothing on that record is resold or bundled right here — what you might be shopping for is the app, the API and the panel, plus the documented integration factors that connect with them. Listaro runs fully with out each one in every of them: on bundled pattern knowledge with no server in any respect, and by yourself server with no exterior account.

Necessities

  • Flutter 3.x — constructed and examined on 3.44.7 / Dart 3.12.2, flooring declared at Dart 3.3
  • PHP 8.3+ with Laravel 13.x (the model in composer.json), MySQL 8 or SQLite
  • Android SDK platform 36 — compileSdk and targetSdk are each pinned to 36
  • Android and iOS

Questions folks ask first

Does it work and not using a server? Sure, fully. That’s the default. The pattern knowledge is bundled, so the app runs finish to finish on a recent clone.

Can I exploit my very own backend? Sure. Implement 4 repository interfaces — listings, classes, chat and auth — and alter nothing else.

Is the supply unlocked? Completely. Each tasks, no exceptions.

Can I alter the branding? Colors, spacing, radii, shadows and kind are design tokens in two information. Change them as soon as.

Will the panel run on my shared host? If it runs PHP 8.3, sure. There may be nothing to compile.

Listaro - unzip, run, and the marketplace is already working

Assist

Six months of help included, extendable at checkout. Bug studies are answered; so are questions on wiring your personal backend in.

Changelog

1.0.0 — Preliminary launch.


Source