SmartQR Documentation

Installation & Setup Guide

A complete guide for first-time SmartQR owners. Follow it from top to bottom — upload the files, run the installer, configure billing and plans, then understand the daily dashboard workflow.

Installation Upload, extract, point your domain to public/, and finish the installer.
Admin setup Configure billing, plans, branding, and launch details in the admin area.
Daily usage Create QR codes, short links, landing pages, and track analytics.

Need installation help? Request support from the author at codecanyon.net/user/ulutfa. Extended license buyers can request free installation assistance.

Requirements

Before you start

Prepare these items before uploading SmartQR. Having them ready makes setup much faster.

  • PHP 8.3 or newer With the extensions: OpenSSL, PDO, Mbstring, Tokenizer, XML, Ctype, JSON, BCMath, and FileInfo.
  • Web server Apache (with mod_rewrite enabled) or Nginx.
  • Database MySQL 8, MariaDB 10.3+, PostgreSQL 13+, or SQLite.
  • Domain or subdomain For example example.com or qr.example.com.
  • Hosting panel access You need access to File Manager, database tools, and domain/document-root settings.
  • The SmartQR ZIP file Keep it on your computer until installation is confirmed.
Important — document root

SmartQR is a Laravel application. Your domain must point to the public folder inside the project, not the project root.

Upload to your server

Part 1

The exact labels differ between cPanel, Plesk, and DirectAdmin, but the steps are the same on all hosts.

1
Step 1

Create a project folder and upload the ZIP

In your hosting File Manager, create a dedicated folder for SmartQR — for example /home/username/smartqr. Upload the SmartQR ZIP file into that folder.

Uploading the versioned SmartQR ZIP into a project folder
Upload the versioned SmartQR package such as smartqr-v1.0.0.zip into a dedicated project folder, not directly into public_html. This keeps the installation clean.
2
Step 2

Extract the ZIP file

Select the uploaded ZIP and click Extract. Extract it into the same project folder. Wait until extraction completes.

Extract archive screen in a hosting file manager
Keep the ZIP until you confirm the site is working — you can remove it afterwards.

Point your domain to public/

Part 1 — continued

After extraction, your project folder contains directories like app, bootstrap, resources, and public. Your domain must point to the public subdirectory.

Setting Value to use
Project folder /home/username/smartqr
Document root / web root /home/username/smartqr/public
URL in browser https://example.com (your domain or subdomain)
Where to change the document root

Look in your hosting panel for Domains, Addon Domains, Manage Domain, or Document Root. If you cannot find it, ask your hosting provider to point the domain to the SmartQR public folder.

Create a database

Part 1 — continued

Create a new database and a database user in your hosting panel. Assign that user to the database with full permissions.

Values to save

Database name

Database username

Database password

Host (usually localhost)

Port (usually 3306 for MySQL)

Most common mistake

Copying the wrong database name or username. Many hosts automatically add a prefix like accountname_. Use the full prefixed value exactly as your host shows it.

Run the installer

Part 2

Once upload and domain setup are complete, open your domain in a browser. SmartQR may automatically install Composer dependencies first — that is normal.

What to expect on first load

On some servers the first page says Installing Composer Dependencies. Wait for it to finish and redirect automatically before continuing.

1
Installer step 1

Check the requirements screen

Every item should show Ready. If you see Fix needed, resolve that item before continuing.

SmartQR installer requirements screen
The installer checks PHP version, required PHP extensions, and writable directories before letting you proceed.
2
Installer step 2

Enter your site details

  • Site title — the name of your website or business.
  • App URL — the full address, e.g. https://example.com. No trailing slash.
  • Site description — a short sentence about your service. You can change it later.
3
Installer step 3

Enter your database details

Type the exact values from your hosting panel. If your host shows a prefixed database name, use the full prefixed value.

SmartQR installer database step
For most shared hosting with MySQL, use Driver = MySQL, Host = localhost, and Port = 3306.
4
Installer step 4

Create your admin account

This is the first account used to manage the entire platform. Save the email address and password somewhere safe.

SmartQR installer admin account step
Use a strong password. You will use these credentials to log into the dashboard after installation.
5
Finish

