Harness Financial · Internal Build Reference

48-hour MVP
build guide

Step-by-step instructions for building the BestStart digital enrollment stack from scratch. Written for a first-time builder. Every action is listed — nothing is assumed.

🕐 MVP deadline: 48 hours
Tonight — WordPress + Elementor
Tomorrow AM — Typeform
Tomorrow PM — PandaDoc + Make
Tonight
WordPress + Elementor
Landing page live
Tomorrow — Morning
Typeform build
Form + field naming locked
Tomorrow — Afternoon
PandaDoc templates
Both PDFs mapped + envelope
Tomorrow — Evening
Make automation
Full integration + test matrix
Phase 1

WordPress + Elementor Pro — landing page

Tonight

You are building one private page that BestStart employees will visit. It will have a short intro, an optional video, and the Typeform embedded directly on the page. Do this tonight — it only takes about 90 minutes.

1
Set up WordPress hosting and install the platform
WordPress
Go to SiteGround, Kinsta, or WP Engine — pick any host. Sign up for their Basic plan (~$15 USD/month).
During setup, choose Install WordPress — your host will do this automatically in 1–2 minutes.
Once installed, log into your WordPress dashboard. The URL will be: yourdomain.com/wp-admin
Log in with the username and password your host emailed you.
2
Install and activate Elementor Pro
Elementor Pro
Go to elementor.com and purchase the Essential plan (1 website). Download the plugin ZIP file from your account dashboard.
In your WordPress dashboard, go to Plugins → Add New → Upload Plugin.
Upload the Elementor Pro ZIP file. Click Install Now, then Activate Plugin.
You'll be prompted to enter your Elementor license key — paste it in and click Activate.
Also install the free version of Elementor first if prompted (Elementor Pro requires it).
3
Create and configure the BestStart landing page
Elementor Pro
In WordPress dashboard, go to Pages → Add New. Title it "BestStart Health Cover".
Click the Edit with Elementor button. The Elementor editor will open.
In the left panel, click the Settings gear icon (bottom left). Set Page Layout to Elementor Full Width — this removes the default WordPress header and footer so your page looks clean.
To password-protect the page: back in the WordPress editor, find Visibility in the right panel. Set it to Password Protected and enter a simple password to share with BestStart HR.
You can come back to add BestStart branding — logo, colours, fonts — after the Typeform is built. Tonight, focus on getting the structure live. The Typeform embed slot is the critical piece.
4
Build the page layout and add the Typeform embed slot
Elementor Pro
In Elementor, click the + icon to add a new section. Choose a single-column layout.
From the left panel, search for "Heading" widget. Drag it into the section. Type your headline: "BestStart Health Cover — Enroll Online".
Add a Text Editor widget below the heading. Write 2–3 lines describing the enrollment process for employees.
Add a new section below. Search for the "HTML" widget (also called Code widget). Drag it into the section. Leave it empty for now — you will paste the Typeform embed code here tomorrow after building the form.
Set the HTML widget height to at least 600px in the widget settings under Style → min-height.
Click Publish (green button, bottom left). Your page is live.
Tonight's goal achieved: The WordPress page is live and ready. The HTML widget is sitting empty, waiting for the Typeform embed code tomorrow.
Phase 2

Typeform — eligibility, details & cover selection

Tomorrow — Morning

This is the form your employees will complete. It has three jobs: determine their pricing tier, collect their personal and family details, and let them select their cover. The most important thing you will do in Typeform is name every field — because those names must match PandaDoc exactly later.

