``` ```

This page is private

Access requires a valid link.

```

School Fund Planner

Calculate required savings for school fees, accounting for inflation and investment returns.

Calculator

Today's prices
Comma-separated for multiple children

Sensitivity Analysis

Cash Flow Schedule

Year-by-Year Breakdown

Year Contribution Fee Payment Investment Return End Balance

Mathematical Explanation

The Core Idea

Money has time value: £1 today is worth more than £1 tomorrow because you can invest it and earn a return. This means we can't directly add or compare amounts at different points in time—we need to move them to the same point first.

Compounding (moving forward in time): If you have £100 today and earn 5% per year, in one year you have:

$$100 \times (1 + 0.05) = £105$$

In two years:

$$100 \times (1.05)^2 = £110.25$$

Discounting (moving backward in time): If you need £100 in one year, how much must you set aside today at 5%?

$$\frac{100}{1.05} = £95.24$$

This is the present value of that future £100.

The School Fee Problem

Let's use concrete numbers:

  • Annual fee \(A = £10{,}000\) (today's prices)
  • Fee inflation \(g = 3\%\) per year
  • Investment return \(r = 5\%\) per year
  • School duration \(n = 7\) years
  • Years until school starts \(Y = 5\) years
  • One child (\(k = 1\))

Step 1: What Are the Actual Fee Amounts?

Fees grow with inflation from today. If school starts in year 5, the fees for each school year are:

School Year Calendar Year Fee Amount
1stYear 5\(A(1+g)^5 = £11{,}593\)
2ndYear 6\(A(1+g)^6 = £11{,}941\)
3rdYear 7\(A(1+g)^7 = £12{,}299\)
.........
7thYear 11\(A(1+g)^{11} = £13{,}842\)

In general, a child starting in year \(Y\) pays a fee in their school year \(t\) (where \(t = 0, 1, 2, \ldots, n-1\)) of:

$$\text{Fee}_{Y,t} = A(1+g)^{Y+t}$$

Step 2: Present Value of All Fees at Today

We want to know the total value of all fees in today's money. This is our "target" that we need to fund.

For the fee paid in calendar year \(Y + t\), we discount it back to today by dividing by \((1+r)^{Y+t}\):

$$PV_t = \frac{A(1+g)^{Y+t}}{(1+r)^{Y+t}} = A \left(\frac{1+g}{1+r}\right)^{Y+t}$$

The total present value is the sum over all school years. Let's write out the terms explicitly:

$$PV_{\text{child}} = A \left(\frac{1+g}{1+r}\right)^{Y} + A \left(\frac{1+g}{1+r}\right)^{Y+1} + A \left(\frac{1+g}{1+r}\right)^{Y+2} + \cdots + A \left(\frac{1+g}{1+r}\right)^{Y+n-1}$$

Factoring out \(A \left(\frac{1+g}{1+r}\right)^{Y}\):

$$PV_{\text{child}} = A \left(\frac{1+g}{1+r}\right)^{Y} \left[ 1 + \left(\frac{1+g}{1+r}\right) + \left(\frac{1+g}{1+r}\right)^{2} + \cdots + \left(\frac{1+g}{1+r}\right)^{n-1} \right]$$

The bracketed term is a geometric series with first term 1, common ratio \(\rho = \frac{1+g}{1+r}\), and \(n\) terms. The sum formula gives:

$$1 + \rho + \rho^2 + \cdots + \rho^{n-1} = \frac{1 - \rho^n}{1 - \rho}$$

So the present value for one child is:

$$PV_{\text{child}} = A \left(\frac{1+g}{1+r}\right)^{Y} \times \frac{1 - \left(\frac{1+g}{1+r}\right)^{n}}{1 - \frac{1+g}{1+r}}$$

With our example numbers, \(\rho = \frac{1.03}{1.05} \approx 0.981\):

$$PV_{\text{child}} = 10{,}000 \times (0.981)^5 \times \frac{1 - (0.981)^7}{1 - 0.981} = 10{,}000 \times 0.908 \times 6.77 = £61{,}450$$

For multiple children starting in different years, we calculate each child's present value separately and sum them:

$$PV_{\text{total}} = \sum_{i} PV_{\text{child } i}$$

Mode 1: Save Only Before School Starts

You want to make equal annual contributions of \(C\) for \(Y_{\min}\) years (until the first child starts), with contributions made at the end of each year.

The present value of these contributions, written out term by term:

$$PV_{\text{contributions}} = \frac{C}{(1+r)^1} + \frac{C}{(1+r)^2} + \frac{C}{(1+r)^3} + \cdots + \frac{C}{(1+r)^{Y_{\min}}}$$

Factoring out \(C\):

$$PV_{\text{contributions}} = C \left[ \frac{1}{1+r} + \frac{1}{(1+r)^2} + \cdots + \frac{1}{(1+r)^{Y_{\min}}} \right]$$

This is a geometric series with first term \(\frac{1}{1+r}\), ratio \(\frac{1}{1+r}\), and \(Y_{\min}\) terms. Using the sum formula:

$$PV_{\text{contributions}} = C \times \frac{1 - (1+r)^{-Y_{\min}}}{r}$$

The term \(\frac{1 - (1+r)^{-Y}}{r}\) is called the present value annuity factor.

Setting contributions equal to fees and solving for \(C\):

$$C \times \frac{1 - (1+r)^{-Y_{\min}}}{r} = PV_{\text{total}}$$
$$C = PV_{\text{total}} \times \frac{r}{1 - (1+r)^{-Y_{\min}}}$$

With our example (5 years of contributions):

$$\frac{1 - (1.05)^{-5}}{0.05} = \frac{1 - 0.784}{0.05} = 4.33$$
$$C = \frac{61{,}450}{4.33} = £14{,}190 \text{ per year}$$

Mode 2: Continue Contributing During School

Now you contribute from today until the last child finishes school. If the last child starts in year \(Y_{\max}\) and school lasts \(n\) years, you contribute for \(Y_{\max} + n\) years total.

The formula is the same, just with more years:

$$C = PV_{\text{total}} \times \frac{r}{1 - (1+r)^{-(Y_{\max}+n)}}$$

With our example (5 + 7 = 12 years of contributions):

$$\frac{1 - (1.05)^{-12}}{0.05} = \frac{1 - 0.557}{0.05} = 8.86$$
$$C = \frac{61{,}450}{8.86} = £6{,}935 \text{ per year}$$

This is roughly half the Mode 1 amount, which makes sense—you're contributing for roughly twice as many years.

Key Insight

The ratio \(\rho = \frac{1+g}{1+r}\) determines how fees grow relative to your investment returns:

  • If \(g < r\) (so \(\rho < 1\)): Fees grow slower than investments—saving gets easier over time
  • If \(g > r\) (so \(\rho > 1\)): Fees outpace investments—you're fighting an uphill battle
  • If \(g = r\) (so \(\rho = 1\)): They balance out, and each year's fee has the same present value

Multiple Children at Different Times

When children start at different years, each generates their own stream of fee payments. We calculate each child's present value separately and sum them. For example:

  • Child A starts in year 5: \(PV_A = £61{,}450\)
  • Child B starts in year 8: \(PV_B = £56{,}730\)
  • Total: \(PV_{\text{total}} = £118{,}180\)

Note that Child B's fees have lower present value because they're further in the future (more discounting).

``` tBrains Mono', monospace; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-serif); font-size: 18px; line-height: 1.7; color: var(--text-primary); background: var(--bg-primary); min-height: 100vh; } /* Access Gate */ #access-gate { position: fixed; inset: 0; background: var(--bg-primary); display: flex; align-items: center; justify-content: center; z-index: 1000; } .gate-content { text-align: center; padding: 2rem; } .gate-content h1 { font-size: 1.5rem; font-weight: 400; margin-bottom: 1rem; color: var(--text-secondary); } .gate-content p { color: var(--text-muted); font-size: 1rem; } /* Main App */ #app { display: none; max-width: 1100px; margin: 0 auto; padding: 2rem 1.5rem 4rem; } #app.visible { display: block; } header { margin-bottom: 3rem; padding-bottom: 2rem; border-bottom: 1px solid var(--border); } header h1 { font-size: 2.2rem; font-weight: 600; letter-spacing: -0.02em; margin-bottom: 0.5rem; } header p { color: var(--text-secondary); font-size: 1.1rem; } /* Sections */ section { margin-bottom: 3rem; } section h2 { font-size: 1.4rem; font-weight: 600; margin-bottom: 1.5rem; color: var(--accent); } /* Calculator Card */ .calculator-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 2rem; box-shadow: 0 2px 8px var(--shadow); } .input-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } .input-group { display: flex; flex-direction: column; } .input-group label { font-size: 0.9rem; color: var(--text-secondary); margin-bottom: 0.5rem; } .input-group input { font-family: var(--font-mono); font-size: 1rem; padding: 0.75rem 1rem; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-primary); transition: border-color 0.2s, box-shadow 0.2s; } .input-group input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-light); } .input-group .hint { font-size: 0.8rem; color: var(--text-muted); margin-top: 0.3rem; } .toggle-group { display: flex; align-items: center; gap: 1rem; padding: 1rem 0; border-top: 1px solid var(--border); margin-top: 0.5rem; } .toggle-group label { font-size: 1rem; color: var(--text-primary); cursor: pointer; } /* Custom Toggle Switch */ .toggle-switch { position: relative; width: 52px; height: 28px; flex-shrink: 0; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .toggle-slider { position: absolute; cursor: pointer; inset: 0; background: var(--border); border-radius: 28px; transition: 0.3s; } .toggle-slider:before { position: absolute; content: ""; height: 22px; width: 22px; left: 3px; bottom: 3px; background: white; border-radius: 50%; transition: 0.3s; box-shadow: 0 1px 3px rgba(0,0,0,0.2); } .toggle-switch input:checked + .toggle-slider { background: var(--accent); } .toggle-switch input:checked + .toggle-slider:before { transform: translateX(24px); } .btn { font-family: var(--font-serif); font-size: 1rem; padding: 0.875rem 2rem; border: none; border-radius: 4px; cursor: pointer; transition: all 0.2s; } .btn-primary { background: var(--accent); color: white; } .btn-primary:hover { background: #234a3c; } .btn-secondary { background: var(--bg-secondary); color: var(--text-primary); border: 1px solid var(--border); } .btn-secondary:hover { background: var(--border); } .button-row { display: flex; gap: 1rem; flex-wrap: wrap; } /* Results */ .results-summary { background: var(--accent-light); border-left: 4px solid var(--accent); padding: 1.5rem; margin: 2rem 0; border-radius: 0 4px 4px 0; } .results-summary h3 { font-size: 1rem; font-weight: 600; color: var(--accent); margin-bottom: 0.5rem; } .results-summary .amount { font-family: var(--font-mono); font-size: 2rem; font-weight: 500; color: var(--text-primary); } .results-summary .details { font-size: 0.95rem; color: var(--text-secondary); margin-top: 0.5rem; } /* Chart */ .chart-container { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 1.5rem; margin: 2rem 0; } .chart-wrapper { position: relative; height: 400px; } /* Cash Flow Table */ .table-container { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; margin: 2rem 0; } .table-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; background: var(--bg-secondary); border-bottom: 1px solid var(--border); } .table-header h3 { font-size: 1rem; font-weight: 600; } .table-scroll { max-height: 400px; overflow-y: auto; } table { width: 100%; border-collapse: collapse; font-size: 0.9rem; } thead { position: sticky; top: 0; background: var(--bg-primary); } th, td { padding: 0.75rem 1rem; text-align: right; border-bottom: 1px solid var(--border); } th:first-child, td:first-child { text-align: left; } th { font-weight: 600; color: var(--text-secondary); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.05em; } td { font-family: var(--font-mono); font-size: 0.85rem; } tr:hover td { background: var(--bg-secondary); } .positive { color: var(--accent); } .negative { color: #b54848; } /* Math Explanation */ .explanation { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 2rem; } .explanation h3 { font-size: 1.2rem; font-weight: 600; margin: 2rem 0 1rem; color: var(--text-primary); } .explanation h3:first-child { margin-top: 0; } .explanation p { margin-bottom: 1rem; color: var(--text-secondary); } .explanation .katex-display { margin: 1.5rem 0; overflow-x: auto; } .explanation ul { margin: 1rem 0 1rem 1.5rem; color: var(--text-secondary); } .explanation li { margin-bottom: 0.5rem; } .formula-box { background: var(--bg-secondary); border-radius: 6px; padding: 1.5rem; margin: 1.5rem 0; overflow-x: auto; } /* Collapsible */ .collapsible-trigger { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; user-select: none; } .collapsible-trigger::before { content: '▶'; font-size: 0.7rem; transition: transform 0.2s; } .collapsible-trigger.open::before { transform: rotate(90deg); } .collapsible-content { display: none; padding-top: 1rem; } .collapsible-content.open { display: block; } /* Responsive */ @media (max-width: 600px) { body { font-size: 16px; } #app { padding: 1rem; } header h1 { font-size: 1.8rem; } .calculator-card { padding: 1.25rem; } .input-grid { grid-template-columns: 1fr; } .chart-wrapper { height: 300px; } .results-summary .amount { font-size: 1.5rem; } } ```

