Skip to main content

Customization Overview

Marketlum is designed to be customized without forking. Your project owns two thin shells — apps/api and apps/web — that consume @marketlum/core, @marketlum/ui, and @marketlum/shared as npm dependencies. Customization happens in the shells; upstream packages stay upgradable.

What you can safely customize

AreaWherePage
Logo, app name, theme colors, fontsapps/webBranding
Languages and translated stringsapps/web/src/i18n, apps/web/messagesTranslations & Locales
Database, JWT, file storage, ports.envEnvironment & Configuration
Initial dataapps/api/src/cli.module.tsSeed Data
New endpoints, jobs, integrationsapps/api/src/app.module.tsExtending the API
React to CRUD on core entitiesapps/api providers with @OnEventDomain Events
New pages, custom layouts, middlewareapps/web/src/appExtending the Web App
Domain model (without code)Admin UI: Taxonomies, ArchetypesTaxonomies & Archetypes

What requires forking

Anything that changes the shape of @marketlum/core entities, the contract of @marketlum/shared Zod schemas, or the internals of @marketlum/ui pages is not customization — it is a fork. If you find yourself wanting to:

  • Rename or add columns to a core entity
  • Change the meaning of a built-in admin page
  • Modify a core service's business rules

…open an issue first. Many of these needs can be met by adding a new module alongside core rather than editing core.

A guiding principle

Treat apps/api and apps/web as your code. Treat node_modules/@marketlum/* as someone else's code. If a customization can be done in the former, do it there. If it cannot, the upstream package is probably missing an extension point — that is a framework gap worth reporting.