Click Install SmartQR and wait

SmartQR writes configuration, connects to the database, runs migrations, seeds starter content, creates your admin user, and activates the theme.

If the installer shows an error

Read the message carefully. The most common causes are wrong database details, the wrong document root, or directories that are not writable by the web server.

After installation

Part 3

SmartQR includes starter data so the dashboard is not empty. Before launching publicly, replace the starter content with your own.

1 — Update branding

Upload your logo, favicon, and brand colors in Admin → Setup → General.

2 — Review starter plans

Check pricing, features, and limits so they match your business model.

3 — Replace demo content

Swap demo blog posts and sample pages for your own QR and marketing content.

4 — Test a QR code

Create a test QR code and short link so you can confirm redirects and analytics work.

Admin setup overview

Part 4

This section is for the platform owner. It covers the most important post-install tasks: billing configuration, plan creation, and launch preparation.

Where to find setup

Go to Admin → Setup. This page contains the General, Billing, Landing Page, AI, and Authentication tabs.

Start with Billing

Open the Billing tab first and choose Stripe or Paddle before filling in any credentials. The provider you choose must match the price IDs you save in your plans.

Stripe billing setup

Admin Setup — Billing

If you use Stripe, collect these three values from your Stripe dashboard and save them in Admin → Setup → Billing.

  • Publishable key — from Stripe → Developers → API keys.
  • Secret key — from Stripe → Developers → API keys.
  • Webhook signing secret — from the Stripe webhook endpoint you create for SmartQR.
Stripe item What to do in SmartQR
Publishable key Paste into the Stripe Publishable Key field in the Billing tab.
Secret key Paste into the Stripe Secret Key field in the Billing tab.
Webhook signing secret Paste into the Stripe Webhook Secret field after creating the endpoint below.
Create a Stripe webhook

In Stripe → Developers → Webhooks, create an endpoint pointing to https://yourdomain.com/webhook/stripe. SmartQR needs subscription and checkout events so purchases, upgrades, cancellations, and failed payments are applied automatically.

Required Stripe events

checkout.session.completed

checkout.session.expired

checkout.session.async_payment_succeeded

checkout.session.async_payment_failed

customer.subscription.updated

customer.subscription.deleted

Stripe customer portal

After subscribing, customers manage billing in the Stripe customer portal. Review the portal in Stripe before launch so users can update payment methods and switch plans smoothly.

Paddle billing setup

Admin Setup — Billing

If you use Paddle, start in Sandbox mode while testing and switch to Production only when you are ready to go live.

  • Seller / Vendor ID — from Paddle → Developer Tools → Authentication.
  • API key — from the same Authentication area.
  • Client-side token — used for the front-end checkout flow.
  • Webhook secret — from the Paddle notification destination you create for SmartQR.
Create a Paddle notification destination

In Paddle → Developer Tools → Notifications, create a destination pointing to https://yourdomain.com/webhook/paddle. Enable subscription and payment failure events so customer access updates automatically.

Required Paddle events

subscription.created

subscription.updated

subscription.cancelled

transaction.payment_failed

Paddle return URL

In Paddle, set the default payment-management return URL to /settings/subscription on your live domain. This returns customers to the SmartQR billing page after managing their subscription.

Create plans and roles

Admin Setup — Plans

SmartQR uses Wave plans and roles together. A plan controls billing and pricing. The linked role controls what a subscriber can access. SmartQR adds extra per-plan limits for QR-related features.

Where to manage plans

Open Admin → Plans. Add monthly, yearly, or one-time price IDs in the plan form. These IDs must come from the billing provider selected in the Billing tab.

What to set on each plan

Associated role

Monthly, yearly, or one-time price IDs

Active/default state and sort order

SmartQR limits: QR count, storage, domains, exports, webhooks

Recommended workflow

1. Create or review the user role.  2. Create or update the plan.  3. Paste the correct provider price IDs.  4. Save SmartQR plan limits.  5. Run a test purchase.

Test the billing flow

Admin Setup — Testing

