# Features — personal_laundry_website

Evidence date: 2026-10-06. Source: `git@bitbucket.org:overdrive/personal_laundry_website.git` at `90e6cd3` (`master`).

Activation of themes and plugins is stored in the database, which is not in git. "Present" means the code is in the repository. "In use" is **Unknown** unless the code always runs.

## Current features

### WordPress CMS reported as 4.7.19

- Standard admin, posts, pages, media, comments, menus, widgets, users, cron (`wp-cron.php`), XML-RPC (`xmlrpc.php`).
- `$wp_version = '4.7.19'`, `$wp_db_version = 38590`, `$tinymce_version = '4506-20170408'` in `wp-includes/version.php`. No `$wp_local_package`.
- `en_GB` admin language files under `wp-content/languages/`.
- Location: repository root, `wp-admin/`, `wp-includes/`.
- Status: present. In use on a host: **Unknown / Requires Confirmation**.
- Local change: `wp-admin/includes/template.php` `get_settings_errors()` returns early when `$wp_settings_errors` is empty (commit `90e6cd3`, comment `20210329 - count error fix - Russel`).

### Avada 4.0.3

- Parent theme by ThemeFusion. Header: "The #1 selling theme of all time that allows you to build virtually any design style." Theme URI `http://avada.theme-fusion.com/`. Licence line: "Themeforest Split Licence".
- Loads bundled helpers from `includes/plugins/`: `multiple_sidebars.php`, `post-link-plus.php`, multiple featured images, mega menu, importer, WPML stub (`wp-content/themes/Avada/functions.php`).
- Dynamic CSS patched so the side-header breakpoint minus 32 is calculated before concatenation (`includes/dynamic_css.php`, commit `90e6cd3`).
- Generated stylesheet committed at `wp-content/uploads/avada-styles/avada-global.css`.
- Location: `wp-content/themes/Avada/`.
- Status: present. Active theme flag is **Unknown**.
- On 18 Apr 2016, `error_log` shows an older Avada on `/home/personallaundryc/public_html/` fatal-erroring because `multiple_sidebars.php` and `post-link-plus.php` were missing. Both files exist in this 4.0.3 tree.

### Avada Child 1.0.0

The only project-authored presentation. Four files: `style.css`, `functions.php`, `screenshot.png`, `.DS_Store`.

- Theme name "Avada Child". Template `Avada`. Author line still says ThemeFusion. Version 1.0.0.
- `functions.php` enqueues the parent stylesheet and calls `load_child_theme_textdomain( 'Avada', .../languages )`. No `languages` directory is in the child theme.
- `style.css` adds four rules: cyan login/register menu text (`#0cc0d1`), hover on `#menu-item-30` (`#089eb4`), white underline on `#site_credit`, and `.in_profile { float: none }`.
- Location: `wp-content/themes/Avada-Child-Theme/`.
- Status: present. Whether it is the active stylesheet is **Unknown / Requires Confirmation**.

### Public pages named in the sitemap

- Home, retail laundry, commercial laundry, about, contact. HTTP, host `www.personallaundry.co.za`, yearly `changefreq`.
- Generator comment: Free Online Sitemap Generator `www.xml-sitemaps.com`.
- Location: `sitemap.xml`.
- Status: file present. Page bodies are **Unknown** (database).

### Media library (2016)

- Months present: `uploads/2016/04` (464 files), `05` (69), `07` (229), `08` (57), `09` (30).
- Distinct base names include factory and staff photography, retail and commercial slides, logos, favicon, washing machines, ironing, towels, and shirts.
- Place and brand strings in filenames: Cape Town, Sea Point (`Personal-Cleaners-Sea-Point-Store`). Other filenames (`DoubleTree`, `Ellerman-House`, `One-and-Only`, `Taj-Group`, `Bantry-Bay-International-Vacation-Resort`, `Richard-Ward`, `Grant-Gibor`, `Edith`) are assets only. They are not a confirmed client list.
- Slider Revolution template images under `wp-content/uploads/revslider/templates/` (683 files), mostly generic `slide1.jpg`, `slide2.jpg`, `slide3.jpg`.
- Location: `wp-content/uploads/`.
- Status: present in Git. WordPress normally gitignores uploads; this repository does not.

### Fusion Core 2.0.3

- ThemeFusion companion. Shortcodes for columns, content boxes, counters, Google Map, image frame, person, pricing table, recent posts, recent works, slider, testimonials, tabs, toggles, modal, sharing box, social links, YouTube, Vimeo, SoundCloud, countdown, checklist, and a login shortcode (`shortcodes/class-fusion-login.php`).
- Also ships WooCommerce slider shortcodes (`class-woo-product-slider.php`, `class-woo-featured-products-slider.php`). WooCommerce is not installed as a plugin.
- Page builder admin loads only when option `avada_disable_builder` is truthy.
- Location: `wp-content/plugins/fusion-core/`.
- Status: present. Option value and whether shortcodes are used on pages: **Unknown**.

### Slider Revolution 5.2.5

- ThemePunch slider. Header description: "Slider Revolution - Premium responsive slider".
- Local patch in `includes/framework/base-admin.class.php`: `$arrMetaBoxes` defaults to `array()`; metabox title and location are read only when both keys are set (commit `90e6cd3`, comment `20210329 - remove offset error - Russel`).
- Status: present and patched. Published sliders: **Unknown**.

