# Features — wow_turf (WowTurf)

Evidence date: 2026-09-28. Revision: `master` `00137305` (2019-06-12, "docs complete.").

The source repository documents features in `README.md` and `docs/`. Status below is from that text plus the code on `master`. `origin/staging` (`c1d3e064`, 2020-02-26) has 215 commits that are not on `master`, including WowWin pagination, dashboard layout, and ad-display fixes. Those are listed as unmerged, not as the current default.

Planned features written as a roadmap: **none found**.

## Current features (master)

| Feature | What it does | Evidence | Status |
|---|---|---|---|
| Public content site | Home, articles, WowFun category listing, WowWin listing, search, about, white-label pages, 404 | `docs/pagetemplates.php`, theme templates | Implemented |
| Two registration types | Personal user (subscriber) and advertiser (customer) | `docs/users.php`, `registerUser` | Documented. Formidable forms are not in git. REST registration is implemented |
| Login | Formidable login shortcode; REST `loginuser` | `docs/users.php`, `nwu-actions.php` | Documented and implemented |
| Facebook login or registration | Route `/wp-json/nff/v1/fbloginreg/` | `nwu-actions.php` | Implemented as a route. App configuration unknown |
| Profile completion | 12 fields for subscribers, 13 for advertisers. Gates ads and campaign creation at 100% | `nwu.php` `getProfilePercentage`, `single-campaign.php`, `dashboard-campaign-a.php` | Implemented |
| Location lock | Location fields lock for 365 days after save | `nwu.php`, `dashboard-profile.php` | Implemented |
| Phone validation | 11 digits including country code | `handleProfileForm` | Implemented |
| Subscriber dashboard | Recent activity and preferences | `dashboard-personal.php` | Documented |
| Earn dashboard | Points, tokens, payouts, invite | `dashboard-earn.php` | Documented |
| Friend invite | Email with coupon code, reminder after 7 days | `sendInvite`, `check_invite_reminders` | Implemented |
| Personal coupon reward | Both parties get an extra draw token | `docs/users.php` | Documented |
| Advertiser coupon credit | Coupon balance is consumed by bids before card charges | `docs/users.php`, `log_campaign_spend` | Documented and implemented |
| Campaign wizard | Four steps: schedule, targeting and budget, creative, Stripe summary | `dashboard-campaign-a.php` through `dashboard-campaign-d-stripe.php` | Implemented |
| Campaign statuses | active, pending_review, paused, disabled, cancelled | `docs/campaigns.php` | Documented |
| Admin campaign review | Admin publishes before a campaign is live | `docs/campaigns.php` | Documented |
| Ad serving filters | Size, region, preferences, age, gender, budget, dates, time of day, frequency, status, language, then highest bid | `nwc.php` `get_campaign_id` | Implemented |
| Default ads | A random default campaign can fill an empty slot | `get_campaign_id` | Implemented. Commit `0f845512` (2019-05-20) |
| Four ad types | View only (1), click through (2), take action (3), premium (4) | `docs/pointstokens.php`, `templates/adtypes/` | Documented and implemented |
| Ad preview | Advertiser previews on home, article, WowFun, WowWin | `preview-*.php` | Implemented |
| Points and tokens | Points convert using ACF `token_costs` | `nwpt.php` `getTokensAmount` | Implemented. Printed ladder is in `docs/pointstokens.php` |
| Bursary draw | Super admin runs a competition; one shuffled entry wins; payout is marked manually | `runCompetition`, `dashboard-competitions.php` | Documented and implemented |
| Stripe cards and charges | Threshold billing, outstanding balance on cancel, low budget, or account delete | `docs/payments.php`, `nwc.php`, Ninja Payments STRIPE | Documented and implemented |
| Periodic invoicing | Weekly or monthly invoice notices instead of every charge | `docs/payments.php`, `periodicinvoicing` route | Documented and implemented |
| Billing history email | Advertiser emails themselves a history | `docs/payments.php` | Documented |
| Notifications | Custom post type in both dashboards; admin can target audiences | `docs/notifications.php` | Documented |
| Notification preferences | User can opt out of notifications or mails | `ajaxUpdateNotifyPreferences` | Implemented |
| System mail templates | Editable rows in wp-admin, wildcard replacement in plugins | `docs/notifications.php` | Documented |
| Mailchimp lists | Newsletter and special offers | `docs/notifications.php` | Documented. Plugin not in git |
| Bookmarks | Save and remove bookmarks | `processBookmarks`, `/bookmark/` | Implemented |
| Viewed posts | Log and list posts a subscriber viewed | `logView`, `nfh_postviews` | Implemented |
| Contribute an article | Publishing a contributed post adds 100 points | `contribute_subs` | Implemented. Not described in `docs/` |
| Live search | `dhemy_ajax_search` | `docs/plugins.php` | Documented |
| Campaign debugger | wp-admin tool showing the latest calls to `get_campaign_id` | `docs/debugging.php` | Documented. Docs say purge `nfh_campaigns_debug` and turn it off in production |
| Geo data | Country, region, city, and a request form for a new location | `ninja-geo-manager`, commit `86147fe7` | Implemented |
| Campaign export | `getCampaignsData_NEW` replaces `getCampaignsData` | `docs/plugins.php` | Documented. Old method marked replaced |
| Delete account | Stores a row in `nfh_deleted_users` and bills outstanding advertiser balances | `docs/database.php`, `docs/payments.php` | Documented |
| Static prototype | Clickable HTML screens under `html/` | `html/index.php` | Present. Not the WordPress theme |
| In-repo docs site | PHP pages under `docs/` | `docs/index.php` | Present on `master` since 2019-06-10 |

