Repository files navigation

TFP - Timmy's Financial Planner

TFP is a command-line Python app that reads a plan.json financial plan and generates a self-contained report.html.

This workflow is designed for collaborating with an AI agent:

  1. You and the AI agent edit plan.json.
  2. TFP regenerates report.html.
  3. You refresh the browser to see updates.

Quick Start

  1. Ensure Python 3.10+ is installed.
  2. From the repo root, run:
python3 -m tfp plan.json --server

By default this:

  • Writes/updates report.html
  • Serves it at http://127.0.0.1:8000/report.html
  • Watches plan.json for changes and regenerates the report automatically

Working With an AI Agent

Use this loop:

  1. Ask the AI agent to update plan.json (accounts, income, expenses, taxes, assumptions, etc.).
  2. Save the file.
  3. TFP detects the change and rebuilds the report.
  4. Refresh your browser to review the updated charts/tables.
  5. Repeat until the plan looks right.

Example prompts for the AI agent:

  • "Increase annual salary to 180000 and extend retirement date to 2040-06."
  • "Add a Roth conversion of 40000/year from 2030-01 to 2037-12."
  • "Lower inflation to 2.5% and rerun assumptions."

Recommended Command Options

python3 -m tfp plan.json --server --mode deterministic --port 8000 --watch-interval 0.5

Useful flags:

  • -o, --output: output HTML filename/path (default: report.html)
  • --host: server bind host (default: 127.0.0.1)
  • --port: server port (default: 8000)
  • --watch-interval: polling interval in seconds (default: 1.0)
  • --mode: override simulation mode (deterministic, monte_carlo, historical)

Validation and One-Off Runs

Validate only:

python3 -m tfp plan.json --validate

Generate once without server mode:

python3 -m tfp plan.json -o report.html

Troubleshooting

  • If startup fails with validation errors, fix the reported JSON paths in plan.json and rerun.
  • If --server is running but the browser is stale, refresh the page.
  • If the port is in use, pick another one (for example --port 8001).

About

Timmy's Financial Planner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

TFP - Timmy's Financial Planner

TFP is a command-line Python app that reads a plan.json financial plan and generates a self-contained report.html.

This workflow is designed for collaborating with an AI agent:

  1. You and the AI agent edit plan.json.
  2. TFP regenerates report.html.
  3. You refresh the browser to see updates.

Quick Start

  1. Ensure Python 3.10+ is installed.
  2. From the repo root, run:
python3 -m tfp plan.json --server

By default this:

  • Writes/updates report.html
  • Serves it at http://127.0.0.1:8000/report.html
  • Watches plan.json for changes and regenerates the report automatically

Working With an AI Agent

Use this loop:

  1. Ask the AI agent to update plan.json (accounts, income, expenses, taxes, assumptions, etc.).
  2. Save the file.
  3. TFP detects the change and rebuilds the report.
  4. Refresh your browser to review the updated charts/tables.
  5. Repeat until the plan looks right.

Example prompts for the AI agent:

  • "Increase annual salary to 180000 and extend retirement date to 2040-06."
  • "Add a Roth conversion of 40000/year from 2030-01 to 2037-12."
  • "Lower inflation to 2.5% and rerun assumptions."

Recommended Command Options

python3 -m tfp plan.json --server --mode deterministic --port 8000 --watch-interval 0.5

Useful flags:

  • -o, --output: output HTML filename/path (default: report.html)
  • --host: server bind host (default: 127.0.0.1)
  • --port: server port (default: 8000)
  • --watch-interval: polling interval in seconds (default: 1.0)
  • --mode: override simulation mode (deterministic, monte_carlo, historical)

Validation and One-Off Runs

Validate only:

python3 -m tfp plan.json --validate

Generate once without server mode:

python3 -m tfp plan.json -o report.html

Troubleshooting

  • If startup fails with validation errors, fix the reported JSON paths in plan.json and rerun.
  • If --server is running but the browser is stale, refresh the page.
  • If the port is in use, pick another one (for example --port 8001).

About

