Stoke Park Properties: Bespoke Plugin Development for a Buy-Refurbish-Refinance Property Portfolio — From Spreadsheet to Investment-Ready Web Presence
A bespoke WordPress plugin built for Charlotte and Chris at Stoke Park Properties — a Hampshire-based buy-refurbish-refinance property investment business. The Project Engine plugin turns a spreadsheet of deal metrics into auto-calculated, schema-structured project case study pages. Deal financials (purchase, refurb, GDV, rent) generate equity, yield, and all-in cost automatically. An investor calculator and a fully editable Opportunities page target private investor acquisition. No ACF. No import-tool licence. One plugin, built from scratch.
The Challenge
Charlotte and Chris run Stoke Park Properties, a Hampshire-based property investment business operating on the buy-refurbish-refinance (BRR) model. They buy neglected properties below market value, refurbish them back to brick, and refinance at the post-refurb valuation — releasing the capital invested (including private investor capital) plus agreed interest, while retaining the property as a tenanted asset.
The business had two problems a standard website could not solve. First, a growing portfolio of completed and in-progress projects sitting in a spreadsheet — each with its own deal metrics (purchase price, refurb cost, legals, GDV, rent) — and no efficient way to publish that portfolio online as a credible, investment-grade case study record. Second, a private investor acquisition need: the business raises capital from private investors at 8–13% per annum (monthly income or rolled-up) secured against real UK property, and the website needed to do the first job of explaining that proposition clearly, handling the investor calculator, and qualifying interest before a human conversation.
The standard WordPress approach — Advanced Custom Fields plus a third-party import plugin — was ruled out on grounds of licence cost, version fragility, and the overhead of maintaining third-party plugin dependencies for business-critical data. The brief was to build a single, purpose-built plugin that handled everything: the custom post type, the deal-metric fields, the auto-calculated KPIs, a bulk editing dashboard, a CSV importer that could ingest their existing spreadsheet without column-header cleanup, and the investor-facing Opportunities page and calculator. No ACF. No import-tool licence. No plugin bloat.
The Solution
Project Engine — a single bespoke WordPress plugin built from scratch for Stoke Park Properties. At v0.19.1 as of June 2026.
Plugin at a Glance
You type; 8 figures shown
Manual · Bulk · CSV
p.a. investor returns in live calculator
Project Engine — what it does
v0.19.1
- Purchase refurb legals GDV rent as inputs
- All-in equity yield auto-calculated at render
- Never stores derived values — always fresh
Admin UI
- Edit all projects in one screen
- Live KPI recalculation as you type
- Per-row image upload save all at once
Built-in
- Messy headers normalised automatically
- PP maps to purchase price Stamp and Legals maps correctly
- Re-import updates existing projects by ref
THE CUSTOM POST TYPE AND FIELD MODEL. A `peng_project` CPT with a deal-metrics meta box. Five input fields: purchase price, refurb cost, legals and stamp duty, GDV (gross development value), and monthly rent. From those five numbers, the plugin derives and displays three KPIs without ever storing them: all-in cost (purchase + refurb + legals + other costs), equity created (GDV minus all-in), and gross yield (annual rent divided by all-in). These KPIs recalculate everywhere — on the single project page, in the bulk editing grid, in admin columns, and in the JSON-LD schema output. Charlotte and Chris type five numbers; the site shows eight.
THE HYBRID NARRATIVE. Each project has five optional story fields — the opportunity spotted, what the property needed, what was done, the outcome, and the lesson learned. Fill them in for a structured five-beat narrative; leave them blank and the page falls back to the standard WordPress editor body. This means the plugin works for portfolio entries at different stages of documentation maturity: a completed deal with a full story gets the structured layout; a deal just added from the CSV gets a clean data-only page until the story is filled in.
BULK ADD/EDIT DASHBOARD. A single admin screen showing all projects in an editable grid. Deal metrics are editable in-line. Live all-in cost, equity created, and yield calculations update as figures are typed, before saving. Per-row image upload. Save all rows at once. For a portfolio being actively built, this is the difference between WordPress as a publishing tool and WordPress as a deal-management interface.
CSV IMPORTER WITH MESSY-HEADER NORMALISATION. The Stoke Park portfolio lived in a spreadsheet with column headers that reflected how the deal data was captured rather than how a plugin expects it — abbreviations like `PP` for purchase price, combined strings like `Stamp & Legals`. The importer normalises these automatically. Uploading the existing spreadsheet works without cleaning the headers first. The importer matches by the project reference field, so re-importing updates existing entries rather than creating duplicates.
PRIVATE INVESTOR CALCULATOR. A JavaScript calculator on the Opportunities page. The investor enters a capital amount; selects a term (12, 24, or 36 months); selects payment type (monthly income or rolled-up). The calculator returns the applicable interest rate (8–13% p.a. depending on term and type), total interest earned, total capital returned, and a full summary breakdown — all formatted in Sterling with proper locale formatting. Designed to do the first job of the investor conversation before the phone call: qualified interest with realistic numbers already in front of the investor.
FULLY EDITABLE OPPORTUNITIES PAGE. The Opportunities page — hero, stats band, honest comparison, how-it-works steps, returns calculator, and call-to-action — is driven by WordPress meta boxes on the page editor, not hardcoded in the plugin. Every line of copy is editable by Charlotte or Chris without touching PHP. The baked-in defaults (stats like "£700K+ raised from private investors", "£82K+ interest paid", "10 completed projects", "0 investors have lost capital") are starting points; the live copy is whatever is saved in the admin. The plugin pulls the current project portfolio live into the Opportunities page so the case studies section always reflects the actual portfolio without manual sync.
JSON-LD SCHEMA FOR AI CITATION ELIGIBILITY. Single project pages output Article JSON-LD schema with the property as the subject, all deal metrics and calculated KPIs as additionalProperty PropertyValue entries — structured for both traditional rich results and LLM citation eligibility. Schema validates cleanly at validator.schema.org.
BRAND AND DESIGN SYSTEM. The Stoke Park Properties visual identity uses a deliberate gold-on-dark investment aesthetic: `--peng-gold: #B8964E` on `--peng-bg: #1C1E1E`. The calculator results, KPI cards, and Opportunities page section headers all use the gold emphasis system consistently. The investment-grade visual register is intentional — it signals seriousness to private investors who are evaluating whether to place five or six figures with this business.
What Made This Different
Three things distinguish this project from a standard property website build.
First, the plugin architecture decision. The brief explicitly ruled out Advanced Custom Fields and third-party import plugins — not because they don't work, but because for a business-critical data layer (a property investment portfolio and investor acquisition pipeline), plugin licence fragility and version dependencies introduce operational risk. Project Engine is a single bespoke plugin that owns its own data model, its own CPT, its own admin UI, its own importer, and its own schema output. If ACF updates its API or a third-party import plugin stops being maintained, nothing breaks. There is no dependency except WordPress itself.
Second, the auto-calculated KPI engine is the commercially important piece of work that most plugin builds skip. Storing all-in cost, equity created, and gross yield as meta fields is the obvious approach — and it is wrong, because stored calculated values go stale when the input figures change. Project Engine never stores derived values: every calculated KPI is computed at render time from the five raw input figures. This means the bulk editing grid, the admin column display, the single page KPI panel, and the JSON-LD schema output are always numerically consistent, even when a deal's figures are revised mid-project.
Third, the Opportunities page is a private investor acquisition tool, not a marketing page. The investor calculator is doing a specific job: getting qualified private investors from "what does this mean for my money?" to "I want to speak to Charlotte" without a phone call first. The copy, the stats band, the honest comparison section, and the calculator output are all designed around the decision psychology of someone evaluating whether to place a meaningful sum with a property investment business they have just found online. The editable meta box system means Charlotte can keep the copy current — investor statistics, completed project counts, interest paid — without developer involvement on every update.
The Results
The Project Engine plugin is live and in active use by Stoke Park Properties as of June 2026.
PORTFOLIO PUBLISHED AND MACHINE-READABLE. Property deal case studies are live as scaffold-managed pages with auto-calculated KPIs. The JSON-LD schema on each project page makes deal metrics readable by both search engines and LLM citation systems — the investment thesis, project outcomes, and financial returns are expressed in structured data, not just prose.
PRIVATE INVESTOR ACQUISITION PATHWAY LIVE. The Opportunities page with the investor calculator is live and functional. Private investors can model their potential returns across three terms and two payment types before making contact. The calculator outputs Sterling-formatted results including monthly income or rolled-up return figures and total capital returned.
PORTFOLIO METRICS (PLUGIN DEFAULTS, UPDATE WITH LIVE FIGURES). The Opportunities page ships with the following stats as editable defaults drawn from Stoke Park's own records: £700K+ raised from private investors; £82K+ interest paid to date; [SP_PROJECT_COUNT] completed projects across seven years; zero investors have lost capital. These figures are editable in the WordPress admin and should be updated to reflect the current portfolio position.
BULK MANAGEMENT OPERATIONAL. Charlotte and Chris manage the portfolio via the bulk add/edit dashboard. CSV import from the existing spreadsheet is tested and working — the messy-header normalisation handles their column naming conventions without requiring header cleanup.
[CHARLOTTE_TESTIMONIAL]
Frequently Asked Questions
Why build a bespoke plugin rather than using Advanced Custom Fields and an import plugin?
Three reasons. First, licence cost and fragility: ACF Pro and a capable import plugin together add ongoing licence overhead and version-dependency risk for a business-critical data layer. Second, control: a bespoke plugin owns its entire data model, admin UI, and schema output — no dependency on a third-party plugin's API decisions. Third, the auto-calculated KPI requirement is a reason to build bespoke. Storing calculated values (all-in cost, equity, yield) as ACF fields means they go stale when input figures change. Project Engine computes all KPIs at render time from the five raw input fields — they are always consistent, everywhere they appear, without any manual refresh step.
How does the auto-calculation work for deal metrics?
Charlotte and Chris enter five figures per deal: purchase price, refurb cost, legals and stamp duty, GDV, and monthly rent. Project Engine derives three KPIs from those inputs without storing them: all-in cost (purchase + refurb + legals + other costs), equity created (GDV minus all-in), and gross yield (annual rent divided by all-in, expressed as a percentage). These calculations run at display time in every context — the single project page KPI panel, the bulk editing grid with live inline updates, the admin list columns, and the JSON-LD schema output. Changing a figure in the bulk grid updates the calculated columns immediately before saving.
What does the investor calculator on the Opportunities page do?
The investor calculator takes a capital amount, a term (12, 24, or 36 months), and a payment type (monthly income or rolled-up at end of term). It returns the applicable interest rate (8% p.a. for 12-month monthly, 10% rolled-up, 11% for 24 and 36-month monthly, 12% rolled-up), the total interest earned across the term, and — for monthly payers — the monthly income figure. The full summary shows capital invested, rate, term, payment breakdown, and total return. All figures are Sterling-formatted with proper locale formatting. The calculator is designed to qualify investor interest before a human conversation: by the time someone picks up the phone to Charlotte or Chris, they have already modelled their own scenario.
How does the CSV import handle non-standard column headers?
The importer includes a header-normalisation layer that maps common abbreviations and combined strings to the plugin's field model. Headers like "PP" map to purchase price; "Stamp & Legals" maps to the combined legals and stamp duty field; similar variations are handled automatically. The importer matches incoming rows by the project reference field, so re-importing an updated spreadsheet updates existing project entries rather than creating duplicates. This means the existing Stoke Park spreadsheet could be imported without any header cleanup — the importer adapts to the data as it exists, not as a plugin ideally wants it.
Is the Project Engine plugin transferable to other property investment clients?
Yes. The plugin is white-label ready via a PENG_ constant block in the main plugin file — prefix, post type slug, and taxonomy slugs are all configurable per client without touching the plugin logic. The field model (peng_fields() in helpers.php) is a single definition that flows through to the meta box, bulk grid, importer, schema, and save handler — add or change one field in one place and it updates everywhere. The brand system (gold/dark colour tokens) is CSS-variable-driven and straightforward to retheme. Property investment businesses operating BRR, buy-to-let, or development strategies with a similar portfolio documentation and investor acquisition need are the natural fit.
Want results like these for your business?
Book a free, no-obligation 30-minute consultation and let's discuss your SEO strategy.
Discuss a Bespoke Plugin Build