## Completed, from git history

These subjects describe work that landed before `master` stopped. They are not a separate product version.

| Date | Commit | Subject |
|---|---|---|
| 2019-02-08 | `86aec8a0` | Periodic invoices functionality complete |
| 2019-02-13 | `6a2f1f80` | Mails integrated, mail preview, bookmark on WowFun |
| 2019-03-19 | `b00338c5` | Preview ad functionality done |
| 2019-04-01 | `3e945939` | Contribute functionality completed |
| 2019-04-03 | `27ac706d` | Contribute feedback done |
| 2019-05-06 | `bd0758f5` | Cannot cancel without paying the balance first |
| 2019-06-12 | `00137305` | Docs complete |

## In development

Nothing on `master` is marked in progress. The last `master` commit says the docs are complete.

`origin/staging` continued after that date. Examples from commit subjects, not fully read:

- WowWin grid of 9 ads per page, then pagination (`b19920ab`, `c1d3e064`)
- Ads published by advertisers not showing, then fixes (`38ce0d76` and follow-ups on the tyrone-api line)
- Dashboard and mobile layout, token history table, campaign type in the summary
- Containers disabled by an ad blocker (`6bd6d0cc`)

Whether that work shipped is **Unknown / Requires Confirmation**.

## Changed behaviour still visible in code

| Change | Evidence |
|---|---|
| Daily budget filter removed from the live path | `filter_by_hasbudget` keeps the daily check commented and uses total budget only |
| Sequential token subtraction replaced | `getTokensAmount` comments a subtract loop and uses threshold comparison |
| Campaign export replaced | `getCampaignsData` documented as replaced by `getCampaignsData_NEW` |
| ZotaPay billing templates renamed | `LEGACY-zota-dashboard-billing.php` and `LEGACY-dashboard-billing.php` in the theme |
| Avatar upload moved to AJAX | Commit `97294a37` (2019-04-04) |

## Deprecated or unused

| Item | Evidence | Status |
|---|---|---|
| Ninja Payments ZOTAPAY | README section "Redundant/Legacy Plugins not being used" | Plugin directory still present. REST `/wp-json/nff/v1/handlepayments/` still registered |
| Legacy token loop | Commented block in `getTokensAmount` | Inactive |
| Legacy daily budget | Commented block in `filter_by_hasbudget` | Inactive |
| Backup ad-type footers | `templates/adtypes/BU_take-action-footer.php`, `BU_premium-footer.php` | Present, not included by `single-campaign.php` |
| Old ZotaPay SQL | `public_html/db/ninjatestbox_test_ZOTAPAY_tables_bu_20181008.sql` | Backup dump |

## Prototype screens that are not in the theme template list

`html/index.php` links to `dashboard/wallet.php`. `docs/pagetemplates.php` does not list a wallet template. The earn dashboard is `dashboard-earn.php`. Whether "wallet" was renamed to earn is **Inferred** from those two names. It was not confirmed by a file diff.

## Not features of this repository

- A mobile application binary. One commit says avatar upload did not work in "the app".
- SonarQube project files. Named in the onboarding scan, absent from `master`.
