START

6 tips: investeren in vakantiewoningen

  • Begin slim: praktische eerste stappen voor investeren in een vakantiewoning

  • Voorkom dure fouten: fouten die beginners vaak maken vermijden

  • Waar op letten: slimme criteria voor locatie, rendement en beheer

Praktische tips en fouten

"calendar page" "clock showing 90" "two people icons"

6 tips

Dagen

"calendar page" "clock showing 90" "two people icons"

90

Min. per dag

"calendar page" "clock showing 90" "two people icons"

100

Deelnemers

"calendar page" "clock showing 90" "two people icons"

2.147

Merken gebouwd

<!DOCTYPE html>

<html lang="nl">

<head>

<meta charset="UTF-8" />

<title>Overwaarde Check | BNB Verhuurcursus</title>

<meta name="viewport" content="width=device-width, initial-scale=1" />

<style>

:root {

--primary: #1f7f5c;

--accent: #ff7a1a;

--bg: #f8f7f4;

--text: #222c2e;

--muted: #6a7576;

--error: #c0392b;

--warning: #d35400;

--card-bg: #ffffff;

--shadow: 0 14px 40px rgba(0,0,0,0.08);

}

* { box-sizing: border-box; }

body {

margin: 0;

font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;

background: var(--bg);

color: var(--text);

line-height: 1.5;

}

header {

background: #ffffff;

padding: 12px 18px;

display: flex;

align-items: center;

justify-content: space-between;

border-bottom: 1px solid #e7ebe7;

gap: 14px;

}

.logo-wrap {

display: flex;

align-items: center;

gap: 12px;

min-width: 0;

}

.logo {

height: 44px;

width: auto;

object-fit: contain;

flex: 0 0 auto;

}

.brand-text {

font-weight: 800;

letter-spacing: 0.06em;

font-size: 13px;

text-transform: uppercase;

color: var(--primary);

white-space: nowrap;

overflow: hidden;

text-overflow: ellipsis;

max-width: 260px;

}

.tagline {

font-size: 12px;

color: var(--muted);

text-align: right;

max-width: 420px;

}

main {

padding: 18px 12px 28px;

display: flex;

justify-content: center;

}

.tool-container {

width: 100%;

max-width: 1040px;

background: var(--card-bg);

border-radius: 22px;

box-shadow: var(--shadow);

padding: 22px;

display: grid;

grid-template-columns: minmax(0, 3fr) minmax(0, 2.2fr);

gap: 22px;

}

.badge {

display: inline-flex;

align-items: center;

padding: 4px 10px;

border-radius: 999px;

background: rgba(31, 127, 92, 0.08);

color: var(--primary);

font-size: 11px;

font-weight: 900;

text-transform: uppercase;

letter-spacing: 0.08em;

margin-bottom: 10px;

}

h1 {

margin: 0;

font-size: 26px;

color: var(--primary);

}

.intro {

margin: 8px 0 0;

font-size: 14px;

color: #4c5a5a;

max-width: 640px;

}

.stepper {

display: flex;

align-items: center;

gap: 8px;

margin-top: 14px;

font-size: 12px;

text-transform: uppercase;

letter-spacing: 0.12em;

color: #7b8787;

}

.step-indicator { display: flex; gap: 4px; }

.step-dot {

width: 8px; height: 8px; border-radius: 999px;

background: #dcdedb; transition: all 0.2s ease;

}

.step-dot.active { width: 22px; background: var(--accent); }

.form-section { margin-top: 18px; }

.hidden { display: none !important; }

.field-group { margin-bottom: 14px; }

label {

display: block;

font-size: 13px;

font-weight: 400;

margin-bottom: 4px;

}

label span.optional {

font-weight: 700;

font-size: 11px;

color: #8b9494;

margin-left: 6px;

}

.help-text {

font-size: 11px;

color: #8b9494;

margin-top: 3px;

}

input[type="text"] {

width: 100%;

border-radius: 999px;

border: 1px solid #d8ddd8;

padding: 10px 14px;

font-size: 14px;

outline: none;

transition: border-color 0.2s ease, box-shadow 0.2s ease;

background: #fbfbfa;

}

input[type="text"]:focus {

border-color: var(--accent);

box-shadow: 0 0 0 1px rgba(255, 122, 26, 0.35);

background: #ffffff;

}

.radio-group {

display: flex;

flex-wrap: wrap;

gap: 8px;

margin-top: 4px;

}

.radio-pill {

position: relative;

cursor: pointer;

border-radius: 999px;

border: 1px solid #d8ddd8;

padding: 8px 12px;

font-size: 12px;

color: #4a5656;

user-select: none;

transition: all 0.18s ease;

background: #fbfbfa;

font-weight: 700;

}