This page is private

Access requires a valid link.

```

School Fund Planner

Calculate required savings for school fees, accounting for inflation and investment returns.

Calculator

Today's prices
Comma-separated for multiple children

Sensitivity Analysis

Cash Flow Schedule

Year-by-Year Breakdown

Year Contribution Fee Payment Investment Return End Balance

Mathematical Explanation

The Core Idea

Money has time value: £1 today is worth more than £1 tomorrow because you can invest it and earn a return. This means we can't directly add or compare amounts at different points in time—we need to move them to the same point first.

Compounding (moving forward in time): If you have £100 today and earn 5% per year, after one year you have:

$$100 \times (1 + 0.05) = £105$$

Discounting (moving backward in time): If you need £100 in one year, how much must you set aside today at 5%?

$$\frac{100}{1.05} = £95.24$$

This is the present value of that future £100.

Present Value of School Fees

Fees grow with inflation. For a child starting school in year \(Y\), the fee in school year \(t\) (where \(t = 0, 1, 2, \ldots, n-1\)) is:

$$\text{Fee}_t = A(1+g)^t$$

where \(A\) is the annual fee in today's prices, \(g\) is the inflation rate, and \(n\) is the number of school years.

The present value today of all fees for one child starting in year \(Y\) is:

$$PV_{\text{child}} = \sum_{t=0}^{n-1} \frac{A(1+g)^t}{(1+r)^{Y+t}} = \frac{A}{(1+r)^Y} \sum_{t=0}^{n-1} \left(\frac{1+g}{1+r}\right)^t$$

where \(r\) is the investment return rate. For multiple children, we sum their individual present values:

$$PV_{\text{total}} = \sum_{i} PV_{\text{child } i}$$

Mode 1: Save Only Before School

If you contribute \(C\) at the end of each year for \(Y_{\min}\) years (until the first child starts), the present value of your contributions equals:

$$PV_{\text{contributions}} = C \times \frac{1 - (1+r)^{-Y_{\min}}}{r}$$

Setting this equal to the total fees and solving for \(C\):

$$C = \frac{PV_{\text{total}}}{\dfrac{1 - (1+r)^{-Y_{\min}}}{r}}$$

Mode 2: Continue Contributing During School

If you contribute until the last child finishes (year \(Y_{\max} + n\)), the formula becomes:

$$C = \frac{PV_{\text{total}}}{\dfrac{1 - (1+r)^{-(Y_{\max}+n)}}{r}}$$

This results in lower contributions since you're spreading payments over a longer period.

Key Insight

The ratio \(\frac{1+g}{1+r}\) determines how fees grow relative to your investment returns:

  • If \(g < r\): Fees grow slower than investments—saving gets easier over time
  • If \(g > r\): Fees outpace investments—you're fighting an uphill battle
  • If \(g = r\): They balance out, and each year's fee has the same present value
```