Plugin Architecture
This page explains how uLanding is put together. You do not need to read this to use uLanding — it's here for the curious, and for administrators who want to understand where things are stored. If you just want to build your site, skip ahead to the Quick Start.
The simple version
uLanding is a plugin that lives inside your Ultimate SMS installation. When it's enabled, it adds new menus to your admin panel and serves your public website to visitors.
Everything you create — pages, services, blog posts, settings — is stored safely in your existing Ultimate SMS database. Nothing is hard‑coded into files, so you can change it any time from the admin panel.
VISITOR YOU (ADMIN)
│ │
▼ ▼
┌─────────────────────────────────────────────┐
│ ULTIMATE SMS APP │
│ ┌─────────────────────────────────────┐ │
│ │ uLanding PLUGIN │ │
│ │ • Themes • Page Builder │ │
│ │ • Customizer • Content (CMS) │ │
│ │ • Widgets • Menus │ │
│ └─────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ DATABASE + STORAGE │
└─────────────────────────────────────────────┘
The building blocks (for the curious)
uLanding is organized into several cooperating systems:
1. Themes
A theme defines the overall visual style. uLanding uses a single flexible rendering engine that can display all 10 themes by reading each theme's manifest — a small settings file that says which header, footer and menu style to use. Themes are stored in the database and can be activated, deactivated and previewed.
2. Page Builder
Each page can be built from sections (also called widgets or addons). Each section is stored as one row in the database, with its settings saved as JSON. Sections can be arranged in a grid (columns) or in a row/column tree for more advanced layouts. Full‑width sections sit outside the grid.
3. Content (CMS)
Services, blog posts, pricing plans, testimonials and brands are standard database records you manage in list‑and‑form screens. Page‑builder blocks like the Service Section or Pricing Section then pull this content in automatically.
4. Theme Customizer
A single control panel that stores your colors, fonts, header, footer, menu, social and off‑canvas settings. Changes are previewed live in an iframe before you save them.
5. Widget Builder
Builds the footer and the blog sidebar out of small reusable widgets, arranged into columns.
Where things are stored
If you administer the server, it helps to know where uLanding keeps things.
| What | Where it lives |
|---|---|
| Plugin code | packages/codeglen/ulanding/ |
| Themes, pages, services, posts, etc. | Your database (tables prefixed with ulanding_, plus pages, services, blogs, brands, testimonials, price_plans, themes, ulanding_menus, landing_page_widgets, etc.) |
| Settings (colors, footer style, 404 page, etc.) | The ulanding_static_options database table |
| Uploaded images & videos | storage/app/public/ (served via the storage symlink) and storage/ulanding-demo/ for demo images |
| Built‑in theme images & assets | packages/codeglen/ulanding/resources/assets/ (served via a special _assets URL) |
| Translations | packages/codeglen/ulanding/resources/lang/ |
| Configuration | config/ulanding.php, config/themes.php |
Note Because everything you create is in the database, backing up your database backs up your website content. Backing up the
storagefolder backs up your uploaded images.
The "Directory Structure" you'll see on the server
For administrators, the plugin folder looks like this:
packages/codeglen/ulanding/
├── config/ # Settings files (ulanding.php, themes.php)
├── database/
│ ├── migrations/ # Database table definitions
│ └── seeders/ # Demo content generators
├── resources/
│ ├── assets/ # Built-in images, CSS, JS
│ ├── lang/ # 14 language translation files
│ └── views/ # Page templates (admin + frontend)
├── routes/ # URL definitions (admin, public)
└── src/ # Application logic
├── Controllers/ # Handles admin & frontend requests
├── Models/ # Database record definitions
├── PageBuilder/ # The 19 page-builder blocks
├── WidgetBuilder/ # The 28 footer/sidebar widgets
├── Themes/ # Theme engine
└── Services/ # Demo import, rendering, etc.
How a page reaches a visitor
For the technically curious, here is the journey of a page from your database to a visitor's screen:
- A visitor opens a URL, e.g.
https://yoursite.com/about. - uLanding finds the published page with the slug
about. - If the page uses the Page Builder, uLanding loads each section, applies your settings, and assembles the HTML. The result is cached for 6 hours for speed.
- The active theme wraps the page with the header, footer and off‑canvas panel.
- Your Theme Customizer colors, fonts and branding are applied.
- The finished page is sent to the visitor's browser.
Tip Because pages are cached, if you change a page and don't see the update, the cache may need to clear. Saving a section clears that page's cache automatically. See Troubleshooting if a change doesn't appear.
The master on/off switch
uLanding can be enabled or disabled from Plugins → All Plugins. When the plugin is inactive, its public website and admin menus are unavailable. Advanced hosts may also use configuration flags — see Configuration.
Continue to Installation.