### Contact Form 7 4.8

- "Just another contact form plugin." Author Takayuki Miyoshi.
- `en_GB` translation committed.
- Forms are database content. None are stored as files.
- Location: `wp-content/plugins/contact-form-7/`.
- Status: present. A form on `/contact-us/` is **Unknown / Requires Confirmation**.

### Yoast SEO 4.8

- Plugin header in `wp-content/plugins/wordpress-seo/wp-seo.php`.
- `en_GB` translation committed.
- Status: present. Titles, social images, and Yoast's own sitemap switch are **Unknown**. The root `sitemap.xml` is independent of Yoast.

### Wordfence Security 7.5.2

- Header: "Wordfence Security - Anti-virus, Firewall and Malware Scan".
- WAF entry `wordfence-waf.php` and `.user.ini`, retargeted at `/usr/www/users/devovvbypb/personal_laundry/`.
- Logs and a synced config committed under `wp-content/wflogs/`. Snapshot: site URL `http://www.personallaundry.co.za`, unpaid licence, server IP `41.203.16.65`, plugin path `/usr/www/users/persotrccj/`.
- Uploads `.htaccess` disables PHP execution in the uploads directory (Wordfence block).
- Status: present. The WAF path and the synced plugin path disagree. Which host runs it is **Unknown / Requires Confirmation**.

### Google site verification

- `google82a264ecb0e0454e.html` contains the matching verification token line.
- Status: present. Whether the Search Console property is still verified is **Unknown**.

### Hardening that is in config rather than a feature plugin

- `.htaccess` turns off directory indexes and denies HTTP access to `wp-config.php`.
- `DISALLOW_FILE_EDIT` is true.
- `WP_DEBUG` is false.

## Completed features

Nothing in Git is marked finished as a project milestone. The 2016 media library and the five sitemap URLs are the completed public surface as far as the files show. The March 2021 QA path change and the three PHP fixes are completed code changes on `master`.

## In development

None. `master` is the only branch. Last commit 2021-03-31. No TODO in the child theme describes unfinished product work.

## Planned

No roadmap, issue list, or commented future feature in project-authored code.

**Unknown / Requires Confirmation** whether anyone still intends to change this site.

## Recently changed

Relative to the initial commit `315b5fe` (2021-03-26), `master` changed only:

| Change | Files | Commit |
|---|---|---|
| Wordfence paths from hosting user `persotrccj` to `devovvbypb` | `.user.ini`, `wordfence-waf.php` | `2c7e12a` |
| Those paths moved into subdirectory `personal_laundry` | `.user.ini`, `wordfence-waf.php` | `90e6cd3` |
| Empty settings-errors guard | `wp-admin/includes/template.php` | `90e6cd3` |
| RevSlider metabox offset guard | `wp-content/plugins/revslider/includes/framework/base-admin.class.php` | `90e6cd3` |
| Avada breakpoint parentheses | `wp-content/themes/Avada/includes/dynamic_css.php` | `90e6cd3` |

No product page or stylesheet changed in those commits.

## Deprecated or removed

| Item | Evidence | Status |
|---|---|---|
| Theme `flat-responsive` | `error_log` 14 Mar 2016, path `.../themes/flat-responsive/inc/customizer.php` | Not in this Git tree. Treated as removed before the 2021 snapshot. **Inferred** |
| Twenty Fourteen and Twenty Fifteen | Only `wp-content/languages/themes/twentyfourteen-en_GB.*` and `twentyfifteen-en_GB.*` remain | Themes absent. Language files are leftovers |
| Production WAF path `persotrccj` | Replaced in Git by the QA path | The synced Wordfence config still records `persotrccj`. **Requires Confirmation** which deployment is real |
| Older Avada that lacked `includes/plugins/multiple_sidebars.php` | Fatal errors on 18 Apr 2016 | Current tree contains the file |

## Not features of this site

- WooCommerce checkout. Shortcode classes exist inside Fusion Core only.
- A custom booking or order system. No such plugin or theme code.
- Multisite. No multisite constants.
- Project tests or a Bitbucket pipeline. None at the repository root.
- SonarQube config. `sonar-project.properties` and `sonarqube_scan.bat` were named in the onboarding scan and are not in `90e6cd3`.

## Source map

| Feature | Location |
|---|---|
| Version | `wp-includes/version.php` |
| Child theme CSS and enqueue | `wp-content/themes/Avada-Child-Theme/style.css`, `functions.php` |
| Parent theme | `wp-content/themes/Avada/` |
| Sitemap | `sitemap.xml` |
| Photography | `wp-content/uploads/2016/` |
| Sliders | `wp-content/plugins/revslider/` |
| Forms | `wp-content/plugins/contact-form-7/` |
| SEO plugin | `wp-content/plugins/wordpress-seo/` |
| Firewall | `wordfence-waf.php`, `.user.ini`, `wp-content/plugins/wordfence/`, `wp-content/wflogs/` |
| Shortcodes | `wp-content/plugins/fusion-core/shortcodes/` |
| Permalinks and config deny | `.htaccess` |
| Database constants | `wp-config.php` |
