app/Providers/InstallationServiceProvider.php, say), so that upgrades do not overwrite them.
The readers’ countries
Lekalao ships with no geolocation database: they are heavy, they age quickly and their licences vary. Without one, the Country column of the statistics stays empty; everything else works. To fill it, implementApp\Domain\Analytics\Contracts\GeoLocator:
app/Support/MaxMindGeoLocator.php
app/Providers/InstallationServiceProvider.php
CM, FR) or null.
A payment gateway
App\Domain\Billing\Gateways\BillingGateway says what a gateway has to know how to do:
The gateway’s calls arrive at
POST /webhooks/billing. Wire yours into AppServiceProvider, where LEKALAO_BILLING_GATEWAY is read, or redefine the binding:
A sending provider
The providers on offer (SMTP, Amazon SES, Postmark, Mailgun, SendGrid, Brevo, Resend) are described inApp\Domain\Settings\Enums\MailerTransport: the fields of the form, the Symfony Mailer transport configuration, how feedback is read. For a new provider, add a case to that enum, following one of the existing ones.
The interface languages
Add alang/{code}.json file holding every string of lang/fr.json, and declare the language in config/lekalao.php, key locales.
These extension points stay stable from one version to the next. The rest
of the code may change: avoid editing Lekalao’s own files.