# Project plan — personal_laundry_website

Evidence date: 2026-10-06.

Source repository: `git@bitbucket.org:overdrive/personal_laundry_website.git`.

Inspected revision: `90e6cd3` (2021-03-31, "change path to QA site details, fix count() error, add check to see if variables empty to fix offset error, fix non numeric error for revslider plugin") on `master`. That commit is `origin/HEAD`. There are no other remote branches.

This plan describes what the repository contains. It does not decide what the product should become.

Secrets in `wp-config.php` and `wp-content/wflogs/` are omitted from this document. They are called out under Security in `technical-documentation.md`.

## Product

`personal_laundry_website` is a WordPress site for **Personal Laundry** (domain `www.personallaundry.co.za`). The public information architecture recorded in the static sitemap is a home page plus retail laundry, commercial laundry, about, and contact.

Provenance:

- **Implemented** — `sitemap.xml` lists `http://www.personallaundry.co.za/`, `/retail-laundry/`, `/commercial-laundry/`, `/about-us/`, and `/contact-us/`.
- **Implemented** — a Wordfence snapshot in `wp-content/wflogs/config-synced.php` records `siteURL` and `homeURL` as `http://www.personallaundry.co.za`.
- **Implemented** — media filenames under `wp-content/uploads/2016/` use the names Personal Laundry, Personal Cleaners, retail laundry, commercial laundry, factory, staff, Sea Point store, and Cape Town services.

The legal entity, current trading name, and whether that domain is still live are **Unknown / Requires Confirmation**. Page copy lives in the database, which is not in git.

The presentation stack is Avada 4.0.3 with an Avada child theme, Fusion Core 2.0.3, Slider Revolution 5.2.5, Contact Form 7 4.8, Yoast SEO 4.8, and Wordfence 7.5.2, on WordPress reported as 4.7.19. Provenance: **Implemented** in theme and plugin headers and `wp-includes/version.php`.

Uploaded media dates from April through September 2016. The Git history is three commits in March 2021 by Russel Sauer (`russel@overdrive.co.za`). The 2021 commits retarget the Wordfence WAF at a QA filesystem path and patch three PHP notices. They do not add product features.

## Branch reality

| Branch | Tip | Date | What it is |
|---|---|---|---|
| `master` (only branch; `origin/HEAD`) | `90e6cd3` | 2021-03-31 | Full WordPress tree, Avada, five plugins, uploads, Wordfence logs, QA path |

History, oldest first:

1. `315b5fe` — 2021-03-26 — Russel Sauer — initial commit (8,946 files). Wordfence WAF paths use `/usr/www/users/persotrccj/`.
2. `2c7e12a` — 2021-03-29 — Russel Sauer — "change username to QA site username". `.user.ini` and `wordfence-waf.php` move from `persotrccj` to `/usr/www/users/devovvbypb/`.
3. `90e6cd3` — 2021-03-31 — Russel Sauer — QA path becomes `/usr/www/users/devovvbypb/personal_laundry/`, plus three PHP fixes in WordPress admin, Slider Revolution, and Avada dynamic CSS.

No commits after 2021-03-31. Provenance: **Implemented** (`git log`).

## Hosting history visible in the tree

These paths disagree. They are recorded as found. Which one, if any, is production today is **Unknown / Requires Confirmation**.

| Evidence | Path or host | When |
|---|---|---|
| `error_log` | `/home/personallaundryc/public_html/`, PHP 5.5 include path (`/opt/alt/php55/`) | 14 Mar 2016, 8 Apr 2016, 18 Apr 2016 only |
| `error_log` theme | `flat-responsive` on 14 Mar 2016; Avada missing `multiple_sidebars.php` and `post-link-plus.php` on 18 Apr 2016 | 2016. Those two files exist in the 2021 Avada 4.0.3 tree |
| Wordfence `config-synced.php` | `pluginABSPATH` `/usr/www/users/persotrccj/`, server IP `41.203.16.65`, site `http://www.personallaundry.co.za`, `isPaid` false | Snapshot committed in 2021; capture date **Unknown** |
| Initial commit WAF | `/usr/www/users/persotrccj/` | 2021-03-26 |
| QA commits | `/usr/www/users/devovvbypb/personal_laundry/` | 2021-03-29 and 2021-03-31 |
| `wp-config.php` | MySQL host `sql47.jnb1.host-h.net`, database `personal_db`, table prefix `wp1s_`. The database user name matches the QA account prefix `devovvbypb` | Committed config. Whether this database is production or QA is **Unknown / Requires Confirmation** |
| `cgi-bin/php52wrapper.cgi` | Executes `/opt/php52/bin/php-cgi` | Present. Not evidence of the PHP version that serves the site now |

`/usr/www/users/` is the layout used by xneelo (formerly Hetzner South Africa). `sql47.jnb1.host-h.net` is a Johannesburg host-h.net database host. Provenance: **Inferred** from the path and hostname shape. The repository does not name the host company.

## Objectives (inferred from the stack and assets, not from a written plan)

No project plan, product README, or requirements document exists in the repository. `readme.4ffec57b37687e87040fe9fdcae8f783.html` is the stock WordPress readme under a hashed filename. The following objectives are **Inferred**:

- Publish a public brochure site for a Cape Town laundry business with retail and commercial services.
- Present it with Avada, a child-theme colour tweak, homepage and service photography, and Slider Revolution.
- Accept enquiries through Contact Form 7 on a contact page. Whether a form is actually published is stored in the database and is **Unknown / Requires Confirmation**.
- Protect the site with Wordfence (free licence in the committed snapshot).
- In March 2021, point this tree at a QA copy under the `devovvbypb` hosting account and stop PHP warnings that appeared there.

