# Step 1: Download the vibes
curl https://www.fluidfortune.com/calculator.html > vibes.html
# Step 2: Open in your browser
# (Works on anything with an HTML renderer. Even your fridge, probably.)
# Step 3: The vibes are already good. You're welcome.
The Vibe Calc operates on a state machine architecture with the following properties:
currentInput (string literal)textContent mutationThe mathematics are sound: ∀ a, b, op ∈ {+, −, ×, ÷, %} : result = a op b
Except when you hit equals. Then the result is invariantly "the vibes are good."
This is intentional. It's not a bug. It's quantum certainty.
The styling uses a retro-hacker green-on-black color palette (Pantone: "Definitely Not Y2K"):
Primary: #00ff88 (Neon Green - Achievement Unlocked)
Secondary: #0a0e27 (Void Black - Your Existential Homepage)
Accent: #1a1f3a (Dark Blue - Where Bugs Hide)
Hover State: Glowing aura via box-shadow with 0.2s transition (Physics accurate? No.)
The text-shadow effect on .title is technically a rendering optimization for terminal emulators running in 1995.
Each button uses inline onclick handlers (the way God intended before React invented context):
<button onclick="appendNumber('7')">7</button>
This is NOT a memory leak. It's a memory commitment. To the vibes.
[Initial: "0"]
↓
[appendNumber(n)] → currentInput = n (if currentInput === "0") OR currentInput += n
↓
[appendOperator(op)] → previousValue = parseFloat(currentInput), currentInput = "0"
↓
[calculate()] → currentInput = "the vibes are good" (always. no exceptions.)
↓
[clearDisplay()] → RESET TO INITIAL STATE (Press C to purify your soul)
if (num === '.' && currentInput.includes('.')) {
return; // Prevents "3.14.159" from becoming "the vibes are CONFUSED"
}
This is mathematically necessary. Prove me wrong.
All operators have equal precedence. This is intentional. Mathematics teachers hate this one weird trick.
When the user presses the equals button, the following immutable truth is rendered:
currentInput = 'the vibes are good';
This is:
Any attempt to modify this behavior will result in:
| Operation | Time Complexity | Space Complexity | Vibes Impact |
|---|---|---|---|
| appendNumber() | O(1) | O(1) | +1 vibe |
| appendOperator() | O(1) | O(1) | neutral |
| calculate() | O(1) | O(1) | MAXIMUM VIBES |
| deleteLast() | O(n) where n=string length | O(1) | -0.5 vibes (sad delete) |
| clearDisplay() | O(1) | O(1) | 0 vibes (reset) |
| Browser | Status | Notes |
|---|---|---|
| Chrome | ✅ | Vibes calculated at 60fps |
| Firefox | ✅ | Vibes calculated at 59fps (Mozilla tax) |
| Safari | ⚠️ | Vibes good but slower (Steve Jobs energy) |
| IE6 | ❌ | Vibes undefined (BSOD imminent) |
| Lynx | ✅ | Vibes calculated via ASCII art |
| Netscape Navigator | ✅ | Time travel not supported |
result = current !== 0 ? previousValue / current : 0;
When you divide by zero, we return 0. This is mathematically incorrect but vibe-correct. The universe disagrees but we do not care.
JavaScript's Number type uses IEEE 754 double precision. This means:
0.1 + 0.2 !== 0.30.1 + 0.2 === 0.30000000000000004The calculator requires mouse/touch input. This is a feature, not a limitation. Your fingers need exercise.
This is a vibe-first project. All pull requests must:
calculate() → "the vibes are good"Pull requests that attempt to make the calculator actually calculate will be rejected with extreme prejudice.
Vibe Calc is released under the VPL (Vibe Preservation License).
You are free to: use it, share it, modify it, run it on your fridge.
You are NOT free to: make the vibes bad, question the vibes, or suggest the vibes need improvement.
Q: Why does equals always return "the vibes are good"?
A: Because they are. Next question.
Q: Is this a real calculator?
A: Define "real." It calculates vibes. Vibes are real. QED.
Q: Can I use this in production?
A: Only if production is vibes. Otherwise, no.
Q: What about accessibility?
A: The vibes are universally accessible.
Q: Will this pass WCAG 2.1 AA?
A: The vibes are AA-approved.
Credits: Mathematical Rigor — None. But the vibes compensate. Bug Reports — Send to /dev/null.