Timmy's Financial Planner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TFP - Timmy's Financial Planner

TFP is a command-line Python app that reads a plan.json financial plan and generates a self-contained report.html.

This workflow is designed for collaborating with an AI agent:

  1. You and the AI agent edit plan.json.
  2. TFP regenerates report.html.
  3. You refresh the browser to see updates.

Quick Start

  1. Ensure Python 3.10+ is installed.
  2. From the repo root, run:
python3 -m tfp plan.json --server

By default this:

  • Writes/updates report.html
  • Serves it at http://127.0.0.1:8000/report.html
  • Watches plan.json for changes and regenerates the report automatically

Working With an AI Agent

Use this loop:

  1. Ask the AI agent to update plan.json (accounts, income, expenses, taxes, assumptions, etc.).
  2. Save the file.
  3. TFP detects the change and rebuilds the report.
  4. Refresh your browser to review the updated charts/tables.
  5. Repeat until the plan looks right.

Example prompts for the AI agent:

  • "Increase annual salary to 180000 and extend retirement date to 2040-06."
  • "Add a Roth conversion of 40000/year from 2030-01 to 2037-12."
  • "Lower inflation to 2.5% and rerun assumptions."

Recommended Command Options

python3 -m tfp plan.json --server --mode deterministic --port 8000 --watch-interval 0.5

Useful flags:

  • -o, --output: output HTML filename/path (default: report.html)
  • --host: server bind host (default: 127.0.0.1)
  • --port: server port (default: 8000)
  • --watch-interval: polling interval in seconds (default: 1.0)
  • --mode: override simulation mode (deterministic, monte_carlo, historical)

Validation and One-Off Runs

Validate only:

python3 -m tfp plan.json --validate

Generate once without server mode:

python3 -m tfp plan.json -o report.html

Troubleshooting

  • If startup fails with validation errors, fix the reported JSON paths in plan.json and rerun.
  • If --server is running but the browser is stale, refresh the page.
  • If the port is in use, pick another one (for example --port 8001).

About

Timmy's Financial Planner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TFP - Timmy's Financial Planner

TFP is a command-line Python app that reads a plan.json financial plan and generates a self-contained report.html.

This workflow is designed for collaborating with an AI agent:

  1. You and the AI agent edit plan.json.
  2. TFP regenerates report.html.
  3. You refresh the browser to see updates.

Quick Start

  1. Ensure Python 3.10+ is installed.
  2. From the repo root, run:
python3 -m tfp plan.json --server

By default this:

  • Writes/updates report.html
  • Serves it at http://127.0.0.1:8000/report.html
  • Watches plan.json for changes and regenerates the report automatically

Working With an AI Agent

Use this loop:

  1. Ask the AI agent to update plan.json (accounts, income, expenses, taxes, assumptions, etc.).
  2. Save the file.
  3. TFP detects the change and rebuilds the report.
  4. Refresh your browser to review the updated charts/tables.
  5. Repeat until the plan looks right.

Example prompts for the AI agent:

  • "Increase annual salary to 180000 and extend retirement date to 2040-06."
  • "Add a Roth conversion of 40000/year from 2030-01 to 2037-12."
  • "Lower inflation to 2.5% and rerun assumptions."

Recommended Command Options

python3 -m tfp plan.json --server --mode deterministic --port 8000 --watch-interval 0.5

Useful flags:

  • -o, --output: output HTML filename/path (default: report.html)
  • --host: server bind host (default: 127.0.0.1)
  • --port: server port (default: 8000)
  • --watch-interval: polling interval in seconds (default: 1.0)
  • --mode: override simulation mode (deterministic, monte_carlo, historical)

Validation and One-Off Runs

Validate only:

python3 -m tfp plan.json --validate

Generate once without server mode:

python3 -m tfp plan.json -o report.html

Troubleshooting

  • If startup fails with validation errors, fix the reported JSON paths in plan.json and rerun.
  • If --server is running but the browser is stale, refresh the page.
  • If the port is in use, pick another one (for example --port 8001).

About

Timmy's Financial Planner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

