Skip to the article
Aniq-UI

E-CommerceBranding

Branding

Where the shop's name, logo, icons, colours and fonts live in each app, and what to change to make it your own brand.

For the Full Stack package

Where the brand lives

The brand is set in files, not in the admin. The storefront and the admin dashboard keep their own copies, so change each app you ship.

WhatStorefront (storefront/)Admin dashboard (admin-dashboard/)
Name, description, contact, linkssrc/config/brand.config.tssrc/config/brand.config.ts
LogoThe name, written as text by src/layouts/app/NavBar/components/Logo.tsxpublic/assets/images/logo-for-lightmode.png and logo-for-darkmode.png
Favicon and app iconssrc/app/ (favicon.ico, icon0.svg, icon1.png, apple-icon.png) and public/web-app-manifest-192x192.png and -512x512.pngThe same files in its own src/app/ and public/
Colourssrc/styles/theme-variables.csssrc/styles/theme-variables.css
Fontssrc/app/layout.tsx and src/styles/base.cssNone set: the system font stack
Wordingmessages/<namespace>/<locale>.jsonmessages/ and the sidebar labels in navigationData.ts

yarn dev shows a change straight away. A production build compiles the brand in, so run yarn build again, or docker compose up --build for the full stack.

The name on the storefront

The shop ships as STORE (ستور in Arabic). Everything is in BRAND_CONFIG, in storefront/src/config/brand.config.ts; text fields have an en and an ar value.

FieldWhere it shows
storeNameThe logo: a text wordmark in the navbar and the footer, and the footer's copyright.
nameThe browser tab (Page | Name), the sharing preview's site name and the website details search engines read.
companyThe organisation name search engines read.
meta.title, meta.description, meta.keywords, meta.authorThe home page's title and the default description and keywords.
meta.ogImage, meta.twitterImageThe picture shown when a page is shared, a path under public/. It ships as the home page's hero photo.
logo.iconThe organisation logo search engines read.
theme.light, theme.darkThe browser's toolbar colour on phones.
manifestThe installed app's name, colours and icons.
contact.email, contact.phone, contact.addressThe footer's contact column and the contact page. They ship as placeholders: replace them.
links.instagram, links.twitter, links.facebook, links.linkedinThe footer's social icons, as full URLs (twitter shows as X). Each filled one gets an icon; empty ones are hidden. They ship empty, so a new shop shows no social row. The same URLs are listed as the organisation's profiles for search engines.

The site's public address comes from NEXT_PUBLIC_SITE_URL, not from this file. The shipped copy describes a menswear shop: the descriptions in brand.config.ts, the home page in messages/home/ and the page titles in messages/seo/ are the places to rewrite it.

The name in the admin dashboard

The dashboard ships as Aniq Dashboard. Everything is in BRAND_CONFIG, in admin-dashboard/src/config/brand.config.ts; text fields have an en and an ar value.

FieldWhere it shows
nameThe browser tab's title on every page, the name in the header, the sharing preview's site name and the footer.
companyThe footer's "by" line, and the organisation search engines read.
versionThe footer.
logo.altThe screen-reader label of the logo on the sign-in page.
logo.iconThe organisation logo search engines read. It is not drawn on screen.
metaThe default title, description, keywords and author, and the image shown when a link to the dashboard is shared.
domain.urlThe base for absolute links in the metadata. It ships as https://yourdomain.com: set it to the admin's own address.
theme, manifestThe browser's toolbar colour, and the installed app's name, colours and icons.
contact, linksThe organisation's email, phone and profiles for search engines only.

The dashboard ships as Aniq Dashboard, with its app icon (/web-app-manifest-512x512.png) as the sharing image. Point meta.ogImage and meta.twitterImage at your own file under public/; a 1200 by 630 picture fills the large preview cards best.

Logo and icons

  • The storefront's logo is its name in text, from storeName, in the navbar (src/layouts/app/NavBar/components/Logo.tsx) and the footer (src/layouts/app/footer/components/FooterBrandIntro.tsx). To use an image instead, put your own image in Logo.tsx. The storefront's logo-for-lightmode.png and logo-for-darkmode.png files are not used.
  • The admin's logo, in the header and on the sign-in page, is two images, one per theme: replace public/assets/images/logo-for-lightmode.png and logo-for-darkmode.png, keeping their names. src/styles/theme-variables.css points at them through --logo-bg-image.
  • Replace the favicon and app icons in each app's src/app/ and public/, keeping the file names, so the manifests and the browser keep finding them.

Colours and themes

Each app defines its colours as CSS variables in src/styles/theme-variables.css: one set under :root for the light theme and one under .dark for the dark theme. The accent is --primaryColor, #ee8038 in both apps.

VariableWhat it colours
--primaryColor, --primaryColorHoverButtons, links and highlights
--accent-textAccent-coloured text on light surfaces (storefront only)
--backgroundThe page
--surface, --surface-hoverCards, panels and their hover (the storefront adds --surface-elevated)
--text, --text-mutedBody text and secondary text
--borderDividers and input outlines
  • Change a colour in both sets, so the two themes stay in step.
  • The theme follows the visitor's system until they pick one with the toggle, which is then remembered in the browser.
  • theme in brand.config.ts is only the browser's toolbar colour, not the interface's.

Fonts

The storefront loads three Google Fonts with one link in src/app/layout.tsx: Plus Jakarta Sans for all Latin text, set on body in src/styles/base.css; Zain for Arabic text, in the same file; and IBM Plex Sans Arabic for Arabic headlines, through the .font-display-ar class in src/styles/utilities.css.

To change one, replace its family in the Google Fonts link in layout.tsx, then the matching font-family in those CSS files. Pick an Arabic font that has the weights the pages use.

The admin dashboard loads no web font and uses the system font stack. Add one the same way if you want it.

Find every mention of the name

The storefront's messages do not repeat the name: the footer's copyright fills it in from storeName. The dashboard's name appears in its own copy. Check both apps:

Terminalin storefront
grep -rn "STORE\|ستور" src messages
Terminalin admin-dashboard
grep -rn "Aniq\|أنيق" src messages

The API

The API carries no brand of its own and sends no email. Its sign-in and error messages are plain text in back-end/src/i18n/translations/<locale>/.

Stuck on a step?

Find a fix before you start over.

Troubleshooting

Cookie Preferences

We use cookies to enhance your browsing experience, analyze site traffic, and personalize content. By clicking "Accept All", you consent to our use of cookies for analytics and personalized advertising.