Always test billing end-to-end before opening your site to the public.

  • Subscribe with a test card or sandbox checkout.
  • Confirm the user receives the correct plan and role.
  • Confirm SmartQR feature limits match the plan.
  • Test upgrading and downgrading between plans.
  • Test cancellation and failed-payment behavior.
  • Verify webhook events arrive successfully in your provider dashboard.

Configure social login

Admin Setup — Authentication

SmartQR lets you enable supported social providers from the admin area without editing .env. This section is for site owners and admins who want users to sign in with services like Google or GitHub.

1
Step 1

Open the Authentication setup

Go to Admin → Setup → Authentication, then open Social Providers. Only providers supported by the current SmartQR installation are shown in this list.

2
Step 2

Create an OAuth app in the provider dashboard

In the provider you want to use, create a new app or OAuth client. The provider will give you two values: a Client ID and a Client Secret.

Each provider has its own dashboard and approval process, so follow that provider's own OAuth setup instructions when creating the app.

3
Step 3

Use the callback URL shown in SmartQR

After enabling a provider in SmartQR, the card shows its exact Callback URL. Copy that URL into the provider dashboard exactly as shown.

Important

The callback URL must match your live site domain and protocol exactly. A mismatch such as http vs https, or the wrong domain/subdomain, will cause social login to fail.

4
Step 4

Save the provider inside SmartQR

Turn the provider on, paste the Client ID and Client Secret into the provider card, then click Save Credentials.

Disabled providers do not show credential inputs. Enable the provider first if you want to manage its keys.

Built-in providers

Google

GitHub

Facebook

LinkedIn

Twitter / X

GitLab, Bitbucket, Slack

What controls visibility

Provider enabled in Social Providers

Login Show Social Providers enabled in authentication settings

Valid client ID and client secret

Correct callback URL in the provider dashboard

About extra providers

Some social networks require additional developer packages before they can work. Those package-based providers are intentionally hidden from the SmartQR admin setup UI. If you need a provider that is not listed, it requires developer-level customization and is outside normal admin setup.

Final check

After setup, open the login and registration pages in a private browser window and confirm the social button appears and completes sign-in successfully.

Other setup tabs

Admin Setup

After billing and plans are configured, review the remaining tabs in Admin → Setup.

General

Site title, description, logo, favicon, analytics tracking ID, and documentation visibility.

Landing Page

Public homepage headings, pricing labels, testimonials copy, CTA text, and launch messaging.

AI

Connect your AI provider for landing-page drafting and confirm the model choice fits your budget.

Authentication

Review login/register appearance, social auth providers, and security defaults before opening registrations.

Custom domains & automatic SSL

Admin Setup

SmartQR lets your users connect branded custom domains. If you run Caddy with on-demand TLS, you can also let Caddy issue SSL certificates automatically after each domain has been verified inside SmartQR.

1
Step 1

Verify the custom domain in SmartQR first

Ask the user to add their hostname in Dashboard → Domains, point its CNAME to your SmartQR CNAME target, and click Verify. The Caddy ask endpoint only approves domains that are already stored and marked as verified in SmartQR.

2
Step 2

Point Caddy to the public ask endpoint

Configure Caddy on your main SmartQR domain and use this ask URL:

Ask URL

https://your-smartqr-domain.com/domains/caddy/ask

Caddy automatically adds the requested hostname as the domain query parameter. SmartQR responds with 200 OK only when that hostname is a verified custom domain in your database.

3
Step 3

Use an on-demand TLS policy in Caddy

A minimal example looks like this:

{
    on_demand_tls {
        ask https://your-smartqr-domain.com/domains/caddy/ask
    }
}

https:// {
    tls {
        on_demand
    }
}

Your final Caddyfile may include additional site blocks, reverse proxy directives, or security headers depending on how you deploy SmartQR.

Recommended flow

Keep the normal SmartQR verify button in your onboarding process. Once the hostname shows as verified in SmartQR, the first HTTPS request through Caddy can obtain the certificate automatically.

Plugin management

Optional admin feature

When plugin management is enabled for your installation, the Plugins page lets admins upload optional plugin ZIPs and activate them from the dashboard. Developer-level enable/disable instructions live in the project README, not in this admin guide.

1
Step 1

