Skip to content

Running the platform

Platform configuration

Everything here is done in the admin (/admin), without touching code.

Settings, Platform

SettingNotes
Platform name, browser titleShown in the header, page titles, emails.
Public URLThe address used in emails and the sitemap.
Support email, sender name and emailWhere people write to, and who emails come from (the sender address must be allowed by your email provider).
Country, currency, other currenciesCountry of the locations; the platform currency; extra currencies sellers may price listings in. A listing in another currency shows its own price, and on its page about how much that is in the platform currency. The price filter and price sorting compare all listings in the platform currency.
Exchange ratesWhere the daily rates for the other currencies come from: ECB (the European Central Bank, free, no account, about 30 currencies including EUR, USD, GBP, CHF, JPY, CNY, INR, KRW and RON) or ExchangeRate-API (about 160 currencies; create a free account at exchangerate-api.com and paste its key). The rates are fetched every day at 16:00 UTC and right after the currencies change here; when a day fails, the last rates are kept.
LanguageThe language of the whole install: the website, the emails and the app all use it (Romanian and English are included). Each install has one language; a site in another language is another install.
Logo, favicon, share image, home imageAddresses of uploaded images.
Primary colour, header gradient, footer and page coloursThe brand colours. A primary colour too light for white text is darkened automatically just enough to stay readable.
Home title and subtitleThe home page hero.
Legal name, address, registration number, tax IDUsed in the terms and privacy pages.
Facebook, Instagram, Google Analytics, Facebook Pixel, AdSenseLinks and tracking ids; tracking only runs after the visitor accepts cookies.
Search indexingTurn off to keep search engines out (a staging copy, for example).
Map tiles, map creditA map of the listing's town on the listing page, with a circle around the town centre (never the seller's address). Leave the tiles empty for no map. For a small site the OpenStreetMap tiles are enough (https://tile.openstreetmap.org/{z}/{x}/{y}.png, credit © OpenStreetMap contributors), within their usage policy; for more traffic use a tile provider with a key, such as MapTiler, Stadia Maps or Thunderforest, and enter the address and credit they give you. Towns need coordinates (app:geo:import, see Locations).

Settings, Listings

How long listings stay published (30 days by default; the seller renews them for free, from the dashboard or the link in the reminder email 3 days before), photos per listing, listings per results page, how many reports take a listing offline until reviewed, banned words that send a listing to review, and whether buyers can review sellers.

A listing's life: published, then expired after the period above; an expired listing comes off the site and only its owner sees it until they renew it. A seller can take a listing off the site at any time, or mark it sold: a sold listing stays on its page for 30 more days marked as sold (out of search and the home page), then comes off. Categories can be set to be reviewed before publishing (Categories, edit); their new and edited listings wait in Pending review. Listings in other categories go live at once and are checked through reports.

Listing assistant: on the new listing form (website and app), a seller adds photos and, if they want, a short note, and the assistant suggests the title, category, details (attributes) and description. It only fills fields that are still empty, and the seller checks everything before publishing; nothing is published by the assistant. It uses the AI provider the client picks, with the client's own API key:

SettingWhat it does
Listing assistantTurns it on. It stays off while the API key is empty.
AI providerclaude (Anthropic, the default), openai (ChatGPT), gemini (Google) or grok (xAI). Each gets the same instructions and photos and must answer in the same format, so the website and the app work the same with any of them.
API keyThe client's key from the chosen provider: the Anthropic Console, the OpenAI Platform, Google AI Studio or the xAI Console. The cost goes to that account. Only this key is used, so change it when you change the provider.
ModelEmpty uses the provider's default: claude-opus-5-5, gpt-6.1-sol, gemini-3.8-flash or grok-4.7. The model must accept photos.
Suggestions a seller can ask for per dayThe cost cap per seller, 10 by default.

Each suggestion sends up to 4 of the listing's photos, the note and the category list to the chosen provider, so name that provider in the privacy policy before turning it on. Suggestions are worked out by the worker (see Backend installation), usually in a few seconds.

Settings, Storage

Photos are stored on the server's disk by default. For S3-compatible storage set the driver to S3, the bucket, region, keys, the endpoint for providers other than Amazon, and optionally a CDN address. Existing photos are not moved automatically when you switch.

Settings, Chat

With a Pusher Channels app (the free Sandbox plan is enough for a small site), new messages appear in an open chat and in the inbox at once, on the website and in the app, and the unread mark lights up without reloading. Create a Channels app, then copy its app ID, key, secret and cluster here. Without them chat still works; the page shows new messages when it is opened or refreshed, and the app still gets push notifications. Only the members of an account (and the team of a business account) can listen to its messages.

Settings, SMS

Phone verification by text message uses Twilio or Vonage. With the provider off, phone verification is hidden.

Settings, Privacy

How long searches, viewed listings, unconfirmed accounts, photos of deleted listings and contact-form IP addresses are kept. The privacy page shows these periods automatically.

Marketplace templates

A new install can start from a template instead of an empty catalogue: the category tree, attributes, settings and home texts of a kind of marketplace, in Romanian and English.

TemplateWhat you get
generalAn OLX-like site: vehicles (with make and model, year, mileage, fuel...), real estate (rooms, surface, floor...), electronics, home and garden, fashion, sports, kids, pets, jobs and services. Vehicles and property are priced in EUR next to the platform currency.
bikesBicycles, gear, accessories and parts with the attributes of each kind of bike.
carsAn Autovit-like site: cars with 23 makes and 117 models, year, mileage, fuel, gearbox, body, engine size, power, drive, colour, emission standard, first owner, service history, damaged and registered; motorcycles, vans and trucks, parts (with the make they fit) and tyres. Prices in EUR; the demo has three dealers on business accounts and four private sellers.
propertyA Storia-like site: flats for sale and to rent, houses, land, commercial space and rooms, with rooms, floor area, floor, year built, layout, heating, furnished, parking, plot size and land type. Listings show the price per m². Prices in EUR; the demo has two agencies and four owners.
professionalsA services marketplace: ten service categories (design, IT, repairs, cleaning, moving, lessons, events, beauty, car services, pet care) with where the work happens and how it is priced, and the professionals feature switched on. Its demo adds professional profiles with skills and rates, requests for work with quotes, an accepted job and both reviews.
php bin/console app:marketplace:install general            # catalogue and settings
php bin/console app:marketplace:install general --demo     # plus sample sellers, 100+ listings with photos, messages
php bin/console app:marketplace:export my-catalogue        # save your own catalogue as a template

Templates live in data/marketplaces/<name>/marketplace.json. A template refuses to install over existing categories unless --merge is given. Demo accounts use @demo.example.test addresses and never receive email.

In a template's demo section, a listing can have its own photos (image addresses, downloaded once and kept in the cache), a seller (the position of a demo user) and promotions (featured, highlighted, urgent); category_photos gives the top categories their tile pictures. Listings without photos, or whose photos cannot be downloaded, get generated pictures. --photos sets the most photos per listing (3 by default, 0 for none).

Categories and attributes

  • Categories: a tree (drag and drop in the tree view). Each category has a slug used in addresses, an optional icon and image, whether listings in it have a condition (new or used), and Free listings per 30 days for private sellers (empty means the parent's limit; none when no parent has one). Renaming a slug keeps the old address working with a redirect.
  • Attributes: the fields listings can have (number with a unit, choice, yes/no, text). Category attributes attach them to categories, with their position, whether they are required, whether they appear as search filters, and which options are allowed. A number attribute marked Price per unit makes listings show their price divided by it too, like the price per m² next to a surface.

Business accounts, jobs and professionals

  • Teams: a business account invites colleagues by email (My account, Team). Colleagues pick "Working for" in their dashboard to manage the company's listings, messages and offers; replies go out as the company and remember who wrote them.
  • Listing feeds: a business adds the address of a CSV or XML file with its stock (My account, Listing feeds), checks it, maps unknown categories once, and imports. It is read again every 6 hours: new items appear, changed ones update, missing ones go offline.
  • Jobs: set Job applications on a category (Categories) and its listings get an "Apply" box: a message and a CV, kept in the database and shown only to the employer, deleted after the period in Settings, Privacy.
  • Professionals: turn on Professionals in Settings, Listings for a services marketplace. People create a professional profile (skills, rate, area, languages, portfolio), clients post requests, professionals with matching skills are notified and send quotes, the client accepts one, and both review each other.

Locations

Countries, regions (counties, states) and localities. php bin/console app:geo:import CC imports a country from GeoNames with names, coordinates and population; run it again any time, it keeps ids. Localities can have districts (Bucharest's sectors): a search for the city covers them.

Pages

Content pages (terms, privacy, about, help), shown in the footer when marked so. Placeholders like %platform%, %legal_name%, %support_email% are filled from the settings.

Themes

For changes settings cannot make (layout, header, footer, email layout), add themes/<name>/templates/... overriding the supported templates and themes/<name>/assets/theme.scss, set THEME=<name> and rebuild the assets. php bin/console app:theme:check tells you after an update which overrides need a look.

Found a mistake? Tell us.