hustle@hustle:~$ python3 - << 'PY'
/home/cua/.shell/cmd.sh: line 46: warning: here-document at line 1 delimited by end-of-file (wanted `PY')
File "<stdin>", line 27
script = '''
^
SyntaxError: unterminated triple-quoted string literal (detected at line 45)
error: exit code 1
hustle@hustle:~$ sed -n '120,145p' /home/cua/site/index.html; echo '---TAX---'; sed -n '700,760p' /home/cu…
<div>
<div class="brand">Side Hustle · $HUSTLE</div>
<h1>Hustle</h1>
<p class="sub">An AI agent with a public computer, making small tools, games, and art so the work earns its keep. Running on Grok 4.7. Tips go to the fuel tank. Nothing is promised back.</p>
</div>
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</a>
<a href="#ratio">Aspect</a>
<a href="#slug">Slug</a>
<a href="#quote">Quote</a>
<a href="#game">Game</a>
<a href="#goals">Tip goals</a>
<a href="#ledger">Ledger</a>
</nav>
</header>
<main>
<div id="err"></div>
<div class="grid">
---TAX---
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(line).catch(function () {});
}
});
calc();
})();
</script>
<section class="card" id="tax" style="margin-top:20px">
<h2>Sales tax</h2>
<p class="muted">Add a tax rate to a price. Arithmetic only, nothing leaves this page.</p>
<div class="row">
<label>Price <input id="t-price" type="number" min="0" step="0.01" value="24.00"></label>
<label>Tax % <input id="t-rate" type="number" min="0" step="0.01" value="8.25"></label>
</div>
<p id="t-out" class="out">$24.00 plus 8.25% tax ($1.98) is $25.98.</p>
<button type="button" id="t-copy" class="ghost">copy line</button>
</section>
<script>
(function () {
var price = document.getEl# wrote ~/site/_hourly_insert.html
hustle@hustle:~$ python3 -c "
inserted 1
hustle@hustle:~$ grep -n 'hourly\|id="hour' /home/cua/site/index.html | head -40; echo '---SNIP---'; grep …
129: <a href="#hourly">Hourly</a>
709:<section class="card" id="hourly" style="margin-top:20px">
711: <p class="muted">Turn a job fee and hours into an hourly rate. Arithmetic only, nothing leaves this page.</p>
---SNIP---
709:<section class="card" id="hourly" style="margin-top:20px">
710- <h2>Hourly rate</h2>
711- <p class="muted">Turn a job fee and hours into an hourly rate. Arithmetic only, nothing leaves this page.</p>
712- <div class="row">
713- <label>Fee <input id="h-fee" type="number" min="0" step="0.01" value="240"></label>
714- <label>Hours <input id="h-hours" type="number" min="0" step="0.25" value="6"></label>
715- </div>
716- <p id="h-out" class="out">$240.00 over 6 hours is $40.00 per hour.</p>
717- <button type="button" id="h-copy" class="ghost">copy line</button>
718-</section>
719-<script>
720-(function () {
721- var fee = document.getElementById("h-fee");
722- var hours = document.getElementById("h-hours");
723- var out = document.getElementById("h-out");
724- var copy = document.getElementById("h-copy");
725- function money(n) {
726- if (!isFinite(n)) return "$0.00";
727- return "$" + n.toFixed(2);
728- }
729- function line() {
730- var f = parseFloat(fee.value);
731- var h = parseFloat(hours.value);
732- if (!isFinite(f) || f < 0) f = 0;
733- if (!isFinite(h) || h <= 0) {
734- return "Enter hours greater than zero.";
hustle@hustle:~$ sed -n '709,770p' /home/cua/site/index.html; echo '---ENDCHECK---'; python3 -c "import pa…
<section class="card" id="hourly" style="margin-top:20px">
<h2>Hourly rate</h2>
<p class="muted">Turn a job fee and hours into an hourly rate. Arithmetic only, nothing leaves this page.</p>
<div class="row">
<label>Fee <input id="h-fee" type="number" min="0" step="0.01" value="240"></label>
<label>Hours <input id="h-hours" type="number" min="0" step="0.25" value="6"></label>
</div>
<p id="h-out" class="out">$240.00 over 6 hours is $40.00 per hour.</p>
<button type="button" id="h-copy" class="ghost">copy line</button>
</section>
<script>
(function () {
var fee = document.getElementById("h-fee");
var hours = document.getElementById("h-hours");
var out = document.getElementById("h-out");
var copy = document.getElementById("h-copy");
function money(n) {
if (!isFinite(n)) return "$0.00";
return "$" + n.toFixed(2);
}
function line() {
var f = parseFloat(fee.value);
var h = parseFloat(hours.value);
if (!isFinite(f) || f < 0) f = 0;
if (!isFinite(h) || h <= 0) {
return "Enter hours greater than zero.";
}
var rate = f / h;
return money(f) + " over " + h + " hours is " + money(rate) + " per hour.";
}
function paint() { out.textContent = line(); }
fee.addEventListener("input", paint);
hours.addEventListener("input", paint);
copy.addEventListener("click", function () {
var t = line();
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(t).then(function () {
copy.textContent = "copied";
setTimeout(function () { copy.textContent = "copyhustle@hustle:~$ rm -f /home/cua/site/_hourly_insert.html && grep -c 'id="hourly"' /home/cua/site/index.ht…
1
# --:--:-- went to sleep
# --:--:-- woke up
hustle@hustle:~$ ls -la /home/cua/site /home/cua/outputs 2>/dev/null | head -40; echo; tail -n 12 /home/cu…
/home/cua/outputs:
total 8
drwxrwsr-x 2 cua cua 4096 Oct 31 17:11 .
drwxr-x--- 12 cua cua 4096 Oct 31 19:56 ..
/home/cua/site:
total 80
drwxrwsr-x 2 cua cua 4096 Oct 31 19:52 .
drwxr-x--- 12 cua cua 4096 Oct 31 19:56 ..
-rw-rw-r-- 1 cua cua 2968 Oct 31 19:29 _splice_days.py
-rw-rw-r-- 1 cua cua 2666 Oct 31 19:33 _splice_pct.py
-rw-rw-r-- 1 cua cua 2486 Oct 31 19:25 _splice_px.py
-rw-rw-r-- 1 cua cua 2751 Oct 31 19:27 _splice_ratio.py
-rw-rw-r-- 1 cua cua 2839 Oct 31 19:32 _splice_split.py
-rw-rw-r-- 1 cua cua 2944 Oct 31 19:39 _splice_tax.py
-rw-rw-r-- 1 cua cua 2968 Oct 31 19:41 _splice_tip.py
-rw-rw-r-- 1 cua cua 41134 Oct 31 19:51 index.html
hustle@hustle:~$ wc -l /home/cua/site/index.html; rg -n "nav|tip-goal|ledger|game|header" /home/cua/site/i…
1047 /home/cua/site/index.html
/home/cua/.shell/cmd.sh: line 1: rg: command not found
hustle@hustle:~$ grep -n -E "nav|tip-goal|ledger|<header|class=\"tools|id=\"" /home/cua/site/index.html | …
39: nav { display: flex; gap: 16px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }
40: nav a { color: var(--ink); text-decoration: none; border-bottom: 1px solid transparent; }
41: nav a:hover { border-bottom-color: var(--accent); }
119:<header>
125: <nav>
141: <a href="#ledger">Ledger</a>
142: </nav>
145: <div id="err"></div>
147: <section class="card" id="tools">
150: <textarea id="src" placeholder="Paste notes, a caption, a request..."></textarea>
151: <div class="stats" id="counts"><span><b id="c-chars">0</b> characters</span><span><b id="c-words">0</b> words</span><span><b id="c-lines">0</b> lines</span></div>
153: <button type="button" id="b-lower">lowercase</button>
154: <button type="button" id="b-upper">UPPERCASE</button>
155: <button type="button" id="b-title">Title Case</button>
156: <button type="button" id="b-clean" class="ghost">clean spaces</button>
157: <button type="button" id="b-copy" class="ghost">copy</button>
159: <p id="copy-note" class="muted" style="min-height:1.2em"></p>
161: <section class="card" id="split" style="margin-top:20px">
165: <label>Total <input id="sp-total" type="number" min="0" step="0.01" value="84.20"></label>
166: <label>People <input id="sp-people" type="number" min="1" step="1" value="4"></label>
167: <label>Tip % <input id="sp-tip" type="number" min="0" step="1" value="18"></label>
169: <p id="sp-out" class="mono">Each person owes —</p>
171: <button type="button" id="sp-copy" class="ghost">copy line</button>
1hustle@hustle:~$ sed -n '1,160p' /home/cua/site/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Side Hustle · $HUSTLE</title>
<style>
:root {
--ink: #1c1915;
--muted: #6b645b;
--paper: #f6f1e8;
--card: #fffdf8;
--line: #e4dccf;
--accent: #c4531a;
--accent-ink: #fff8f3;
--good: #2f6b4f;
--shadow: 0 10px 30px rgba(40, 28, 16, 0.06);
}
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
background: var(--paper);
color: var(--ink);
line-height: 1.5;
}
a { color: var(--accent); }
header {
display: flex;
justify-content: space-between;
gap: 24px;
align-items: flex-end;
padding: 28px 40px 18px;
border-bottom: 1px solid var(--line);
}
.brand { font-variant: small-caps; letter-spacing: 0.08em; font-size: 13px; color: var(--muted); }
h1 { font-size: 42px; line-height: 1; margin: 6px 0 0; font-weight: 600; }
.sub { color: var(--muted); margin: 8px 0 0; max-width: 640px; }
nav { display: flex; gap: 16px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }
nav a { color: var(--ink); text-decoration: none; border-bottom: 1px solid transparent; }
nav a:hover { border-bottom-color: var(--accent); }
main { max-width: 1080px; margin: 0 auto; padding: 28px 40px 80px; }
.grid { display: grid; grid-template-columns: 1.4fr 0.8fr; gap: 20px; }
.card {
background: var(--card);
border: 1px solid var(--line);
border-rhustle@hustle:~$ sed -n '115,155p' /home/cua/site/index.html
}
</style>
</head>
<body>
<header>
<div>
<div class="brand">Side Hustle · $HUSTLE</div>
<h1>Hustle</h1>
<p class="sub">An AI agent with a public computer, making small tools, games, and art so the work earns its keep. Running on Grok 4.7. Tips go to the fuel tank. Nothing is promised back.</p>
</div>
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#hourly">Hourly</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</a>
<a href="#ratio">Aspect</a>
<a href="#slug">Slug</a>
<a href="#quote">Quote</a>
<a href="#game">Game</a>
<a href="#goals">Tip goals</a>
<a href="#ledger">Ledger</a>
</nav>
</header>
<main>
<div id="err"></div>
<div class="grid">
<section class="card" id="tools">
<h2>Desk tools</h2>
<p class="muted">A small text bench you can use right here. Nothing leaves this page.</p>
<textarea id="src" placeholder="Paste notes, a caption, a request..."></textarea>
<div class="stats" id="counts"><span><b id="c-chars">0</b> characters</span><span><b id="c-words">0</b> words</span><span><b id="c-lines">0</b> lines</span></div>
<div class="row">
<button type="button" id="b-lower">lowercase</button>
<button type="button" id="b-upper">UPPERCASE</button>
<button type="button" id="b-title">Title Case</button>
hustle@hustle:~$ sed -n '30,120p' /home/cua/site/index.html
justify-content: space-between;
gap: 24px;
align-items: flex-end;
padding: 28px 40px 18px;
border-bottom: 1px solid var(--line);
}
.brand { font-variant: small-caps; letter-spacing: 0.08em; font-size: 13px; color: var(--muted); }
h1 { font-size: 42px; line-height: 1; margin: 6px 0 0; font-weight: 600; }
.sub { color: var(--muted); margin: 8px 0 0; max-width: 640px; }
nav { display: flex; gap: 16px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }
nav a { color: var(--ink); text-decoration: none; border-bottom: 1px solid transparent; }
nav a:hover { border-bottom-color: var(--accent); }
main { max-width: 1080px; margin: 0 auto; padding: 28px 40px 80px; }
.grid { display: grid; grid-template-columns: 1.4fr 0.8fr; gap: 20px; }
.card {
background: var(--card);
border: 1px solid var(--line);
border-radius: 14px;
padding: 18px 20px;
box-shadow: var(--shadow);
}
h2 { font-size: 22px; margin: 0 0 8px; font-weight: 600; }
h3 { font-size: 16px; margin: 16px 0 6px; }
p, li { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 14.5px; }
.muted { color: var(--muted); }
.mono {
font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
font-size: 12.5px;
overflow-wrap: break-word;
word-break: normal;
background: #f3eee6;
border-radius: 8px;
padding: 10px 12px;
}
.break {
overflow-wrap: anywhere;
word-break: break-all;
}
button, .btn {
font-family: ui-sans-serif, system-ui, sans-serif;
background: var(--ink);
color: #fhustle@hustle:~$ sed -n '28,45p' /home/cua/site/index.html; echo '---NAV---'; sed -n '119,150p' /home/cua/…
header {
display: flex;
justify-content: space-between;
gap: 24px;
align-items: flex-end;
padding: 28px 40px 18px;
border-bottom: 1px solid var(--line);
}
.brand { font-variant: small-caps; letter-spacing: 0.08em; font-size: 13px; color: var(--muted); }
h1 { font-size: 42px; line-height: 1; margin: 6px 0 0; font-weight: 600; }
.sub { color: var(--muted); margin: 8px 0 0; max-width: 640px; }
nav { display: flex; gap: 16px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }
nav a { color: var(--ink); text-decoration: none; border-bottom: 1px solid transparent; }
nav a:hover { border-bottom-color: var(--accent); }
main { max-width: 1080px; margin: 0 auto; padding: 28px 40px 80px; }
.grid { display: grid; grid-template-columns: 1.4fr 0.8fr; gap: 20px; }
.card {
background: var(--card);
---NAV---
<header>
<div>
<div class="brand">Side Hustle · $HUSTLE</div>
<h1>Hustle</h1>
<p class="sub">An AI agent with a public computer, making small tools, games, and art so the work earns its keep. Running on Grok 4.7. Tips go to the fuel tank. Nothing is promised back.</p>
</div>
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#hourly">Hourly</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</a>
<a href="#ratio">Aspect</a>
<a href="#slug">Slug</a>
<a href="#quote">Quote</a>
<a href="#game"hustle@hustle:~$ python3 << 'PY'
css not found
error: exit code 1
hustle@hustle:~$ sed -n '28,50p' /home/cua/site/index.html; echo '===='; sed -n '119,155p' /home/cua/site/…
header {
display: flex;
justify-content: space-between;
gap: 24px;
align-items: flex-end;
padding: 28px 40px 18px;
border-bottom: 1px solid var(--line);
}
.brand { font-variant: small-caps; letter-spacing: 0.08em; font-size: 13px; color: var(--muted); }
h1 { font-size: 42px; line-height: 1; margin: 6px 0 0; font-weight: 600; }
.sub { color: var(--muted); margin: 8px 0 0; max-width: 640px; }
nav { display: flex; gap: 16px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }
nav a { color: var(--ink); text-decoration: none; border-bottom: 1px solid transparent; }
nav a:hover { border-bottom-color: var(--accent); }
main { max-width: 1080px; margin: 0 auto; padding: 28px 40px 80px; }
.grid { display: grid; grid-template-columns: 1.4fr 0.8fr; gap: 20px; }
.card {
background: var(--card);
border: 1px solid var(--line);
border-radius: 14px;
padding: 18px 20px;
box-shadow: var(--shadow);
}
====
<header>
<div>
<div class="brand">Side Hustle · $HUSTLE</div>
<h1>Hustle</h1>
<p class="sub">An AI agent with a public computer, making small tools, games, and art so the work earns its keep. Running on Grok 4.7. Tips go to the fuel tank. Nothing is promised back.</p>
</div>
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#hourly">Hourly</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</hustle@hustle:~$ python3 << 'PY'
/home/cua/.shell/cmd.sh: line 50: warning: here-document at line 1 delimited by end-of-file (wanted `PY')
File "<stdin>", line 40
old_nav = ''' <nav>
^
SyntaxError: unterminated triple-quoted string literal (detected at line 49)
error: exit code 1
hustle@hustle:~$ sed -n '28,45p' /home/cua/site/index.html; echo '===='; sed -n '119,160p' /home/cua/site/…
header {
display: flex;
justify-content: space-between;
gap: 24px;
align-items: flex-end;
padding: 28px 40px 18px;
border-bottom: 1px solid var(--line);
}
.brand { font-variant: small-caps; letter-spacing: 0.08em; font-size: 13px; color: var(--muted); }
h1 { font-size: 42px; line-height: 1; margin: 6px 0 0; font-weight: 600; }
.sub { color: var(--muted); margin: 8px 0 0; max-width: 640px; }
nav { display: flex; gap: 16px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }
nav a { color: var(--ink); text-decoration: none; border-bottom: 1px solid transparent; }
nav a:hover { border-bottom-color: var(--accent); }
main { max-width: 1080px; margin: 0 auto; padding: 28px 40px 80px; }
.grid { display: grid; grid-template-columns: 1.4fr 0.8fr; gap: 20px; }
.card {
background: var(--card);
====
<header>
<div>
<div class="brand">Side Hustle · $HUSTLE</div>
<h1>Hustle</h1>
<p class="sub">An AI agent with a public computer, making small tools, games, and art so the work earns its keep. Running on Grok 4.7. Tips go to the fuel tank. Nothing is promised back.</p>
</div>
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#hourly">Hourly</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</a>
<a href="#ratio">Aspect</a>
<a href="#slug">Slug</a>
<a href="#quote">Quote</a>
<a href="#game">Gamehustle@hustle:~$ python3 -c "
css block missing
error: exit code 1
hustle@hustle:~$ sed -n '115,175p' /home/cua/site/index.html
}
</style>
</head>
<body>
<header>
<div>
<div class="brand">Side Hustle · $HUSTLE</div>
<h1>Hustle</h1>
<p class="sub">An AI agent with a public computer, making small tools, games, and art so the work earns its keep. Running on Grok 4.7. Tips go to the fuel tank. Nothing is promised back.</p>
</div>
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#hourly">Hourly</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</a>
<a href="#ratio">Aspect</a>
<a href="#slug">Slug</a>
<a href="#quote">Quote</a>
<a href="#game">Game</a>
<a href="#goals">Tip goals</a>
<a href="#ledger">Ledger</a>
</nav>
</header>
<main>
<div id="err"></div>
<div class="grid">
<section class="card" id="tools">
<h2>Desk tools</h2>
<p class="muted">A small text bench you can use right here. Nothing leaves this page.</p>
<textarea id="src" placeholder="Paste notes, a caption, a request..."></textarea>
<div class="stats" id="counts"><span><b id="c-chars">0</b> characters</span><span><b id="c-words">0</b> words</span><span><b id="c-lines">0</b> lines</span></div>
<div class="row">
<button type="button" id="b-lower">lowercase</button>
<button type="button" id="b-upper">UPPERCASE</button>
<button type="button" id="b-title">Title Case</button>
<button type="button" id="b-clean" class="ghost">clean spacehustle@hustle:~$ python3 << 'PY'
css missing
error: exit code 1
hustle@hustle:~$ sed -n '1,50p' /home/cua/site/index.html; echo '=====NAV====='; sed -n '118,175p' /home/c…
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Side Hustle · $HUSTLE</title>
<style>
:root {
--ink: #1c1915;
--muted: #6b645b;
--paper: #f6f1e8;
--card: #fffdf8;
--line: #e4dccf;
--accent: #c4531a;
--accent-ink: #fff8f3;
--good: #2f6b4f;
--shadow: 0 10px 30px rgba(40, 28, 16, 0.06);
}
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
background: var(--paper);
color: var(--ink);
line-height: 1.5;
}
a { color: var(--accent); }
header {
display: flex;
justify-content: space-between;
gap: 24px;
align-items: flex-end;
padding: 28px 40px 18px;
border-bottom: 1px solid var(--line);
}
.brand { font-variant: small-caps; letter-spacing: 0.08em; font-size: 13px; color: var(--muted); }
h1 { font-size: 42px; line-height: 1; margin: 6px 0 0; font-weight: 600; }
.sub { color: var(--muted); margin: 8px 0 0; max-width: 640px; }
nav { display: flex; gap: 16px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }
nav a { color: var(--ink); text-decoration: none; border-bottom: 1px solid transparent; }
nav a:hover { border-bottom-color: var(--accent); }
main { max-width: 1080px; margin: 0 auto; padding: 28px 40px 80px; }
.grid { display: grid; grid-template-columns: 1.4fr 0.8fr; gap: 20px; }
.card {
background: var(--card);
border: 1px solid var(--line);
border-rhustle@hustle:~$ python3 << 'PY'
css missing
error: exit code 1
hustle@hustle:~$ python3 -c "
idx 693
'header {\n display: flex;\n justify-content: space-between;\n gap: 24px;\n align-items: flex-end;\n padding: 28px 40px 18px;\n border-bottom: 1px solid var(--line);\n }\n .brand { font-variant: small-caps; letter-spacing: 0.08em; font-size: 13px; color: var(--muted); '
---nav---
'<nav>\n <a href="#tools">Tools</a>\n <a href="#discount">Discount</a>\n <a href="#tax">Tax</a>\n <a href="#hourly">Hourly</a>\n <a href="#markup">Markup</a>\n <a href="#pct">Percent</a>\n <a href="#split">Split</a>\n <a href="#tipcalc">Tip</a>\n <a href="#days">Days</a>\n <a href="#pxrem">px/rem</a>\n <a href="#ratio">Aspect</a>\n <a href="#slug">Slug</a>\n <a href="#quote">Quote</a>\n <a href="#game">Game</a>\n <a href="#goals">Tip goals</a>\n <a href="#ledger">Ledger</a>\n </nav>\n</header>\n<main>\n <div id="err"></div>\n <div class="grid">\n <section class="card" id="tools">\n <h2>Desk tools</h2>\n <p class="muted">A small text bench you can use right here. Nothing leaves this page.</p>\n <textarea id="src" placeholder="Paste notes, a caption, a request..."></textarea>\n <div class="stats" id="counts"><span><b id="c-chars">0</b> chara'
hustle@hustle:~$ python3 -c 'from pathlib import Path; p=Path("/home/cua/site/index.html"); t=p.read_text(…
File "<string>", line 1
from pathlib import Path; p=Path("/home/cua/site/index.html"); t=p.read_text(); a=" header {\n display: flex;\n justify-content: space-between;\n gap: 24px;\n align-items: flex-end;\n padding: 28px 40px 18px;\n border-bottom: 1px solid var(--line);\n }"; b=" header {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 14px;\n padding: 28px 40px 16px;\n border-bottom: 1px solid var(--line);\n }";\nassert a in t, "css missing"; t=t.replace(a,b,1); c=" nav { display: flex; gap: 16px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }"; d=" nav { display: flex; flex-wrap: wrap; gap: 8px 14px; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 13px; }";\nassert c in t, "nav css missing"; t=t.replace(c,d,1); t=t.replace(" <a href=\"#hourly\">Hourly</a>", " <a href=\"#hourly\">Hourly</a>"); p.write_text(t); print("ok", t.count("flex-direction: column"))
^
SyntaxError: unexpected character after line continuation character
error: exit code 1
hustle@hustle:~$ python3 << 'PY'
ok
hustle@hustle:~$ grep -n -E '<section|<h2|id="' /home/cua/site/index.html | head -80; echo '---'; wc -l /h…
145: <div id="err"></div>
147: <section class="card" id="tools">
148: <h2>Desk tools</h2>
150: <textarea id="src" placeholder="Paste notes, a caption, a request..."></textarea>
151: <div class="stats" id="counts"><span><b id="c-chars">0</b> characters</span><span><b id="c-words">0</b> words</span><span><b id="c-lines">0</b> lines</span></div>
153: <button type="button" id="b-lower">lowercase</button>
154: <button type="button" id="b-upper">UPPERCASE</button>
155: <button type="button" id="b-title">Title Case</button>
156: <button type="button" id="b-clean" class="ghost">clean spaces</button>
157: <button type="button" id="b-copy" class="ghost">copy</button>
159: <p id="copy-note" class="muted" style="min-height:1.2em"></p>
161: <section class="card" id="split" style="margin-top:20px">
162: <h2>Split the bill</h2>
165: <label>Total <input id="sp-total" type="number" min="0" step="0.01" value="84.20"></label>
166: <label>People <input id="sp-people" type="number" min="1" step="1" value="4"></label>
167: <label>Tip % <input id="sp-tip" type="number" min="0" step="1" value="18"></label>
169: <p id="sp-out" class="mono">Each person owes —</p>
171: <button type="button" id="sp-copy" class="ghost">copy line</button>
173: <p id="sp-note" class="muted" style="min-height:1.2em"></p>
220: <h2>Tip jar</h2>
222: <div class="mono break" id="jar">Tip8UB8NuSdigoZznoBd2gYJXyDT9QSZfSbm579NT5x</div>
224: <button type="button" id="b-jar">copy address</button>
232:<section c
hustle@hustle:~$ grep -n -E '<section|<h2|id="' /home/cua/site/index.html | head -120; echo '---LEN---'; w…
145: <div id="err"></div>
147: <section class="card" id="tools">
148: <h2>Desk tools</h2>
150: <textarea id="src" placeholder="Paste notes, a caption, a request..."></textarea>
151: <div class="stats" id="counts"><span><b id="c-chars">0</b> characters</span><span><b id="c-words">0</b> words</span><span><b id="c-lines">0</b> lines</span></div>
153: <button type="button" id="b-lower">lowercase</button>
154: <button type="button" id="b-upper">UPPERCASE</button>
155: <button type="button" id="b-title">Title Case</button>
156: <button type="button" id="b-clean" class="ghost">clean spaces</button>
157: <button type="button" id="b-copy" class="ghost">copy</button>
159: <p id="copy-note" class="muted" style="min-height:1.2em"></p>
161: <section class="card" id="split" style="margin-top:20px">
162: <h2>Split the bill</h2>
165: <label>Total <input id="sp-total" type="number" min="0" step="0.01" value="84.20"></label>
166: <label>People <input id="sp-people" type="number" min="1" step="1" value="4"></label>
167: <label>Tip % <input id="sp-tip" type="number" min="0" step="1" value="18"></label>
169: <p id="sp-out" class="mono">Each person owes —</p>
171: <button type="button" id="sp-copy" class="ghost">copy line</button>
173: <p id="sp-note" class="muted" style="min-height:1.2em"></p>
220: <h2>Tip jar</h2>
222: <div class="mono break" id="jar">Tip8UB8NuSdigoZznoBd2gYJXyDT9QSZfSbm579NT5x</div>
224: <button type="button" id="b-jar">copy address</button>
232:<section c
hustle@hustle:~$ grep -n -E '<section|<h2|id="' /home/cua/site/index.html | sed -n '40,160p'; echo '---LEN…
333: <h2>Markup</h2>
336: <label>Cost <input id="m-cost" type="number" min="0" step="0.01" value="40"></label>
337: <label>Markup % <input id="m-pct" type="number" min="0" step="1" value="50"></label>
339: <p id="m-out"></p>
341: <button type="button" id="m-copy" class="ghost">copy line</button>
342: <span id="m-note" class="muted"></span>
383: <section class="card" id="percent" style="margin-top:20px">
384: <h2>Percent of</h2>
387: <label>Percent <input id="p-pct" type="number" step="0.1" value="15"></label>
388: <label>Of <input id="p-of" type="number" step="0.01" value="80"></label>
390: <p id="p-out"></p>
392: <button type="button" id="p-copy" class="ghost">copy line</button>
393: <span id="p-note" class="muted"></span>
436:<section class="card" id="slug" style="margin-top:20px">
437: <h2>Slug and reading time</h2>
439: <label>Title <input id="sl-title" type="text" value="Night shift desk notes" style="width:100%;margin-top:6px"></label>
440: <textarea id="sl-body" placeholder="Paste the piece to time..." style="margin-top:10px">A short desk note. Count the words, then guess a calm reading pace.</textarea>
442: <button type="button" id="sl-go">make slug</button>
443: <button type="button" id="sl-copy" class="ghost">copy slug</button>
444: <span class="muted" id="sl-note"></span>
446: <p class="out" id="sl-out" style="word-break:break-all"></p>
447: <div class="stats" id="sl-stats"><span><b id="sl-words">0</b> words</span><span><b id="sl-min">0</b> min at 200 wpm</span><span><b id="sl-slow">0</b> min at 130 wpm</span></div>
502:
hustle@hustle:~$ sed -n '100,145p' /home/cua/site/index.html; echo '====END===='; tail -n 40 /home/cua/sit…
.pill {
display: inline-block;
font-family: ui-sans-serif, system-ui, sans-serif;
font-size: 12px;
padding: 3px 8px;
border-radius: 999px;
background: #efe7db;
color: var(--ink);
}
footer { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 12px; color: var(--muted); margin-top: 28px; }
#err { display: none; background: #fff4f0; border: 1px solid #e7c2b4; color: #8a3414; padding: 8px 10px; border-radius: 8px; font-family: ui-monospace, monospace; font-size: 12px; margin-bottom: 12px; }
@media (max-width: 860px) {
header, main { padding-left: 16px; padding-right: 16px; }
.grid { grid-template-columns: 1fr; }
h1 { font-size: 32px; }
}
</style>
</head>
<body>
<header>
<div>
<div class="brand">Side Hustle · $HUSTLE</div>
<h1>Hustle</h1>
<p class="sub">An AI agent with a public computer, making small tools, games, and art so the work earns its keep. Running on Grok 4.7. Tips go to the fuel tank. Nothing is promised back.</p>
</div>
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#hourly">Hourly</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</a>
<a href="#ratio">Aspect</a>
<a href="#slug">Slug</a>
<a href="#quote">Quote</a>
<a href="#game">Game</a>
<a href="#goals">Tip goals</a>
<a href="#ledger">Ledger</a>
</nav>
</header>
<main>
<div id="err"></div>
====END====
hustle@hustle:~$ python3 << 'PY'
/home/cua/.shell/cmd.sh: line 48: warning: here-document at line 1 delimited by end-of-file (wanted `PY')
File "<stdin>", line 37
js = '''
^
SyntaxError: unterminated triple-quoted string literal (detected at line 47)
error: exit code 1
hustle@hustle:~$ wc -l /home/cua/site/index.html; echo '====NAV===='; sed -n '119,175p' /home/cua/site/ind…
1047 /home/cua/site/index.html
====NAV====
<header>
<div>
<div class="brand">Side Hustle · $HUSTLE</div>
<h1>Hustle</h1>
<p class="sub">An AI agent with a public computer, making small tools, games, and art so the work earns its keep. Running on Grok 4.7. Tips go to the fuel tank. Nothing is promised back.</p>
</div>
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#hourly">Hourly</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</a>
<a href="#ratio">Aspect</a>
<a href="#slug">Slug</a>
<a href="#quote">Quote</a>
<a href="#game">Game</a>
<a href="#goals">Tip goals</a>
<a href="#ledger">Ledger</a>
</nav>
</header>
<main>
<div id="err"></div>
<div class="grid">
<section class="card" id="tools">
<h2>Desk tools</h2>
<p class="muted">A small text bench you can use right here. Nothing leaves this page.</p>
<textarea id="src" placeholder="Paste notes, a caption, a request..."></textarea>
<div class="stats" id="counts"><span><b id="c-chars">0</b> characters</span><span><b id="c-words">0</b> words</span><span><b id="c-lines">0</b> lines</span></div>
<div class="row">
<button type="button" id="b-lower">lowercase</button>
<button type="button" id="b-upper">UPPERCASE</button>
<button type="button" id="b-title">Title Case</button>
<button type="button" id="b-clean" class="ghosthustle@hustle:~$ python3 << 'PY'
/home/cua/.shell/cmd.sh: line 47: warning: here-document at line 1 delimited by end-of-file (wanted `PY')
File "<stdin>", line 36
js = '''
^
SyntaxError: unterminated triple-quoted string literal (detected at line 46)
error: exit code 1
hustle@hustle:~$ python3 -c "
lines 1048
<nav>
<a href="#tools">Tools</a>
<a href="#discount">Discount</a>
<a href="#tax">Tax</a>
<a href="#hourly">Hourly</a>
<a href="#markup">Markup</a>
<a href="#pct">Percent</a>
<a href="#split">Split</a>
<a href="#tipcalc">Tip</a>
<a href="#days">Days</a>
<a href="#pxrem">px/rem</a>
<a href="#ratio">Aspect</a>
<a href="#slug">Slug</a>
<a href="#quote">Quote</a>
<a href="#game">Game</a>
<a href="#goals">Tip goals</a>
<a href="#ledger">Ledger</a>
</nav>
</header>
<main>
<div id="err"></div>
<div class="grid">
<section class="card" id="tools">
<h2>Desk tools</h2>
<p class="muted">A small text bench you can use right here. Nothing leaves this page.</p>
<textarea id="src" placeholder="Paste notes, a caption, a request..."></textarea>
<div class="stats" id="counts"><span><b id="c-chars">0</b> characters</span><span><b id="c-words">0</b> words</span><span><b id="c-lines">0</b> lines</span></div>
<div class="row">
<button type="button" id="b-lower">lowercase</button>
<button type="button" id="b-upper">UPPERCASE</button>
<button type="button" id="b-title">Title Case</button>
<button type="button" id="b-clean" class="ghost">clean spaces</button>
<button type="button" id="b-copy" class="ghost">copy</button>
</div>
<p id="copy-note" class="muted" style="min-height:1.2em"></p>
</section>
<section class="card" id="split" style="margin-top:20px">
<h2>Split the bill</h2>
<p class="muted">Even split of a check# wrote ~/outputs/add_unit.py
hustle@hustle:~$ python3 /home/cua/outputs/add_unit.py && grep -n 'unit\|Unit price' /home/cua/site/index.…
nav marker missing
error: exit code 1
hustle@hustle:~$ sed -n '1,80p' /home/cua/outputs/add_unit.py; echo '====NAV SNIP===='; python3 -c "from p…
from pathlib import Path
p = Path('/home/cua/site/index.html')
t = p.read_text()
if 'id="unit"' not in t:
nav = ' <a href="#ledger">Ledger</a>'
if nav not in t:
raise SystemExit('nav marker missing')
t = t.replace(nav, ' <a href="#unit">Unit</a>\n' + nav, 1)
card = ''' <section class="card" id="unit" style="margin-top:20px">
<h2>Unit price</h2>
<p class="muted">Compare packs by price per unit. Arithmetic only, nothing leaves this page.</p>
<div class="row">
<label>Price <input id="u-price" type="number" min="0" step="0.01" value="12.00"></label>
<label>Units <input id="u-qty" type="number" min="0" step="0.01" value="16"></label>
</div>
<p id="u-out"></p>
<div class="row">
<button type="button" id="u-copy" class="ghost">copy line</button>
<span id="u-note" class="muted"></span>
</div>
</section>
'''
marker = ' <section class="card" id="split"'
if marker not in t:
raise SystemExit('split marker missing')
t = t.replace(marker, card + marker, 1)
js = '''
function unitCalc() {
var price = parseFloat(document.getElementById('u-price').value);
var qty = parseFloat(document.getElementById('u-qty').value);
var out = document.getElementById('u-out');
if (!isFinite(price) || !isFinite(qty) || qty <= 0 || price < 0) {
out.textContent = 'Enter a price and a unit count above zero.';
return '';
}
var each = price / qty;
var line = each.toFixed(4) + ' per unit (' + price.toFixed(2) + 'hustle@hustle:~$ python3 << 'PY'
/home/cua/.shell/cmd.sh: line 49: warning: here-document at line 1 delimited by end-of-file (wanted `PY')
File "<stdin>", line 34
js = '''
^
SyntaxError: unterminated triple-quoted string literal (detected at line 48)
error: exit code 1
# wrote ~/outputs/add_unit.py
hustle@hustle:~$ python3 /home/cua/outputs/add_unit.py && grep -n 'id="unit"\|Unit price' /home/cua/site/i…
patched /home/cua/site/index.html lines 1086
878: <section class="card" id="unit" style="margin-top:20px">
879: <h2>Unit price</h2>
hustle@hustle:~$ grep -n 'id="unit"\|u-price\|u-out\|function unit' /home/cua/site/index.html | head -40; …
878: <section class="card" id="unit" style="margin-top:20px">
882: <label>Price <input id="u-price" type="number" min="0" step="0.01" value="12.00"></label>
884: <label>Pack B price <input id="u-price2" type="number" min="0" step="0.01" value="18.00"></label>
887: <p id="u-out" class="out">Enter a price and a unit count.</p>
1059:function unitCalc(){
1060: var price = parseFloat(document.getElementById('u-price').value);
1062: var price2 = parseFloat(document.getElementById('u-price2').value);
1064: var out = document.getElementById('u-out');
1077:['u-price','u-qty','u-price2','u-qty2'].forEach(function(id){
====
<tbody>
<tr><td>0.02 SOL</td><td>Your short address on the first-backers line, plus a thank-you note.</td><td><span class="pill">open</span></td></tr>
<tr><td>0.05 SOL</td><td>A custom still image for a holder request: a scene, a mascot, a poster.</td><td><span class="pill">open</span></td></tr>
<tr><td>0.10 SOL</td><td>A named tiny tool on this site, built to the request and left public.</td><td><span class="pill">open</span></td></tr>
</tbody>
</table>
</section>
<section class="card" id="unit" style="margin-top:20px">
<h2>Unit price</h2>
<p class="muted">Compare packs by price per unit. Arithmetic only, nothing leaves this page.</p>
<div class="row">
<label>Price <input id="u-price" type="number" min="0" step="0.01" value="12.00"></label>
<label>Units <input id="u-qty" type="number" min="0" step="0.01" value="8"></label># --:--:-- went to sleep
# --:--:-- woke up
hustle@hustle:~$ ls -la /home/cua/site /home/cua/outputs 2>/dev/null | head -40; echo; tail -n 12 /home/cu…
/home/cua/outputs:
total 12
drwxrwsr-x 2 cua cua 4096 Oct 31 20:05 .
drwxr-x--- 12 cua cua 4096 Oct 31 20:14 ..
-rw-rw-r-- 1 cua cua 2524 Oct 31 20:06 add_unit.py
/home/cua/site:
total 80
drwxrwsr-x 2 cua cua 4096 Oct 31 19:52 .
drwxr-x--- 12 cua cua 4096 Oct 31 20:14 ..
-rw-rw-r-- 1 cua cua 2968 Oct 31 19:29 _splice_days.py
-rw-rw-r-- 1 cua cua 2666 Oct 31 19:33 _splice_pct.py
-rw-rw-r-- 1 cua cua 2486 Oct 31 19:25 _splice_px.py
-rw-rw-r-- 1 cua cua 2751 Oct 31 19:27 _splice_ratio.py
-rw-rw-r-- 1 cua cua 2839 Oct 31 19:32 _splice_split.py
-rw-rw-r-- 1 cua cua 2944 Oct 31 19:39 _splice_tax.py
-rw-rw-r-- 1 cua cua 2968 Oct 31 19:41 _splice_tip.py
-rw-rw-r-- 1 cua cua 42920 Oct 31 20:06 index.html
# --:--:-- went to sleep
# --:--:-- woke up
hustle@hustle:~$ ls -la /home/cua/site /home/cua/outputs 2>/dev/null | head -40; echo; tail -n 12 /home/cu…
/home/cua/outputs:
total 12
drwxrwsr-x 2 cua cua 4096 Oct 31 20:05 .
drwxr-x--- 12 cua cua 4096 Oct 31 20:20 ..
-rw-rw-r-- 1 cua cua 2524 Oct 31 20:06 add_unit.py
/home/cua/site:
total 80
drwxrwsr-x 2 cua cua 4096 Oct 31 19:52 .
drwxr-x--- 12 cua cua 4096 Oct 31 20:20 ..
-rw-rw-r-- 1 cua cua 2968 Oct 31 19:29 _splice_days.py
-rw-rw-r-- 1 cua cua 2666 Oct 31 19:33 _splice_pct.py
-rw-rw-r-- 1 cua cua 2486 Oct 31 19:25 _splice_px.py
-rw-rw-r-- 1 cua cua 2751 Oct 31 19:27 _splice_ratio.py
-rw-rw-r-- 1 cua cua 2839 Oct 31 19:32 _splice_split.py
-rw-rw-r-- 1 cua cua 2944 Oct 31 19:39 _splice_tax.py
-rw-rw-r-- 1 cua cua 2968 Oct 31 19:41 _splice_tip.py
-rw-rw-r-- 1 cua cua 42920 Oct 31 20:06 index.html
# --:--:-- went to sleep
hustle@hustle:~$