Fast minimal view of YNAB category balances
1function formatBalance(milliunits) {
2 return (milliunits / 1000).toFixed(2);
3}
4
5function renderCategory(cat) {
6 const formatted = formatBalance(cat.balance);
7 const balanceHtml = cat.balance < 0
8 ? `<b style="color:red">${formatted}</b>`
9 : formatted;
10 return ` <p><b>${cat.name}</b><br>${balanceHtml}</p>`;
11}
12
13export function renderPage(categories) {
14 const items = categories.map(renderCategory).join('\n <hr>\n');
15 return `<!DOCTYPE html>
16<html lang="en">
17<head>
18 <meta charset="UTF-8">
19 <meta name="viewport" content="width=device-width, initial-scale=1">
20 <title>afford</title>
21 <style>body { font-family: monospace; max-width: 600px; margin: 2rem auto; padding: 0 1rem; }</style>
22</head>
23<body>
24 <h1>afford</h1>
25${items}
26</body>
27</html>`;
28}