# Browser installer addition Existing application preserved; this addition implements a first-install wizard at GET/POST `/install`, without running shell commands. No customer/admin design files are replaced by the installer screen. Implemented: hosting prerequisites, private installation-code verification, CSRF, rate limiting, empty-database validation, database connection test, 24 migrations, admin password hashing/confirmation, unique integration key, restricted private runtime configuration, staged `.env` update, file locking against simultaneous installations, permanent install lock and setup-code removal. The default theme remains Babu Jewellery; the store name is editable during setup. Verified locally using CI4 4.7.6, PHP 8.4.27, MariaDB 11.8.6 and real HTTP requests: invalid code denied; nonempty DB refused; password mismatch denied; successful Next→Next→Install creates tables/admin; new admin can log in; storefront loads; new visitors cannot reopen setup; setup code removed. A separately configured existing application also returns HTTP 409 and is not overwritten. Evidence is in test-evidence/installer-results.json and installer-protection.json. Not verified: actual cPanel hosting, browser rendering, Oracle MySQL, hosting-specific permissions and proxy/HTTPS behavior. Framework/vendor files, document-root mapping, SSL and the cPanel database/user must be provided before setup. This is not an automatic framework downloader or an upgrade wizard, and it does not complete the remaining software gaps in the previous 142-point audit. Test replay: use a disposable CI4 copy whose configured default DB is empty; provide a second empty target DB and an existing populated rejection-test DB. Set CI_PROJECT_ROOT, INSTALL_TEST_DATABASE, EXISTING_TEST_DATABASE, FIXTURE_FILE (support harness) and BASE_URL as needed. Run tests/Integration/installer_flow.py. Defaults match the local disposable test environment; never run against a real store.