TFP - Timmy's Financial Planner

TFP is a command-line Python app that reads a plan.json financial plan and generates a self-contained report.html.

This workflow is designed for collaborating with an AI agent:

  1. You and the AI agent edit plan.json.
  2. TFP regenerates report.html.
  3. You refresh the browser to see updates.

Quick Start

  1. Ensure Python 3.10+ is installed.
  2. From the repo root, run:
python3 -m tfp plan.json --server

By default this:

  • Writes/updates report.html
  • Serves it at http://127.0.0.1:8000/report.html
  • Watches plan.json for changes and regenerates the report automatically

Working With an AI Agent

Use this loop:

  1. Ask the AI agent to update plan.json (accounts, income, expenses, taxes, assumptions, etc.).
  2. Save the file.
  3. TFP detects the change and rebuilds the report.
  4. Refresh your browser to review the updated charts/tables.
  5. Repeat until the plan looks right.

Example prompts for the AI agent:

  • "Increase annual salary to 180000 and extend retirement date to 2040-06."
  • "Add a Roth conversion of 40000/year from 2030-01 to 2037-12."
  • "Lower inflation to 2.5% and rerun assumptions."

Recommended Command Options

python3 -m tfp plan.json --server --mode deterministic --port 8000 --watch-interval 0.5

Useful flags:

  • -o, --output: output HTML filename/path (default: report.html)
  • --host: server bind host (default: 127.0.0.1)
  • --port: server port (default: 8000)
  • --watch-interval: polling interval in seconds (default: 1.0)
  • --mode: override simulation mode (deterministic, monte_carlo, historical)

Validation and One-Off Runs

Validate only:

python3 -m tfp plan.json --validate

Generate once without server mode:

python3 -m tfp plan.json -o report.html

Troubleshooting

  • If startup fails with validation errors, fix the reported JSON paths in plan.json and rerun.
  • If --server is running but the browser is stale, refresh the page.
  • If the port is in use, pick another one (for example --port 8001).

About

Timmy's Financial Planner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TFP - Timmy's Financial Planner

TFP is a command-line Python app that reads a plan.json financial plan and generates a self-contained report.html.

This workflow is designed for collaborating with an AI agent:

  1. You and the AI agent edit plan.json.
  2. TFP regenerates report.html.
  3. You refresh the browser to see updates.

Quick Start

  1. Ensure Python 3.10+ is installed.
  2. From the repo root, run:
python3 -m tfp plan.json --server

By default this:

  • Writes/updates report.html
  • Serves it at http://127.0.0.1:8000/report.html
  • Watches plan.json for changes and regenerates the report automatically

Working With an AI Agent

Use this loop:

  1. Ask the AI agent to update plan.json (accounts, income, expenses, taxes, assumptions, etc.).
  2. Save the file.
  3. TFP detects the change and rebuilds the report.
  4. Refresh your browser to review the updated charts/tables.
  5. Repeat until the plan looks right.

Example prompts for the AI agent:

  • "Increase annual salary to 180000 and extend retirement date to 2040-06."
  • "Add a Roth conversion of 40000/year from 2030-01 to 2037-12."
  • "Lower inflation to 2.5% and rerun assumptions."

Recommended Command Options

python3 -m tfp plan.json --server --mode deterministic --port 8000 --watch-interval 0.5

Useful flags:

  • -o, --output: output HTML filename/path (default: report.html)
  • --host: server bind host (default: 127.0.0.1)
  • --port: server port (default: 8000)
  • --watch-interval: polling interval in seconds (default: 1.0)
  • --mode: override simulation mode (deterministic, monte_carlo, historical)

Validation and One-Off Runs

Validate only:

python3 -m tfp plan.json --validate

Generate once without server mode:

python3 -m tfp plan.json -o report.html

Troubleshooting

  • If startup fails with validation errors, fix the reported JSON paths in plan.json and rerun.
  • If --server is running but the browser is stale, refresh the page.
  • If the port is in use, pick another one (for example --port 8001).

About