5
Create your Typeform account and start a new form
Typeform
Go to typeform.com and sign up. Choose the Plus plan ($49 USD/month) — you need this for logic jumps and hidden fields.
Click Create typeform → Start from scratch.
Name the form: BestStart Health Cover — Enrollment.
6
Build the 5 eligibility questions with logic branching
Typeform
Add a Yes/No question: "Are you a permanent employee of BestStart?" — If No → end screen (not eligible).
Add: "Are you a qualified teacher?" — Yes/No.
Add: "Do you work 24 hours or more per week?" — Yes/No.
Add: "Is your gross annual salary $52,000 or more?" — Yes/No.
Add: "Did you previously have Specialist cover with Southern Cross?" — Yes/No.
To add logic: click a question → click Logic tab on the right → set up the branching rules. Confirm exact tier logic with Dieter before finalising.
Do not lock this section yet. Come back to finalise the tier logic only after confirming the exact A–F combinations with Dieter. You can build the rest of the form around it in the meantime.
7
Add hidden fields to carry the tier and key data through the form
Typeform
In Typeform, go to Logic → Hidden fields (at the bottom of the left panel).
Click Add hidden field. Name it exactly: pricing_tier
Add a second hidden field named: submission_date
These fields are invisible to the user but travel through the form — Make will read them and pass them to PandaDoc and Google Sheets.
Hidden fields in Typeform are like invisible containers. You can pre-fill them with values using logic, and they travel silently through the form to Make when submitted.
8
Build the personal and family details section
Typeform
Add a Short text question for each of these employee fields — use exactly these reference names (set in the question settings on the right panel):
emp_first_name — "First name"
emp_last_name — "Last name"
emp_dob — "Date of birth" (use a Date question type)
emp_gender — "Gender" (use a Multiple Choice question)
emp_email — "Email address" (use an Email question type)
emp_phone — "Phone number"
emp_address — "Residential address"
emp_number — "Employee number"
nib_policy_number — "NIB policy number"
For family members, repeat the same structure for up to 9 members: member1_first_name, member1_last_name, member1_dob, member1_gender, member1_relationship — then repeat for member2, member3, etc.
How to set a reference name in Typeform: Click the question → look at the right panel → find "Reference" or "Variable name" field → type the name exactly as shown above. This is the name Make and PandaDoc will use to identify this field.
9
Build the cover selection questions
Typeform
For the primary employee, add a Multiple Choice question for excess selection. Reference name: emp_excess. Options: NIL / $250 / $500 / $1,000 / $2,000 / $4,000 / $6,000.
Add a Multiple Select question for add-ons. Reference name: emp_addons. Options: Specialist / GP / Dental & Optical / Pro-Active Health.
Add a Multiple Choice for Non-Pharmac cover. Reference name: emp_nonpharmac. Options: None / $50k (included, no extra cost) / $100k / $200k / $300k.
Add a Multiple Choice for Trauma cover. Reference name: emp_trauma. Options: None / $20,000 / $50,000.
Repeat these four questions for each family member, using reference names: member1_excess, member1_addons, member1_nonpharmac, member1_trauma — and so on for member2 through member9.
Live pricing calculation (the running monthly total) is the most technically complex part of Typeform. This requires calculated fields using hidden variable arithmetic. Set this up last, and only after confirming all pricing tables with Dieter. It will not block your MVP — you can launch without the live total and add it in a second pass.
10
🔒 Lock all field reference names — do this before anything else
Typeform
🚨 This is the single most important step in the entire build. Every field name in Typeform must exactly match the variable name you will use in PandaDoc. One typo, one extra space, one capital letter difference = that field will silently not populate in the document. No error message. Just a blank.
Before moving on to PandaDoc or Make, write out every single field reference name in a Google Doc or spreadsheet. You will need this list in PandaDoc.
Use only lowercase letters, numbers and underscores. No spaces, no capital letters, no hyphens.
Example correct format: emp_first_name ✓    Wrong format: Emp First Name ✗ or emp-first-name
Once you move to PandaDoc, do not change any Typeform field names. Changing them later will break the Make mappings and require rebuilding from that point.
Field
Typeform reference name
PandaDoc variable name
Employee first name
emp_first_name
emp_first_name
Employee last name
emp_last_name
emp_last_name
Date of birth
emp_dob
emp_dob
NIB policy number
nib_policy_number
nib_policy_number
Employee email
emp_email
emp_email
Excess selection
emp_excess
emp_excess
Family member 1 name
member1_first_name
member1_first_name
Family member 1 DOB
member1_dob
member1_dob
Get the Typeform embed code: go to Share → Embed in a website → Copy the code. Go back to your WordPress page, open the HTML widget you created earlier, paste the code in. Click Update. Your form is now live on the landing page.
Phase 3

PandaDoc — document templates & e-signature

Tomorrow — Afternoon

PandaDoc is where your NIB forms live. You will upload the two PDFs, place text field variables on every field, and group them into a single e-signature envelope. The field variable names you place here must exactly match your Typeform reference names from Step 10.

