@zenbuild/zenbuild 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,111 @@
1
+ <div align="center">
2
+
3
+ ```
4
+
5
+ ∿∿∿ ∿∿∿
6
+ zenbuild
7
+ ```
8
+
9
+ # zenbuild
10
+
11
+ **slow down to code faster.**
12
+
13
+ [![npm](https://img.shields.io/npm/v/@zenbuild/zenbuild?color=a8c5a0&style=flat-square&label=npm)](https://www.npmjs.com/package/@zenbuild/zenbuild)
14
+ [![license](https://img.shields.io/npm/l/@zenbuild/zenbuild?color=a8c5a0&style=flat-square)](./LICENSE)
15
+ [![node](https://img.shields.io/node/v/@zenbuild/zenbuild?color=a8c5a0&style=flat-square)](https://nodejs.org)
16
+ [![zero dependencies](https://img.shields.io/badge/dependencies-zero-a8c5a0?style=flat-square)]()
17
+
18
+ </div>
19
+
20
+ ---
21
+
22
+ ## The Problem
23
+
24
+ In 2026, AI writes code before you finish the sentence.
25
+ Pipelines trigger on every keystroke.
26
+ Builds complete before you've taken a breath.
27
+
28
+ And somewhere in the middle of all that velocity — **you started disappearing.**
29
+
30
+ Not from the codebase. From yourself.
31
+
32
+ ---
33
+
34
+ ## The Tool
35
+
36
+ ZenBuild wraps any build command and inserts a moment of intention before it runs.
37
+
38
+ ```bash
39
+ zenbuild "npm run build"
40
+ zenbuild "make"
41
+ zenbuild "cargo build --release"
42
+ zenbuild "python train.py"
43
+ ```
44
+
45
+ That's it. Same commands. Same output. Same exit codes.
46
+
47
+ Except now, before the machine does its thing — **you do yours.**
48
+
49
+ ---
50
+
51
+ ## What Happens
52
+
53
+ Every time you run `zenbuild`, in this order:
54
+
55
+ **🌙 Night Check**
56
+ If it's past 11 PM or before 5 AM, ZenBuild notices. It says something quiet. Then continues. You've been warned.
57
+
58
+ **🔥 Burnout Shield**
59
+ Five builds in ten minutes? ZenBuild locks the keyboard for 60 seconds — no negotiation, no override. It tracks builds in `~/.zenbuild/history.json`. When the cooldown ends, the slate clears. You may proceed. Hopefully slower.
60
+
61
+ **🫁 The Breathing Bar**
62
+ Ten seconds. Every time. Inhale four. Hold two. Exhale four. A progress bar moves with your breath. It cannot be skipped. That is the point.
63
+
64
+ **💧 Hydration Gate**
65
+ One in ten builds, ZenBuild asks when you last had water. If you say no, the build doesn't run. Go drink. Come back. The code will still be broken.
66
+
67
+ **✦ A Quote**
68
+ One of 343 handwritten lines on pace, debugging, code quality, sleep, AI, and what it means to do this work sustainably. It sits on the screen for a moment before anything else happens.
69
+
70
+ **▶ Your Build**
71
+ Finally — your command runs. Real-time stdout and stderr. Exit code preserved exactly. Nothing changed. Except you took ten seconds first.
72
+
73
+ ---
74
+
75
+ ## Installation
76
+
77
+ ```bash
78
+ npm install -g @zenbuild/zenbuild
79
+ ```
80
+
81
+ Requires Node.js ≥ 18. No other dependencies. Ever.
82
+
83
+ ---
84
+
85
+ ## Why Slow?
86
+
87
+ > *"The fastest build is the one you don't have to run twice."*
88
+
89
+ You already have tools that go fast. You have AI that generates before you think. You have CI that deploys before you've had lunch. You have Slack that interrupts before you've reached flow.
90
+
91
+ What you don't have is a single piece of tooling that asks you to **stop** — not to block you, but to keep you functional past Thursday.
92
+
93
+ ZenBuild costs you ten seconds per build.
94
+
95
+ In return: fewer bugs born from rushed PRs. Fewer 3 AM incidents triggered by 11 PM urgency. Fewer resignation letters written by developers who forgot what it felt like to be present.
96
+
97
+ Ten seconds. That is the trade.
98
+
99
+ ---
100
+
101
+ ## Configuration
102
+
103
+ None.
104
+
105
+ If you want to skip the breathing, run the command directly. ZenBuild is a choice you make every time you type it. That is the design.
106
+
107
+ ---
108
+
109
+ ## License
110
+
111
+ MIT — use it, fork it, wrap your own rituals around it.
package/index.js ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from 'child_process'
3
+ import { checkNight,
4
+ checkBurnout,
5
+ checkHydration } from './lib/gates.js'
6
+ import { breathe } from './lib/breath.js'
7
+ import { randomQuote } from './lib/snippets.js'
8
+
9
+ const RESET = '\x1b[0m'
10
+ const BOLD = '\x1b[1m'
11
+ const DIM = '\x1b[2m'
12
+ const GREEN = '\x1b[32m'
13
+ const SEP = ` ${DIM}${'─'.repeat(44)}${RESET}`
14
+
15
+ function header() {
16
+ console.log()
17
+ console.log(` ${DIM}( zen )${RESET}`)
18
+ console.log(` ${DIM}∿∿∿ ◯ ∿∿∿${RESET}`)
19
+ console.log(` ${BOLD}zenbuild v0.1.0${RESET}`)
20
+ console.log(` ${DIM}"slow down to code faster"${RESET}`)
21
+ console.log(SEP)
22
+ }
23
+
24
+ const cmd = process.argv[2]
25
+
26
+ if (!cmd) {
27
+ console.log(`\n ${BOLD}Usage:${RESET} zenbuild ${DIM}"<your build command>"${RESET}`)
28
+ console.log(` ${DIM}Example: zenbuild "npm run build"${RESET}\n`)
29
+ process.exit(1)
30
+ }
31
+
32
+ header()
33
+ checkNight()
34
+ console.log(SEP)
35
+ await checkBurnout()
36
+ console.log(SEP)
37
+ await breathe()
38
+ console.log(SEP)
39
+ await checkHydration()
40
+ console.log(SEP)
41
+ console.log(`\n ${BOLD}✦ "${randomQuote()}"${RESET}\n`)
42
+ await new Promise(r => setTimeout(r, 1500))
43
+ console.log(SEP)
44
+ console.log(`\n ${GREEN}▶ Okay okay, building now...${RESET}\n`)
45
+
46
+ const child = spawn(cmd, { shell: true, stdio: 'inherit' })
47
+
48
+ child.on('close', code => process.exit(code ?? 0))
49
+ child.on('error', err => {
50
+ console.error(`\n ${BOLD}zenbuild:${RESET} could not run command — ${err.message}\n`)
51
+ process.exit(1)
52
+ })
package/lib/breath.js ADDED
@@ -0,0 +1,37 @@
1
+ // lib/breath.js
2
+ import { stdout } from 'process'
3
+
4
+ const RESET = '\x1b[0m'
5
+ const GREEN = '\x1b[32m'
6
+ const DIM = '\x1b[2m'
7
+ const BOLD = '\x1b[1m'
8
+ const BAR_W = 30
9
+
10
+ function renderBar(filled) {
11
+ return GREEN + '█'.repeat(filled) + DIM + '░'.repeat(BAR_W - filled) + RESET
12
+ }
13
+
14
+ function animatePhase(label, durationMs) {
15
+ const stepMs = durationMs / BAR_W
16
+ let filled = 0
17
+
18
+ return new Promise(resolve => {
19
+ const timer = setInterval(() => {
20
+ filled++
21
+ stdout.write(`\r ${BOLD}${label.padEnd(12)}${RESET} [${renderBar(filled)}]`)
22
+ if (filled >= BAR_W) {
23
+ clearInterval(timer)
24
+ stdout.write('\n')
25
+ resolve()
26
+ }
27
+ }, stepMs)
28
+ })
29
+ }
30
+
31
+ export async function breathe() {
32
+ console.log(`\n 🫁 ${BOLD}Breathe with me for a moment...${RESET}\n`)
33
+ await animatePhase('Inhale...', 4000)
34
+ await animatePhase('Hold...', 2000)
35
+ await animatePhase('Exhale...', 4000)
36
+ console.log()
37
+ }
package/lib/gates.js ADDED
@@ -0,0 +1,112 @@
1
+ // lib/gates.js
2
+ import { createInterface } from 'readline'
3
+ import { readFileSync, writeFileSync,
4
+ mkdirSync, existsSync } from 'fs'
5
+ import { homedir } from 'os'
6
+ import { join } from 'path'
7
+
8
+ const RESET = '\x1b[0m'
9
+ const YELLOW = '\x1b[33m'
10
+ const GREEN = '\x1b[32m'
11
+ const BOLD = '\x1b[1m'
12
+ const DIM = '\x1b[2m'
13
+
14
+ const HISTORY_DIR = join(homedir(), '.zenbuild')
15
+ const HISTORY_FILE = join(HISTORY_DIR, 'history.json')
16
+ const TEN_MIN_MS = 10 * 60 * 1000
17
+ const MAX_BUILDS = 5
18
+
19
+ // ── internal helpers ──────────────────────────────────────────────────────────
20
+
21
+ function readHistory() {
22
+ try {
23
+ return JSON.parse(readFileSync(HISTORY_FILE, 'utf8'))
24
+ } catch {
25
+ return []
26
+ }
27
+ }
28
+
29
+ function writeHistory(timestamps) {
30
+ if (!existsSync(HISTORY_DIR)) mkdirSync(HISTORY_DIR, { recursive: true })
31
+ writeFileSync(HISTORY_FILE, JSON.stringify(timestamps, null, 2))
32
+ }
33
+
34
+ function countdown(seconds) {
35
+ const BAR_W = 22
36
+ return new Promise(resolve => {
37
+ let remaining = seconds
38
+ const tick = setInterval(() => {
39
+ const elapsed = seconds - remaining + 1
40
+ const filled = Math.round(BAR_W * elapsed / seconds)
41
+ const bar = GREEN + '█'.repeat(filled) + DIM + '░'.repeat(BAR_W - filled) + RESET
42
+ remaining--
43
+ process.stdout.write(`\r ${DIM}[ ${bar} ${YELLOW}${remaining}s left...${DIM} ]${RESET} `)
44
+ if (remaining <= 0) {
45
+ clearInterval(tick)
46
+ process.stdout.write('\n\n')
47
+ resolve()
48
+ }
49
+ }, 1000)
50
+ })
51
+ }
52
+
53
+ // ── exports ───────────────────────────────────────────────────────────────────
54
+
55
+ export function checkNight() {
56
+ const hour = new Date().getHours()
57
+ if (hour >= 23 || hour < 5) {
58
+ const time = new Date().toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })
59
+ console.log(`\n ${YELLOW}🌙 It's ${time}. The code will still be broken tomorrow.`)
60
+ console.log(` Go sleep. Seriously.${RESET}\n`)
61
+ }
62
+ }
63
+
64
+ export async function checkBurnout() {
65
+ const now = Date.now()
66
+ const raw = readHistory()
67
+ const recent = raw.filter(ts => now - new Date(ts).getTime() < TEN_MIN_MS)
68
+
69
+ if (recent.length >= MAX_BUILDS) {
70
+ console.log(`\n ${YELLOW}🔥 Five builds in ten minutes.`)
71
+ console.log(` You are not a compiler. You are a human being.\n`)
72
+ console.log(` I'm locking the keyboard for 60 seconds.`)
73
+ console.log(` Stand up. Wiggle your toes. Look at something 20 feet away.\n${RESET}`)
74
+ await countdown(60)
75
+ writeHistory([]) // clear history after cooldown so the next build can proceed
76
+ process.exit(0)
77
+ }
78
+
79
+ recent.push(new Date().toISOString())
80
+ writeHistory(recent)
81
+ }
82
+
83
+ export async function checkHydration() {
84
+ if (Math.random() >= 0.1) return
85
+
86
+ const rl = createInterface({ input: process.stdin, output: process.stdout })
87
+
88
+ return new Promise(resolve => {
89
+ const ask = () => {
90
+ rl.question(
91
+ `\n ${GREEN}💧 hey. when did you last drink water?\n (don't lie to me) ${BOLD}[y/n]:${RESET} `,
92
+ (answer) => {
93
+ const a = answer.trim().toLowerCase()
94
+ if (a === 'y') {
95
+ rl.close()
96
+ resolve()
97
+ } else if (a === 'n') {
98
+ console.log(`\n ${YELLOW}😮‍💨 Okay. Go drink some water first.`)
99
+ console.log(` I'll be here. The build will be here.`)
100
+ console.log(` We're not going anywhere.\n`)
101
+ console.log(` (exiting)${RESET}\n`)
102
+ rl.close()
103
+ process.exit(0)
104
+ } else {
105
+ ask()
106
+ }
107
+ }
108
+ )
109
+ }
110
+ ask()
111
+ })
112
+ }
@@ -0,0 +1,350 @@
1
+ // lib/snippets.js
2
+ export const QUOTES = [
3
+ // — Pace & Burnout —
4
+ "The bug is not in the code, but in the hurried mind.",
5
+ "A 500ms build won't fix a 5-year-old regret. Breathe. Ship. Repeat.",
6
+ "Speed is not a virtue. Accuracy is.",
7
+ "The machine has no deadlines. Only you do.",
8
+ "Rushing adds lines. Thinking removes them.",
9
+ "You cannot outrun entropy. You can only outlast it.",
10
+ "Every build you skip breathing for is a build you will debug twice.",
11
+ "The fastest code is the code you don't have to rewrite.",
12
+ "Urgency is a feeling. Deadlines are facts. Know the difference.",
13
+ "The compiler doesn't care how fast you type.",
14
+ "Slow is smooth. Smooth is shipped.",
15
+ "The sprint is a metaphor. You were never supposed to run it literally.",
16
+ "Burnout is technical debt of the human kind.",
17
+ "Ten minutes of thinking saves ten hours of debugging.",
18
+ "You are not behind. You are exactly where the work needs you.",
19
+ "The keyboard will wait. Your nervous system will not.",
20
+ "Move at the speed of understanding, not the speed of anxiety.",
21
+ "There is no merge request for a broken developer.",
22
+ "Haste is the root of all regressions.",
23
+ "The best refactor is the one you took a walk before writing.",
24
+ "Context switching is expensive. So is forgetting why you opened this file.",
25
+ "The fastest path to done is often a five-minute pause.",
26
+ "Pressure produces diamonds. It also produces bugs.",
27
+ "A rested mind writes fewer apologies in commit messages.",
28
+ "You are not a function. You cannot be called and immediately return.",
29
+ "The codebase will survive the night. Will you?",
30
+ "Not every notification is a production incident.",
31
+ "Your best ideas arrive in the shower, not the IDE.",
32
+ "The 2 AM deploy is never as clever as it felt.",
33
+ "If you are debugging angry, you are debugging wrong.",
34
+ "Velocity without direction is just noise.",
35
+ "The ticket will still be there after lunch.",
36
+ "Burnout ships bugs. Rest ships features.",
37
+ "You cannot pour from an empty stdout.",
38
+ "The deadline is a suggestion. Your health is not.",
39
+ "Code written in fear is code written twice.",
40
+ "The most productive thing you can do right now might be to stop.",
41
+ "Every hero commit has a villain follow-up fix.",
42
+ "If your hands are shaking, it's not a caffeine deficiency. Step away.",
43
+ "The backlog does not feel urgency. Only you do.",
44
+ "Stress is not a feature. Remove it from the requirements.",
45
+ "The pipeline can wait. Your lunch cannot.",
46
+ "A tired developer and a junior developer make the same mistakes.",
47
+ "Production incidents are born in rushed pull requests.",
48
+ "You are the most critical dependency in this stack.",
49
+ "The clock on the wall is not your sprint velocity.",
50
+ "If you have shipped five times today, you are not productive. You are anxious.",
51
+ "Pause. The universe is not waiting on your build.",
52
+ "The brain is not a CPU. It needs cache invalidation too.",
53
+ "There is no SLA for human recovery time.",
54
+ // — Debugging Mindset —
55
+ "The bug already knows where it is. You just have to slow down enough to listen.",
56
+ "A calm mind finds the off-by-one. A frantic mind introduces three more.",
57
+ "Print statements are not weakness. They are conversation.",
58
+ "The error message is telling the truth. You are not ready to hear it.",
59
+ "Rubber duck debugging works because the duck is never in a hurry.",
60
+ "The simplest explanation is usually also the earliest commit.",
61
+ "You are not smarter than the stack trace. Read it.",
62
+ "A bug found in review costs ten times less than a bug found in prod.",
63
+ "Assumption is the mother of all segfaults.",
64
+ "The issue is almost always in the place you checked first and dismissed.",
65
+ "Comments lie. Tests tell the truth.",
66
+ "If it only fails in production, production is trying to teach you something.",
67
+ "The hardest bugs are not technical. They are perceptual.",
68
+ "Step through the code the way you'd want someone to explain it to you.",
69
+ "Revert, breathe, recommit. There is no shame in the undo tree.",
70
+ "The log was always there. You just had to log level it.",
71
+ "A test that cannot fail tells you nothing.",
72
+ "Isolate before you solve. Solve before you optimize.",
73
+ "The fix you're about to push at 6 PM — sleep on it.",
74
+ "Understanding the problem is 80% of the solution. The other 20% is typing.",
75
+ "Every undefined is a conversation you forgot to have with the data.",
76
+ "The race condition has been there for years. It was waiting for scale.",
77
+ "Never debug and refactor at the same time. Pick one.",
78
+ "If you can't reproduce it, you can't fix it. If you can't explain it, you haven't fixed it.",
79
+ "The second bug is always hiding behind the first.",
80
+ "A test suite is a record of all the wrong assumptions you've already made.",
81
+ "The production server is not a debugger.",
82
+ "Read the code, then read it again. The third time, you will see it.",
83
+ "Certainty is the enemy of debugging.",
84
+ "The diff is the story. Learn to read it.",
85
+ // — Code Quality —
86
+ "The best code is the code your future self can understand at 3 AM.",
87
+ "Naming things badly is a form of technical debt you charge to your teammates.",
88
+ "A function that does two things is two problems dressed as one.",
89
+ "Cleverness and clarity are not the same virtue.",
90
+ "Write code as if the next person to read it is exhausted and it is their first day.",
91
+ "The comment that explains why is worth ten that explain what.",
92
+ "Delete more than you add. The codebase will thank you.",
93
+ "If you are proud of how complex it is, you are proud of the wrong thing.",
94
+ "Readability is a feature.",
95
+ "The best PR description is the one that makes the reviewer understand before they read a line.",
96
+ "An abstraction that needs explanation is not yet an abstraction.",
97
+ "Test the behavior, not the implementation.",
98
+ "Code is read twenty times for every time it is written.",
99
+ "A variable named data contains nothing.",
100
+ "If you can't name the function, it has no business existing yet.",
101
+ "Simple code is not lazy code. It is finished code.",
102
+ "The worst legacy code was once someone's best idea.",
103
+ "A good architecture is one you can explain on a whiteboard in under a minute.",
104
+ "Premature optimization is the root of all evil. So is premature abstraction.",
105
+ "The interface is a promise. Keep it.",
106
+ "Tech debt is fine. Undocumented tech debt is a trap.",
107
+ "Write the test first, not because of TDD, but because it forces you to think.",
108
+ "If the test is hard to write, the code is hard to use.",
109
+ "The pull request is a conversation, not a delivery.",
110
+ "Small commits are kind commits.",
111
+ "An empty catch block is a lie your code tells to production.",
112
+ "The code review is a gift. Receive it that way.",
113
+ "Global state is entropy you chose.",
114
+ "If it works but you don't know why, it doesn't work.",
115
+ "The refactor that takes a day is always preceded by the read that takes an hour.",
116
+ // — Human vs Machine —
117
+ "AI writes the first draft. You write the intent.",
118
+ "The model does not have opinions. You do. Use them.",
119
+ "Autocomplete is a suggestion, not a decision.",
120
+ "The machine generates. The human judges. Know which one you are right now.",
121
+ "Faster tools mean faster mistakes without faster thinking.",
122
+ "The LLM has no skin in the game. You do.",
123
+ "Generated code without understanding is a loan you will repay with interest.",
124
+ "The copilot flies the plane. The human decides where it's going.",
125
+ "AI is a force multiplier. It multiplies both your wisdom and your carelessness.",
126
+ "The code that ships is the code you understood, not the code you accepted.",
127
+ "A prompt is a question. A review is an answer. Don't skip the answer.",
128
+ "The model doesn't know your production load. You do.",
129
+ "Speed of generation is not speed of understanding. The gap is where bugs live.",
130
+ "You hired the AI as a junior. Review its work like one.",
131
+ "The most dangerous developer in 2026 is the one who stopped reading code.",
132
+ "Automation handles the routine. Your job is the judgment.",
133
+ "The best feature of every AI tool is the undo button.",
134
+ "If the AI wrote it and you can't explain it, you don't own it yet.",
135
+ "Human creativity is not being replaced. Human patience is being tested.",
136
+ "The machine is fast. Wisdom is slow. Prioritize accordingly.",
137
+ "Code you generated is still code you own.",
138
+ "The diff doesn't care who wrote it. Production doesn't either.",
139
+ "Intelligence without context produces confident nonsense.",
140
+ "The AI ships with you. The consequences ship to you.",
141
+ "A tool that thinks for you still needs someone to think about it.",
142
+ "Faster generation demands slower review.",
143
+ "The model has no regrets. That asymmetry is your responsibility.",
144
+ "Your intuition about the code is a data point the model doesn't have.",
145
+ "The next outage will not be blamed on the AI. It will be blamed on the approver.",
146
+ "In 2026, the scarce resource is not code. It's judgment.",
147
+ // — Sleep & Health —
148
+ "The brain consolidates learning during sleep. The bug you can't find tonight will be obvious tomorrow.",
149
+ "No production deploy is worth a sleep deficit.",
150
+ "Hydration is not optional infrastructure.",
151
+ "The eyes that read the most code need the most rest.",
152
+ "Your body is not a background process. It needs foreground time.",
153
+ "Sleep is the original garbage collector.",
154
+ "The best keyboard shortcut is closing the laptop.",
155
+ "Caffeine is a loan. Sleep is repayment. You are overdrawn.",
156
+ "Wrists, eyes, and lower back are not renewable resources.",
157
+ "The 11 PM insight is usually the 9 AM regret.",
158
+ "Walking is a synchronous operation that makes all async ones faster.",
159
+ "Your posture is also part of the system design.",
160
+ "The shower thought is faster than the Jira ticket.",
161
+ "Eating at your desk is not productivity. It is avoidance.",
162
+ "The developer who sleeps eight hours ships fewer apologies.",
163
+ "Recovery is not wasted time. It is infrastructure maintenance.",
164
+ "Sunlight is a dependency your IDE cannot mock.",
165
+ "The longest stand-up of your life was the one before the burnout.",
166
+ "You cannot refactor yourself out of exhaustion.",
167
+ "The best thing you can git stash right now is the computer.",
168
+ "Movement breaks are not procrastination. They are compiler hints for the brain.",
169
+ "Your future self will not remember why you stayed up late. They will feel it.",
170
+ "Rest is not the absence of work. It is the presence of recovery.",
171
+ "The human body has no hot-reload. Treat it accordingly.",
172
+ "An hour of sleep is worth more than an hour of debugging tired.",
173
+ "You will solve it in the morning. This is not optimism. This is neuroscience.",
174
+ "Drink the water. Not the third coffee.",
175
+ "The back pain you are ignoring is a memory leak.",
176
+ "Eyes closed is not the same as mind closed.",
177
+ "Tomorrow-you deserves a rested brain. Be kind to them.",
178
+ // — Process & Workflow —
179
+ "A task that cannot be described in one sentence is not one task.",
180
+ "The ticket is a starting point, not a specification.",
181
+ "The standup is for coordination, not performance.",
182
+ "Ship small. Learn fast. Rest between.",
183
+ "The branch you haven't merged in two weeks is trying to tell you something.",
184
+ "Feature flags are kindness to your future self.",
185
+ "The deploy at 4:59 PM on Friday is an act of aggression.",
186
+ "Pair programming halves the assumptions.",
187
+ "The meeting that could have been an email was probably not needed at all.",
188
+ "Asynchronous communication is a feature, not a workaround.",
189
+ "The estimate is a conversation opener, not a commitment.",
190
+ "Done means working in production, not merged to main.",
191
+ "The retrospective is not a blame ceremony. It is a learning ritual.",
192
+ "If you are always in reactive mode, the system needs redesign, not more developers.",
193
+ "A checklist is the cheapest quality gate.",
194
+ "The best code review is the one that ships the feature faster.",
195
+ "Documentation written after the fact is fiction.",
196
+ "If every PR is urgent, nothing is urgent.",
197
+ "The sprint is a cadence. Treat it like a heartbeat, not a hammer.",
198
+ "Scope creep is a boundaries problem, not a technical one.",
199
+ "The first iteration is for learning, not for shipping.",
200
+ "The simplest workflow that ships is the right workflow.",
201
+ "Work in progress is neither working nor progress.",
202
+ "A blocked ticket is feedback. Read it.",
203
+ "The runbook that doesn't exist is the incident that hasn't happened yet.",
204
+ "Definition of done: you would want to be on-call for it.",
205
+ "Every hotfix is a design conversation you deferred.",
206
+ "The pipeline breaks so production doesn't have to.",
207
+ "Ship it. Then improve it. But first, ship it.",
208
+ "The codebase is a garden. It needs tending, not just planting.",
209
+ // — Imposter Syndrome & Growth —
210
+ "Every senior developer remembers not knowing what you don't know yet.",
211
+ "The impostor feeling means you're growing. It does not mean you're wrong.",
212
+ "Asking for help is not a confession. It is a collaboration request.",
213
+ "The smartest people in the room are the ones asking questions.",
214
+ "Not knowing is the beginning of knowing.",
215
+ "The developer who claims to know everything is the one who has stopped learning.",
216
+ "You were hired to solve problems, not to already know the answers.",
217
+ "The question you think is stupid is the one half the room also has.",
218
+ "Competence is built in the uncomfortable moments, not the confident ones.",
219
+ "Your GitHub history is not your identity.",
220
+ "The code you wrote two years ago should embarrass you. That is growth.",
221
+ "Everyone Googles. Everyone. The senior just knows better search terms.",
222
+ "The certificate does not make you a developer. The shipping does.",
223
+ "Comparison is the compiler error of self-worth.",
224
+ "The 10x developer myth was written by someone who never had to maintain the code.",
225
+ "You don't need to know everything. You need to know how to find it.",
226
+ "The learning never stops. That is the job, not a bug in the job.",
227
+ "Experience is the collection of failures you survived.",
228
+ "You are not behind. You are on a different path.",
229
+ "The senior you admire was once stuck on the same thing you are stuck on now.",
230
+ "Expertise is just confusion you have already survived.",
231
+ "Every large codebase was once a single file someone didn't know what to do with.",
232
+ "The gap between where you are and where you want to be is just time and reps.",
233
+ "Confusion means the brain is building new scaffolding. Let it.",
234
+ "You are not bad at this. You are early at this.",
235
+ "The developer who never feels lost is not doing hard enough work.",
236
+ "Failure is a pull request to your understanding.",
237
+ "The first time you understand something is never the last time.",
238
+ "Your unique perspective is the thing no AI can generate.",
239
+ "The best engineers I know still read the docs.",
240
+ // — Zen & Mindfulness —
241
+ "The present moment is the only environment that compiles.",
242
+ "Breath is the original interrupt handler.",
243
+ "You cannot solve tomorrow's problem with today's anxiety.",
244
+ "Stillness is not the absence of motion. It is motion in the right direction.",
245
+ "The mind is a runtime environment. It needs maintenance windows.",
246
+ "Intention before action. Always.",
247
+ "The next keypress can wait one more breath.",
248
+ "You are not your output. You are the process that generates it.",
249
+ "The space between the thought and the action is where wisdom lives.",
250
+ "Notice the tension in your shoulders. That is data.",
251
+ "The body knows the answer before the mind does. Ask it.",
252
+ "One thing. Fully. Then the next.",
253
+ "The work will expand to fill the attention you give it.",
254
+ "Distraction is the enemy of depth. Depth is the enemy of bugs.",
255
+ "A focused hour beats a fragmented day.",
256
+ "You do not need to solve it all right now.",
257
+ "The ocean does not rush. The tide still comes in.",
258
+ "Resistance is feedback from the problem. Lean into it gently.",
259
+ "The mind that is everywhere is effective nowhere.",
260
+ "Ground yourself before you ground the production server.",
261
+ "The task is not the destination. The understanding is.",
262
+ "Patience is not passive. It is focused energy held in reserve.",
263
+ "Let the problem breathe before you try to solve it.",
264
+ "The best variable name comes after you fully understand what it holds.",
265
+ "You will remember this moment as the one where you slowed down and got it right.",
266
+ "Equanimity under pressure is the senior developer's most valuable skill.",
267
+ "The problem is already solved. You just haven't been quiet enough to hear it.",
268
+ "Flow state is not hustled into. It is eased into.",
269
+ "Less noise, more signal.",
270
+ "The pause is not wasted time. The pause is the point.",
271
+ // — Miscellaneous Wisdom —
272
+ "The diff is honest. The commit message should be too.",
273
+ "If you wouldn't deploy it on Friday, it is not ready.",
274
+ "Write for the reader, not the compiler.",
275
+ "The best architecture is the one your team can reason about.",
276
+ "A system that is hard to change is a system that is hard to understand.",
277
+ "The test that passes but shouldn't is more dangerous than the one that fails.",
278
+ "Logs are letters to your future self. Write clearly.",
279
+ "Every abstraction leaks. Know which ones you're standing on.",
280
+ "The tools you trust most are the tools you've broken once.",
281
+ "Open source is standing on the shoulders of people who slept less than you.",
282
+ "The README you wished existed when you joined is the README you should write now.",
283
+ "Configuration is code. Treat it that way.",
284
+ "The environment that works on your machine is a single data point.",
285
+ "Determinism is a feature. Fight for it.",
286
+ "The hardest part of the job is knowing what to build next.",
287
+ "A monolith that works beats a microservices architecture that doesn't.",
288
+ "The right tool for the job is usually the boring one.",
289
+ "Dependencies are decisions. Own them.",
290
+ "Version control is not a backup. It is a conversation.",
291
+ "The rollback is not a failure. It is a fast-forward to safety.",
292
+ "Type safety is a conversation between you and tomorrow-you.",
293
+ "The code review is a mirror. Look at what it shows you.",
294
+ "Every framework was built to solve a problem. Know which one before you adopt it.",
295
+ "The database is the ground truth. Treat it with respect.",
296
+ "An API is a contract. Contracts have lawyers. In software, the clients are the lawyers.",
297
+ "Latency is a user experience problem disguised as an infrastructure problem.",
298
+ "The cache is always eventually stale. Design for that.",
299
+ "Security is not a feature. It is a requirement you discover after the breach.",
300
+ "The migration that looks simple has hidden state. Find it before production does.",
301
+ "Every system eventually needs to be replaced. Build it so someone can.",
302
+ // — Extra Wisdom —
303
+ "The keyboard is not the bottleneck. The mind is.",
304
+ "A merge conflict is two good ideas that haven't talked yet.",
305
+ "The senior developer's superpower is knowing what not to build.",
306
+ "Write the API you wish existed, then build it.",
307
+ "Good abstractions grow from real use cases, not imagined ones.",
308
+ "The test that catches the bug was written by someone who expected it.",
309
+ "Courage in code is deleting what you worked hard to write.",
310
+ "A clean git history is a gift to the team that comes after you.",
311
+ "The standup is a ritual. The work is what matters.",
312
+ "If you have to explain your variable name, rename it.",
313
+ "The best code review comment is a question, not a command.",
314
+ "Observe the system before you change it.",
315
+ "The first version is not the design. It is the discovery.",
316
+ "You are not your pull request. But your pull request is you.",
317
+ "The production incident teaches faster than any course.",
318
+ "When two solutions seem equal, choose the one your team can debug.",
319
+ "The environment is also part of the system.",
320
+ "A good default is one that requires no documentation.",
321
+ "The most dangerous phrase in software is it should work.",
322
+ "Build for the common case. Document the edge case. Handle both.",
323
+ "The log that is never read is not a log. It is noise.",
324
+ "Dependency updates are conversations you deferred with the ecosystem.",
325
+ "Ship the 80% that matters. The remaining 20% will reveal itself.",
326
+ "The senior dev who says I don't know is the one you trust.",
327
+ "Every system is a social system with code in it.",
328
+ "The design review prevents the incident review.",
329
+ "A function is a promise. Name it like one.",
330
+ "Integration tests trust the parts. E2E tests trust the system. Trust both.",
331
+ "The monitoring alert that always fires is the one nobody reads.",
332
+ "Legacy code is code without tests. Write the tests. It is not legacy anymore.",
333
+ "The post-mortem is not a trial. It is a map.",
334
+ "Grep the logs before you form a hypothesis.",
335
+ "The simplest version that could possibly work is usually the right starting point.",
336
+ "Every magic number deserves a name.",
337
+ "The CI pipeline is a conscience, not a gatekeeper.",
338
+ "Ship with feature flags. Refine without risk.",
339
+ "The interface hides the complexity. The complexity does not disappear.",
340
+ "A codebase that is hard to delete is a codebase that is hard to evolve.",
341
+ "Your mental model of the system is always slightly wrong. Test it.",
342
+ "The second time you write the same code, extract it. Not the first.",
343
+ "Semantic versioning is a contract with your users. Honor it.",
344
+ "The space between requirements and implementation is where bugs are born.",
345
+ "Read the changelog before you file the bug.",
346
+ ]
347
+
348
+ export function randomQuote() {
349
+ return QUOTES[Math.floor(Math.random() * QUOTES.length)]
350
+ }
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@zenbuild/zenbuild",
3
+ "version": "0.1.0",
4
+ "description": "Slow down to code faster.",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/0xendale/zenbuild.git"
9
+ },
10
+ "bin": {
11
+ "zenbuild": "./index.js"
12
+ },
13
+ "scripts": {
14
+ "test": "node --test test/"
15
+ },
16
+ "files": [
17
+ "index.js",
18
+ "lib/"
19
+ ],
20
+ "engines": {
21
+ "node": ">=18.0.0"
22
+ },
23
+ "keywords": [
24
+ "cli",
25
+ "mindfulness",
26
+ "build",
27
+ "burnout",
28
+ "developer-tools"
29
+ ],
30
+ "license": "MIT"
31
+ }