All guides
Product handbook

Website Store and License

Business website, product catalogue, checkout, downloads, documentation, support and licensing code.

InstallationAdministrationEveryday useOperations

Start here

Choose the instructions that match your role. You do not need to configure the server or create a developer app just to use a workspace that an administrator has already set up.

I manage this installation

Start with installation and requirements, then configure the site and its services.

Installation instructions →
I use an existing account

Sign in to the correct account/workspace, then follow the user guide for your task.

User features →
  1. Installing the product: follow this product’s installation chapter. Check its PHP, database, environment and installer requirements; do not copy setup commands from another product.
  2. Configuring the site: use Admin features for settings, users and available services. Keep site administration separate from ordinary workspace use.
  3. Connecting an external service: the administrator follows API setup and app review first. Users then connect their own permitted accounts.
  4. Using a feature: start with one controlled record, follow the task’s fields/buttons, then check the saved result before repeating the action with live records.
  5. Operating the installation: review operations for scheduled work, queues, backups and updates relevant to this product.
01 / Overview

Overview

Use this guide to set up a new isolated installation, prepare administrator settings, complete the main user workflows and operate the application. Route paths shown below are relative to your own application domain; configuration overrides can change some defaults.

Installing the application?

Start with Installation. Review the source version and outstanding setup inputs before running commands.

Setting up the business?

Follow Administration before inviting users or enabling external services.

Using the product?

Follow the User guide. Each workflow explains prerequisites, actions and expected results.

Maintaining the service?

Use Operations for background jobs, updates, backup and recovery.

These instructions are grounded in the pinned source snapshot. Runtime/UI acceptance is still pending; a documented expected result is not a completed test. Technical references and known missing inputs are collected at the end of this guide.

02 / Installation

Installation

Check the source and runtime

git clone https://github.com/markhubaai/stackposts-store.git stackposts-store-dd
cd stackposts-store-dd
git checkout --detach 275481cdd3c8519a24c5ecf5cac3e11ceb1708d8

Verify the source manifest using the shared preparation procedure before changing this checkout. The source alias identifies the seller’s original directory; it does not establish equivalence to production or a specific customer archive.

Project requirements

Use PHP satisfying ^8.2 and the complete Laravel v11.51.0 lock requirements. Configure a dedicated database connection explicitly; config/database.php defaults to SQLite when DB_CONNECTION is absent. Do not confuse that default with proof that all Store modules support SQLite.

  1. Install reviewed PHP dependencies and prepare the new .env/runtime paths as described above. Generate a new APP_KEY only for this new test environment.
  2. Have the reviewer reconcile root and module migrations against the supplied schema and module activation data. Apply the agreed schema path only to the disposable test database; do not run all migrations/seeders blindly.
  3. Inspect resources/modules_statuses.json and app/Activators/DatabaseActivator.php. Despite the class name, the activator reads/writes that JSON file; missing or wrong statuses can prevent modules from loading.
  4. Load only approved synthetic/anonymized catalog and options fixtures. Confirm which tables are required by site/theme boot before serving the web application.
  5. Configure ADMIN_LOGIN_SECRET_HASH with a password hash of a newly chosen private admin security code, using approved private tooling. Do not paste the code/hash into evidence documents. Clear/rebuild configuration after changing it.
  6. Run php artisan admin:create interactively after the users schema is available. It refuses non-interactive input, refuses creation when a role-2 administrator exists, and requires the security-code hash. It asks for name, email, username and a password of at least 12 characters.
  7. Configure isolated payment settings, product files, licensing mappings, themes, SMTP and support options. Use a reviewer-owned Stripe test key for STRIPE_SECRET_KEY. No live payment key should be needed.
# Only after the isolated schema and admin security-code hash are prepared.
php artisan config:clear
php artisan admin:create

Do not use the default DatabaseSeeder as the administrator bootstrap: it contains a generic test-user factory, not this interactive admin procedure. Existing administrators must be managed through the application’s Users workflow.

Prepare the server and source working copy
  1. Use a dedicated test host or VM with a separate database and per-project hostname. Do not point any snapshot at production databases, queues, mailboxes, payment accounts or customer channels.
  2. Obtain named read-only GitHub access through the repository owner’s access process. Use your normal authenticated Git workflow; never embed access tokens in clone URLs or documents.
  3. Check out the exact commit shown in the project guide. Keep the working copy and evidence logs separate from the local documentation folder.
  4. Verify every recorded file against the source manifest before making local changes. The manifest covers every other prepared file; its own hash and the Git commit should be recorded separately.
  5. Provision a PHP runtime satisfying composer.json and composer.lock, a reviewed Composer installation, required PHP extensions and a web server serving only public/. Use MySQL with pdo_mysql for the seven browser installers. Exact database server compatibility remains a test item.
  6. Create empty writable bootstrap/cache and storage runtime directories from the included placeholders. Give the application service account the required write access; do not make the entire code tree globally writable.
  7. Resolve the project-specific assets/build gap and obtain approved schema/anonymized fixtures where required. Do not copy an old release’s vendor, assets, database or .env into this snapshot without provenance and version checks.

