Press Tracker installation guide
Keep this guide open while installing. The same instructions are in INSTALLATION.txt.
PRESS TRACKER — SELF-HOSTED 1.0.0
Prepared November 14, 2026 for EntirelyDigital / cPanel
READ THIS FIRST
This is a ready-to-upload PHP application, not a Node.js server. The compiled
interface is included. You do not need Application Manager, npm, Composer, SSH,
or a build step to install it. Your existing ChatGPT-hosted app stays separate.
This package contains no existing stockroom data or passwords.
RECOMMENDED: use a dedicated subdomain such as inventory.yourdomain.com.
Use a new, empty database. Do not overwrite your online store's files/database.
You will create the owner's username/password during installation. Users do not
need ChatGPT accounts on this self-hosted version.
1. CREATE A SUBDOMAIN AND ENABLE HTTPS
In cPanel, open Domains and create the desired subdomain. Ask EntirelyDigital
to help if this option is not visible. Allow DNS to settle and enable SSL
(AutoSSL / SSL/TLS Status, depending on your cPanel layout).
Best folder arrangement:
/home/YOUR_CPANEL_USERNAME/press-tracker/
private/ configuration, protected photos and sessions
public/ ONLY this folder is your subdomain's document root
src/ source code; not needed by PHP at runtime
INSTALLATION.txt
In File Manager, upload the ZIP to your home directory (outside public_html),
then Extract it. The extracted folder is named press-tracker.
Set the subdomain document root to:
/home/YOUR_CPANEL_USERNAME/press-tracker/public
If cPanel requires document roots to be inside public_html, ask EntirelyDigital
to set a safe document root. Alternatively use public_html/press-tracker/public
as the document root AND keep the included private/.htaccess in place. The
public-only document root is preferred. Never make private/ the document root.
Enable “Show Hidden Files” in File Manager so .htaccess and .user.ini are kept.
Do not upload the ZIP, source backups or configuration into a public web folder.
2. SELECT PHP AND EXTENSIONS
Use Select PHP Version for this subdomain: PHP 8.3 or newer.
Required extensions: pdo_mysql, fileinfo, zip, session. JSON is built into PHP.
mbstring is recommended. MariaDB 11.4.13 is suitable; InnoDB must be available.
Apache/LiteSpeed must honor .htaccess and mod_rewrite.
Normal permissions: folders 755, files 644. PHP must be able to write to private/,
private/photos/ and private/sessions/. On typical cPanel PHP-FPM this works with
account ownership and 755. Do not use 777. Ask EntirelyDigital about ownership
if the installer reports a non-writable folder. Configuration/photo files are
written as 600 by the app; adjust ownership through support if necessary.
3. CREATE THE DATABASE
Open Manage My Databases (or Database Wizard).
- Create a dedicated, empty database, e.g. presstracker.
- Create a database user with a strong, unique password.
- Add that user to the new database and grant ALL PRIVILEGES on THAT DATABASE.
- Save the FULL prefixed names shown by cPanel, for example:
account_presstracker and account_ptuser
- Database host is usually localhost, port 3306. Confirm with EntirelyDigital
if they supply a different host or port.
The database user's password is different from the app owner's login password.
The app creates its own tables; no phpMyAdmin SQL import is normally necessary.
4. RUN THE INSTALLATION WIZARD
Open https://YOUR_SUBDOMAIN/install.php.
The wizard checks PHP extensions and writable folders.
Copy the installation key from private/setup-key.txt in the downloaded package
(or view it using cPanel File Manager). Keep this key private.
Enter the installation key, full database details and your desired owner name,
username, password and password confirmation. Passwords must be 12–72 bytes.
Click Install Press Tracker, then sign in.
The wizard writes private/config.php, removes the setup key, and locks itself.
After successful installation, delete public/install.php with File Manager.
Do not delete private/config.php. If setup fails midway after creating tables,
use a NEW empty database or ask support to clean up only this app's pt_ tables.
Never remove tables from your store's database.
5. BRING OVER YOUR CURRENT INVENTORY AND PHOTOS (OPTIONAL)
Your data is NOT embedded in this installation ZIP.
While signed into the current hosted app as the owner, open:
https://hotwife-fashions-stockroom.earthsprite.chatgpt.site/export
Click Download migration ZIP. Keep the page open until the download finishes.
Avoid editing inventory/photos while exporting. This is read-only and does not
change the hosted app. Download on a desktop if you have many photos.
On your new server: sign in as owner, choose Backups in the top bar, select the
migration ZIP under Import into an empty installation, type IMPORT, and import.
Inventory, photos, suppliers, saved categories/names, history and quantities
are included. User accounts/passwords are NOT transferred; recreate them below.
Import is refused if there are already inventory items OR photos in the new
installation. Import before entering new items or uploading new photos.
Use the same process with a self-hosted backup ZIP to restore to a new empty
installation. A migration ZIP must contain manifest.json plus photos/ files.
The app does not import CSV as a complete backup; CSV does not contain photos
or all settings. Keep migration ZIP files on your computer, not publicly online.
The included .user.ini requests 250 MB uploads, 260 MB POST and 512 MB memory.
Hosts may enforce lower limits or take several minutes to apply these values.
If upload/import is rejected, raise those limits in MultiPHP INI Editor / Select
PHP Options or ask EntirelyDigital. Individual photos remain limited to 6 MB.
The browser migration export limit is approximately 240 MB of photos; the import
limit is 250 MB uncompressed photos. Contact us before migrating a larger library.
6. ADD USERS
Open Users. Enter a display name, username, password and selected transfer
categories; use Tick all categories when appropriate. Save and send the person
your new subdomain link and their username. Share their password privately.
Additional users are view-only. They see blanks and permitted transfers/finished
items. Finished items require access to every source-transfer category.
New transfer categories are not granted automatically.
No categories checked means no transfers or finished items are visible.
Private/shared photos are protected on the server, including direct image links.
You can disable a user or enter a new password on their profile. Saving a user
invalidates their existing sessions. Users can change their own password under
Account. Only the installer-created owner can manage inventory and users.
7. VERIFY BEFORE SWITCHING OVER
- Add a test blank, transfer and premade item; confirm quantities/costs.
- Make an item and confirm both materials are deducted correctly.
- Confirm suppliers, on-order receiving, filters, printing and CSV work.
- Open a photo, check linked items and upload a replacement.
- Test a restricted user in a private/incognito browser window. Confirm private
transfers, finished items and photo URLs cannot be viewed.
- Test an inventory/photo backup download and keep it somewhere safe.
- Keep using ONLY ONE installation for stock changes after you switch over.
The self-hosted and ChatGPT-hosted databases do not synchronize.
BACKUPS AND UPDATES
Use Backups to download inventory/settings/history/photos regularly. This does
NOT include users/password hashes or configuration. Also enable daily cPanel
backups covering the MariaDB database and the entire press-tracker directory.
For full recovery you need BOTH the database and private/ folder, including
photos. Keep copies off the server. Session files need not be restored.
For updates, first back up the database and folder. Never overwrite/delete
private/config.php or private/photos/. Do not rerun install.php on an existing
installation. This first package has no automatic update mechanism.
FORGOTTEN OWNER PASSWORD
If you still have cPanel Terminal, run:
php /home/YOUR_CPANEL_USERNAME/press-tracker/private/reset-owner.php
Enter your owner username. It prints a temporary password; change it under
Account after signing in. This tool runs only from a terminal, not over the web.
If Terminal is unavailable, ask EntirelyDigital to run it for you. Never send
them your current password or paste the generated password into public tickets.
TROUBLESHOOTING
Blank page / error 500: check cPanel Errors and PHP logs. Confirm PHP >=8.3,
extensions, database permissions, and correct document root. The app deliberately
does not display database credentials in errors.
API not found / 404: keep public/.htaccess, enable mod_rewrite, confirm the public
folder is the document root. Do not put an extra public/ into the website URL.
Login loops / expired session: confirm HTTPS, writable private/sessions/, browser
cookies enabled and correct base_path in private/config.php. Don't access the
same installation through multiple domain names.
Uploads fail: check PHP upload/POST/memory limits and private/photos/ permissions.
Installer locked: this is normal after setup. Open the main domain to log in.
Images disappear for a user: review that user's transfer-category permissions;
a photo reused by a hidden item is intentionally hidden everywhere for that user.
Do not expose the private folder or relax permissions to troubleshoot.
SOURCE AND VALIDATION
Source is included under src/; PHP backend is in private/ and public/.
Optional developer rebuild: install Node.js on a development computer, run
npm install, then npm run build. Upload the resulting public/assets/app.js.
Node.js and npm are NOT required on the hosting server. React/ReactDOM and
Lucide notices are included under third-party/.
Validation: PHP syntax checked; integration tested with PHP 8.4.24 and MariaDB
11.8.6. Tests cover installation locking, username/password login, CSRF rejection,
revision conflicts, restricted categories/finished items/direct photos, replacing
photos, trash protection, backup/import roundtrip, refusal to overwrite non-empty
inventory and disabled-session revocation. The package uses PHP 8.3-compatible
syntax and standard MariaDB queries. Installation on your actual PHP 8.3 /
MariaDB 11.4.13 hosting account still needs the verification steps above.
Official reference guides
cPanel Database Wizard
cPanel File Manager
PHP PDO MySQL