.radio-pill input {

position: absolute;

opacity: 0;

pointer-events: none;

}

.radio-pill.selected {

border-color: var(--primary);

background: rgba(31, 127, 92, 0.10);

color: var(--primary);

font-weight: 900;

}

.button-row {

display: flex;

justify-content: space-between;

align-items: center;

gap: 10px;

margin-top: 16px;

}

.button-row-right {

margin-left: auto;

display: flex;

gap: 10px;

}

button {

border-radius: 999px;

border: none;

padding: 10px 18px;

font-size: 14px;

cursor: pointer;

display: inline-flex;

align-items: center;

gap: 6px;

font-weight: 900;

transition: all 0.18s ease;

white-space: nowrap;

}

.btn-primary {

background: var(--accent);

color: #ffffff;

}

.btn-primary:hover {

filter: brightness(1.05);

transform: translateY(-1px);

box-shadow: 0 6px 18px rgba(255, 122, 26, 0.35);

}

.btn-ghost {

background: transparent;

color: #5d6869;

border: 1px solid #d8ddd8;

font-weight: 900;

}

.btn-ghost:hover { background: #f0f1ed; }

.disclaimer {

font-size: 10px;

color: #9ca5a4;

margin-top: 10px;

max-width: 540px;

}

.results-panel {

border-radius: 20px;

border: 1px solid #e1e4df;

background: linear-gradient(145deg, #ffffff, #f4f1ec);

padding: 16px;

display: flex;

flex-direction: column;

gap: 10px;

}

.results-title {

font-size: 15px;

font-weight: 900;

color: var(--primary);

margin-bottom: 2px;

}

.stat-grid {

display: grid;

grid-template-columns: repeat(2, minmax(0, 1fr));

gap: 10px;

margin-top: 8px;

}

.stat-card {

border-radius: 16px;

background: rgba(255,255,255,0.92);

padding: 10px 12px;

border: 1px solid #e1e4df;

}

.stat-label {

font-size: 11px;

text-transform: uppercase;

letter-spacing: 0.08em;

color: #8a9694;

font-weight: 900;

}

.stat-value {

font-size: 18px;

font-weight: 1000;

margin-top: 2px;

color: var(--primary);

}

.stat-sub {

font-size: 11px;

color: #7f8988;

margin-top: 1px;

}

.notice {

border-radius: 12px;

padding: 8px 10px;

font-size: 12px;

display: flex;

gap: 8px;

align-items: flex-start;

font-weight: 750;

}

.notice.error {

background: rgba(192, 57, 43, 0.07);

border: 1px solid rgba(192, 57, 43, 0.4);

color: #7f2319;

}

.notice.warning {

background: rgba(211, 84, 0, 0.06);

border: 1px solid rgba(211, 84, 0, 0.35);

color: #7b3d02;

}

.notice.info {

background: rgba(31, 127, 92, 0.07);

border: 1px solid rgba(31, 127, 92, 0.4);

color: var(--primary);

}

.notice-icon {

font-size: 15px;

line-height: 1;

margin-top: 2px;

font-weight: 900;

}

.notice-text { flex: 1; }

.motivation-panel {

margin-top: 10px;

border-radius: 16px;

padding: 12px;

background: #ffffff;

border: 1px solid rgba(31, 127, 92, 0.22);

}

.motivation-title {

font-weight: 1000;

color: var(--primary);

margin: 0 0 6px 0;

font-size: 13px;

text-transform: uppercase;

letter-spacing: 0.08em;

}

.motivation-text {

margin: 0;

font-size: 13px;

color: #2d3a3a;

font-weight: 750;

}

.motivation-accent {

display:inline-block;

margin-top: 8px;

padding: 6px 10px;

border-radius: 999px;

background: rgba(255, 122, 26, 0.14);

color: #7a3a02;

font-size: 12px;

font-weight: 900;

}

@media (max-width: 900px) {

.tool-container {

grid-template-columns: 1fr;

padding: 16px;

border-radius: 18px;

}

header { flex-direction: column; align-items: flex-start; }

.tagline { text-align: left; max-width: none; }

}

@media (max-width: 640px) {

main { padding: 14px 10px 22px; }

h1 { font-size: 22px; }

.intro { font-size: 13px; }

.button-row { flex-direction: column; align-items: stretch; }

.button-row-right { margin-left: 0; width: 100%; }

button { width: 100%; justify-content: center; }

.radio-pill { flex: 1 1 100%; width: 100%; text-align: center; }

.stat-grid { grid-template-columns: 1fr; }

}

</style>

</head>

<body>

<header>

<div class="logo-wrap">

<img class="logo" id="bnbLogo" src="LOGO_URL_HIER" alt="BNB Verhuurcursus logo" onerror="this.style.display='none';" />

<div class="brand-text">BNBVERHUURCURSUS.NL</div>

</div>

<div class="tagline">Indicatieve overwaarde check voor recreatief vastgoed – geen financieel advies</div>

</header>

<main>

<div class="tool-container">

<div>

<div class="badge">Overwaarde check</div>

<h1>Check jouw overwaarde & mogelijke ruimte</h1>

<p class="intro">

Vul je gegevens in en krijg een indicatie van je overwaarde en mogelijke extra hypotheekruimte.

We doen geen hypotheektoets en geven geen financieel advies.

</p>

<div class="stepper">

<span>Stap</span>

<div class="step-indicator">

<div class="step-dot active" data-step-dot="1"></div>

<div class="step-dot" data-step-dot="2"></div>

</div>

</div>

<form id="overwaardeForm">

<div class="form-section" data-step="1">

<div class="field-group">

<label for="woningwaarde">Geschatte huidige marktwaarde woning</label>

<input type="text" id="woningwaarde" inputmode="numeric" autocomplete="off" placeholder="Bijv. 400000 of 400.000" required />

<div class="help-text">Punten, komma’s en spaties worden automatisch goed gelezen.</div>

</div>

<div class="field-group">

<label for="postcode">Postcode & huisnummer <span class="optional">(optioneel)</span></label>

<input type="text" id="postcode" autocomplete="off" placeholder="Bijv. 1234AB 10" />

</div>

<div class="button-row">

<span></span>

<div class="button-row-right">

<button type="button" class="btn-primary" id="btnToStep2" onclick="window.__bnbNextStep && window.__bnbNextStep(); return false;">Volgende stap →</button>

</div>

</div>

</div>

<div class="form-section hidden" data-step="2">

<div class="field-group">

<label for="hypotheek">Totale openstaande hypotheek op deze woning</label>

<input type="text" id="hypotheek" inputmode="numeric" autocomplete="off" placeholder="Bijv. 250000 of 250.000" required />

<div class="help-text">Tel alle hypotheken op deze woning bij elkaar op.</div>

</div>

<div class="field-group">

<label for="leeftijd">Leeftijd</label>

<input type="text" id="leeftijd" inputmode="numeric" autocomplete="off" placeholder="Bijv. 42" required />

<div class="help-text">Alleen om het resultaat beter te duiden rond looptijd en pensioen.</div>

</div>

<div class="field-group">

<label>Heb je op dit moment een negatieve BKR-registratie (achterstandscodering)?</label>

<div class="radio-group" id="bkrGroup">

<label class="radio-pill"><input type="radio" name="bkr" value="nee" /> Geen negatieve BKR</label>

<label class="radio-pill"><input type="radio" name="bkr" value="ja" /> Ja, negatieve BKR</label>

<label class="radio-pill"><input type="radio" name="bkr" value="onbekend" /> Weet ik niet</label>

</div>

<div class="help-text">Negatieve BKR kan financiering bij banken blokkeren.</div>

</div>

<div class="field-group">

<label>Heb je consumptieve schulden? (lening, krediet, roodstand, private lease)</label>

<div class="radio-group" id="schuldenGroup">

<label class="radio-pill"><input type="radio" name="schulden" value="geen" /> Geen</label>

<label class="radio-pill"><input type="radio" name="schulden" value="beperkt" /> Ja, beperkt (&lt; €10.000)</label>

<label class="radio-pill"><input type="radio" name="schulden" value="aanzienlijk" /> Ja, aanzienlijk (&ge; €10.000)</label>

</div>

<div class="help-text">Schulden verlagen bijna altijd je leencapaciteit.</div>

</div>

<div class="field-group">

<label for="inkomen">Bruto jaarinkomen huishouden</label>

<input type="text" id="inkomen" inputmode="numeric" autocomplete="off" placeholder="Bijv. 75000 of 75.000" / required>

<div class="help-text">Banken kijken altijd naar inkomen om te bepalen of maandlasten draagbaar zijn. Zonder (voldoende) inkomen zijn mogelijkheden meestal beperkt.</div>

</div>

<div class="button-row">

<button type="button" class="btn-ghost" id="btnBackToStep1" onclick="window.__bnbPrevStep && window.__bnbPrevStep(); return false;">← Terug</button>

<div class="button-row-right">

<button type="button" class="btn-primary" id="btnCalc" onclick="window.__bnbCalc && window.__bnbCalc(); return false;">Resultaat bekijken</button>

</div>

</div>

<div class="disclaimer">

Dit is een indicatie op basis van jouw invoer. Banken bepalen uiteindelijk de mogelijkheden.

</div>

</div>

</form>

</div>

<div>

<div class="results-panel" id="resultsPanel">

<div class="results-title">Jouw indicatie verschijnt hier</div>

<p style="font-size:13px; margin:4px 0 6px; color:#6b7573;">

Vul links je gegevens in en klik op Resultaat bekijken.

</p>

<ul style="margin:0 0 10px 18px; padding:0; font-size:12px; color:#6b7573;">

<li>Geschatte overwaarde</li>

<li>Indicatieve extra hypotheekruimte (90%-norm)</li>

<li>Aandachtspunten rond BKR, schulden en leeftijd</li>

</ul>

<div id="dynamicResults" class="hidden">

<div id="bkrNoticeContainer"></div>

<div id="schuldenNoticeContainer"></div>

<div id="leeftijdNoticeContainer"></div>

<div class="stat-grid">

<div class="stat-card">

<div class="stat-label">Geschatte overwaarde</div>

<div class="stat-value" id="overwaardeValue">–</div>

<div class="stat-sub" id="overwaardeSub"></div>

</div>

<div class="stat-card">

<div class="stat-label">Indicatieve extra hypotheekruimte</div>

<div class="stat-value" id="ruimteValue">–</div>

<div class="stat-sub" id="ruimteSub"></div>

</div>

</div>

<div id="inkomenNoticeContainer" style="margin-top:8px;"></div>

<div class="motivation-panel" id="motivationPanel">

<div class="motivation-title">Wat dit betekent</div>

<p class="motivation-text" id="motivationText">–</p>

<div class="motivation-accent" id="motivationAccent">–</div>

<p class="motivation-text" id="whatsAppNudge" style="margin-top:10px;font-weight:400;"">

Wil je weten hoe je deze overwaarde slim inzet voor jouw eerste vakantiewoning? Stuur Nikki een berichtje op WhatsApp.

</p>

</div>

<div class="disclaimer">

Dit is geen financieel advies en geen aanbod voor een hypotheek. De uitkomsten zijn benaderingen op basis van jouw invoer en een eenvoudige 90%-norm.

</div>

<div class="disclaimer" style="margin-top:6px;">

De ingevulde gegevens worden niet opgeslagen, niet doorgestuurd en alleen lokaal in je browser gebruikt om deze indicatie te tonen.

</div>

</div>

</div>

</div>

</div>

</main>

<script>

(function() {

function parseMoney(input) {

if (!input) return NaN;

const cleaned = String(input).trim()

.replace(/\s+/g, "")

.replace(/\./g, "")

.replace(/,/g, "");

const n = Number(cleaned);

return Number.isFinite(n) ? n : NaN;

}

function parseIntSafe(input) {

if (!input) return NaN;

const cleaned = String(input).trim()

.replace(/\s+/g, "")

.replace(/\./g, "")

.replace(/,/g, "");

const n = Number(cleaned);

return Number.isFinite(n) ? Math.floor(n) : NaN;

}

function formatEuro(amount) {

if (isNaN(amount)) return "–";

return amount.toLocaleString("nl-NL", {

style: "currency",

currency: "EUR",

maximumFractionDigits: 0

});

}

function createNotice(type, text) {

const div = document.createElement("div");

div.className = "notice " + type;

const icon = document.createElement("div");

icon.className = "notice-icon";

icon.textContent = type === "error" ? "!" : type === "warning" ? "⚠" : "ℹ";

const body = document.createElement("div");

body.className = "notice-text";

body.textContent = text;

div.appendChild(icon);

div.appendChild(body);

return div;

}

function incomeBand(income) {

if (Number.isNaN(income) || income <= 0) return "invalid";

if (income < 1000) return "invalid";

if (income < 25000) return "lt25";

if (income < 35000) return "25to35";

if (income < 40000) return "35to40";

if (income < 55000) return "40to55";

return "gt55";

}

function updateIncomeNotice(container, band) {

container.innerHTML = "";

if (band === "invalid") {

container.appendChild(createNotice(

"warning",

"Vul je bruto jaarinkomen in als heel getal, bijvoorbeeld 35000 of 35.000. Banken kijken altijd naar inkomen om te bepalen of maandlasten draagbaar zijn."

));

return;

}

if (band === "lt25") {

container.appendChild(createNotice(

"warning",

"Op basis van het opgegeven inkomen is het in de praktijk meestal lastig om extra hypotheekruimte te krijgen. Banken hanteren minimale inkomenseisen."

));

return;

}

if (band === "25to35") {

container.appendChild(createNotice(

"info",

"Met dit inkomensniveau zijn de mogelijkheden sterk afhankelijk van je leeftijd, vaste lasten en totale financiële situatie. In sommige gevallen is er ruimte, maar dit vraagt maatwerk."

));

return;

}

if (band === "35to40") {

container.appendChild(createNotice(

"info",

"Met dit inkomensniveau zien we dat er in veel situaties mogelijkheden zijn om een deel van de overwaarde op te nemen. De exacte ruimte hangt af van leeftijd, lasten en eventuele schulden."

));

return;

}

if (band === "40to55") {

container.appendChild(createNotice(

"info",

"Met dit inkomensniveau zijn er in de praktijk vaak goede mogelijkheden om overwaarde op te nemen, mits de rest van de financiële situatie klopt."

));

return;

}

container.appendChild(createNotice(

"info",

"Met dit inkomensniveau zijn er doorgaans ruime mogelijkheden om overwaarde op te nemen. In deze inkomenscategorie zien we vaak dat mensen sneller stappen kunnen zetten, zeker wanneer er ook overwaarde beschikbaar is."

));

}

function updateAgeNotice(container, age) {

container.innerHTML = "";

if (Number.isNaN(age) || age <= 0) return;

if (age >= 67) {

container.appendChild(createNotice(

"warning",

"Vanaf deze leeftijd werken banken vaak met strengere voorwaarden of kortere looptijden. Het opnemen van overwaarde is soms mogelijk, maar meestal maatwerk."

));

} else if (age >= 60) {

container.appendChild(createNotice(

"info",

"Richting pensioen kijken banken vaak kritischer naar looptijd en maandlasten. Dit kan invloed hebben op de ruimte die je kunt opnemen."

));

}

}

function scoreLabel(band, bkrValue, schuldenValue, age, ruimteIndicatie) {

if (bkrValue === "ja") return "laag";

if (band === "lt25" || band === "invalid") return "laag";

if (ruimteIndicatie <= 0) return "laag";

if (schuldenValue === "aanzienlijk") return "middel";

if (age >= 67) return "middel";

if (band === "25to35") return "middel";

return "hoog";

}

function buildMotivation(score, ruimteIndicatie, band, bkrValue, schuldenValue) {

let text = "";

let accent = "";

if (score === "hoog") {

if (ruimteIndicatie >= 150000) {

text = "Dit is een sterke uitgangspositie. De kans is groot dat je met de juiste strategie vrij snel richting je eerste vakantiewoning kunt bewegen.";

} else if (ruimteIndicatie >= 75000) {

text = "Dit ziet er kansrijk uit. Met deze indicatieve ruimte heb je meestal meerdere routes om je eerste vakantiewoning haalbaar te maken.";

} else {

text = "Dit ziet er positief uit. Er lijkt ruimte te zijn, en dat is vaak genoeg om de eerste serieuze opties te gaan doorrekenen.";

}

accent = "Kansrijk";

} else if (score === "middel") {

if (band === "25to35") {

text = "Er kunnen mogelijkheden zijn, maar dit valt vaak in maatwerk. Met de juiste aanpak kun je alsnog verrassend ver komen.";

} else {

text = "Er lijkt iets mogelijk, maar de ruimte wordt sneller beïnvloed door schulden, leeftijd of andere lasten. Dit is precies waar een slimme strategie verschil maakt.";

}

accent = "Maatwerk";

} else {

if (bkrValue === "ja") {

text = "Door een negatieve BKR is financieren via banken meestal niet mogelijk zolang dit actief is. Dat zegt niets over jouw ambitie, maar wél over de route.";

} else if (ruimteIndicatie <= 0) {

text = "Op basis van de 90%-norm lijkt er nu weinig tot geen extra ruimte. Dat betekent vaak dat je eerst een andere route of timing nodig hebt.";

} else {

text = "De signalen zijn nu nog beperkt. Dat is niet per se een eindstation, maar wel een aanwijzing dat je route slimmer gekozen moet worden.";

}

accent = "Beperkt";

}

if (schuldenValue === "aanzienlijk" && bkrValue !== "ja") {

accent = "Maatwerk";

}

return { text, accent };

}

function setup() {

const stepDots = document.querySelectorAll("[data-step-dot]");

const step1 = document.querySelector('[data-step="1"]');

const step2 = document.querySelector('[data-step="2"]');

const btnToStep2 = document.getElementById("btnToStep2");

const btnBackToStep1 = document.getElementById("btnBackToStep1");

const btnCalc = document.getElementById("btnCalc");

const form = document.getElementById("overwaardeForm");

const resultsPanel = document.getElementById("resultsPanel");

const dynamicResults = document.getElementById("dynamicResults");

const overwaardeValue = document.getElementById("overwaardeValue");

const overwaardeSub = document.getElementById("overwaardeSub");

const ruimteValue = document.getElementById("ruimteValue");

const ruimteSub = document.getElementById("ruimteSub");

const bkrNoticeContainer = document.getElementById("bkrNoticeContainer");

const schuldenNoticeContainer = document.getElementById("schuldenNoticeContainer");

const leeftijdNoticeContainer = document.getElementById("leeftijdNoticeContainer");

const inkomenNoticeContainer = document.getElementById("inkomenNoticeContainer");

const motivationText = document.getElementById("motivationText");

const motivationAccent = document.getElementById("motivationAccent");

function setStep(step) {

if (step === 1) {

step1.classList.remove("hidden");

step2.classList.add("hidden");

} else {

step1.classList.add("hidden");

step2.classList.remove("hidden");

}

stepDots.forEach(dot => {

const n = Number(dot.getAttribute("data-step-dot"));

dot.classList.toggle("active", n === step);

});

}

function initRadioGroup(groupId) {

const group = document.getElementById(groupId);

if (!group) return;

group.addEventListener("click", (e) => {

const pill = e.target.closest(".radio-pill");

if (!pill) return;

const input = pill.querySelector("input[type=radio]");

if (!input) return;

input.checked = true;

group.querySelectorAll(".radio-pill").forEach(p => p.classList.remove("selected"));

pill.classList.add("selected");

});

}

initRadioGroup("bkrGroup");

initRadioGroup("schuldenGroup");

function nextStep() {

const woningwaarde = parseMoney(document.getElementById("woningwaarde").value);

if (!woningwaarde || woningwaarde <= 0 || Number.isNaN(woningwaarde)) {

alert("Vul eerst een realistische geschatte woningwaarde in.");

return;

}

setStep(2);

}

function prevStep() { setStep(1); }

function calc() {

const woningwaarde = parseMoney(document.getElementById("woningwaarde").value);

const hypotheek = parseMoney(document.getElementById("hypotheek").value);

const inkomen = parseMoney(document.getElementById("inkomen").value);

const leeftijd = parseIntSafe(document.getElementById("leeftijd").value);

if (!woningwaarde || woningwaarde <= 0 || Number.isNaN(woningwaarde)) {

alert("Vul een realistische geschatte woningwaarde in.");

setStep(1);

return;

}

if (!hypotheek || hypotheek <= 0 || Number.isNaN(hypotheek)) {

alert("Vul een realistisch bedrag in bij de totale openstaande hypotheek.");

return;

}

if (Number.isNaN(leeftijd) || leeftijd < 18 || leeftijd > 100) {

alert("Vul een realistische leeftijd in (18–100).");

return;

}

if (Number.isNaN(inkomen) || inkomen <= 0) {

alert("Vul je bruto jaarinkomen in (bijv. 35000 of 35.000).");

return;

}

const bkrValue = (form.querySelector("input[name='bkr']:checked") || {}).value || "onbekend";

const schuldenValue = (form.querySelector("input[name='schulden']:checked") || {}).value || "geen";

const overwaarde = woningwaarde - hypotheek;

const maxHypotheekIndicatie = woningwaarde * 0.9;

const ruimteIndicatie = maxHypotheekIndicatie - hypotheek;

bkrNoticeContainer.innerHTML = "";

schuldenNoticeContainer.innerHTML = "";

leeftijdNoticeContainer.innerHTML = "";

inkomenNoticeContainer.innerHTML = "";

dynamicResults.classList.remove("hidden");

if (overwaarde <= 0) {

overwaardeValue.textContent = formatEuro(0);

overwaardeSub.textContent = "Op basis van je invoer lijkt er nu geen overwaarde.";

} else {

overwaardeValue.textContent = formatEuro(overwaarde);

overwaardeSub.textContent = "Verschil tussen je geschatte woningwaarde en de totale openstaande hypotheek.";

}

if (ruimteIndicatie <= 0) {

ruimteValue.textContent = formatEuro(0);

ruimteSub.textContent = "Op basis van een 90%-norm lijkt er weinig tot geen extra hypotheekruimte.";

} else {

ruimteValue.textContent = formatEuro(ruimteIndicatie);

ruimteSub.textContent = "Indicatieve extra ruimte als een bank tot ca. 90% van de woningwaarde financiert.";

}

if (bkrValue === "ja") {

bkrNoticeContainer.appendChild(createNotice(

"error",

"Door een negatieve BKR-registratie is het bij banken meestal niet mogelijk om extra hypotheek af te sluiten zolang dit actief is."

));

} else if (bkrValue === "onbekend") {

bkrNoticeContainer.appendChild(createNotice(

"warning",

"Je weet niet zeker of je een negatieve BKR-registratie hebt. Dit kan grote invloed hebben op de mogelijkheden."

));

}

if (schuldenValue === "beperkt") {

schuldenNoticeContainer.appendChild(createNotice(

"warning",

"Je geeft aan beperkte consumptieve schulden te hebben. Deze verlagen bijna altijd je maximale leencapaciteit."

));

} else if (schuldenValue === "aanzienlijk") {

schuldenNoticeContainer.appendChild(createNotice(

"warning",

"Je geeft aan aanzienlijke consumptieve schulden te hebben. Banken zullen hierdoor vaak een stuk voorzichtiger worden."

));

}

updateAgeNotice(leeftijdNoticeContainer, leeftijd);

const band = incomeBand(inkomen);

updateIncomeNotice(inkomenNoticeContainer, band);

const score = scoreLabel(band, bkrValue, schuldenValue, leeftijd, ruimteIndicatie);

const motivation = buildMotivation(score, ruimteIndicatie, band, bkrValue, schuldenValue);

motivationText.textContent = motivation.text;

motivationAccent.textContent = motivation.accent;

resultsPanel.scrollIntoView({ behavior: "smooth", block: "start" });

}

window.__bnbNextStep = nextStep;

window.__bnbPrevStep = prevStep;

window.__bnbCalc = calc;

if (btnToStep2) btnToStep2.addEventListener("click", (e) => { e.preventDefault(); nextStep(); });

if (btnBackToStep1) btnBackToStep1.addEventListener("click", (e) => { e.preventDefault(); prevStep(); });

if (btnCalc) btnCalc.addEventListener("click", (e) => { e.preventDefault(); calc(); });

if (form) form.addEventListener("submit", (e) => { e.preventDefault(); calc(); });

}

if (document.readyState === "loading") {

document.addEventListener("DOMContentLoaded", setup);

} else {

setup();

}

})();

</script></body>

</html>

6 tips vakantiewoningen

Wil je financieel onafhankelijker worden met vakantiewoningen? Deze zes tips helpen je verstandig te investeren, van locatiekeuze tot beheer en fiscale valkuilen.

Sophie Vermeulen

Vermeulen Coaching & Consultancy

"Cozy coastal vacation home" "sunset glow reflecting on windows" "open welcome porch with potted plants" "key and guestbook on rustic table" "map and compass hinting investment" "calm, inviting atmosphere"
Intro

6 tips investeren vakantiewoningen

Wil je investeren in vakantiewoningen voor passief inkomen en waardegroei? Volg deze zes praktische tips: doel bepalen, locatieonderzoek, financiële berekeningen, beheerkeuze, presentatie optimaliseren en risico’s beperken met juiste verzekeringen en fiscale strategieën . Start slim, voorkom veelgemaakte fouten.

* Lees alle stappen voor verstandig investeren

"Modern coastal holiday home exterior at sunset" "Golden light reflecting on calm sea" "Well-kept garden with outdoor seating and potted plants" "Nearby small town skyline in soft focus" "Subtle pathway leading from house to beach"

6 tips om te starten met investeren in vakantiewoningen

Wil je financiële vrijheid bereiken met vakantiewoningen?


Investeer gericht en voorkom veelgemaakte fouten. Volg deze zes praktische tips: doel & horizon, locatiekeuze, realistische berekeningen, beheerstrategie, slimme inrichting en fiscale bescherming.

Maak een plan, test twee locaties en raadpleeg experts voor financiering en belastingen.
Begin klein, optimaliseer op basis van cijfers en schaal verstandig.

"cozy seaside vacation home" "sunset light through large windows" "investor reviewing rental calendar on tablet" "small stack of documents and keys on table" "calm seaside village visible outside"

Investeren in vakantiewoningen

Wil je financiële vrijheid met vakantiewoningen? Met zes praktische tips leer je waar je op moet letten, welke fouten je moet vermijden en hoe je rendement, bezetting en risico’s slim beheert. Van doelstelling en locatiekeuze tot beheer, presentatie en fiscale bescherming: duidelijke stappen om beheersbaar en winstgevend te starten.

6 tips vakantiewoning investeren

Zes praktische tips om slim te beginnen met investeren in vakantiewoningen — van locatiekeuze tot beheer, financiën en fiscale valkuilen.

"cozy seaside holiday home exterior at golden hour" "investor couple reviewing plans on porch" "luggage, surfboard, and calculator on table" "neat rental calendar pinned inside" "calm professional property manager arriving"

Wil je financiële vrijheid en overweeg je te investeren in vakantiewoningen?


Hier vind je zes concrete tips: doel en termijn bepalen, locatie analyseren, realistische kostenberekeningen, beheer kiezen, optimale inrichting en risico- en fiscale bescherming.

Vermijd veelgemaakte fouten zoals te hoge inkomsteninschatting en emotionele locatiekeuze. Deze aanpak helpt je doordachte beslissingen te nemen en rendement te maximaliseren — of je nu begint of opschaalt.

6 tips vakantiewoning

"cozy seaside cottage interior" "sunlit bedroom with floral linens" "open window showing dunes and sea" "clipboard with checklist on table" "warm color palette, soft shadows"

Tip 1: bepaal je doel

  • Begin snel en zeker met investeren in een vakantiewoning zonder kostbare beginnersfouten.

  • Leer precies waar je op moet letten bij locatie, vergunningen en rendement.

  • Voorkom veelgemaakte fouten die investeerders vaak duizenden euro’s kosten.

"cozy seaside cottage interior" "sunlit bedroom with floral linens" "open window showing dunes and sea" "clipboard with checklist on table" "warm color palette, soft shadows"

Tip 2: kies de locatie

  • Begin veilig met investeren in een vakantiewoning zonder dure beginnersfouten.

  • Ontdek waar je écht op moet letten bij aankoop en rendement.

  • Praktische tips om je verhuurinkomsten snel en duurzaam te verhogen.

"cozy seaside cottage interior" "sunlit bedroom with floral linens" "open window showing dunes and sea" "clipboard with checklist on table" "warm color palette, soft shadows"

Tip 3: reken realistisch

  • Begin slim met investeren: praktische stappen voor je eerste vakantiewoning.

  • Voorkom dure fouten: leer waar je écht op moet letten.

  • Direct toepasbare tips voor sneller rendement en hogere bezettingsgraad.

"cozy seaside cottage interior" "sunlit bedroom with floral linens" "open window showing dunes and sea" "clipboard with checklist on table" "warm color palette, soft shadows"

Tip 4: beheer kiezen

  • Begin snel met vakantiehuis-investeren zonder dure fouten.

  • Praktische checklist voor wat écht belangrijk is bij aankoop.

  • Beoordeel rendement helder en realistisch voordat je koopt.

"cozy seaside cottage interior" "sunlit bedroom with floral linens" "open window showing dunes and sea" "clipboard with checklist on table" "warm color palette, soft shadows"

Tip 5: optimaliseer

  • Begin slim met investering: duidelijke stappen voor je eerste vakantiewoning aankoop

  • Praktische checklists zodat je onmisbare aandachtspunten nooit overslaat

  • Voorkom veelgemaakte fouten en bescherm je rendement vanaf dag één

Slim investeren

Wil je starten met investeren in vakantiewoningen? Deze zes praktische tips helpen je slimme keuzes te maken voor stabiele inkomsten, waardegroei en minder risico’s.

Eva Janssen

Eva's Coaching & Consultancy

Directe waarde

In korte tijd leerde ik doelgericht te investeren: betere locaties, realistische berekeningen en professioneel beheer. Resultaat: hogere bezetting en minder stress.

Mark de Vries
Mindful Business Growth

Omzet en waarde

Na toepassen van de tips verbeterde mijn presentatie, administratie en fiscale planning. Mijn bezettingsgraad en netto-opbrengst stegen zichtbaar.

Sanne Willems

Willems Webdesign

Snel resultaat

In zes duidelijke tips leer je hoe je verstandig start met vakantiewuoningen: van locatiekeuze tot rendementberekening en fiscale valkuilen. Praktisch, concreet en direct toepasbaar voor elke investeerder.

Mark de Vries
Mindful Business Growth

Veilige investering

Dankzij deze richtlijnen begrijp ik nu welke locaties werkbaar zijn, hoe ik realistische berekeningen maak en welke beheerskeuzes mijn rendement verbeteren. Mijn investeringsplan is nu veel concreter.

Sanne Willems

Willems Webdesign

Een waardevolle gids

De tips hebben me geholpen fouten te vermijden en mijn aanpak te professionaliseren. Met betere presentatie en slim beheer behalen we hogere bezetting en stabieler inkomen.

Eva Janssen

Eva's Coaching & Consultancy

Begin met investeren

Wil je passief inkomen en waardegroei realiseren met vakantiewoningen?

Volg zes concrete tips om risico’s te beperken en rendement te maximaliseren.

Zet vandaag de stap

Bepaal je doel en tijdshorizon Kies locatie, bereken realistisch en regel beheer Optimaliseer presentatie, verzeker je en schakel fiscaal advies in

Start met investeren

"young diverse people in cozy workshop" "mentor explaining investments on whiteboard" "warm lighting" "limited chairs, focused atmosphere"

Beperkt aantal plaatsen