Clone and pin each repository

Each project section gives the exact commands. A new source checkout is recommended so existing local application changes cannot be overwritten. The clone destination must be empty.

Verify prepared file hashes in PowerShell

Run from the root of the checked-out repository before installing dependencies or editing configuration. A clean Git status is a separate check.

$manifest = Get-Content -LiteralPath 'DD-SNAPSHOT.json' -Raw | ConvertFrom-Json -AsHashtable
foreach ($entry in $manifest.files) {
    $file = Join-Path (Get-Location) $entry.path
    if (-not (Test-Path -LiteralPath $file -PathType Leaf)) { throw "Missing: $($entry.path)" }
    if ((Get-FileHash -LiteralPath $file -Algorithm SHA256).Hash -ne $entry.sha256) {
        throw "Hash mismatch: $($entry.path)"
    }
}
git rev-parse HEAD
git status --short

Environment templates are inventories

The supplied .env.example files contain names only. They are not ready-to-run configurations. An empty variable can override a useful config default, so do not leave every listed variable blank and expect the application to work. Review config/*.php, use a minimal isolated configuration, then add values needed by enabled features. Provider options may also live in the database/admin UI.

Create .env only in a new source working copy. Use the values below as a starting checklist, replacing the hostname, database identity and password privately. APP_KEY is initially empty and must be generated locally; no application key is supplied in this document.

APP_NAME="Application Test"
APP_ENV=local
APP_DEBUG=false
APP_URL=https://project.example.test
APP_KEY=
APP_CIPHER=AES-256-CBC
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=REPLACE_WITH_ISOLATED_DATABASE
DB_USERNAME=REPLACE_WITH_ISOLATED_USER
DB_PASSWORD=SET_PRIVATELY
SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync
MAIL_MAILER=log

The file session/cache and sync queue values are temporary bootstrap choices, not the final worker configuration. The seven installers switch their final session, cache and queue backends to database unless explicitly configured otherwise. Keep workers stopped until fixtures and outbound destinations are controlled. Never regenerate APP_KEY on an existing installation.

Dependency installation is separate from the browser wizard

The Git snapshots exclude installed root vendor dependencies. Inspect Composer scripts and allowed plugins before running dependency installation. A complete customer release may already contain its matching vendor tree; the source snapshots do not. Review package scripts before any Node dependency install.

# Run only inside the isolated checkout after reviewing scripts/plugins.
composer install --no-dev --prefer-dist --no-interaction
composer check-platform-reqs --no-dev

# Fresh isolated installation only, once dependency bootstrapping works.
php artisan key:generate
php artisan config:clear

If post-autoload package discovery cannot boot because configuration or database-backed options are missing, retain the error. A reviewer may install with --no-scripts for diagnosis, but deferred package-discovery/scripts must be reviewed and completed after the missing configuration is supplied. Do not present --no-scripts as a finished deployment.

Prepare the matching interface assets

No root package.json/build script or public/build tree is included. Store retains static/theme resources under public and resources, including theme-specific assets. Confirm the active guest/app theme, how those assets are served and its reproducible build inputs with the seller. Do not import the product-theme build command from MarkHub by assumption.

03 / Administration

Admin setup

Work as an authorized administrator in the isolated installation. Configure one area at a time, save it, then verify its effect with an appropriate test user. Feature access can depend on both the subscription plan and the user’s workspace role.

1

Schema and first administrator

Complete the schema-led bootstrap in Installation. Configure ADMIN_LOGIN_SECRET_HASH and run the interactive admin:create command; do not use a generic test seeder.

2

Catalogue and entitlements

Configure products, releases, artifacts, individual/combo licences and source/version mappings. Reconcile the same product across checkout, downloads and activation.

3

Payments and notifications

Use sandbox merchant settings and controlled SMTP initially. The prepared Stripe gateway reads STRIPE_SECRET_KEY; never restore the removed inline secret.

4

Support and business content

Configure documentation, tickets, pages and privacy/terms content from approved exports. Keep customer/licence data anonymized for testing; source code does not contain the full live business database.

Before inviting users

  • Check site identity, timezone and selected themes.
  • Test sign-in with an owner and a restricted teammate/customer.
  • Confirm the configured mail mode and recipient identity before sending invitations.
  • Verify plan/role limits and the workspace that owns each record.
  • Review any enabled external action, provider cost and recovery procedure.
Product configuration notes
  1. Store and licensing are documented together because ShopApi and the AdminLicense family are in the same source snapshot.
  2. Reconstruct only an isolated Store from seller-supplied schema and anonymized fixtures. Current source is not a complete commercial database or product-download inventory.
  3. Inventory product IDs, Envato item mappings, direct-sale entitlements, supported versions, download artifacts and update paths before testing product installers.
  4. An inline Stripe live-secret-key candidate was removed before the first repository commit; the prepared copy reads STRIPE_SECRET_KEY from configuration. The original source was not edited. The seller must rotate the original key if active; the test operator uses its own test key.
  5. No generic /installer workflow was found in this snapshot. Its first-admin command is interactive and requires an existing schema plus ADMIN_LOGIN_SECRET_HASH.
04 / User guide

Use the features

Use the correct workspace and an account with the required plan and role. The workflows below describe the principal product tasks supported by the inspected routes and actions; they are not a manual for every optional module.

Workflow 01

Prepare a product listing

/admin/product_manager

Before you start: A Store administrator exists and the isolated product/schema fixtures are ready.

What this feature does

Define the listing, version and file mappings used by sales and installation.

Who can use it

An authorized Store administrator with the required product management access.

Fields and settings

Field or settingWhat to enter or check
Name / description / contentRequired in the save validation. Name up to 255 characters.
StatusChoose the intended Status option shown by the product form.
Product ID / category IDRequired positive integers. Reconcile them with the intended catalogue and licensing records.
Thumbnail / demo URLRequired source form strings; demo URL up to 255 characters. Verify the actual content/URL separately.
Install folder / module nameRequired strings, up to 255 characters. Use the mapping for this exact product.
VersionRequired; up to 32 characters.
FilesMain/install/update file fields depend on product/licence type and are nullable in the inspected validation. A saved listing can still be incomplete if the actual artifacts are absent.

Steps

  1. Open Product Manager and create or edit the intended product.
  2. Complete the product identity, catalogue details, price/licence settings and matching downloadable artifact fields offered by this release.
  3. Reconcile product IDs/Envato mappings and supported release versions with the licensing/update configuration.
  4. Save and review the listing at its generated public product URL before making it purchasable.
Expected result

A product listing, artifact and entitlement mapping refer to the same intended product/version.

Check the result

  1. Save the listing, reopen it and review product ID, version and file mappings.
  2. Open the public detail page and verify that its text/price/licence selection refers to the same product.
  3. Use an entitled test customer to verify the protected artifact and installer path before exposing a purchasable release.

If it does not work: A catalogue page alone is not proof that a download artifact or activation entitlement exists. Inspect mappings and file authorization.

Workflow 02

Place a controlled test order

/products → /cart → /pay

Before you start: Only sandbox payment settings and approved test identities are configured.

What this feature does

Turn a selected product/licence into a confirmed order and customer entitlement.

Who can use it

A signed-in test customer using the intended sandbox payment flow.

Fields and settings

Field or settingWhat to enter or check
Product / licence typeVerify the exact product, version and selected licence terms.
Cart quantity / totalReview the displayed item type, quantity and total before continuing.
Customer identityUse a test identity you control; do not reuse a customer’s real login.
GatewaySelect the configured sandbox method. Never use the removed inline live Stripe key.
Payment confirmationVerify the recorded provider/webhook result, order and entitlement; the success page by itself is insufficient.

Steps

  1. Open Products and the selected product detail; verify product/version/licence terms.
  2. Add the intended product to the cart and check item type, quantity and total.
  3. Sign in and continue to the payment flow using the configured sandbox gateway.
  4. Verify the order/payment outcome and webhook record. Do not treat a browser success redirect as final payment proof.
Expected result

A successful sandbox payment produces the intended order and customer entitlement.

Check the result

  1. Complete one approved sandbox purchase and inspect the order/payment record.
  2. Verify that the customer received the intended entitlement only once.
  3. When diagnosing duplicates, inspect the webhook/order handling before repeating the payment attempt.

If it does not work: If the order is missing or duplicated, inspect provider confirmation, webhook idempotency and product mapping before repeating checkout.

Workflow 03

Download and manage a purchase

/app/purchase

Before you start: The signed-in test customer has a valid entitlement for the product.

What this feature does

Let an entitled customer obtain the correct release and manage its licence state.

Who can use it

The signed-in customer must own the corresponding purchase/licence.

Fields and settings

Field or settingWhat to enter or check
Product / releaseSelect the intended item and verify the available version/support information.
EntitlementThe application must recognize the customer’s purchase or approved licence.
Download actionUse the authenticated action under Purchases, not a raw storage URL.
Reset licenceUse only when the intended licence/site change is authorized; inspect the resulting state.
Support syncEnvato support synchronization is separate from file download and can depend on the provider service.

Steps

  1. Open Purchases and locate the intended product/licence.
  2. Verify the permitted version/support details shown by the account.
  3. Download through the application’s authorized download action and confirm that another customer cannot fetch the same protected artifact.
  4. Use licence reset or support-sync actions only when intended and authorized; retain the resulting status.
Expected result

The entitled customer obtains the correct artifact and sees the corresponding licence state.

Check the result

  1. Download as the entitled test customer and compare the artifact with the intended version.
  2. Test access with a different customer who does not own the purchase.
  3. Confirm the effect of any reset/support-sync action separately; do not use it as a generic download troubleshooting step.

If it does not work: Check entitlement, version/artifact availability and provider dependencies; do not distribute a raw storage URL as a workaround.

05 / Operations

Operations

Background processing for this product

Set session/cache/queue drivers to match the reconstructed schema. Inspect AdminCrons and all registered module providers; do not assume a scheduler alone will process orders, licensing or notifications. Enable only jobs approved for the isolated Store.

Source paths relevant to scheduling
  • modules/AdminBackendAppearance/app/Providers/AdminBackendAppearanceServiceProvider.php
  • modules/AdminAffiliateSettings/app/Providers/AdminAffiliateSettingsServiceProvider.php
  • modules/AdminAffiliateCommissions/app/Providers/AdminAffiliateCommissionsServiceProvider.php
  • modules/AdminAddons/app/Providers/AdminAddonsServiceProvider.php
  • modules/AdminAffiliate/app/Providers/AdminAffiliateServiceProvider.php
  • modules/AdminAffiliateWithdrawal/app/Providers/AdminAffiliateWithdrawalServiceProvider.php
  • modules/AdminCreditRates/app/Providers/AdminCreditRatesServiceProvider.php
  • modules/AdminLanguages/app/Providers/AdminLanguagesServiceProvider.php
  • modules/AdminFaqs/app/Providers/AdminFaqsServiceProvider.php
  • modules/AdminBlogCategories/app/Providers/AdminBlogCategoriesServiceProvider.php
  • modules/AdminCheckLicense/app/Providers/AdminCheckLicenseServiceProvider.php
  • modules/AdminBlogs/app/Providers/AdminBlogsServiceProvider.php
  • modules/AdminDashboard/app/Providers/AdminDashboardServiceProvider.php
  • modules/AdminCache/app/Providers/AdminCacheServiceProvider.php
  • modules/AdminBlogTags/app/Providers/AdminBlogTagsServiceProvider.php
  • modules/ShopApi/app/Providers/ShopApiServiceProvider.php
  • modules/AdminBroadcast/app/Providers/AdminBroadcastServiceProvider.php
  • modules/AdminCaptcha/app/Providers/AdminCaptchaServiceProvider.php
  • modules/AdminCoupons/app/Providers/AdminCouponsServiceProvider.php
  • modules/AdminCrons/app/Http/Controllers/AdminCronsController.php
  • modules/AdminCrons/app/Providers/AdminCronsServiceProvider.php
  • modules/AdminEmbedCode/app/Providers/AdminEmbedCodeServiceProvider.php
  • modules/AdminCredits/app/Providers/AdminCreditsServiceProvider.php
  • modules/AdminFrontendThemes/app/Providers/AdminFrontendThemesServiceProvider.php
  • modules/AppFiles/app/Providers/AppFilesServiceProvider.php
  • modules/Shop/app/Providers/ShopServiceProvider.php
  • modules/AdminDashboardNote/app/Providers/AdminDashboardNoteServiceProvider.php
  • modules/Guest/app/Providers/GuestServiceProvider.php
  • modules/AdminProductBanner/app/Providers/AdminProductBannerServiceProvider.php
  • modules/AdminMailTemplates/app/Providers/AdminMailTemplatesServiceProvider.php
  • modules/AdminUsers/app/Providers/AdminUsersServiceProvider.php
  • modules/AppProductSupport/app/Providers/AppProductSupportServiceProvider.php
  • modules/AdminMailSender/app/Providers/AdminMailSenderServiceProvider.php
  • modules/Auth/app/Providers/AuthServiceProvider.php
  • modules/AdminPrivacyPolicy/app/Providers/AdminPrivacyPolicyServiceProvider.php
  • modules/AppDashboard/app/Providers/AppDashboardServiceProvider.php
  • modules/AdminMailServer/app/Providers/AdminMailServerServiceProvider.php
  • modules/AdminLicense/app/Providers/AdminLicenseServiceProvider.php
  • modules/AdminUserReport/app/Providers/AdminUserReportServiceProvider.php
  • modules/AdminMarketplace/app/Providers/AdminMarketplaceServiceProvider.php
  • modules/AppPurchase/app/Providers/AppPurchaseServiceProvider.php
  • modules/AdminPaymentConfigurations/app/Providers/AdminPaymentConfigurationsServiceProvider.php
  • modules/AdminPlans/app/Providers/AdminPlansServiceProvider.php
  • modules/AdminMailThemes/app/Providers/AdminMailThemesServiceProvider.php
  • modules/AppNotifications/app/Providers/AppNotificationsServiceProvider.php
  • modules/AppSmartSupport/app/Providers/AppSmartSupportServiceProvider.php
  • modules/AdminNotifications/app/Providers/AdminNotificationsServiceProvider.php
  • modules/AdminProductManager/app/Providers/AdminProductManagerServiceProvider.php
  • modules/AdminURLShorteners/app/Providers/AdminURLShortenersServiceProvider.php
  • modules/AppProfile/app/Providers/AppProfileServiceProvider.php
  • modules/AdminProductCombo/app/Providers/AdminProductComboServiceProvider.php
  • modules/AdminProductSupport/app/Providers/AdminProductSupportServiceProvider.php
  • modules/AppAffiliate/app/Providers/AppAffiliateServiceProvider.php
  • modules/AdminProductCategories/app/Providers/AdminProductCategoriesServiceProvider.php
  • modules/AdminProductPaymentHistory/app/Providers/AdminProductPaymentHistoryServiceProvider.php
  • modules/AdminProductChangeLog/app/Providers/AdminProductChangeLogServiceProvider.php
  • modules/AdminResetLicense/app/Providers/AdminResetLicenseServiceProvider.php
  • modules/AdminProductFAQs/app/Providers/AdminProductFAQsServiceProvider.php
  • modules/AdminProductSupportTypes/app/Providers/AdminProductSupportTypesServiceProvider.php
  • modules/AdminThemes/app/Providers/AdminThemesServiceProvider.php
  • modules/AdminProductTag/app/Providers/AdminProductTagServiceProvider.php
  • modules/AdminSocialPages/app/Providers/AdminSocialPagesServiceProvider.php
  • modules/AdminProductSupportLabels/app/Providers/AdminProductSupportLabelsServiceProvider.php
  • modules/AdminSystemInformation/app/Providers/AdminSystemInformationServiceProvider.php
  • modules/AdminSettings/app/Providers/AdminSettingsServiceProvider.php
  • modules/AdminTermsOfUse/app/Providers/AdminTermsOfUseServiceProvider.php
  • modules/AdminSmartSupportKnowledge/app/Providers/AdminSmartSupportKnowledgeServiceProvider.php
Scheduler workers and mail

Run these procedures only after the isolated installation and outbound configuration have been reviewed. Use the application service account and the same PHP runtime/configuration as the web process. The commands below are operating examples to adapt, not commands executed during documentation preparation.

Schedule discovery before activation

php artisan schedule:list
php artisan queue:failed
php artisan migrate:status

These commands boot the application and require working configuration. schedule:list shows registered schedules but not every external cron or a complete deployment inventory. Record results before enabling continuous processing.

Scheduler

On a Linux test host, configure one cron entry per application. Replace both absolute paths with the confirmed test runtime and checkout. Preserve restricted test logs; rotate them.

* * * * * cd /srv/dd/PROJECT_ROOT && /usr/bin/php artisan schedule:run >> /srv/dd/logs/PROJECT-scheduler.log 2>&1

On Windows/WAMP, create a Task Scheduler job repeating every minute: Program = the selected php.exe; Arguments = artisan schedule:run; Start in = the isolated repository root. Use an account with the required file/database permissions. Do not point the task at the seller’s v12 working installation.

Queue workers

php artisan queue:work database --queue=default --tries=3 --timeout=60

This example applies when the intended connection is database and the queue name is default. Use the actual connection, named queues and worker limits from each project/module. Keep timeout below retry_after to reduce duplicate processing; check timeout requirements for media/AI work. StackPosts automation needs its separate lane described in its project guide. Supervisor/systemd or an equivalent process manager must restart long-running workers; cron is not a worker manager.

Record queue tables/backend, queue names, retry policy, failed-job handling, concurrency and restart behavior. Do not run queue:retry all blindly: failed jobs may send messages, charge providers or repeat external changes. Review the target and idempotency before a controlled retry.

Mail and optional services

  • MAIL_MAILER=log records messages locally and does not prove SMTP delivery. Use a controlled SMTP inbox for authorized notification tests; protect/redact logs containing test personal data.
  • Redis, object storage, websocket/realtime services, media binaries and social/AI gateways are feature-specific. Determine need from enabled modules and configuration rather than provisioning every possible dependency.
  • A provider console, approval, billing method and valid token are separate dependencies. A successful local install does not establish API approval or delivery.
  • Use actual callback/redirect URLs produced by the configured application. This guide intentionally does not invent a generic webhook URL for every provider.
Updates backup and recovery

Before an update

  1. Record the current source commit, dependencies, active modules/themes, schema revision, configuration inventory and artifact hashes. Verify the target release and its change notes.
  2. Take an encrypted database backup, uploaded-file/product-artifact backup and a separately protected copy of application configuration/APP_KEY. Do not place these backups inside source repositories or this documentation folder.
  3. Perform a restore rehearsal into a separate disposable environment. A backup file that has never restored successfully is not acceptance evidence.
  4. Obtain the product-specific upgrade instructions and rehearse on a clone. Waziper’s referenced UPGRADE.md is missing from its snapshot; do not invent an upgrade path.
  5. Define the maintenance window, queue drain/stop procedure and rollback thresholds. Separate application rollback from schema/data rollback.

During an approved change

Use the seller-approved release/update mechanism and reviewed migration steps. Preserve the existing APP_KEY and customer data. Do not rerun the fresh installer on an existing installation. Rebuild only the assets belonging to the selected release, clear/rebuild applicable caches and restart workers so they load the new code.

# Operational examples after an approved isolated update; adapt to the release.
php artisan optimize:clear
php artisan queue:restart

Re-enabling workers can produce external effects. Confirm the test destinations first. Do not treat copying the previous application code back as a complete rollback if schema or customer data changed.

Post-update checks

  • Check login, authorization, active themes/static assets, uploads/downloads, cron, queued work and one product-specific user flow.
  • For Store/license changes, validate synthetic old-install activation/update behavior and download entitlement before any cutover.
  • For provider integrations, retain separate webhook/publish/delivery evidence and redact tokens and customer identifiers.
  • Record backups, restore outcome, downtime, errors, rollback decision and remaining gaps. Remove disposable test data according to your retention policy.

Acceptance checklist

These are checks for the person testing the installation, not completed test results. Retain timestamp, commit, environment, fixture identity, expected/actual result and redacted evidence for each.

  1. Reconcile one synthetic product and order with its licence and download entitlement.
  2. Run an approved sandbox checkout and verify the resulting payment/order record and webhook handling; test duplicate webhook delivery.
  3. Using a valid valid test entitlement, exercise installer verification, product install, update and download through the isolated setup.
  4. Demonstrate an existing-customer upgrade scenario using anonymized fixtures, then simulate unavailable licensing/download services and record behavior.
  5. Verify support/documentation access, product file authorization and no cross-customer data leakage.
06 / Troubleshooting

Resolve common problems

Start with the visible error, record it without secret values and check the related setup area. Do not use destructive resets or permission bypasses to make a test appear successful.

SymptomChecksAvoid
Missing vendor/autoload.phpRoot dependencies are excluded. Review Composer scripts/plugins and install the locked dependencies in the isolated checkout.Copying vendor from another version or running composer update as a shortcut.
419 or missing application keyCheck APP_URL/HTTPS, cookie/session settings, writable runtime directories and a locally generated APP_KEY for this new installation.Regenerating an existing production APP_KEY or disabling CSRF globally.
500 or missing tableCheck the redacted application log, module activation, database configuration, installer state and whether the approved schema/defaults exist.Importing production data or running migrate:fresh without verifying the disposable target.
Unstyled page or missing manifestCheck the actual active theme, expected asset URL and its matching manifest/build. Several snapshots have documented missing build inputs.Assuming npm run build exists everywhere or using assets from an older v13 release.
Jobs do not runConfirm QUEUE_CONNECTION, exact queue names, running worker, scheduler registrations and failed-job logs. Check the automation lane on StackPosts.Leaving sync as final automation configuration or retrying every failed job.
Email not receivedInspect MAIL_MAILER; log mail is not SMTP. Verify a controlled sender/inbox and message status.Sending test messages to customer lists.
Store admin creation failsConfirm users schema, no existing role-2 admin, ADMIN_LOGIN_SECRET_HASH and interactive terminal input.Default credentials, command-line passwords or treating DatabaseSeeder as an admin installer.
Provider action or webhook failsConfirm actual app/account identity, permissions, review status, callback URL, signature setup and test recipient.Treating a source module or local health page as provider acceptance.
07 / Technical reference

Source version and technical reference

Repository
markhubaai/stackposts-store
Pinned commit
275481cdd3c8519a24c5ecf5cac3e11ceb1708d8
Laravel lock
v11.51.0
PHP constraint
^8.2
Source alias
shop
Open exact source references at the pinned commit
Source pathSnapshot status
README.mdPresent
composer.jsonPresent
composer.lockPresent
config/database.phpPresent
config/queue.phpPresent
config/mail.phpPresent
config/modules.phpPresent
bootstrap/app.phpPresent
routes/console.phpPresent
app/Console/Commands/CreateAdminCommand.phpPresent
app/Activators/DatabaseActivator.phpPresent
config/auth.phpPresent
database/seeders/DatabaseSeeder.phpPresent
modules/ShopApi/routes/api.phpPresent
modules/ShopApi/app/Http/Controllers/ShopApiController.phpPresent
modules/Shop/app/Services/Gateways/StripeGateway.phpPresent
package.jsonAbsent — not a working reference
package-lock.jsonAbsent — not a working reference
scripts/build-theme.jsAbsent — not a working reference
resources/modules_statuses.jsonPresent
Module source inventory (74 descriptors)

These are source module descriptor locations, not proof that each module is active, configured, sold separately, licensed or provider-approved.

modules/AdminAddons
modules/AdminAffiliate
modules/AdminAffiliateCommissions
modules/AdminAffiliateSettings
modules/AdminAffiliateWithdrawal
modules/AdminBackendAppearance
modules/AdminBlogCategories
modules/AdminBlogs
modules/AdminBlogTags
modules/AdminBroadcast
modules/AdminCache
modules/AdminCaptcha
modules/AdminCheckLicense
modules/AdminCoupons
modules/AdminCreditRates
modules/AdminCredits
modules/AdminCrons
modules/AdminDashboard
modules/AdminDashboardNote
modules/AdminDocumentation
modules/AdminEmbedCode
modules/AdminFaqs
modules/AdminFrontendThemes
modules/AdminLanguages
modules/AdminLicense
modules/AdminMailSender
modules/AdminMailServer
modules/AdminMailTemplates
modules/AdminMailThemes
modules/AdminMarketplace
modules/AdminMigrations
modules/AdminNewsletter
modules/AdminNotifications
modules/AdminPaymentConfigurations
modules/AdminPlans
modules/AdminPrivacyPolicy
modules/AdminProductBanner
modules/AdminProductCategories
modules/AdminProductChangeLog
modules/AdminProductCombo
modules/AdminProductFAQs
modules/AdminProductManager
modules/AdminProductPaymentHistory
modules/AdminProductSupport
modules/AdminProductSupportLabels
modules/AdminProductSupportTypes
modules/AdminProductTag
modules/AdminResetLicense
modules/AdminRoadmaps
modules/AdminServices
modules/AdminSettings
modules/AdminSmartSupportKnowledge
modules/AdminSocialPages
modules/AdminSystemInformation
modules/AdminTermsOfUse
modules/AdminThemes
modules/AdminURLShorteners
modules/AdminUserReport
modules/AdminUsers
modules/AppAffiliate
modules/AppAutoDiscount
modules/AppDashboard
modules/AppFiles
modules/AppNotifications
modules/AppProductSupport
modules/AppProfile
modules/AppPurchase
modules/AppRoadmaps
modules/AppServices
modules/AppSmartSupport
modules/Auth
modules/Guest
modules/Shop
modules/ShopApi
Names-only environment inventory (170 names)

Derived from the prepared .env.example. This is not a complete settings inventory and contains no secret values. Empty names must not be treated as a working .env.

ABLY_KEY
ADMIN_LOGIN_SECRET_DECAY_SECONDS
ADMIN_LOGIN_SECRET_HASH
ADMIN_LOGIN_SECRET_MAX_ATTEMPTS
APP_DEBUG
APP_ENV
APP_FAKER_LOCALE
APP_FALLBACK_LOCALE
APP_KEY
APP_LOCALE
APP_MAINTENANCE_DRIVER
APP_MAINTENANCE_STORE
APP_NAME
APP_PREVIOUS_KEYS
APP_TIMEZONE
APP_URL
AUTH_GUARD
AUTH_MODEL
AUTH_PASSWORD_BROKER
AUTH_PASSWORD_RESET_TOKEN_TABLE
AUTH_PASSWORD_TIMEOUT
AWS_ACCESS_KEY_ID
AWS_BUCKET
AWS_DEFAULT_REGION
AWS_ENDPOINT
AWS_SECRET_ACCESS_KEY
AWS_URL
AWS_USE_PATH_STYLE_ENDPOINT
BEANSTALKD_QUEUE
BEANSTALKD_QUEUE_HOST
BEANSTALKD_QUEUE_RETRY_AFTER
BROADCAST_CONNECTION
CACHE_PREFIX
CACHE_STORE
CONTABO_ACCESS_KEY_ID
CONTABO_BUCKET
CONTABO_CUSTOM_URL
CONTABO_ENDPOINT
CONTABO_REGION
CONTABO_SECRET_ACCESS_KEY
DB_CACHE_CONNECTION
DB_CACHE_LOCK_CONNECTION
DB_CACHE_LOCK_TABLE
DB_CACHE_TABLE
DB_CHARSET
DB_COLLATION
DB_CONNECTION
DB_DATABASE
DB_ENCRYPT
DB_FOREIGN_KEYS
DB_HOST
DB_PASSWORD
DB_PORT
DB_QUEUE
DB_QUEUE_CONNECTION
DB_QUEUE_RETRY_AFTER
DB_QUEUE_TABLE
DB_SOCKET
DB_TRUST_SERVER_CERTIFICATE
DB_URL
DB_USERNAME
DEEPSPEECH_API_KEY
DYNAMODB_CACHE_TABLE
DYNAMODB_ENDPOINT
FILESYSTEM_DISK
FRONTEND_ADMIN_URL
FRONTEND_APP_URL
GEMINI_API_KEY
LOG_CHANNEL
LOG_DAILY_DAYS
LOG_DEPRECATIONS_CHANNEL
LOG_DEPRECATIONS_TRACE
LOG_LEVEL
LOG_PAPERTRAIL_HANDLER
LOG_SLACK_EMOJI
LOG_SLACK_USERNAME
LOG_SLACK_WEBHOOK_URL
LOG_STACK
LOG_STDERR_FORMATTER
LOG_SYSLOG_FACILITY
MAIL_EHLO_DOMAIN
MAIL_ENCRYPTION
MAIL_FROM_ADDRESS
MAIL_FROM_NAME
MAIL_HOST
MAIL_LOG_CHANNEL
MAIL_MAILER
MAIL_PASSWORD
MAIL_PORT
MAIL_SENDMAIL_PATH
MAIL_URL
MAIL_USERNAME
MEMCACHED_HOST
MEMCACHED_PASSWORD
MEMCACHED_PERSISTENT_ID
MEMCACHED_PORT
MEMCACHED_USERNAME
MODULE_AUTHOR_EMAIL
MODULE_AUTHOR_NAME
MODULE_VENDOR
MYSQL_ATTR_SSL_CA
PAPERTRAIL_PORT
PAPERTRAIL_URL
POSTMARK_MESSAGE_STREAM_ID
POSTMARK_TOKEN
PUSHER_APP_CLUSTER
PUSHER_APP_ID
PUSHER_APP_KEY
PUSHER_APP_SECRET
PUSHER_HOST
PUSHER_PORT
PUSHER_SCHEME
QUEUE_CONNECTION
QUEUE_FAILED_DRIVER
REDIS_CACHE_CONNECTION
REDIS_CACHE_DB
REDIS_CACHE_LOCK_CONNECTION
REDIS_CLIENT
REDIS_CLUSTER
REDIS_DB
REDIS_HOST
REDIS_PASSWORD
REDIS_PORT
REDIS_PREFIX
REDIS_QUEUE
REDIS_QUEUE_CONNECTION
REDIS_QUEUE_RETRY_AFTER
REDIS_URL
REDIS_USERNAME
RESEND_KEY
REVERB_APP_ACTIVITY_TIMEOUT
REVERB_APP_ID
REVERB_APP_KEY
REVERB_APP_MAX_MESSAGE_SIZE
REVERB_APP_PING_INTERVAL
REVERB_APP_SECRET
REVERB_HOST
REVERB_MAX_REQUEST_SIZE
REVERB_PORT
REVERB_PULSE_INGEST_INTERVAL
REVERB_SCALING_CHANNEL
REVERB_SCALING_ENABLED
REVERB_SCHEME
REVERB_SERVER
REVERB_SERVER_HOST
REVERB_SERVER_PORT
REVERB_TELESCOPE_INGEST_INTERVAL
SESSION_CONNECTION
SESSION_COOKIE
SESSION_DOMAIN
SESSION_DRIVER
SESSION_ENCRYPT
SESSION_EXPIRE_ON_CLOSE
SESSION_HTTP_ONLY
SESSION_LIFETIME
SESSION_PARTITIONED_COOKIE
SESSION_PATH
SESSION_SAME_SITE
SESSION_SECURE_COOKIE
SESSION_STORE
SESSION_TABLE
SLACK_BOT_USER_DEFAULT_CHANNEL
SLACK_BOT_USER_OAUTH_TOKEN
SQS_PREFIX
SQS_QUEUE
SQS_SUFFIX
THEME_FRONTEND
THEMES_DIR
VITE_DEV_URL
STRIPE_SECRET_KEY
Installation and provider checks
  • Confirm the exact application version and its required runtime.
  • Complete installation in a disposable environment before using production data.
  • Check scheduled jobs, queues, mail and backup/restore behavior.
  • Configure provider credentials and test each enabled external feature.
  • Keep actual test results separate from instructions and source inspection notes.

API setup and app review

For provider app creation, callback URLs, account connections and review submission, use the platform guides. The administrator configures the provider; workspace users connect their own authorized assets.