11
Create your PandaDoc account
PandaDoc
Go to pandadoc.com and sign up. Choose the Business plan (1 user, $49 USD/month). This plan includes unlimited e-signatures and the API access Make needs.
Complete the onboarding. You don't need to set up a full company profile right now — skip it and go straight to building templates.
12
Upload the NIB Change of Plan PDF and place field variables
PandaDoc
In PandaDoc, go to Templates → New Template → Upload PDF. Upload the NIB Change of Plan form PDF.
The PDF will open in the PandaDoc editor. You will see the blank form with all its fields.
On the right panel, find the Fields tab. You will drag field types onto the PDF to mark where data goes.
For each printed label on the NIB form, drag a Text field from the right panel and drop it on top of the corresponding blank space on the PDF.
When you drop a field, a settings panel appears. Find the Variable name (or "Merge field") input box. Type the exact matching name from your Typeform reference list. Example: for the "Policy number" field on the NIB form, type nib_policy_number
Repeat this for every field in Section 1.0: policy number, name, phone, email, address.
For Section 2.0 tick boxes (add-ons), use a Checkbox field type instead of a Text field. Name them: emp_addon_specialist, emp_addon_gp, emp_addon_dental, etc.
Repeat for each family member row — member1, member2, etc. — using your naming convention exactly.
When all variables are placed, click Save template. Name it: NIB Change of Plan — BestStart.
Take your time on this step. Every field you miss or misname here will result in a blank on the final document. Work through the NIB form systematically — top to bottom, Section 1.0 first, then Section 2.0 row by row. Check each variable name twice before saving.
13
Upload the Direct Debit Authority and place field variables
PandaDoc
Go to Templates → New Template → Upload PDF. Upload the Direct Debit Authority form.
Place a Text field on the policyholder name line. Variable name: emp_first_name and emp_last_name (or create a combined field emp_full_name — just be consistent with Typeform).
The NIB bank account number 0654483 is fixed — you can type it directly as static text in a Text field (not a variable). It never changes.
For the employee's own bank account number: drag a Text field onto that section. In the settings, set the Assigned to dropdown to Signer — this means the employee fills it in themselves when they receive the signing email. Do NOT link this to a Typeform variable. This is intentional for security.
Save this template as: Direct Debit Authority — BestStart.
14
Configure the e-signature envelope and add a completion notification
PandaDoc
When Make creates a document from your template, it will use the PandaDoc API — not the manual envelope workflow. So you don't need to manually bundle documents here. Instead, ensure both templates have the Recipient role set to "Signer" for the employee signature fields.
In each template, find the Recipients settings. Add a recipient role called Employee. Assign all signature and signer-filled fields to this role.
In PandaDoc Settings → Notifications, add your Harness Financial email address to receive a notification every time a document is completed (fully signed).
In PandaDoc Settings → API, generate an API Key. Copy it and keep it somewhere safe — you will need this when setting up Make.
Where to find the API key: PandaDoc dashboard → top-right profile menu → Integrations → API → Generate API Key. This is a long string of letters and numbers. Store it in a secure note — it's like a password.
Phase 4

Make — automation, data routing & full integration

Tomorrow — Evening

Make is the automation engine that connects everything. When an employee submits the Typeform, Make receives all the data and automatically fills in the PandaDoc templates, logs the submission to Google Sheets, and notifies you. You are building one "scenario" — think of it as a recipe that runs every time a form is submitted.

15
Create your Make account and start a new scenario
Make
Go to make.com and sign up. Choose the Core plan ($10.59 USD/month, 10,000 operations).
Once inside, click Create a new scenario. You'll see a blank canvas with a large + in the centre.
Think of this canvas as a flowchart you are building by clicking. Each circle you add is a step in the automation.
16
Add Typeform as the trigger — the starting point
Make
Click the large + on the canvas. A search box appears. Type "Typeform" and select it.
From the list of Typeform actions, choose "Watch Responses" — this means "trigger this scenario every time someone submits the form".
Click Create a connection. You'll be asked to connect your Typeform account. Click Sign in with Typeform and authorise the connection.
Once connected, select your form from the dropdown: BestStart Health Cover — Enrollment.
Click OK. The Typeform trigger is now the first step on your canvas.
To test it: go to your live Typeform and submit a test response (use fake data). Then come back to Make, click Run once (bottom left). Make will fetch that test submission. You'll see all the field data appear in the trigger step — this confirms the connection is working.
When Make fetches your test submission, click the Typeform bubble on the canvas. You'll see all the field data laid out with their reference names. This is what you'll be mapping to PandaDoc in the next steps.
17
Add the PandaDoc module — create the NIB form document
Make
On the canvas, hover over the edge of the Typeform bubble and click the + that appears. This adds the next step in the chain.
Search for "PandaDoc" and select it. From the actions list, choose "Create a Document from a Template".
Click Create a connection. Enter your PandaDoc API key (the one you saved in Step 14). Click Save.
In the Template ID field, click the dropdown and select your NIB Change of Plan — BestStart template.
In the Document Name field, type something like: NIB Enrollment — then click the field reference picker (the small icon) and select the Typeform field emp_first_name and emp_last_name — so each document is named after the employee.
Scroll down to the Tokens / Variables section. This is where you map Typeform fields to PandaDoc variable names.
Click Add item. In the Name column type the PandaDoc variable name exactly: emp_first_name. In the Value column, click the reference picker and select the Typeform field emp_first_name.
Repeat this for every field. Work through your naming reference list one by one. This is methodical, not technical — just match name to name for each row.
For family member fields: Typeform sends family member data as a list (called an array). Before mapping them to PandaDoc, you need to add an Iterator module between the Typeform trigger and the PandaDoc module. Search for "Iterator" in Make — it unpacks the list so each member is processed individually. This is the most technically complex step — set aside 30–45 minutes for it.
To add the Recipient (the employee who will sign): scroll to Recipients in the PandaDoc module. Add a row. Set Role to Employee. For Email, use the Typeform field reference: emp_email. For First Name: emp_first_name. For Last Name: emp_last_name.
Click OK to save this module.
18
Add the PandaDoc module — create the Direct Debit document
Make
Add another PandaDoc module the same way — hover over the edge of the previous step, click +, search PandaDoc, choose Create a Document from a Template.
Select your Direct Debit Authority — BestStart template.
Map the same employee name and policy fields as you did for the NIB form.
Do not map a bank account number variable. Leave it blank — the employee enters their own bank details when they sign.
Add the recipient the same way as Step 17, using emp_email, emp_first_name, emp_last_name.
Click OK.
19
Add Google Sheets logging
Make
First, create a Google Sheet. Open Google Sheets, create a new sheet, and add these column headers in row 1: Employee Name / Email / NIB Policy Number / Pricing Tier / Family Members / Monthly Total / Submission Date / Status.
Back in Make, add another module after the PandaDoc step. Search "Google Sheets". Choose "Add a Row".
Connect your Google account when prompted.
Select your spreadsheet and the correct sheet tab from the dropdowns.
Map each column to the matching Typeform field. Example: Employee Name → emp_first_name + emp_last_name. Email → emp_email. And so on.
Click OK.
20
Add an email notification to Harness Financial
Make
Add one more module. Search "Email" and choose "Send an Email" (Make's built-in email module).
Set To: beststart@harnessfinancial.co.nz
Set Subject: New BestStart enrollment — then add the emp_first_name and emp_last_name fields so each email is personalised.
In the Body, write a short message: "A new enrollment has been submitted. Please log in to PandaDoc, review the pre-filled documents, and send the e-signature envelope." Include the employee name, email, and number of family members from the Typeform fields.
Click OK.
21
Configure error handling so you are notified of failures
Make
In Make, click on the first module (Typeform trigger). Look for a small wrench icon or right-click the module — choose Add error handler.
From the error handler options, choose Break. This tells Make to stop the scenario and save the failed run for review if anything goes wrong.
In Make's main settings (left sidebar → Notifications), enter your email address to receive alerts when a scenario fails.
Failed runs are stored for 30 days in Scenario History — you can reprocess them manually once the issue is fixed.
Error alerts only catch hard failures — a complete crash or timeout. They will NOT catch a silent failure where data is sent but a misnamed field leaves a blank in the document. That's why the Harness Financial admin review of the PandaDoc draft before sending is non-negotiable.
22
Name, save and activate the scenario
Make
At the top of the canvas, click the scenario name and rename it: BestStart — Enrollment Submission.
At the bottom left, click Save (floppy disk icon).
Toggle the Scheduling switch to ON. Set it to run Immediately (triggered by each new Typeform submission), not on a schedule.
Your scenario is now live and waiting for the first real submission.
Phase 5

Testing — run the full submission matrix before go-live

Tomorrow — Final step

Do not show this to BestStart until you have run all four tests below and verified the outputs. This is not optional — it is the step that guarantees the integration works before a real employee's data goes through it.

23
Run four test submissions and verify every output
Typeform
Test 1 — Employee only (1 member): Submit the form with just the employee's details, no family members. Open PandaDoc — verify all Section 1.0 fields are populated. Open Google Sheets — verify a new row was written. Check your inbox for the notification email.
Test 2 — Employee + 2 family members (3 total): Submit again with 2 family members. Open PandaDoc — verify both family member rows in Section 2.0 are populated with the correct data in the correct rows.
Test 3 — Employee + 4 family members (5 total): Verify the iterator is correctly unpacking 5 members and placing each one in the right row.
Test 4 — Maximum load (9 family members, 10 total): Submit with the maximum family size. Verify every single row. This is your stress test.
🚨 For each test, manually open the generated PandaDoc document and read every single field. Do not rely on Make showing "success" — that only means data was sent. You need to confirm the data landed in the right place on the right form. A blank field or a member in the wrong row means something needs fixing before go-live.
All employee fields populated correctly in NIB form Section 1.0
All family member rows populated in correct order in Section 2.0
Excess selection and add-on tick boxes showing correctly
Direct Debit Authority populated with employee name and NIB bank code
Employee bank account field is blank (correct — employee fills this)
Google Sheet row written with all correct data
Harness Financial notification email received with correct details
All 4 family-size tests passing (1 / 3 / 5 / 9 members)
End-to-end sign-off test completed with Dieter and Joshua