HUBBLE PROFILE ADMIN PORTAL — SETUP NOTES

What this is
- A separate form-based admin portal intended for a subdomain such as admin.hubble.com.pk.
- It bootstraps the existing WordPress installation and uses its authentication, user permissions and database connection.
- It works with the legacy Hubble tables named with the current WordPress prefix: hubble_nfc_tags, hubble_nfc_profiles, hubble_nfc_links.
- It does not create new profile tables and does not permanently delete profiles.

IMPORTANT BEFORE LIVE USE
This is a starter build based on the local plugin source available during development. It has NOT been connected to or tested against the live Hubble hosting account. Do not upload it to production until the exact active plugin version, schema, PHP version, and WordPress path are verified and a full database/files backup exists.

Setup outline
1. In cPanel, create the subdomain admin.hubble.com.pk and enable SSL/HTTPS.
2. Set its document root to a dedicated folder, e.g. /home/CPANELUSER/admin-portal/ (not the public_html root).
3. Upload index.php and config.sample.php to that folder.
4. Copy config.sample.php to config.php and edit wp_load_path to the absolute path of the existing WordPress wp-load.php file. Example only: /home/CPANELUSER/public_html/wp-load.php. Do not guess this path.
5. Ensure the directory and files are not writable by other users; config.php must not be publicly downloadable. HTTPS is required.
6. Sign in with an existing WordPress administrator account. Only accounts with manage_options permission can use the portal.
7. Test first on staging: listing, add/edit, links, activate/deactivate, profile public URL, QR destinations, templates, and analytics. Confirm existing links are preserved and no profile data is changed unexpectedly.

Notes and limitations
- Current forms cover common tag/profile fields and social/action links. The current plugin may have extra fields or template-specific fields not represented here; compare against the actual active plugin before production deployment.
- Existing profile picture/banner fields accept URLs in this starter. Media upload UI, attachment ID management, custom template settings, expiry, and some typography options are not yet included.
- Profile link editing preserves IDs for rows that remain, but removing a row from the form intentionally deletes that link row. Do not remove rows unless intended.
- The existing plugin's public renderer remains responsible for public profiles. This portal does not replace it.
- Before production, review error handling and logs so database errors are not exposed to normal users. Restrict the portal at hosting/firewall level if possible.