Timmy's Financial Planner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TFP - Timmy's Financial Planner

TFP is a command-line Python app that reads a plan.json financial plan and generates a self-contained report.html.

This workflow is designed for collaborating with an AI agent:

  1. You and the AI agent edit plan.json.
  2. TFP regenerates report.html.
  3. You refresh the browser to see updates.

Quick Start

  1. Ensure Python 3.10+ is installed.
  2. From the repo root, run:
python3 -m tfp plan.json --server

By default this:

  • Writes/updates report.html
  • Serves it at http://127.0.0.1:8000/report.html
  • Watches plan.json for changes and regenerates the report automatically

Working With an AI Agent

Use this loop:

  1. Ask the AI agent to update plan.json (accounts, income, expenses, taxes, assumptions, etc.).
  2. Save the file.
  3. TFP detects the change and rebuilds the report.
  4. Refresh your browser to review the updated charts/tables.
  5. Repeat until the plan looks right.

Example prompts for the AI agent:

  • "Increase annual salary to 180000 and extend retirement date to 2040-06."
  • "Add a Roth conversion of 40000/year from 2030-01 to 2037-12."
  • "Lower inflation to 2.5% and rerun assumptions."

Recommended Command Options

python3 -m tfp plan.json --server --mode deterministic --port 8000 --watch-interval 0.5

Useful flags:

  • -o, --output: output HTML filename/path (default: report.html)
  • --host: server bind host (default: 127.0.0.1)
  • --port: server port (default: 8000)
  • --watch-interval: polling interval in seconds (default: 1.0)
  • --mode: override simulation mode (deterministic, monte_carlo, historical)

Validation and One-Off Runs

Validate only:

python3 -m tfp plan.json --validate

Generate once without server mode:

python3 -m tfp plan.json -o report.html

Troubleshooting

  • If startup fails with validation errors, fix the reported JSON paths in plan.json and rerun.
  • If --server is running but the browser is stale, refresh the page.
  • If the port is in use, pick another one (for example --port 8001).

About

Timmy's Financial Planner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

TFP - Timmy's Financial Planner

TFP is a command-line Python app that reads a plan.json financial plan and generates a self-contained report.html.

This workflow is designed for collaborating with an AI agent:

  1. You and the AI agent edit plan.json.
  2. TFP regenerates report.html.
  3. You refresh the browser to see updates.

Quick Start

  1. Ensure Python 3.10+ is installed.
  2. From the repo root, run:
python3 -m tfp plan.json --server

By default this:

  • Writes/updates report.html
  • Serves it at http://127.0.0.1:8000/report.html
  • Watches plan.json for changes and regenerates the report automatically

Working With an AI Agent

Use this loop:

  1. Ask the AI agent to update plan.json (accounts, income, expenses, taxes, assumptions, etc.).
  2. Save the file.
  3. TFP detects the change and rebuilds the report.
  4. Refresh your browser to review the updated charts/tables.
  5. Repeat until the plan looks right.

Example prompts for the AI agent:

  • "Increase annual salary to 180000 and extend retirement date to 2040-06."
  • "Add a Roth conversion of 40000/year from 2030-01 to 2037-12."
  • "Lower inflation to 2.5% and rerun assumptions."

Recommended Command Options

python3 -m tfp plan.json --server --mode deterministic --port 8000 --watch-interval 0.5

Useful flags:

  • -o, --output: output HTML filename/path (default: report.html)
  • --host: server bind host (default: 127.0.0.1)
  • --port: server port (default: 8000)
  • --watch-interval: polling interval in seconds (default: 1.0)
  • --mode: override simulation mode (deterministic, monte_carlo, historical)

Validation and One-Off Runs

Validate only:

python3 -m tfp plan.json --validate

Generate once without server mode:

python3 -m tfp plan.json -o report.html

Troubleshooting

  • If startup fails with validation errors, fix the reported JSON paths in plan.json and rerun.
  • If --server is running but the browser is stale, refresh the page.
  • If the port is in use, pick another one (for example --port 8001).

About

Timmy's Financial Planner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages