Skip to main content
Lekalao is a Laravel application: one service provider is enough to replace a piece with your own. Keep your extensions in a provider of their own (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, implement App\Domain\Analytics\Contracts\GeoLocator:
app/Support/MaxMindGeoLocator.php
app/Providers/InstallationServiceProvider.php
The IP address is never stored: it serves to find the country, then it is forgotten. Return a two-letter code (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 in App\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 a lang/{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.