Prepare the plugin ZIP

The archive should contain one plugin root only. At the top level of that root, include exactly one main plugin file such as ExamplePlugin.php, plus the plugin folders like src, resources, or routes if your plugin uses them.

2
Step 2

Upload from Admin → Plugins

Use the Upload plugin ZIP form at the top of the Plugins page. After a successful upload, the plugin appears in the list below and can be activated when you are ready.

3
Step 3

Activate optional plugins

Uploaded plugins are not forced on automatically. Activate them from the list to add them to the installed plugin set. Required plugins are always loaded and are intentionally hidden from this page.

Important

Do not upload a ZIP that tries to replace a required plugin such as core or smartqr. The admin uploader blocks replacing required plugins.

Updates

Admin Setup

SmartQR includes an admin update flow for verifying your purchase code, checking the latest release, downloading the update package from your remote server, and running the final migration tasks.

1
Step 1

Open Admin → Updates and verify your purchase code

Paste your Envato purchase code into the License verification form and click Verify license. SmartQR stores the verified license status for future update checks.

2
Step 2

Check the latest release

Click Check for updates to read the latest version metadata from your update server. If a newer release is available, SmartQR shows the remote version and release notes on the page.

3
Step 3

Download and apply the update

Use Download and apply update to fetch the latest versioned remote package such as smartqr-update-v1.0.1.zip, extract it, copy the updated files over the current installation, and run the update tasks automatically.

4
Step 4

Run update migrations if the dashboard shows a notice

When the file version is newer than the recorded installed version, SmartQR displays a dashboard notice card. Click Run update migrations to finish database migrations, clear caches, and record the new installed version.

Manual fallback

If you update the files manually from an update ZIP, log into the admin panel afterwards and run the update action from Admin → Updates or the dashboard notice so database changes and caches are finalized properly.

Create QR codes

Daily Usage

Go to QR Codes in the dashboard, click Create, choose the QR type, enter the destination, and save.

SmartQR QR code creation screen
QR codes can send people to websites, menus, promotions, contact pages, and more. Organize them with campaigns.

Build landing pages

Daily Usage

Open Landing Pages to create a promotional, event, product, or link-in-bio page. Use the visual editor to add sections, buttons, images, and content blocks.

SmartQR landing page builder
Landing pages work well for campaigns, offers, events, and product launches — wherever you need more than a simple redirect.

Track analytics

Daily Usage

Open Analytics to see which QR codes and short links are performing best. Use this to measure campaigns and decide what to improve.

Use campaigns

Daily Usage

Campaigns let you group related QR codes, short links, landing pages, and reports together — for example, one campaign for a restaurant menu, another for an event, and another for a product launch.

Go-live checklist

Reference
  • Check the App URL — make sure it matches the real domain visitors will use.
  • Test a QR code on a phone — confirm the redirect works and analytics count increases.
  • Review branding — logo, colors, site title, and descriptions all replaced.
  • Verify billing and limits — provider, webhook, plans, roles, and feature limits match what you are selling.
  • Remove demo content — replace demo blog posts, sample pages, and placeholder text.
  • Keep a backup — download a backup of files and database once everything is working.

Troubleshooting

Reference
Blank page or error on load

Check that your domain points to the public folder, not the project root.

Database connection failed

Re-check the database host, name, username, password, and port in the installer.

Folder not writable

Ask your host to make storage/, bootstrap/cache/, and the .env file writable by the web server.

Composer install failed

Your server may not have Composer or enough permissions. Ask your host to run composer install in the project root.

Credits & third-party

Reference

Main software and libraries used in this SmartQR installation.

  • Laravel — the main PHP application framework.
  • Filament — the admin panel framework.
  • Livewire — reactive server-driven UI components.
  • Wave by DevDojo — the SaaS starter foundation SmartQR is built on.
  • Tailwind CSS — utility-first styling for the frontend and admin UI.
  • Alpine.js — lightweight frontend interactions.
  • GrapesJS — the landing page builder/editor.
  • Stripe — supported billing provider.
  • Paddle — supported billing provider.
SmartQR Documentation This guide is at /docs/ inside your installation for easy access on a live server.