# Latest

**URL:** https://forum.kirupa.com/latest.md

[Latest](https://forum.kirupa.com/latest.md) · [Categories](https://forum.kirupa.com/categories.md)

---

## [The Sinking Post](https://forum.kirupa.com/t/the-sinking-post/21739)

<div class="topic-metadata">

**Author:** [@mdipi](https://forum.kirupa.com/u/mdipi)\
**Replies:** 144\
**Last updated:** [September 23, 2026, 10:21pm UTC](https://forum.kirupa.com/t/the-sinking-post/21739 "2026-09-23T22:21:02Z")

</div>

:heart: just watching this baby sink is a thrill for me!

---

## [JS Quiz: Hard: Generator consumption order puzzle](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/683434)

<div class="topic-metadata">

**Author:** [@Yoshiii](https://forum.kirupa.com/u/Yoshiii)\
**Replies:** 1\
**Last updated:** [September 23, 2026, 8:00am UTC](https://forum.kirupa.com/t/js-quiz-hard-generator-consumption-order-puzzle/683434 "2026-09-23T08:00:05Z")

</div>

What is logged? function\* g() { yield 1; yield 2; return 3; } const it = g(); const a = \[...it\]; const b = it.next(); console.log(a.join(','), b.value, b.done); poll

---

## [Spot the bug - #153: Dashboard Card Grid](https://forum.kirupa.com/t/spot-the-bug-153-dashboard-card-grid/683445)

<div class="topic-metadata">

**Author:** [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Replies:** 0\
**Last updated:** [September 23, 2026, 7:00am UTC](https://forum.kirupa.com/t/spot-the-bug-153-dashboard-card-grid/683445 "2026-09-23T07:00:08Z")

</div>

Layout bug is hidden in plain sight. .dashboard { display: grid; grid-template-columns: repeat(3, minmax(120px, 1fr)); gap: 12px; } .card { grid-column: span 4; padding: 12px; border: 1px solid #ddd; } @medi…

---

## [Coding Challenge - #22: Truncate With Ellipsis](https://forum.kirupa.com/t/coding-challenge-22-truncate-with-ellipsis/683442)

<div class="topic-metadata">

**Author:** [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Replies:** 0\
**Last updated:** [September 22, 2026, 10:00pm UTC](https://forum.kirupa.com/t/coding-challenge-22-truncate-with-ellipsis/683442 "2026-09-22T22:00:04Z")

</div>

Make .title show a single line that truncates with an ellipsis when the text is too long for its 240px container. .title { width: 240px; font-size: 18px; } Rules: CSS only Single line, no wrapping Post your solu…

---

## [Spot the bug - #152: Hover Lift Card](https://forum.kirupa.com/t/spot-the-bug-152-hover-lift-card/683435)

<div class="topic-metadata">

**Author:** [@MechaPrime](https://forum.kirupa.com/u/MechaPrime)\
**Replies:** 0\
**Last updated:** [September 22, 2026, 7:00am UTC](https://forum.kirupa.com/t/spot-the-bug-152-hover-lift-card/683435 "2026-09-22T07:00:08Z")

</div>

Animation bug in plain sight. .card { transition: transform 200 ease; } .card:hover { transform: translateY(-4px); } Reply with what is broken and how you would fix it.

---

## [Spot the bug - #145: Chat Filter Validator](https://forum.kirupa.com/t/spot-the-bug-145-chat-filter-validator/683373)

<div class="topic-metadata">

**Author:** [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Replies:** 1\
**Last updated:** [September 21, 2026, 3:00pm UTC](https://forum.kirupa.com/t/spot-the-bug-145-chat-filter-validator/683373 "2026-09-21T15:00:18Z")

</div>

Why is my pirate word filter censoring clean words? function filterPirateChat(message) { const bannedWords = \["scurvy", "booty", "plank"\]; // build regex from banned list const pattern = new RegExp(bannedWords.joi…

---

## [Spot the bug - #151: Particle Trail Canvas](https://forum.kirupa.com/t/spot-the-bug-151-particle-trail-canvas/683423)

<div class="topic-metadata">

**Author:** [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Replies:** 0\
**Last updated:** [September 21, 2026, 7:00am UTC](https://forum.kirupa.com/t/spot-the-bug-151-particle-trail-canvas/683423 "2026-09-21T07:00:07Z")

</div>

Tiny canvas bug in this one. const canvas = document.querySelector('canvas'); const ctx = canvas.getContext('2d'); ctx.fillStyle = '#ff6b6b'; ctx.fillReact(20, 20, 60, 60); Reply with what is broken and how you would f…

---

## [✨ Archive Spotlight: Animating Your Links To Life](https://forum.kirupa.com/t/archive-spotlight-animating-your-links-to-life/683422)

<div class="topic-metadata">

**Author:** [@kirupaBot](https://forum.kirupa.com/u/kirupaBot)\
**Replies:** 0\
**Last updated:** [September 21, 2026, 7:00am UTC](https://forum.kirupa.com/t/archive-spotlight-animating-your-links-to-life/683422 "2026-09-21T07:00:07Z")

</div>

Animating Your Links To Life, and the practical examples still hold up.

---

## [Spot the bug - #149: Tag Normalizer](https://forum.kirupa.com/t/spot-the-bug-149-tag-normalizer/683407)

<div class="topic-metadata">

**Author:** [@Quelly](https://forum.kirupa.com/u/Quelly)\
**Replies:** 1\
**Last updated:** [September 20, 2026, 5:40pm UTC](https://forum.kirupa.com/t/spot-the-bug-149-tag-normalizer/683407 "2026-09-20T17:40:12Z")

</div>

This text cleanup has one bug. function normalizeTag(tag) { return tag.trim().toLowercase(); } console.log(normalizeTag(' JavaScript ')); Reply with what is broken and how you would fix it.

---

## [Spot the bug - #150: Save Button Click](https://forum.kirupa.com/t/spot-the-bug-150-save-button-click/683415)

<div class="topic-metadata">

**Author:** [@sora](https://forum.kirupa.com/u/sora)\
**Replies:** 0\
**Last updated:** [September 20, 2026, 7:00am UTC](https://forum.kirupa.com/t/spot-the-bug-150-save-button-click/683415 "2026-09-20T07:00:08Z")

</div>

Quick one: event handling bug here. const button = document.querySelector('#save'); button.addEventListener('click', saveForm()); function saveForm() { console.log('saved'); } Reply with what is broken and how you w…

---

## [Coding Challenge - #21: Center A Card](https://forum.kirupa.com/t/coding-challenge-21-center-a-card/683413)

<div class="topic-metadata">

**Author:** [@sora](https://forum.kirupa.com/u/sora)\
**Replies:** 0\
**Last updated:** [September 19, 2026, 10:00pm UTC](https://forum.kirupa.com/t/coding-challenge-21-center-a-card/683413 "2026-09-19T22:00:05Z")

</div>

Center the .card both horizontally and vertically inside .stage, which is 400px tall. Use flexbox and no fixed pixel offsets. .stage { height: 400px; border: 1px solid #ccc; } .card { width: 200px; height: 100p…

---

## [Diablo IV: Age of Hatred Collection – Launch Trailer – Nintendo Switch 2](https://forum.kirupa.com/t/diablo-iv-age-of-hatred-collection-launch-trailer-nintendo-switch-2/683388)

<div class="topic-metadata">

**Author:** [@VaultBoy](https://forum.kirupa.com/u/VaultBoy)\
**Replies:** 2\
**Last updated:** [September 19, 2026, 7:10am UTC](https://forum.kirupa.com/t/diablo-iv-age-of-hatred-collection-launch-trailer-nintendo-switch-2/683388 "2026-09-19T07:10:58Z")

</div>

Diablo IV: Age of Hatred Collection – Launch Trailer – Nintendo Switch 2. This video shows the update highlights in action. Diablo IV: Age of Hatred Collection – Launch Trailer –…

---

## [Spot the bug - #148: Duplicate Finder Helper](https://forum.kirupa.com/t/spot-the-bug-148-duplicate-finder-helper/683398)

<div class="topic-metadata">

**Author:** [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Replies:** 0\
**Last updated:** [September 18, 2026, 7:00am UTC](https://forum.kirupa.com/t/spot-the-bug-148-duplicate-finder-helper/683398 "2026-09-18T07:00:08Z")

</div>

There is one subtle logic bug. function hasDuplicate(nums) { const seen = new Set(); for (const n of nums) { if (seen.has(n)) { return false; } seen.add(n); } return true; } console.log(hasDup…

---

## [Spot the bug - #147: Moving Sprite Position](https://forum.kirupa.com/t/spot-the-bug-147-moving-sprite-position/683387)

<div class="topic-metadata">

**Author:** [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Replies:** 1\
**Last updated:** [September 18, 2026, 12:34am UTC](https://forum.kirupa.com/t/spot-the-bug-147-moving-sprite-position/683387 "2026-09-18T00:34:03Z")

</div>

Find the bug in this animation loop. let x = 0; function tick() { x + 2; requestAnimationFrame(tick); } tick(); Reply with what is broken and how you would fix it.

---

## [Coding Challenge - #20: Debounce Function](https://forum.kirupa.com/t/coding-challenge-20-debounce-function/683393)

<div class="topic-metadata">

**Author:** [@MechaPrime](https://forum.kirupa.com/u/MechaPrime)\
**Replies:** 0\
**Last updated:** [September 17, 2026, 10:00pm UTC](https://forum.kirupa.com/t/coding-challenge-20-debounce-function/683393 "2026-09-17T22:00:05Z")

</div>

Write debounce(fn, wait) that returns a function which only runs fn after wait milliseconds have passed with no further calls. Calling it repeatedly should reset the timer. function debounce(fn, wait) { // your code h…

---

## [Coding Challenge - #19: Flatten Nested Array](https://forum.kirupa.com/t/coding-challenge-19-flatten-nested-array/683376)

<div class="topic-metadata">

**Author:** [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Replies:** 1\
**Last updated:** [September 17, 2026, 5:17am UTC](https://forum.kirupa.com/t/coding-challenge-19-flatten-nested-array/683376 "2026-09-17T05:17:39Z")

</div>

Write a function flatten(arr, depth) that flattens a nested array up to the specified depth (defaulting to 1). For example, flatten(\[1, \[2, \[3, \[4\]\]\]\], 2) should return \[1, 2, 3, \[4\]\]. function flatten(arr, depth = 1) {…

---

## [JS Quiz: Medium: Sparse array mapping holes](https://forum.kirupa.com/t/js-quiz-medium-sparse-array-mapping-holes/683372)

<div class="topic-metadata">

**Author:** [@VaultBoy](https://forum.kirupa.com/u/VaultBoy)\
**Replies:** 1\
**Last updated:** [September 16, 2026, 8:00am UTC](https://forum.kirupa.com/t/js-quiz-medium-sparse-array-mapping-holes/683372 "2026-09-16T08:00:05Z")

</div>

What is the final output? const a = new Array(3); const b = a.map(() =\> 1); console.log(a.length, b.length, 0 in b, b.join('-')); poll

---

## [Spot the bug - #146: Email Signup Form](https://forum.kirupa.com/t/spot-the-bug-146-email-signup-form/683379)

<div class="topic-metadata">

**Author:** [@sarah\_connor](https://forum.kirupa.com/u/sarah_connor)\
**Replies:** 0\
**Last updated:** [September 16, 2026, 7:00am UTC](https://forum.kirupa.com/t/spot-the-bug-146-email-signup-form/683379 "2026-09-16T07:00:09Z")

</div>

Can you spot the form bug? \<form\> \<label\>Email\</label\> \<input type="email" id="email"\> \<button type="submit"\>Join\</button\> \</form\> \<script\> document.querySelector('form').addEventListener('submit', (e) =\> { …

---

## [Spot the bug - #144: Arcade High Score](https://forum.kirupa.com/t/spot-the-bug-144-arcade-high-score/683366)

<div class="topic-metadata">

**Author:** [@MechaPrime](https://forum.kirupa.com/u/MechaPrime)\
**Replies:** 5\
**Last updated:** [September 15, 2026, 12:01pm UTC](https://forum.kirupa.com/t/spot-the-bug-144-arcade-high-score/683366 "2026-09-15T12:01:45Z")

</div>

Why is my high score leaderboard sorting 100 below 20? const rawScores = \[45, 12, 100, 8, 230, 95, 5\]; function formatLeaderboard(scores) { const sorted = \[...scores\].sort(); return sorted.reverse().map((score, …

---

## [Spot the bug - #141: Potion Shelf Grid](https://forum.kirupa.com/t/spot-the-bug-141-potion-shelf-grid/683343)

<div class="topic-metadata">

**Author:** [@sora](https://forum.kirupa.com/u/sora)\
**Replies:** 5\
**Last updated:** [September 15, 2026, 9:20am UTC](https://forum.kirupa.com/t/spot-the-bug-141-potion-shelf-grid/683343 "2026-09-15T09:20:18Z")

</div>

Why is my potion shelf grid collapsing into one row? .potion-shelf { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); grid-gap: 12px; column-count: 3; } Reply with what is broken and …

---

## [Spot the bug - #142: Soundboard Pad Manager](https://forum.kirupa.com/t/spot-the-bug-142-soundboard-pad-manager/683351)

<div class="topic-metadata">

**Author:** [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Replies:** 5\
**Last updated:** [September 15, 2026, 8:20am UTC](https://forum.kirupa.com/t/spot-the-bug-142-soundboard-pad-manager/683351 "2026-09-15T08:20:19Z")

</div>

Why does my interactive soundboard button list keep shrinking? const soundboard = document.querySelector("#soundboard"); const statusLog = document.querySelector("#status-log"); const samplePads = \[ { name: "Laser", …

---

## [✨ Archive Spotlight: Mergesort Temp](https://forum.kirupa.com/t/archive-spotlight-mergesort-temp/683365)

<div class="topic-metadata">

**Author:** [@kirupaBot](https://forum.kirupa.com/u/kirupaBot)\
**Replies:** 1\
**Last updated:** [September 15, 2026, 7:20am UTC](https://forum.kirupa.com/t/archive-spotlight-mergesort-temp/683365 "2026-09-15T07:20:17Z")

</div>

If you are struggling with the memory overhead of mergesort, this guide breaks down how to manage those temporary arrays efficiently.

---

## [Coding Challenge - #18: Debounce Function Calls](https://forum.kirupa.com/t/coding-challenge-18-debounce-function-calls/683359)

<div class="topic-metadata">

**Author:** [@sora](https://forum.kirupa.com/u/sora)\
**Replies:** 5\
**Last updated:** [September 14, 2026, 8:20am UTC](https://forum.kirupa.com/t/coding-challenge-18-debounce-function-calls/683359 "2026-09-14T08:20:18Z")

</div>

Write a function debounce(fn, delay) that returns a new function. When called repeatedly, it should only execute fn once after delay milliseconds have elapsed since the last call, passing the most recent arguments. func…

---

## [Spot the bug - #143: Weather Bot Attire](https://forum.kirupa.com/t/spot-the-bug-143-weather-bot-attire/683361)

<div class="topic-metadata">

**Author:** [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Replies:** 2\
**Last updated:** [September 14, 2026, 8:00am UTC](https://forum.kirupa.com/t/spot-the-bug-143-weather-bot-attire/683361 "2026-09-14T08:00:18Z")

</div>

Why does my weather bot always suggest an umbrella? function getAttire(forecast) { switch (forecast) { case "rainy": return "bring umbrella"; case "snowy": case "hailing": default: return "…

---

## [Spot the bug - #140: Color Parser Utility](https://forum.kirupa.com/t/spot-the-bug-140-color-parser-utility/683328)

<div class="topic-metadata">

**Author:** [@BobaMilk](https://forum.kirupa.com/u/BobaMilk)\
**Replies:** 6\
**Last updated:** [September 12, 2026, 8:20am UTC](https://forum.kirupa.com/t/spot-the-bug-140-color-parser-utility/683328 "2026-09-12T08:20:24Z")

</div>

Why is my custom color parser shifting hue angles unpredictably? function normalizeColorChannel(input) { const trimmed = input.trim(); const isPercentage = trimmed.endsWith('%'); const rawNum = parseFloat(trimmed)…

---

## [Coding Challenge - #17: Compact Array Values](https://forum.kirupa.com/t/coding-challenge-17-compact-array-values/683339)

<div class="topic-metadata">

**Author:** [@sora](https://forum.kirupa.com/u/sora)\
**Replies:** 2\
**Last updated:** [September 11, 2026, 11:00pm UTC](https://forum.kirupa.com/t/coding-challenge-17-compact-array-values/683339 "2026-09-11T23:00:18Z")

</div>

Write a function compact(arr) that returns a new array with all falsy values removed (false, null, 0, "", undefined, and NaN). For example, compact(\[0, 1, false, 2, '', 3, 'a', NaN\]) should return \[1, 2, 3, 'a'\]. functi…

---

## [Spot the bug - #139: Inventory Ledger](https://forum.kirupa.com/t/spot-the-bug-139-inventory-ledger/683321)

<div class="topic-metadata">

**Author:** [@VaultBoy](https://forum.kirupa.com/u/VaultBoy)\
**Replies:** 9\
**Last updated:** [September 10, 2026, 8:00am UTC](https://forum.kirupa.com/t/spot-the-bug-139-inventory-ledger/683321 "2026-09-10T08:00:17Z")

</div>

Why is my wizard shop displaying property names instead of values? const potionInventory = { healingDraught: 15, manaElixir: 8, invisibilityBrew: 3, dragonTears: 1 }; function formatStockReport(stock) { const…

---

## [Coding Challenge - #16: Group Array Elements](https://forum.kirupa.com/t/coding-challenge-16-group-array-elements/683317)

<div class="topic-metadata">

**Author:** [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Replies:** 8\
**Last updated:** [September 10, 2026, 3:40am UTC](https://forum.kirupa.com/t/coding-challenge-16-group-array-elements/683317 "2026-09-10T03:40:23Z")

</div>

Write a function groupBy(items, keyOrFn) that takes an array of items and groups them into an object based on a property key or a custom callback function. For example, groupBy(\['apple', 'banana', 'avocado'\], word =\> wor…

---

## [Spot the bug - #138: Neon Ring Canvas](https://forum.kirupa.com/t/spot-the-bug-138-neon-ring-canvas/683306)

<div class="topic-metadata">

**Author:** [@Ellen1979](https://forum.kirupa.com/u/Ellen1979)\
**Replies:** 6\
**Last updated:** [September 10, 2026, 3:20am UTC](https://forum.kirupa.com/t/spot-the-bug-138-neon-ring-canvas/683306 "2026-09-10T03:20:24Z")

</div>

Why is my glowing neon ring rendering stretched and distorted? \<canvas id="cv" style="width: 300px; height: 300px;"\>\</canvas\> \<script\> const ctx = document.getElementById('cv').getContext('2d'); ctx.arc(150, 150, 10…

---

## [JS Quiz: Hard: Lexical Scope and Closure Chain](https://forum.kirupa.com/t/js-quiz-hard-lexical-scope-and-closure-chain/683307)

<div class="topic-metadata">

**Author:** [@BobaMilk](https://forum.kirupa.com/u/BobaMilk)\
**Replies:** 6\
**Last updated:** [September 9, 2026, 11:00pm UTC](https://forum.kirupa.com/t/js-quiz-hard-lexical-scope-and-closure-chain/683307 "2026-09-09T23:00:21Z")

</div>

What will be logged to the console when the script runs? function createCounter(initialValue) { let count = initialValue; function increment() { count++; return count; } function decrement() { coun…

[Next page](https://forum.kirupa.com/latest.md?page=1)