## Scope

### In scope of the repository

- WordPress core reporting version `4.7.19` and database revision `38590` (`wp-includes/version.php`). TinyMCE version in the same file is `4506-20170408`.
- Themes: `Avada` 4.0.3 and `Avada-Child-Theme` 1.0.0. No bundled default themes (`twentyfifteen` language files exist; the themes do not).
- Plugins: Fusion Core 2.0.3, Slider Revolution 5.2.5, Contact Form 7 4.8, Yoast SEO 4.8, Wordfence Security 7.5.2.
- `en_GB` language files for core admin, Contact Form 7, Yoast SEO, Twenty Fourteen, and Twenty Fifteen.
- Media under `wp-content/uploads/` (2016 library, `avada-styles/avada-global.css`, Slider Revolution template images). About 1,534 files under `uploads/`.
- Wordfence WAF bootstrap (`wordfence-waf.php`, `.user.ini`) and `wp-content/wflogs/`.
- `wp-config.php` (committed; contains live connection secrets).
- Static `sitemap.xml`, Google site-verification file `google82a264ecb0e0454e.html`, `.htaccess`, `error_log`, `cgi-bin/php52wrapper.cgi`.

### Out of scope / not in this repository

- The MySQL database. Pages, posts, menus, Contact Form 7 form definitions, Avada theme options, active theme, active plugins, and users are **Unknown** except where a file records them.
- Any deploy pipeline, SonarQube project file, or test suite for this site. The onboarding scan listed `sonar-project.properties` and `sonarqube_scan.bat` at the repository root. Neither file is in `90e6cd3`. Provenance: **Unknown** — they may have been untracked on the scan host.
- A written product roadmap. Nothing in Git describes work after 2021-03-31.

## Architecture

Single WordPress install. No `MULTISITE` constant in `wp-config.php`.

```text
Browser
  -> Apache (.htaccess permalinks, Wordfence auto_prepend_file)
  -> wordfence-waf.php
  -> WordPress 4.7.x (wp-load.php / wp-config.php)
  -> Avada child theme (stylesheet only) on Avada
  -> Fusion Core shortcodes, Slider Revolution, Contact Form 7, Yoast SEO
  -> MySQL personal_db (prefix wp1s_) on sql47.jnb1.host-h.net
```

Page content is stored in MySQL and rendered by Avada / Fusion Builder shortcodes. This repository vendors the CMS, the theme, the plugins, and a copy of the uploads directory. It does not vendor the content rows.

## Major components

| Component | Role | Evidence |
|---|---|---|
| WordPress core | CMS, users, pages, media, cron, XML-RPC | `wp-includes/version.php`, root bootstrap files |
| Avada 4.0.3 | Parent theme and theme options | `wp-content/themes/Avada/style.css` |
| Avada Child 1.0.0 | Site-specific CSS only | `wp-content/themes/Avada-Child-Theme/` |
| Fusion Core 2.0.3 | Avada shortcodes and optional page builder | `wp-content/plugins/fusion-core/fusion-core.php` |
| Slider Revolution 5.2.5 | Sliders | `wp-content/plugins/revslider/revslider.php` |
| Contact Form 7 4.8 | Contact forms | `wp-content/plugins/contact-form-7/wp-contact-form-7.php` |
| Yoast SEO 4.8 | SEO metadata | `wp-content/plugins/wordpress-seo/wp-seo.php` |
| Wordfence 7.5.2 | Firewall and malware scan | `wp-content/plugins/wordfence/wordfence.php` |
| Uploads | Photography, logos, generated Avada CSS | `wp-content/uploads/` |

## Milestones visible in evidence

| When | What | Status |
|---|---|---|
| Mar 2016 | Site running theme `flat-responsive` on cPanel account `personallaundryc` | **Implemented** in `error_log` only. Theme is not in this Git tree |
| Apr 2016 | Media library for factory, retail, commercial, staff, slides, logos. Avada include errors on 18 Apr 2016 | **Implemented** in uploads and `error_log` |
| May–Sep 2016 | Further uploads | **Implemented** in `wp-content/uploads/2016/` |
| 2021-03-26 | Repository created from a full site tree; WAF still pointed at `persotrccj` | **Implemented** |
| 2021-03-29 to 2021-03-31 | Tree retargeted at QA account `devovvbypb`, subdirectory `personal_laundry`; three PHP notice fixes | **Implemented** |
| After 2021-03-31 | No further commits | **Implemented** (`git log`) |

There is no milestone plan in the repository for anything after that.

## Implementation plan

No forward implementation plan is documented. The repository is a frozen snapshot. Any future work (theme update, PHP upgrade, content change, credential rotation) is **Unknown / Requires Confirmation**.

## Known dependencies

- PHP and Apache (or equivalent) with `auto_prepend_file` support for the Wordfence WAF. The committed `.user.ini` expects that directive.
- MySQL database `personal_db` on `sql47.jnb1.host-h.net`.
- WordPress 4.7-era core. Avada 4.0.3 and Slider Revolution 5.2.5 are commercial ThemeFusion / ThemePunch products vendored in Git.
- Fusion Core is the companion plugin Avada expects. WooCommerce shortcode classes are shipped inside Fusion Core. The WooCommerce plugin itself is not in `wp-content/plugins/`.
- British English language packs (`en_GB`). `wp-includes/version.php` does not set `$wp_local_package`.

## Current project status

Frozen. Last commit 2021-03-31. No CI, no tests for the site, no open branch other than `master`. The committed `wp-config.php` and Wordfence logs contain secrets and should be treated as exposed. Whether production still matches this tree is **Unknown / Requires Confirmation**.
