{"id":14134,"date":"2026-10-18T17:27:58","date_gmt":"2026-10-18T17:27:58","guid":{"rendered":"https:\/\/sexworkertaxes.com\/?page_id=14134"},"modified":"2026-10-18T21:00:24","modified_gmt":"2026-10-18T21:00:24","slug":"seasonal-budget-planner","status":"publish","type":"page","link":"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/","title":{"rendered":"Seasonal Budget Planner"},"content":{"rendered":"<div class=\"swt-site\">\n<header class=\"swt-header\"><a class=\"swt-brand\" href=\"https:\/\/sexworkertaxes.com\/\" aria-label=\"Sex Worker Taxes home\"><span class=\"swt-mark\">SWT<span>.<\/span><\/span><span><strong>SEX WORKER TAXES<\/strong><small>Your occupation is your business. Your taxes are ours.<\/small><\/span><\/a><\/p>\n<nav aria-label=\"Main navigation\"><a href=\"https:\/\/sexworkertaxes.com\/index.php\/category\/irs\/\">Tax News<\/a><a href=\"https:\/\/sexworkertaxes.com\/#services\">Tax Services<\/a><a href=\"https:\/\/sexworkertaxes.com\/index.php\/blog\/\">Tax Resources<\/a><a href=\"https:\/\/sexworkertaxes.com\/index.php\/about\/\">About<\/a><a href=\"https:\/\/sexworkertaxes.com\/index.php\/smart-vault\/\">Client Portal<\/a><a href=\"https:\/\/sexworkertaxes.com\/index.php\/contact\/\">Contact<\/a><a href=\"https:\/\/x.com\/SexWorkerTaxes\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Sex Worker Taxes on X (opens in a new tab)\">X<\/a><\/nav>\n<\/header>\n<p><main class=\"swt-page\"><\/p>\n<h1>Seasonal Budget Planner<\/h1>\n<p><style>\n#swt-budget{--ink:#49334f;--gold:#c5a66f;--paper:#f7f4ed;font-family:Arial,sans-serif;line-height:1.55;color:var(--ink);max-width:1180px;margin:0 auto;padding:24px}#swt-budget *{box-sizing:border-box}#swt-budget h1,#swt-budget h2{font-family:Georgia,serif;color:inherit}#swt-budget h1{font-size:clamp(32px,5vw,54px);line-height:1.1}#swt-budget label{display:block;font-size:14px;font-weight:bold}#swt-budget input,#swt-budget select{width:100%;padding:10px;border:1px solid #84978f;border-radius:6px;background:#fff;color:#49334f;font:inherit}#swt-budget button{padding:11px 18px;background:#49334f;color:white;border:0;border-radius:6px;font:inherit;cursor:pointer}#swt-budget button:focus-visible,#swt-budget input:focus-visible,#swt-budget select:focus-visible,#swt-budget .ab-scroll:focus-visible{outline:3px solid #c5a66f;outline-offset:3px}#swt-budget .ab-card{background:var(--paper);padding:22px;border:1px solid #ded8cb;border-radius:12px;margin:20px 0}#swt-budget .ab-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}#swt-budget .ab-actions{display:flex;flex-wrap:wrap;gap:12px;margin:18px 0}#swt-budget .ab-scroll{overflow-x:auto}#swt-budget table{border-collapse:collapse;width:100%;min-width:760px;background:#fff;color:#49334f}#swt-budget th,#swt-budget td{padding:10px;border-bottom:1px solid #ddd;text-align:right}#swt-budget th:first-child,#swt-budget td:first-child{text-align:left}#swt-budget table input{min-width:100px}#swt-budget .ab-metric{font-size:24px;font-weight:bold}#swt-budget .ab-small{font-size:13px}#swt-budget [hidden]{display:none!important}#swt-budget .ab-negative{color:#a02a25}#swt-budget output{display:block}#swt-budget .ab-bar{height:12px;background:#ddd;border-radius:6px;overflow:hidden}#swt-budget .ab-bar span{display:block;height:100%;background:#b69558}#swt-budget .ab-result{white-space:pre-line}body.swt-dark #swt-budget{--paper:#29232f;--ink:#f4f2e9}#swt-budget .wpcf7{color:inherit}@media(max-width:700px){#swt-budget{padding:14px}.ab-grid,#swt-budget .ab-grid{grid-template-columns:repeat(2,1fr)}}@media print{header,footer,#wpadminbar,#swt-theme-toggle,#swt-budget .ab-actions,#swt-budget #ab-register{display:none!important}#swt-budget .ab-scroll{overflow:visible}#swt-budget table{min-width:0;font-size:10px}#swt-budget table input{min-width:0;padding:2px;border:0}#swt-budget{max-width:none;padding:0}#swt-budget .ab-grid{grid-template-columns:repeat(4,1fr)}}\n#swt-budget label,#swt-budget .wpcf7-list-item-label{color:var(--ink)!important}#swt-budget input:not([type=\"submit\"]),#swt-budget select{background:#fff!important;color:#49334f!important;-webkit-text-fill-color:#49334f!important}#swt-budget input[type=\"submit\"],#swt-budget button{background:#49334f!important;color:#fff!important;-webkit-text-fill-color:#fff!important}#swt-budget a{color:var(--ink)}#swt-budget input[type=\"checkbox\"]{width:auto;accent-color:#49334f}body.swt-dark #swt-budget .ab-negative{color:#ffb5af}#swt-budget table label{color:#49334f!important}\n\/* Consistent planner dark appearance. *\/\n@media screen {\nbody.swt-dark #swt-budget{color:#edf3ef!important}\nbody.swt-dark #swt-budget .ab-card{background:#29232f!important;border-color:#70897f!important}\nbody.swt-dark #swt-budget :is(label,.wpcf7-list-item-label,output,caption,th,td){color:#edf3ef!important}\nbody.swt-dark #swt-budget input:not([type=\"submit\"]):not([type=\"checkbox\"]),body.swt-dark #swt-budget select{background:#1e1923!important;color:#edf3ef!important;-webkit-text-fill-color:#edf3ef!important;border-color:#8ba79b!important;color-scheme:dark}\nbody.swt-dark #swt-budget input::placeholder{color:#bccfc6!important;-webkit-text-fill-color:#bccfc6!important;opacity:1}\nbody.swt-dark #swt-budget :is(button,input[type=\"submit\"]){background:#e3c68d!important;color:#1e1923!important;-webkit-text-fill-color:#1e1923!important;border:1px solid #e3c68d!important}\nbody.swt-dark #swt-budget :is(button,input[type=\"submit\"]):disabled{background:#536b62!important;color:#edf3ef!important;-webkit-text-fill-color:#edf3ef!important;border-color:#8ba79b!important;opacity:1;cursor:not-allowed}\nbody.swt-dark #swt-budget table{background:#1e1923!important;color:#edf3ef!important}\nbody.swt-dark #swt-budget :is(th,td){border-color:#70897f!important}\nbody.swt-dark #swt-budget thead th{background:#29232f!important}\nbody.swt-dark #swt-budget :is(.ab-negative,.wpcf7-not-valid-tip){color:#ffb5af!important}\nbody.swt-dark #swt-budget a{color:#e3c68d!important;text-decoration:underline}\nbody.swt-dark #swt-budget input[type=\"checkbox\"]{accent-color:#e3c68d;color-scheme:dark;background:transparent!important}\nbody.swt-dark #swt-budget .ab-bar{background:#536b62}\nbody.swt-dark body.page-id-13009 #masthead :is(a.menu-link,.ast-menu-toggle,.main-header-menu-toggle){color:#edf3ef!important;-webkit-text-fill-color:#edf3ef!important}\nbody.swt-dark body.page-id-13009 #swt-theme-toggle select{color:#edf3ef!important;-webkit-text-fill-color:#edf3ef!important;background:#29232f!important;color-scheme:dark}\n}\n\n#swt-budget{width:100%;max-width:1180px;padding:0;color:#302a32;--ink:#302a32;font-size:16px}#swt-budget .swt-planner-title{font-size:clamp(27px,4vw,44px);line-height:1.2}#swt-budget label{margin:14px 0}#swt-budget .swt-check{display:flex;gap:12px;align-items:flex-start;font-weight:normal}#swt-budget .swt-check input{flex:0 0 auto;margin-top:5px}#swt-budget button:disabled{opacity:.65;cursor:wait}#swt-budget .ab-grid>div{min-width:0;overflow-wrap:anywhere}#swt-budget .ab-metric{font-size:clamp(18px,3vw,24px)}@media(max-width:480px){#swt-budget .ab-grid{grid-template-columns:1fr}#swt-budget .ab-card{padding:16px}#swt-budget .ab-actions button{width:100%}}@media print{.swt-header,.swt-footer,#swt-theme-toggle,.cmplz-cookiebanner,.cmplz-manage-consent,.post-meta-wrapper,#swt-budget .ab-actions,#swt-budget #ab-register{display:none!important}#swt-budget,#swt-budget .ab-card,#swt-budget table,#swt-budget input,#swt-budget select{background:#fff!important;color:#000!important;-webkit-text-fill-color:#000!important}#swt-budget table{table-layout:fixed}#swt-budget input{width:100%;font-size:10px}#swt-budget tr{break-inside:avoid}#swt-budget thead{display:table-header-group}}\n#swt-budget th:first-child{white-space:nowrap;word-break:normal;overflow-wrap:normal}#swt-budget caption{background:#eee8dc;color:#302a32;padding:14px;text-align:left}body.swt-dark #swt-budget caption{background:#29232f!important;color:#edf3ef!important}@media print{#swt-budget caption{background:white!important;color:black!important}#swt-budget label,#swt-budget output,#swt-budget th,#swt-budget td{color:black!important}}@media screen{body.swt-dark #swt-budget #swt-budget-registration button{background:#5b3a60!important;border:1px solid #a483ad!important;color:#fff!important;-webkit-text-fill-color:#fff!important}body.swt-dark #swt-budget #swt-budget-registration button:hover{background:#704b76!important}body.swt-dark #swt-budget #swt-budget-registration button:focus-visible{outline:3px solid #e3c68d!important;outline-offset:3px}}\n\n.swt-budget-print-contact{display:none}@media print{@page{size:landscape;margin:12mm}body.page-id-14134,body.page-id-14134 .swt-site,body.page-id-14134 .swt-page,body.page-id-14134 article{background:#fff!important;color:#000!important}body.page-id-14134 .swt-page{max-width:none!important;padding:0!important}body.page-id-14134 h1{font-size:24px!important;color:#000!important;margin:0 0 12px!important}#swt-budget .swt-budget-print-contact{display:block!important;color:#000!important;font-size:11px;margin:0 0 12px}#swt-budget aside[aria-label=\"Budget privacy\"],#swt-budget label:has(input[type=\"checkbox\"]),#swt-budget [id$=\"repeat-help\"]{display:none!important}#swt-budget .ab-card{padding:10px!important;margin:10px 0!important;box-shadow:none!important}#swt-budget th,#swt-budget td{padding:5px!important;border-color:#aaa!important}#swt-budget caption{font-size:10px!important}#swt-budget h2{font-size:18px!important;color:#000!important}}<\/style><div id=\"swt-budget\"><p class=\"swt-budget-print-contact\">Sex Worker Taxes \u00b7 sexworkertaxes.com\/index.php\/seasonal-budget-planner\/<br>Text only: 717-978-0469 \u00b7 info@sexworkertaxes.com<\/p>\n<p class=\"ab-small\">SEX WORKER TAXES \u00b7 YOUR PRIVATE BUDGET<\/p><h2 class=\"swt-planner-title\">Plan for the strong months.<br>Be ready for the lean ones.<\/h2><p>A practical monthly budget for W-2 take-home pay, business income, household spending, taxes, and a cash cushion.<\/p>\n<aside class=\"ab-card\" aria-label=\"Budget privacy\"><h2>Your budget stays private<\/h2><p><strong>SWT does not receive, store, or have access to the income, expenses, tax targets, reserves, or other budget figures you enter in this planner.<\/strong> Calculations happen in your browser, and your figures are kept only while this page is open. Export or print your plan before leaving or refreshing.<\/p><p>SWT receives your name, email address, and registration and optional interest selections. Requesting a consultation does not send us your budget. You choose what to share separately for a review.<\/p><\/aside><section id=\"ab-register\" class=\"ab-card\"><h2>Get free access by email registration<\/h2><p>Enter your name and email below to open the planner. SWT receives your registration. <strong>No unsolicited marketing emails: registering does not subscribe you to a mailing list.<\/strong> Tax updates are sent only if you separately opt in. Consultation details are sent only if you request them.<\/p><p class=\"ab-small\">Your budget amounts stay in this browser and are not sent to SWT.<\/p><form id=\"swt-budget-registration\"><label>Full name *<input name=\"full_name\" autocomplete=\"name\" maxlength=\"120\" required><\/label><label>Email address *<input name=\"email\" type=\"email\" autocomplete=\"email\" maxlength=\"254\" required><\/label><label class=\"swt-check\"><input name=\"consent\" type=\"checkbox\" value=\"1\" required> I agree that SWT may store my name and email to register my access to this free planner. My budget figures are not submitted.<\/label><label class=\"swt-check\"><input name=\"updates\" type=\"checkbox\" value=\"1\"> Yes, email me occasional SWT tax updates. I can unsubscribe at any time.<\/label><label class=\"swt-check\"><input name=\"consultation\" type=\"checkbox\" value=\"1\"> I\u2019m interested in an SWT consultation to review my budget, cash flow, tax set-asides, and cash reserves. Please email me consultation details and a scheduling link.<\/label><div hidden aria-hidden=\"true\"><label>Leave this field empty<input name=\"website\" tabindex=\"-1\" autocomplete=\"off\"><\/label><\/div><input type=\"hidden\" name=\"nonce\" value=\"75d73a4ecd\"><button type=\"submit\">Register &amp; open the planner<\/button><p id=\"swt-registration-status\" role=\"status\" aria-live=\"polite\"><\/p><p class=\"ab-small\">If you requested consultation details, please check your Spam or Junk folder if the email doesn\u2019t appear in your inbox. Please do not submit tax documents, identification, or account numbers. <a href=\"\/index.php\/privacy-policy\/\">Privacy policy<\/a>.<\/p><\/form><\/section><section id=\"ab-planner\" hidden=\"\"><p class=\"ab-small\">Budget figures are kept only while this page is open. Export your plan before leaving or refreshing.<\/p>\n<div class=\"ab-card\"><h2>Set your planning targets<\/h2><label>Income type<select id=\"ab-income-type\"><option value=\"contractor\">Self-employed contractor<\/option><option value=\"w2\">W-2 employee<\/option><option value=\"both\">Both W-2 and self-employed<\/option><\/select><\/label><p id=\"ab-income-help\" class=\"ab-small\">Enter gross business income and business expenses separately. The chosen tax reserve applies only to positive business profit, before household spending. This is a budgeting target, not a tax calculation.<\/p><div class=\"ab-grid\"><label>Tax set-aside % of positive business profit<input id=\"ab-tax\" type=\"number\" min=\"0\" max=\"100\" step=\"0.1\" value=\"25\"><\/label><label>Save % of surplus after bills &amp; tax<input id=\"ab-save\" type=\"number\" min=\"0\" max=\"100\" step=\"0.1\" value=\"50\"><\/label><label>Opening cash reserve ($)<input id=\"ab-opening\" type=\"number\" min=\"0\" max=\"100000000\" step=\"1\" inputmode=\"numeric\" value=\"0\"><\/label><label>Reserve goal (months of average expenses)<input id=\"ab-goal\" type=\"number\" min=\"0\" max=\"24\" step=\"0.5\" value=\"3\"><\/label><\/div><p class=\"ab-small\">The tax percentage is your chosen savings target, not a calculation of tax owed. Household spending is not a business tax deduction.<\/p><\/div>\n<div class=\"ab-actions\"><button type=\"button\" data-scenario=\"1\">Use entered income<\/button><button type=\"button\" data-scenario=\"0.8\">Lean year: income \u221220%<\/button><button type=\"button\" data-scenario=\"1.2\">Strong year: income +20%<\/button><button type=\"button\" id=\"ab-example\">Load example<\/button><button type=\"button\" id=\"ab-clear\">Clear amounts<\/button><\/div><p id=\"ab-scenario\" role=\"status\">Using entered income.<\/p>\n<div id=\"ab-w2-repeat-wrap\" hidden=\"\"><label><input id=\"ab-w2-repeat\" type=\"checkbox\" aria-describedby=\"ab-w2-repeat-help\" disabled=\"\"> Use January\u2019s W-2 take-home pay for February\u2013December<\/label><p id=\"ab-w2-repeat-help\" class=\"ab-small\">Checking this replaces all February\u2013December W-2 amounts with January\u2019s amount. While checked, changes to January update every month. Edit another month or uncheck to enter different amounts.<\/p><\/div>\n<div><label><input id=\"ab-household-repeat\" type=\"checkbox\" aria-describedby=\"ab-household-repeat-help\"> Use January\u2019s household spending for February\u2013December<\/label><p id=\"ab-household-repeat-help\" class=\"ab-small\">Checking this replaces all February\u2013December household amounts with January\u2019s amount. While checked, changes to January update every month. Edit another month or uncheck to enter different amounts.<\/p><\/div>\n<div id=\"ab-income-repeat-wrap\"><label><input id=\"ab-income-repeat\" type=\"checkbox\" aria-describedby=\"ab-income-repeat-help\"> Use January\u2019s business income for February\u2013December<\/label><p id=\"ab-income-repeat-help\" class=\"ab-small\">Checking this replaces all February\u2013December business income amounts with January\u2019s amount. While checked, changes to January update every month. Edit another month or uncheck to enter different amounts.<\/p><\/div>\n<div id=\"ab-business-repeat-wrap\"><label><input id=\"ab-business-repeat\" type=\"checkbox\" aria-describedby=\"ab-business-repeat-help\"> Use January\u2019s business expenses for February\u2013December<\/label><p id=\"ab-business-repeat-help\" class=\"ab-small\">Checking this replaces all February\u2013December business expenses amounts with January\u2019s amount. While checked, changes to January update every month. Edit another month or uncheck to enter different amounts.<\/p><\/div>\n<div class=\"ab-scroll\" role=\"region\" aria-label=\"Monthly budget; scroll horizontally to see all columns\" tabindex=\"0\"><table><caption>Enter each month\u2019s amounts. Enter whole U.S. dollars only (no cents). Results and exports are rounded to the nearest dollar. On smaller screens, swipe across the table to see all columns.<\/caption><thead><tr><th scope=\"col\">Month<\/th><th scope=\"col\" data-w2-heading=\"\" hidden=\"\">W-2 take-home pay<\/th><th scope=\"col\" data-business-income-heading=\"\">Business income<\/th><th scope=\"col\" data-business-heading=\"\">Business expenses<\/th><th scope=\"col\">Household spending<\/th><th scope=\"col\">Tax set-aside<\/th><th scope=\"col\">Reserve balance<\/th><th scope=\"col\">Left \/ short<\/th><\/tr><\/thead><tbody id=\"ab-months\"><\/tbody><\/table><\/div>\n<p id=\"ab-error\" role=\"alert\" class=\"ab-negative\" hidden=\"\">Enter whole-dollar amounts from $0 to $100,000,000, percentages from 0 to 100, and reserve months from 0 to 24.<\/p>\n<div class=\"ab-card\"><h2>Your annual plan<\/h2><div class=\"ab-grid\"><div>Total income<output id=\"ab-total-income\" class=\"ab-metric\">$0<\/output><\/div><div>Planned tax savings<output id=\"ab-total-tax\" class=\"ab-metric\">$0<\/output><\/div><div>Year-end reserve<output id=\"ab-final-reserve\" class=\"ab-metric\">$0<\/output><\/div><div>Unfunded shortfalls<output id=\"ab-shortfalls\" class=\"ab-metric\">$0<\/output><\/div><\/div><p id=\"ab-goal-text\">Reserve goal: $0 \u00b7 Year-end gap: $0<\/p><div class=\"ab-bar\" aria-hidden=\"true\"><span id=\"ab-progress\" style=\"width: 100%;\"><\/span><\/div><p id=\"ab-summary\" class=\"ab-result\" aria-live=\"polite\">0 month(s) need reserve support. The opening reserve and planned savings cover all monthly deficits in this scenario.<\/p><\/div>\n<div class=\"ab-card\"><label>Inspect a month<select id=\"ab-inspect\"><\/select><\/label><output id=\"ab-detail\" class=\"ab-result\">January: $0 W-2 take-home pay + $0 business income \u2212 $0 business expenses \u2212 $0 household spending \u2212 $0 tax set-aside.\nReserve contribution: $0. Reserve used: $0. Closing reserve: $0.\nMoney left after allocations: $0<\/output><\/div><div class=\"ab-actions\"><button type=\"button\" id=\"ab-export\">Export CSV<\/button><button type=\"button\" id=\"ab-print\">Print budget<\/button><\/div><p class=\"ab-small\">Positive surplus funds the reserve at your selected savings rate. Lean months draw from the reserve first. Any deficit beyond the available reserve is an unfunded shortfall. Remaining surplus is shown as money left; it is not carried into the reserve automatically.<\/p><h2>Want help reviewing your numbers?<\/h2><p>Schedule a consultation with SWT to discuss your budget, cash flow, tax set-asides, and cash reserves. Your budget is not shared automatically; you decide what to provide for the consultation.<\/p><p><a href=\"sms:7179780469\" target=\"_blank\" rel=\"noopener noreferrer\" data-wpel-link=\"external\">Text SWT about your plan<\/a><\/p><\/section><\/div><script>\n(function(){'use strict';const root=document.getElementById('swt-budget');if(!root)return;const months=['January','February','March','April','May','June','July','August','September','October','November','December'];let factor=1,last=null;const money=n=>new Intl.NumberFormat('en-US',{style:'currency',currency:'USD',minimumFractionDigits:0,maximumFractionDigits:0}).format(n);const el=id=>document.getElementById(id);\nfunction calculate(rows,taxRate,saveRate,opening,goal,factor){let reserve=opening;const out=rows.map(r=>{const w2=r.w2*factor,businessIncome=r.income*factor,income=w2+businessIncome,profit=Math.max(0,businessIncome-r.business),tax=profit*taxRate\/100,net=income-r.business-r.household-tax,contribution=Math.max(0,net)*saveRate\/100,withdrawal=Math.min(reserve,Math.max(0,-net)),shortfall=Math.max(0,-net-withdrawal),left=Math.max(0,net-contribution);reserve=reserve+contribution-withdrawal;return {...r,w2,businessIncome,income,tax,net,contribution,withdrawal,shortfall,left,reserve};});return {rows:out,income:out.reduce((s,r)=>s+r.income,0),tax:out.reduce((s,r)=>s+r.tax,0),reserve,shortfalls:out.reduce((s,r)=>s+r.shortfall,0),goal:rows.reduce((s,r)=>s+r.business+r.household,0)\/12*goal};}\nmonths.forEach((m,i)=>{const tr=document.createElement('tr');tr.innerHTML='<th scope=\"row\">'+m+'<\/th>'+['w2','income','business','household'].map(k=>'<td><input type=\"number\" min=\"0\" max=\"100000000\" step=\"1\" inputmode=\"numeric\" value=\"0\" aria-label=\"'+m+' '+({w2:'W-2 take-home pay',income:'gross business income',business:'business expenses',household:'household spending'}[k])+'\" data-month=\"'+i+'\" data-kind=\"'+k+'\"><\/td>').join('')+'<td data-tax><\/td><td data-reserve><\/td><td data-left><\/td>';el('ab-months').appendChild(tr);el('ab-inspect').add(new Option(m,String(i)));});\nfunction repeatHousehold(){const january=root.querySelector('[data-month=\"0\"][data-kind=\"household\"]');if(!january.checkValidity()||january.value==='')return;root.querySelectorAll('[data-kind=\"household\"]').forEach(input=>{if(input!==january)input.value=january.value;});}\nel('ab-household-repeat').addEventListener('change',()=>{if(el('ab-household-repeat').checked)repeatHousehold();render();});\nfunction repeatW2(){const january=root.querySelector('[data-month=\"0\"][data-kind=\"w2\"]');if(!january.checkValidity()||january.value==='')return;root.querySelectorAll('[data-kind=\"w2\"]').forEach(input=>{if(input!==january)input.value=january.value;});}\nel('ab-w2-repeat').addEventListener('change',()=>{if(el('ab-w2-repeat').checked)repeatW2();render();});\nfunction repeatBusinessColumn(kind){const january=root.querySelector('[data-month=\"0\"][data-kind=\"'+kind+'\"]');if(!january.checkValidity()||january.value==='')return;root.querySelectorAll('[data-kind=\"'+kind+'\"]').forEach(input=>{if(input!==january)input.value=january.value;});} ['income','business'].forEach(kind=>el('ab-'+kind+'-repeat').addEventListener('change',()=>{if(el('ab-'+kind+'-repeat').checked)repeatBusinessColumn(kind);render();})); function render(){const mode=el('ab-income-type').value,wage=mode==='w2',contractor=mode==='contractor';['income','business'].forEach(kind=>{el('ab-'+kind+'-repeat-wrap').hidden=wage;el('ab-'+kind+'-repeat').disabled=wage;});el('ab-w2-repeat-wrap').hidden=contractor;el('ab-w2-repeat').disabled=contractor;el('ab-tax').disabled=wage;el('ab-tax').closest('label').hidden=wage;el('ab-income-help').textContent=wage?'Enter W-2 take-home pay after payroll withholding and deductions. No separate tax reserve is applied to this pay. This does not assess whether withholding is sufficient.':contractor?'Enter gross business income and business expenses separately. The chosen tax reserve applies only to positive business profit, before household spending. This is a budgeting target, not a tax calculation.':'Enter W-2 take-home pay and gross business income separately. The chosen tax reserve applies only to positive business profit after business expenses, never to your W-2 take-home pay. Enter household spending once. This does not assess whether withholding is sufficient.';['w2','income','business'].forEach(k=>{const hide=k==='w2'?contractor:wage;root.querySelectorAll('[data-kind=\"'+k+'\"]').forEach(i=>{i.disabled=hide;i.closest('td').hidden=hide;});});root.querySelector('[data-w2-heading]').hidden=contractor;root.querySelector('[data-business-income-heading]').hidden=wage;root.querySelector('[data-business-heading]').hidden=wage;const inputs=Array.from(root.querySelectorAll('#ab-planner input[type=\"number\"]'));if(inputs.some(i=>!i.disabled&&(!i.checkValidity()||i.value===''))){el('ab-error').hidden=false;last=null;root.querySelectorAll('[data-tax],[data-reserve],[data-left],.ab-metric').forEach(o=>o.textContent='\u2014');el('ab-detail').textContent='Correct the highlighted input requirements to calculate your plan.';el('ab-summary').textContent='Results are unavailable until all amounts are valid.';el('ab-goal-text').textContent='';el('ab-progress').style.width='0%';el('ab-export').disabled=true;el('ab-print').disabled=true;return;}el('ab-error').hidden=true;el('ab-export').disabled=false;el('ab-print').disabled=false;const rows=months.map((_,i)=>Object.fromEntries(['w2','income','business','household'].map(k=>[k,((wage&&(k==='income'||k==='business'))||(contractor&&k==='w2'))?0:Number(root.querySelector('[data-month=\"'+i+'\"][data-kind=\"'+k+'\"]').value)])));last=calculate(rows,wage?0:Number(el('ab-tax').value),Number(el('ab-save').value),Number(el('ab-opening').value),Number(el('ab-goal').value),factor);Array.from(el('ab-months').rows).forEach((tr,i)=>{const r=last.rows[i];tr.querySelector('[data-tax]').textContent=money(r.tax);tr.querySelector('[data-reserve]').textContent=money(r.reserve);const c=tr.querySelector('[data-left]');c.textContent=r.shortfall>0?'Short '+money(r.shortfall):money(r.left);c.classList.toggle('ab-negative',r.shortfall>0);});el('ab-total-income').textContent=money(last.income);el('ab-total-tax').textContent=money(last.tax);el('ab-final-reserve').textContent=money(last.reserve);el('ab-shortfalls').textContent=money(last.shortfalls);el('ab-goal-text').textContent='Reserve goal: '+money(last.goal)+' \u00b7 Year-end gap: '+money(Math.max(0,last.goal-last.reserve));el('ab-progress').style.width=(last.goal>0?Math.min(100,last.reserve\/last.goal*100):100)+'%';const lean=last.rows.filter(r=>r.net<0).length;el('ab-summary').textContent=lean+' month(s) need reserve support. '+(last.shortfalls>0?'Your plan has '+money(last.shortfalls)+' in unfunded shortfalls. Consider reducing expenses, adjusting income, or increasing your opening cushion.':'The opening reserve and planned savings cover all monthly deficits in this scenario.');detail();}\nfunction detail(){if(!last)return;const i=Number(el('ab-inspect').value),r=last.rows[i];el('ab-detail').textContent=months[i]+': '+money(r.w2)+' W-2 take-home pay + '+money(r.businessIncome)+' business income \u2212 '+money(r.business)+' business expenses \u2212 '+money(r.household)+' household spending \u2212 '+money(r.tax)+' tax set-aside.\\nReserve contribution: '+money(r.contribution)+'. Reserve used: '+money(r.withdrawal)+'. Closing reserve: '+money(r.reserve)+'.\\n'+(r.shortfall>0?'Unfunded shortfall: '+money(r.shortfall):'Money left after allocations: '+money(r.left));}\nroot.addEventListener('input',e=>{if(e.target.closest('#ab-planner')){if(['income','business'].includes(e.target.dataset.kind)&&el('ab-'+e.target.dataset.kind+'-repeat').checked){if(e.target.dataset.month==='0')repeatBusinessColumn(e.target.dataset.kind);else el('ab-'+e.target.dataset.kind+'-repeat').checked=false;}if(e.target.dataset.kind==='household'&&el('ab-household-repeat').checked){if(e.target.dataset.month==='0')repeatHousehold();else el('ab-household-repeat').checked=false;}if(e.target.dataset.kind==='w2'&&el('ab-w2-repeat').checked){if(e.target.dataset.month==='0')repeatW2();else el('ab-w2-repeat').checked=false;}render();}});el('ab-income-type').addEventListener('change',render);el('ab-inspect').addEventListener('change',detail);root.querySelectorAll('[data-scenario]').forEach(b=>b.addEventListener('click',()=>{factor=Number(b.dataset.scenario);el('ab-scenario').textContent=factor===1?'Using entered income.':(factor<1?'Lean':'Strong')+' scenario: entered income '+(factor<1?'reduced':'increased')+' by 20%. Original inputs are unchanged.';render();}));el('ab-example').addEventListener('click',()=>{factor=1;el('ab-scenario').textContent='Using entered income.';el('ab-income-repeat').checked=false;el('ab-business-repeat').checked=false;el('ab-w2-repeat').checked=false;el('ab-household-repeat').checked=false;const incomes=[4000,4200,5200,6000,7000,7500,5000,4800,6500,7200,8000,4500];root.querySelectorAll('[data-month]').forEach(i=>i.value=i.dataset.kind==='w2'?4000:i.dataset.kind==='income'?incomes[Number(i.dataset.month)]:i.dataset.kind==='business'?1800:2500);el('ab-opening').value=3000;render();});el('ab-clear').addEventListener('click',()=>{if(!confirm('Clear all monthly amounts and the opening reserve?'))return;el('ab-income-repeat').checked=false;el('ab-business-repeat').checked=false;el('ab-w2-repeat').checked=false;el('ab-household-repeat').checked=false;root.querySelectorAll('[data-month]').forEach(i=>i.value=0);el('ab-opening').value=0;factor=1;el('ab-scenario').textContent='Using entered income.';render();});el('ab-print').addEventListener('click',()=>{if(last)window.print();});el('ab-export').addEventListener('click',()=>{if(!last)return;const lines=[['Sex Worker Taxes'],['SWT Seasonal Budget Planner'],['Budget planner',window.location.origin+'\/index.php\/seasonal-budget-planner\/'],['Text only','717-978-0469'],['Email','info@sexworkertaxes.com'],[],['Income type',el('ab-income-type').selectedOptions[0].textContent],['Month','W-2 take-home pay (scenario)','Business income (scenario)','Total scenario income','Business expenses','Household spending','Tax set-aside','Reserve contribution','Reserve withdrawal','Closing reserve','Money left','Unfunded shortfall'],...last.rows.map((r,i)=>[months[i],r.w2,r.businessIncome,r.income,r.business,r.household,r.tax,r.contribution,r.withdrawal,r.reserve,r.left,r.shortfall].map(v=>typeof v==='number'?v.toFixed(0):v))];const url=URL.createObjectURL(new Blob([lines.map(r=>r.map(v=>'\"'+String(v).replace(\/\"\/g,'\"\"')+'\"').join(',')).join('\\r\\n')],{type:'text\/csv;charset=utf-8'}));const a=document.createElement('a');a.href=url;a.download='SWT-seasonal-budget.csv';a.click();setTimeout(()=>URL.revokeObjectURL(url),1000);});document.getElementById('swt-budget-registration').addEventListener('submit',async function(e){e.preventDefault();if(!this.reportValidity())return;const button=this.querySelector('button[type=\"submit\"]'),status=el('swt-registration-status');button.disabled=true;status.textContent='Registering\u2026';const data=new FormData(this);data.set('action','swt_budget_register_v2');try{const response=await fetch('https:\/\/sexworkertaxes.com\/wp-admin\/admin-ajax.php',{method:'POST',body:data,credentials:'same-origin'});const result=await response.json();if(!result.success)throw new Error(result.data&&result.data.message||'Registration could not be completed. Please try again.');el('ab-register').hidden=true;el('ab-planner').hidden=false;render();el('ab-planner').setAttribute('tabindex','-1');el('ab-planner').focus();el('ab-planner').scrollIntoView({behavior:'smooth',block:'start'});}catch(error){status.textContent=error.message;}finally{button.disabled=false;}});render();})();<\/script><\/main><\/p>\n<footer class=\"swt-footer\"><strong>SEX WORKER TAXES<\/strong><\/p>\n<p>Your occupation is your business. Your taxes are ours.<\/p>\n<p><a href=\"sms:7179780469\">Text 717-978-0469<\/a> \u00b7 Text only<br \/><a href=\"mailto:info@sexworkertaxes.com\">info@sexworkertaxes.com<\/a><\/p>\n<p><a href=\"https:\/\/sexworkertaxes.com\/index.php\/privacy-policy\/\">Privacy Policy<\/a> \u00b7 <a href=\"https:\/\/sexworkertaxes.com\/index.php\/downloads\/\">Client Checklist<\/a><\/p>\n<p><small>\u00a9 2026 Sex Worker Taxes<\/small><\/footer>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>SWT.SEX WORKER TAXESYour occupation is your business. Your taxes are ours. Tax NewsTax ServicesTax ResourcesAboutClient PortalContactX Seasonal Budget Planner SEX WORKER TAXES Your occupation is your business. Your taxes are ours. Text 717-978-0469 \u00b7 Text onlyinfo@sexworkertaxes.com Privacy Policy \u00b7 Client Checklist \u00a9 2026 Sex Worker Taxes<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"footnotes":""},"class_list":["post-14134","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Seasonal Budget Planner - Sex Worker Taxes<\/title>\n<meta name=\"description\" content=\"Plan seasonal income, expenses, tax savings, and cash reserves with SWT\u2019s free budget planner. Your budget stays private in your browser.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Seasonal Budget Planner - Sex Worker Taxes\" \/>\n<meta property=\"og:description\" content=\"Plan seasonal income, expenses, tax savings, and cash reserves with SWT\u2019s free budget planner. Your budget stays private in your browser.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/\" \/>\n<meta property=\"og:site_name\" content=\"Sex Worker Taxes\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-18T21:00:24+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@SexWorkerTaxes\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/index.php\\\/seasonal-budget-planner\\\/\",\"url\":\"https:\\\/\\\/sexworkertaxes.com\\\/index.php\\\/seasonal-budget-planner\\\/\",\"name\":\"Seasonal Budget Planner - Sex Worker Taxes\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/#website\"},\"datePublished\":\"2026-10-18T17:27:58+00:00\",\"dateModified\":\"2026-10-18T21:00:24+00:00\",\"description\":\"Plan seasonal income, expenses, tax savings, and cash reserves with SWT\u2019s free budget planner. Your budget stays private in your browser.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/index.php\\\/seasonal-budget-planner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sexworkertaxes.com\\\/index.php\\\/seasonal-budget-planner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/index.php\\\/seasonal-budget-planner\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sexworkertaxes.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Seasonal Budget Planner\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/#website\",\"url\":\"https:\\\/\\\/sexworkertaxes.com\\\/\",\"name\":\"Sex Worker Taxes\",\"description\":\"Your occupation is your business. Your taxes are ours.\",\"publisher\":{\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sexworkertaxes.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/#organization\",\"name\":\"Sex Worker Taxes\",\"alternateName\":\"SWT\",\"url\":\"https:\\\/\\\/sexworkertaxes.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/sexworkertaxes.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/swt-plum-gold-favicon.png?fit=1254%2C1254&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/sexworkertaxes.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/swt-plum-gold-favicon.png?fit=1254%2C1254&ssl=1\",\"width\":1254,\"height\":1254,\"caption\":\"Sex Worker Taxes\"},\"image\":{\"@id\":\"https:\\\/\\\/sexworkertaxes.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/SexWorkerTaxes\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Seasonal Budget Planner - Sex Worker Taxes","description":"Plan seasonal income, expenses, tax savings, and cash reserves with SWT\u2019s free budget planner. Your budget stays private in your browser.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/","og_locale":"en_US","og_type":"article","og_title":"Seasonal Budget Planner - Sex Worker Taxes","og_description":"Plan seasonal income, expenses, tax savings, and cash reserves with SWT\u2019s free budget planner. Your budget stays private in your browser.","og_url":"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/","og_site_name":"Sex Worker Taxes","article_modified_time":"2026-10-18T21:00:24+00:00","twitter_card":"summary_large_image","twitter_site":"@SexWorkerTaxes","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/","url":"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/","name":"Seasonal Budget Planner - Sex Worker Taxes","isPartOf":{"@id":"https:\/\/sexworkertaxes.com\/#website"},"datePublished":"2026-10-18T17:27:58+00:00","dateModified":"2026-10-18T21:00:24+00:00","description":"Plan seasonal income, expenses, tax savings, and cash reserves with SWT\u2019s free budget planner. Your budget stays private in your browser.","breadcrumb":{"@id":"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sexworkertaxes.com\/index.php\/seasonal-budget-planner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sexworkertaxes.com\/"},{"@type":"ListItem","position":2,"name":"Seasonal Budget Planner"}]},{"@type":"WebSite","@id":"https:\/\/sexworkertaxes.com\/#website","url":"https:\/\/sexworkertaxes.com\/","name":"Sex Worker Taxes","description":"Your occupation is your business. Your taxes are ours.","publisher":{"@id":"https:\/\/sexworkertaxes.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sexworkertaxes.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sexworkertaxes.com\/#organization","name":"Sex Worker Taxes","alternateName":"SWT","url":"https:\/\/sexworkertaxes.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sexworkertaxes.com\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/sexworkertaxes.com\/wp-content\/uploads\/2026\/10\/swt-plum-gold-favicon.png?fit=1254%2C1254&ssl=1","contentUrl":"https:\/\/i0.wp.com\/sexworkertaxes.com\/wp-content\/uploads\/2026\/10\/swt-plum-gold-favicon.png?fit=1254%2C1254&ssl=1","width":1254,"height":1254,"caption":"Sex Worker Taxes"},"image":{"@id":"https:\/\/sexworkertaxes.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/SexWorkerTaxes"]}]}},"jetpack_sharing_enabled":false,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/sexworkertaxes.com\/index.php\/wp-json\/wp\/v2\/pages\/14134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sexworkertaxes.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sexworkertaxes.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sexworkertaxes.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sexworkertaxes.com\/index.php\/wp-json\/wp\/v2\/comments?post=14134"}],"version-history":[{"count":3,"href":"https:\/\/sexworkertaxes.com\/index.php\/wp-json\/wp\/v2\/pages\/14134\/revisions"}],"predecessor-version":[{"id":14150,"href":"https:\/\/sexworkertaxes.com\/index.php\/wp-json\/wp\/v2\/pages\/14134\/revisions\/14150"}],"wp:attachment":[{"href":"https:\/\/sexworkertaxes.com\/index.php\/wp-json\/wp\/v2\/media?parent=14134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}