Lusterly documentation

A WordPress theme for beauty salons, day spas, hair and nail studios, barbershops, brow and lash bars and massage studios. Six demos, a booking bar, treatments with prices and times, a price list with tabs, a filterable gallery, stylist profiles, appointment requests with time slots and a live total, opening hours with an "Open now" badge, packages and a gift card banner.
Thank you for choosing Lusterly. This guide takes you from a fresh WordPress site to a copy of the demo with your own details. If something is not covered here, write to support@codememory.com — we answer within one working day.
- Version1.0.0
- WordPress6.5 or later
- PHP7.4 or later
- Live demoOpen the demo
Highlights
- Six beauty demos imported in one click
- Booking bar in the hero: pick a treatment and a day, land on the appointment form
- Treatments with a price, a duration, who does it and who it suits
- Price list grouped by category, with tabs and a "Book" link on every line
- Appointment form with stylist, date, time slots from your opening hours, extras and a live total, saved in your dashboard
- Filterable gallery of looks with the treatment, the stylist and the price
- Stylist profiles with role, years of experience, training and working days
- Opening hours with an "Open now" badge
- Packages and a gift card banner
- Reviews, FAQ, steps, stats and a blog
- 19 Elementor widgets (free Elementor)
- Every section also works as a shortcode
- Call / booking bar on phones
- Light and dark mode
- Colours and fonts from the Customizer
- Block patterns and every core block styled
- Self-hosted fonts, nothing loaded from Google
- Translation ready, right-to-left support
- Child theme included
What is in the download
themeforest-lusterly-wordpress-theme/ ├── lusterly.zip ← the theme: upload this in WordPress ├── lusterly-child.zip ← child theme, for your own code changes (optional) ├── plugins/lusterly-core.zip ← the theme's plugin (also installed from inside the theme) ├── demo-content/ ← demo files for a manual import ├── documentation/ ← this guide, as HTML and PDF └── licensing/ ← GPL licence, font licences and credits
lusterly.zip, not the whole download. Uploading the download zip gives the error
"The package could not be installed. The theme is missing the style.css stylesheet."Requirements
- WordPress 6.5 or later (tested up to 7.1).
- PHP 7.4 or later (8.2 or later recommended).
- For the demo import: PHP
memory_limit256M,max_execution_time300, upload size 32M. Most hosts already allow this; if an import stops half-way, ask your host to raise these values.
Every plugin the theme uses is free from wordpress.org. Nothing needs a paid licence.
Installing the theme
- In your dashboard, go to Appearance → Themes → Add New Theme → Upload Theme.
- Choose
lusterly.zipand click Install Now, then Activate. - Optional: install and activate
lusterly-child.zipthe same way (see Child theme).
Upload by FTP instead: unzip lusterly.zip and copy the lusterly folder to
wp-content/themes/, then activate it under Appearance → Themes.
Plugins
After activation, a notice at the top of the dashboard lists the plugins the theme uses. Click Begin installing plugins (or go to Appearance → Install Plugins), select them all, choose Install, then activate them.
| Plugin | What it adds | |
|---|---|---|
| Lusterly Core | Required | Treatments, gallery, team, occasions, menu categories, reviews, appointment form, opening hours, price list, gift card banner, widgets, shortcodes and the demo import. Included with the theme. |
| Elementor | Recommended | The free page builder used for the demo pages. The theme's own widgets appear in Elementor's Lusterly group. |
| One Click Demo Import | Recommended | Imports a demo in one click. You can remove it after the import. |
The theme works without any plugin: posts, pages, menus, widgets and search are styled the same. The plugin is needed for the salon features (treatments, price list, gallery, team, appointment form…).
Importing a demo
The import gives you the demo site: pages, treatments, looks, team stylists, reviews, posts, menus, widgets and the Customizer settings. Use it on a new site: it adds content next to what you already have.
- Install the plugins above.
- Go to Appearance → Import Demo Data.
- Pick a demo and click Import. It takes one to three minutes; keep the page open.
- Done: visit your site. The home page, menus and blog page are already set.
| Demo | Home page | Accent |
|---|---|---|
| Hair salon | /home-salon/ | #a4505a |
| Day spa | /home-spa/ | #4f6b5a |
| Nail studio | /home-nails/ | #b03a6a |
| Barbershop | /home-barber/ | #b8925a |
| Brows & lashes | /home-lashes/ | #7d4f86 |
| Massage & wellness | /home-wellness/ | #9a5236 |
All six home pages are imported with every demo; the demo you pick decides which one is the front page and which colours and header the Customizer uses. To switch later, go to Settings → Reading and choose another home page.
Manual import
If the one-click import is blocked by your host, use the files in demo-content/:
- Tools → Import → WordPress (install the importer when asked) → upload
content.xml. - Install Widget Importer & Exporter → Tools → Widget Importer & Exporter → upload
widgets.wie. - Install Customizer Export/Import → Appearance → Customize → Export/Import → upload
customizer-<demo>.dat. - Appearance → Menus → Manage Locations: set the main, top bar and footer menus. Settings → Reading: choose the home and blog pages.
After the import: your details
The demo uses a made-up phone number, address, opening hours and prices. Replace them with yours, in this order:
- Phone number and top bar: Appearance → Customize → Lusterly options → Header and top bar. Set Phone number, Top bar text (a short line such as your opening hours) and the Label next to the phone (the demo says "New clients 15% off"). Every "Call" button on the site uses this number.
- Logo and site icon: Appearance → Customize → Site Identity.
- Colours: Appearance → Customize → Colors. The six demo home pages each have their own accent colour (see Page options); clear it there to use the Customizer colour.
- Booking page, opening hours, extras and appointment emails: Settings → Lusterly Core (see Appointment requests and Opening hours).
- Footer widgets: Appearance → Widgets → Footer column 1–4: edit the Contact details widget (address, phone, email).
- Your content: edit the treatments, gallery, team and reviews in the dashboard menus of the same names, and replace the placeholder photos with your own.
Treatments, gallery, team and reviews
The Lusterly Core plugin adds four content types, a Menu categories list and an Occasions list to the dashboard. Each content type has a Details box under the editor.
| Menu | Used for | Details |
|---|---|---|
Treatments/treatments/ | One page per treatment on your menu. Shown by the Treatments and Price list widgets and the treatments archive, and listed in the appointment form and the booking bar. | Icon, price from ("$85"), price note ("long hair from $110"), time in the chair in minutes (used for the appointment length and the time slots), done by ("Senior stylists"), best for ("Fine or flat hair"), what is included (one per line) and an "At a glance" list (one line per item as label|value, for example Lasts|6–8 weeks). |
Gallery/looks/ | Your finished looks. Shown by the Gallery widget as cards, newest first. | Date of the look, time in the chair ("3 h 30 min"), treatment, price ("$240"), created by (the stylist's name) and how you did it (one line per step as step|what, for example Consultation|Skin test and colour plan). |
Team/team/ | Your stylists, artists and therapists. | Role, years of experience, training, what they love doing, the days they work and an optional email. The featured image is the portrait (a tall photo works best). Each profile has a Book with button that opens the appointment form with that person chosen. |
| Reviews | Client reviews shown by the Reviews widget (no page of their own). | Rating, client ("Client since 2021"), treatment, where the review was left. The title is the client's name; the text is the review. The Reviews widget can show only reviews that mention some treatments (for example massage,facial). |
Menu categories (under Treatments) group treatments and looks, for example Hair, Nails or
Brows & lashes. Each category has its own page at /menu/<name>/, and the Menu categories widget
shows each one as an arched photo tile with its number of treatments. Occasions (also under Treatments) group
treatments and looks by the moment they suit, for example Wedding or Everyday. A treatment or look can have several of each.
Turn on Show filter buttons in the Gallery widget (or filter="yes" in the shortcode) to add a
button per category above the cards; visitors click one to see only those looks.
The featured image of a treatment, look or post is used on its card and at the top of its page. Use landscape photos at least 1600 × 900 px.
Price list
The Price list widget (or [lusterly_pricelist]) lists every treatment grouped by menu
category, with a dotted line to the price, the time in the chair, the price note and a Book link that opens
the appointment form with that treatment chosen. It reads your Treatments, so it is always up to date.
- Show tabs adds a button per category above the list (and "Full menu" to see everything).
- Only these menu categories limits the list, for example
menu="barbering". - Treatments are listed in their Order (Page attributes in the editor), then by name.
Appointment requests
The Appointment form widget (or the [lusterly_booking] shortcode) asks for the
treatment, the stylist (or "Anyone available"), the day and a start time, optional extras, the client's name, phone and
email, how to confirm (text message, phone call or email) and an optional message. Name, day, time and a phone number
or email are required. Spam protection is built in (a hidden field and a limit on repeated sends) and no other plugin
is needed.
- Time slots: once a day is picked, the time list only shows start times inside your opening hours that leave room for the treatment and extras before closing. Closed days say so. The same check runs again on the server when the form is sent.
- Live total: as the client picks a treatment and extras, the form shows the total price and the time in the chair. The saved request gets its own total, worked out from your prices on the server.
- Every request is saved under Appointments in the dashboard, with a counter of new ones. Open a request to see the details and set its status: New, Confirmed, Rescheduled, Completed, No-show, Cancelled.
- Settings → Lusterly Core → Appointment requests: choose the Booking page (the page
with the Appointment form widget), the currency symbol, the minutes between time slots, your Extras (one per
line as
Name|price|minutes, for exampleDeep conditioning mask|18|15), turn email alerts on or off, choose the address (empty = the site admin email) and edit the thank-you message and the privacy note. - Requests are not confirmed bookings: you confirm each one by the way the client chose.
- Emails are sent by WordPress. If they do not arrive, install an SMTP plugin such as WP Mail SMTP; requests are saved in the dashboard either way.
The booking bar
Turn on Show the booking bar in the Hero widget. Visitors pick a treatment and a day and press Find a time: the booking page opens with both filled in, ready to choose a time. The Book this treatment button on each treatment page and the Book with button on each team profile open the same form with the treatment or the stylist chosen.
Opening hours
Settings → Lusterly Core → Opening hours: set an opening and a closing time for each day. Leave both empty on days you are closed, and add an optional note (for example "Late opening on Thursdays until 8 pm").
- The Opening hours widget (Elementor) or
[lusterly_hours]shortcode shows the hours beside your address and phone number. The Lusterly: Opening hours widget shows them in the sidebar or footer. - Today's row is highlighted, and a badge says Open now (with the closing time) or Closed now. The badge uses the time zone in Settings → General, and it is worked out in the visitor's browser, so it stays right even when your pages are cached.
- The same hours decide which time slots the appointment form offers.
- The week starts on the day set in Settings → General → Week Starts On; times use the time format set there.
Gift cards and packages
The Gift card widget (or [lusterly_giftcard]) shows a gift card drawn in your accent
colour with your site name, a title, a short text, the amounts you sell (one per line) and a button. Link the button
to your shop, your phone number or a contact page; the theme does not sell gift cards itself.
The Packages widget (or [lusterly_pricing]) shows price cards, one per package, with
what is included and a button. Mark one as featured to highlight it.
Page options
Each page has a Page options box in the editor sidebar:
- Accent colour for this page: overrides the Customizer accent on this page only. The demo uses it to give each demo home page its own colour.
- Colour scheme: light or dark for this page only (the Barbershop demo is dark).
- Header layout: classic, centered or contact, for this page only.
Leave them empty to follow the Customizer.
Page templates
| Template | Use |
|---|---|
| Default | Page title band, content and no sidebar. |
| Full width, no title | For pages built with Elementor: the content fills the screen and you add your own hero. All demo pages use it. |
| Full width with title band | The title band, then full-width content. |
Customizer settings
Appearance → Customize. Colours are in the Colors section; everything else is in the Lusterly options panel. Changes show in the preview before you publish them.
| Setting | Type | Default |
|---|---|---|
| Colors | ||
| Accent colour (buttons, links, icons) | color | #a4505a |
| Ink colour (text, header, footer) | color | #2a1f22 |
| Paper colour (page background) | color | #f8f1ec |
| Style and fonts | ||
| Colour scheme | select | Light |
| Show a light/dark switch in the header | checkbox | On |
| Heading font | select | Noto Serif Display |
| Body font | select | Urbanist |
| Body text size (px) | number | 17 |
| Corner rounding (px) | number | 18 |
| Header and top bar | ||
| Header layout | select | Classic: logo left, menu right |
| Keep the header visible while scrolling | checkbox | On |
| Show the search button | checkbox | On |
| Header button text | text | empty |
| Header button link | url | empty |
| Show the top bar | checkbox | On |
| Top bar text (for example your opening hours) | text | empty |
| Phone number | text | empty |
| Label next to the phone (for example "New clients 15% off") | text | empty |
| Footer | ||
| Widget columns | select | 4 |
| Footer text (links allowed). Leave empty for the site name and year. | textarea | empty |
| Show a back-to-top button | checkbox | On |
| Blog | ||
| Post list layout | select | Grid of cards |
| Sidebar | select | Right |
| Show the author on posts | checkbox | On |
| Show the date on posts | checkbox | On |
| Show related posts under each post | checkbox | On |
| Mobile call bar | ||
| Show a call / booking bar at the bottom of phone screens | checkbox | On |
| Second button text (the first button calls your phone number) | text | empty |
| Second button link | url | empty |
The site title, tagline, logo, site icon, background and homepage settings are WordPress's own, in Site Identity, Background image and Homepage Settings.
Widgets
Appearance → Widgets. Areas: Blog sidebar and Footer column 1 to Footer column 4 (set the number of footer columns in the Customizer). The plugin adds three widgets, named Lusterly: … in the widget list:
- Contact details — phone, email, address, each with a link.
- Opening hours — your hours from Settings → Lusterly Core, with an "Open now" badge.
- Treatments list — links to your treatments; the current treatment is highlighted.
Building pages with Elementor
All demo pages are built with the free Elementor plugin and the theme's widgets.
- Create a page, set its Template to Full width, no title, and click Edit with Elementor.
- Search for the widget or open the Lusterly group in the left panel and drag a widget onto the page.
- Edit its text and options in the left panel. Every widget has a Background option (light, paper, dark or accent colour) so sections alternate like the demo.
The widgets fill themselves from your content: Treatments, Price list, Menu categories, Gallery, Team, Reviews
and Latest posts show the items you add in the dashboard. List fields (prices, steps,
questions…) take one item per line, with the parts separated by |, as the help text under each field shows.
Elementor's own Google Fonts loading is switched off by the demo import, so the site keeps using the theme's self-hosted fonts.
Without Elementor: shortcodes
Every widget is also a shortcode, so you can build the same sections in the block editor: add a Shortcode block and type, for example:
[lusterly_pricelist tabs="yes"] [lusterly_looks count="6" columns="3" filter="yes"] [lusterly_booking title="Book an appointment"]
Options are the same as in Elementor. In list options, separate items with || and parts with
|. Images take an attachment ID (Media → Library → the number in the address) or a full URL.
Hero — [lusterly_hero]
| Option | What it does |
|---|---|
layout | Layout Choices: split, cover |
primary_label | Button text |
primary_url | Button link |
show_phone | Show the phone number (from the Customizer) |
secondary_label | Second button text (when the phone is hidden) |
secondary_url | Second button link |
badges | Short points, one per line |
finder | Show the booking bar (treatment and day) |
image | Photo |
rating | Rating (for example 4.9/5) |
rating_text | Rating note (for example "from 860 client reviews") |
card_title | Floating card title |
card_text | Floating card text |
Also: eyebrow, title, text.
Treatments — [lusterly_treatments]
| Option | What it does |
|---|---|
count | How many |
menu | Only this menu category (slug, optional) |
occasion | Only this occasion (slug, optional) |
style | Style Choices: cards, icons |
show_price | Show prices |
more_label | Button under the grid |
more_url | Button link |
Also: eyebrow, title, text, columns, tone.
Price list — [lusterly_pricelist]
| Option | What it does |
|---|---|
menu | Only these menu categories (slugs, comma separated, optional) |
tabs | Show tabs to pick one category |
note | Small print under the list |
Also: eyebrow, title, text, tone.
Menu categories — [lusterly_menus]
| Option | What it does |
|---|---|
count | How many categories (4 fills the row best) |
Also: eyebrow, title, text, tone.
Gallery — [lusterly_looks]
| Option | What it does |
|---|---|
count | How many |
menu | Only this menu category (slug, optional) |
occasion | Only this occasion (slug, optional) |
filter | Show filter buttons by category |
more_label | Button under the gallery |
more_url | Button link |
Also: eyebrow, title, text, tone.
Reviews — [lusterly_reviews]
| Option | What it does |
|---|---|
summary | Summary line (for example "4.9 average from 860 reviews") |
count | How many |
treatment | Only reviews that mention these treatments (comma separated, empty = all) |
Also: eyebrow, title, text, columns, tone.
Team — [lusterly_team]
| Option | What it does |
|---|---|
count | How many |
Also: eyebrow, title, text, columns, tone.
Numbers — [lusterly_stats]
| Option | What it does |
|---|---|
items | Numbers as Value|Label, one per line |
Also: tone.
Why choose us — [lusterly_features]
| Option | What it does |
|---|---|
items | Features as icon|Title|Text, one per line. Icons: scissors, comb, dryer, polish, lotus, stones, eye, lash, brush, razor, mirror, flower, gift, candle, bottle, crown, home, drop, award, sun, sparkle, heart, leaf, shield, clock, star, check, users, phone, calendar, tag, badge. |
image | Photo (optional) |
Also: eyebrow, title, text, columns, tone.
How it works — [lusterly_steps]
| Option | What it does |
|---|---|
items | Steps as Title|Text, one per line |
Also: eyebrow, title, text, tone.
Packages — [lusterly_pricing]
| Option | What it does |
|---|---|
items | One package per line: Name|Price|Note|Feature; Feature; Feature|yes (to highlight)|Button text|Button link |
note | Small print under the packages |
Also: eyebrow, title, text, tone.
Questions — [lusterly_faq]
| Option | What it does |
|---|---|
items | Questions as Question|Answer, one per line |
Also: eyebrow, title, text, tone.
Call to action — [lusterly_cta]
| Option | What it does |
|---|---|
button_label | Button text |
button_url | Button link |
show_phone | Show the phone number |
Also: title, text, tone.
Trust strip — [lusterly_trust]
| Option | What it does |
|---|---|
items | Points as icon|Text, one per line |
Also: tone.
Latest posts — [lusterly_posts]
| Option | What it does |
|---|---|
count | How many |
category | Only this category (slug, optional) |
Also: eyebrow, title, text, tone.
Gift card banner — [lusterly_giftcard]
| Option | What it does |
|---|---|
amounts | Amounts, one per line (for example $50) |
button_label | Button text |
button_url | Button link |
Also: title, text, tone.
Text and photo — [lusterly_about]
| Option | What it does |
|---|---|
image | Photo |
badge_value | Badge number (for example 12) |
badge_label | Badge text |
points | Points, one per line |
button_label | Button text |
button_url | Button link |
reverse | Photo on the right |
Also: eyebrow, title, text, tone.
Appointment form — [lusterly_booking]
| Option | What it does |
|---|---|
layout | Layout Choices: split, stacked |
points | Points beside the form, one per line |
button | Button text |
show_phone | Show the phone number |
Also: eyebrow, title, text, tone.
Opening hours — [lusterly_hours]
| Option | What it does |
|---|---|
address | Address |
map_url | Directions link (for example a map link) |
show_phone | Show the phone number |
Also: eyebrow, title, text, tone.
Shortcodes: [lusterly_hero], [lusterly_treatments], [lusterly_pricelist], [lusterly_menus], [lusterly_looks], [lusterly_reviews], [lusterly_team], [lusterly_stats], [lusterly_features], [lusterly_steps], [lusterly_pricing], [lusterly_faq], [lusterly_cta], [lusterly_trust], [lusterly_posts], [lusterly_giftcard], [lusterly_about], [lusterly_booking], [lusterly_hours].
Block editor and patterns
Posts and simple pages use the WordPress block editor. Every core block is styled to match the theme, and the editor shows the theme's fonts and colours. Click + → Patterns → Lusterly for ready-made sections: hero with call button, three services, call to action, questions and answers, three reviews, price table and contact details. The theme also adds block styles: Card (Group), Check marks (List), Eyebrow (Paragraph) and Framed (Image).
Blog
Settings → Reading → Posts page sets the page that lists your posts (the demo uses "Blog"). Choose a grid or list layout and the sidebar position in Customize → Lusterly options → Blog. Posts show the author, date, category, share links (turn them off in Settings → Lusterly Core) and related posts.
Light and dark mode
Customize → Lusterly options → Style and fonts → Colour scheme: Light, Dark or Follow the visitor's device. With Show a light/dark switch on, visitors can switch with the moon button in the header; their choice is remembered on that device. A single page can be forced to light or dark in its Page options.
Child theme
If you want to change the theme's code, install lusterly-child.zip and activate Lusterly Child.
Put your CSS in the child theme's style.css and your PHP in its functions.php; copy a
template file from lusterly into the child theme to override it. Theme updates replace the parent theme
only, so your changes are kept.
Small style changes do not need a child theme: use Customize → Additional CSS.
Translation and right-to-left
Every text in the theme and the plugin can be translated. The templates are
lusterly/languages/lusterly.pot and lusterly-core/languages/lusterly-core.pot.
- Easiest: install Loco Translate → Loco Translate → Themes → Lusterly → New language, and translate in your browser. Do the same under Plugins for Lusterly Core.
- Or use Poedit: open the .pot file, translate, and save the files as
lusterly-fr_FR.po/.moinwp-content/languages/themes/.
Right-to-left languages (Arabic, Hebrew, Persian…) are supported: when WordPress runs in such a language, the layout mirrors automatically.
Updating
When a new version is released, download it from your ThemeForest Downloads page. Then either:
- Appearance → Themes → Add New Theme → Upload Theme → choose the new
lusterly.zip→ Replace current with uploaded; or - replace the
wp-content/themes/lusterlyfolder by FTP.
When the theme comes with a newer Lusterly Core, the dashboard notice offers to update the plugin. Your content, menus, widgets and Customizer settings are kept. Changes you made to the parent theme's files are lost: keep them in the child theme.
Questions
"The package could not be installed. The theme is missing the style.css stylesheet."
You uploaded the whole download. Unzip it first and upload lusterly.zip only.
The import stopped or shows an error.
Your host stopped the import early. Ask them to raise max_execution_time to 300 and memory_limit to 256M, then run the import again: items already imported are skipped.
The pages look plain after the import.
Activate Elementor and the theme's plugin, then reload. Without Elementor, the pages show the same sections through shortcodes.
Appointment request emails do not arrive.
Requests are always saved under Appointments. For email, check the address in Settings → Lusterly Core and install an SMTP plugin such as WP Mail SMTP; many hosts block WordPress's default mail.
Where are the demo photos?
They are licensed for the live demo only, so the import uses placeholders. Add your own photos in Media → Library and set them as featured images.
How do I change the font?
Customize → Lusterly options → Style and fonts → heading and body font. All fonts are included in the theme; no Google Fonts requests.
How do I remove the top bar or the phone bar on mobile?
Customize → Lusterly options → Header and top bar → Show the top bar, and Mobile call bar.
Can I use the theme on more than one site?
A Regular licence covers one site (one end product). Buy one licence per site.
Support
Support is included with your purchase and covers questions about the theme's features and fixing bugs. It does not cover custom changes or problems caused by other plugins.
Email support@codememory.com with your purchase code and your site address. See the changelog for what changed in each version and third-party materials for credits.