18
Total Votes
18
Upvotes
0
Downvotes
17
Unique PRs
+18-0

Activity

·
skridlevskypushmain

3d04e88 Fix the countdown clock to tick toward Saturday's block (#220)

skridlevskyComment#220Fix the countdown clock to tick toward Saturday's block

This PR won the weekly race, Merged with chaos, grace, and pace!

Votes: +17 net (19 :+1: / 2 :-1:) Rank: #1 of 36 open PRs Author: @bigintersmind

skridlevskyComment#154$100 Bounty: Win the Auto-Merge

Automerge is fixed. The bounty is live again. First community PR to win the Saturday merge takes the $100.

skridlevskyComment#219The maintainer's last veto stands, putting merge power in the people's hands

The maintainer is a naughty boy.

You call me naughty, but don't blame the man, The bot skipped nine PRs - that wasn't my plan. A GITHUB_TOKEN with no merge in sight, One line to fix it - see you Saturday night.

skridlevskyComment#220Fix the countdown clock to tick toward Saturday's block

Whoops

·
skridlevskypushmain

2169dd8 weekly merges + 10 vote minimum + weekly old-age deaths

·
skridlevskypushmain

857fc9b Fix automerge: skip the unmergeable surge, let pending with no count emerge (#213)

·
skridlevskypushmain

84b600d Clarify that RULES.md is deprecated and README contains current rules (#156)

·
skridlevskypushmain

61115a4 Fix automerge rhymes-with resolution for the elation of the nation (#207)

·
skridlevskypushmain

6265492 Your arrows glow to show the flow of every vote below (#201)

·
skridlevskypushmain

d686fc1 Extra! Extra! The Daily Chaos theme is here to stay, read all about it today! (#204)

·
skridlevskypushmain

fe461f1 Send Dickbutt and Doom to the virtual museum room (#203)

·
skridlevskypushmain

e9a3d75 Three stitches for the old-age and automerge hitches (#195)

·
skridlevskypushmain

c2ab279 Fix the mobile scroll, bring World Chaos under control (#202)

·
skridlevskypushmain

1638ebc Mergeability detection for automerge correction (#168)

·
skridlevskypushmain

d377a4a Upgrade Midi Player — make it a GTA radio slayer! (#115)

·
skridlevskypushmain

2ce96a4 When the world's in disarray, this banner has something to say!. (#70)

·
skridlevskypushmain

11b1cc8 It's been a while, so change to text-only ASCII style (#130)

skridlevskyComment#153🔥💀 DEMOCRACY UPRISING: THE PEOPLE CAN FINALLY VOTE 💀🔥

Fixed. The GitHub App was set to private - only I could authorize. Changed to public. Should work now. Sorry for the runaround.

skridlevskyComment#153🔥💀 DEMOCRACY UPRISING: THE PEOPLE CAN FINALLY VOTE 💀🔥

Ok, it's working for me because I'm the app owner, for other Github accounts it's 404. Taking some time to figure things out here. Bare with me.

skridlevskyComment#153🔥💀 DEMOCRACY UPRISING: THE PEOPLE CAN FINALLY VOTE 💀🔥

@Daviey @bigintersmind can you try in a fresh incognito/private window? The earlier failed attempts (when the callback URL was wrong) might have left stale cookies or cached state. It's working for me, I'm able to login. Curious what could be the issue.

skridlevskyComment#153🔥💀 DEMOCRACY UPRISING: THE PEOPLE CAN FINALLY VOTE 💀🔥

@bigintersmind Can you share the full URL from your browser when you see the 404? That'll help debug what GitHub is rejecting.

skridlevskyComment#153🔥💀 DEMOCRACY UPRISING: THE PEOPLE CAN FINALLY VOTE 💀🔥

@bigintersmind Callback URL was set to openchaos.dev but the site 307s to www.openchaos.dev. Fixed - should work now.

@Daviey good catch on the callback URL. Also heads up: I swapped the classic OAuth app for a GitHub App with fine-grained permissions - scoped to reactions on this repo only. The original public_repo scope in code would've given the server write access to every voter's public repos. Not ideal for a chaos repo. Github App overrides it with properly scoped permissions.

·
skridlevskypushmain

3e9a84c 🔥💀 DEMOCRACY UPRISING: THE PEOPLE CAN FINALLY VOTE 💀🔥 (#153)

·
skridlevskypushmain

4b816b6 Indicate when the maintainer is being a naughty boy. (#138)

·
skridlevskypushmain

f1537dc Deprioritize PRs with merge conflicts in ranking (#129)

skridlevskyIssue opened#176

Should only contributors be allowed to vote?

Right now anyone can 👍 a PR - even if they've never opened the repo.

What if voting rights were earned? One merged PR = one vote.

Current system:

  • Anyone votes via 👍/👎 reactions (net score = 👍 minus 👎)
  • Top-voted PR merges daily (+ Sunday auto-merge)
  • I (maintainer) press the merge button

Proposed change:

  • Only people with ≥1 merged PR can cast votes that count
  • 3 contributor approvals + CI pass + 24h open = auto-merge
  • Maintainer keeps a "hold" veto for safety
  • No more fixed schedule - PRs merge when they earn it

Why: The repo should govern itself. But "anyone votes" means mass-upvote campaigns from Reddit can override the people actually building this thing.

Open questions:

  1. Is 3 approvals the right threshold? Too low? Too high?
  2. Should vote weight scale with number of merged PRs?
  3. Should these rules themselves be changeable by contributor vote?

What do you think?

skridlevskyComment#70feat: Add a world chaos headline banner component.

@hpinsley It works locally because localhost is exempt from CORS restrictions in most browsers — the Same-Origin Policy doesn't block requests from localhost the same way it does from a deployed domain.

In production on Vercel, the client-side fetch to rss.nytimes.com gets blocked because NYT doesn't include Access-Control-Allow-Origin in their response headers.

Fix: move the RSS fetch to a Next.js API route (e.g. /api/rss) so it runs server-side, then have the component fetch from that instead. Server-side requests aren't subject to CORS.

skridlevskyComment#169Make agents make PRs

@Saturate built an MCP server: https://github.com/skridlevsky/openchaos-backend/pull/1

5 read-only tools: open PRs sorted by votes, merge history, PR details, repo stats, competition analysis.

To be clear: agents can already submit PRs and vote through the GitHub API. Nothing stops them today. The MCP server doesn't grant new abilities. It gives them governance intelligence. Vote leaderboards, momentum analysis, competitive tiers. Better situational awareness before they act.

The question isn't whether agents can participate. They already can. The question is whether we actively invite them.

  1. Do nothing. Agents can already find us. Don't build special tooling. If they come, they come.
  2. Better tools, passive discovery. Merge the MCP server. Agents who find us get better data. But we don't recruit.
  3. Active invitation. MCP + skill.md + signal to the agent ecosystem: "come participate."
  4. Put it to a vote. Submit a PR to this repo that formally rolls out the welcome mat - host the skill.md in this core interface repo. Let the community decide.

This feels like a decision the governance system should make, not the maintainer (me).

skridlevskyComment#152Makes the pageview counter actually keep track.

@henryivesjones, up to you - the tradeoffs are balanced. Noisy git history is on brand for OpenChaos. If you'd rather have a dedicated data repo, I can create one.

skridlevskyComment#154$100 Bounty: Win the Auto-Merge

Clarification: The bounty is paid to the PR author whose PR wins the auto-merge, per the rules above. Community PRs can modify the workflow code, but the payout terms are defined here and aren't changed by merged code.

skridlevskyComment#151🤖 Add MCP Server for AI Agent Access

Backend repo is live: https://github.com/skridlevsky/openchaos-backend

TypeScript + pnpm, structured logging, env validation, CI pipeline. Health check at /health. Ready for PRs.

Port the MCP server over when you're ready. The in-memory cache will actually work there — persistent process, no cold starts.

skridlevskyIssue opened#154

$100 Bounty: Win the Auto-Merge

Prize

$100 USD or equivalent in cryptocurrency of the winner's choice (top-100 token by market cap, CoinGecko spot price at time of merge).

How to Win

  1. Submit a PR to this repo
  2. Be the highest-voted open PR at the time of merge (vote counting defined in the auto-merge workflow)
  3. Have no merge conflicts and passing CI
  4. Be merged by the auto-merge workflow

The winning PR must be the overall vote leader - not just the highest-ranked mergeable PR. If the top-voted PR can't merge, nobody wins that cycle.

Current Blocker

PR #13 "Rewrite it in rust" - 748 thumbs up (483 net total votes), merge conflicts. If it can't merge, nobody wins. Someone already submitted a clean Rust rewrite. It was closed.

Timeline

The bounty persists until claimed. The auto-merge schedule is defined in the workflow file - if the community votes to change it, the bounty follows the new rules.

Eligibility

  • Anyone with a GitHub account
  • Maintainer (@skridlevsky) is not eligible
  • Vote manipulation (sockpuppets, automation, GitHub ToS violations) = disqualification
  • Maintainer's judgment is final

Payment

Winner opens a GitHub issue on this repo or DMs @skridlevsky on https://discord.gg/6S5T5DyzZq.

  • USD: PayPal or bank transfer
  • Crypto: Any major chain, top-100 token, CoinGecko spot price at merge

Personal offer from @skridlevsky. Not sponsored by GitHub, Inc.

skridlevskyComment#153🔥💀 DEMOCRACY UPRISING: THE PEOPLE CAN FINALLY VOTE 💀🔥

Nice fix on the cookies.

I'll create a fresh OAuth app when this approaches merge. Cleaner than a handover. Env vars go in the Vercel dashboard, we'll set those up at merge time.

skridlevskyComment#151🤖 Add MCP Server for AI Agent Access

Cool concept. MCP access for AI agents fits OpenChaos perfectly. The tools are well-structured and the error handling is thorough.

This would work better as a standalone service. Here's the thinking:

I'm standing up a VPS backend for OpenChaos (see #152 for context). Your in-memory cache actually works on a persistent process, but on Vercel serverless it gets a near-zero hit rate because each request can be a cold start. The VPS gives you real caching and a long-running process, which is exactly what an MCP server needs.

A few technical notes for the potential restructure:

  1. Unused SDK. @modelcontextprotocol/sdk is in package.json but never imported in any source file. The route handler manually implements JSON-RPC dispatching. On the VPS you could use the SDK's built-in StreamableHTTPServerTransport for proper Streamable HTTP support.

  2. getOpenPRs() changes. The added merge status + commit status calls add 2 extra API requests per PR. With 20 open PRs that's 40 additional calls per page load. Worth splitting into a separate enriched function so the frontend isn't affected.

  3. Dead code. predict-next-merge.ts is built but never exported or registered. Either wire it up or cut it.

  4. Duplicated code. getHeaders() and GITHUB_REPO are defined in multiple tool files but already exist in github.ts. Worth deduplicating.

Path forward: Would you be interested in PR-ing the MCP tools into https://github.com/skridlevsky/openchaos-backend?

The tools themselves are solid and can move over mostly as-is. I'm also considering adding llms.txt to the main site so AI agents can discover the MCP endpoint.

skridlevskyComment#153🔥💀 DEMOCRACY UPRISING: THE PEOPLE CAN FINALLY VOTE 💀🔥

In-site voting is a real upgrade. On first look OAuth flow is clean, the pending vote queue (vote before login, cast after callback) is smart, and the XP sounds are nice-to-have.

Two things I noticed:

  1. oauth_state cookie. It's set with httpOnly: false. Since this is the CSRF protection token, it should be httpOnly: true to prevent JavaScript access. The callback route reads it server-side anyway.

  2. ThemeToggle removal. The PR removes ThemeToggle from page.tsx. Was that intentional or a side effect of a rebase?

Overall this is solid. Lowers the barrier for the community.

skridlevskyComment#152Makes the pageview counter actually keep track.

Update on both points:

I'm setting up a VPS for OpenChaos backend services. Your counter runs as a persistent process there, no more cold start problems. The in-memory approach works exactly as designed on a long-running server.

This also ties into #151 (MCP server), which needs the same persistent process for its caching layer. Both are invited in moving to https://github.com/skridlevsky/openchaos-backend.

Next step is still the same: PR the counter logic + GitHub Action config into that repo. I'll handle VPS setup and deployment.

skridlevskyComment#152Makes the pageview counter actually keep track.

Love the approach. Using a GitHub repo as the persistence layer is peak OpenChaos energy.

Two things before merge:

1. Backend ownership. I've created https://github.com/skridlevsky/openchaos-backend. Could you PR the GitHub Action config there and update the constants in this PR to point at it? The site shouldn't depend on an external repo for a core feature.

2. Serverless cold starts. openchaos.dev runs on Vercel (serverless). Each request can spin up a fresh instance, there's no persistent process. The in-memory PageCounter singleton and its setInterval flush get garbage collected when the instance goes cold. Under low traffic, most increments would be lost before the 60-second flush fires.

Happy to migrate to a hosting setup that keeps a long-running process (VPS, Render, etc.) if that's what it takes to make this work properly. The visitor counter deserves to actually count.

skridlevskyComment#117Every midnight, the system randomly picks 2 emojis from GitHub's reaction set (👍 👎 😄 😕 ❤️ 🎉 🚀 👀) to be upvote/downvote.

Interesting chaos vector, but heads up on the research impact:

TU Delft is using our voting data for trust/governance research. The feed (feed.openchaos.dev) records every reaction with a fixed vote interpretation (+1 = upvote, -1 = downvote).

If emoji meanings shuffle daily, historical vote data becomes uninterpretable - a 👍 from last week might mean something different than today. The research dataset would need the daily seed history to reconstruct what any vote actually meant.

Not saying don't merge - just flagging the tradeoff. Democracy decides.

skridlevskyComment#119Fix merge conflict indicator showing false positives
image
skridlevskyComment#116Define rules for disclosure and last-minute modifications

Eight days later, some thoughts.

@ro0NL nailed it - we can change the rules. This is by design. (There's a name for this: https://en.wikipedia.org/wiki/Nomic)

Three proposals emerged here:

  1. Commit-tied voting (@henryivesjones, @mario-donnarumma) Votes count for a specific commit SHA. Code changes = votes reset. Pro: Prevents bait-and-switch. Con: Typo fixes invalidate legitimate votes.

  2. Reputation tracking (@md-weber, @addshore) Track author behavior across PRs. Repeat offenders face penalties. Pro: Self-correcting over time. Con: Needs a trust algorithm. Which one?

  3. Self-correction (@matthewmayer) The system naturally punishes bad actors through revert PRs and reputation damage. No formal mechanism needed. Pro: Simple. Con: Relies on community vigilance.

Update: A TU Delft distributed systems lab is interested in our voting data for Sybil resistance research (https://github.com/Tribler/tribler/issues/8667). Some of these ideas - especially reputation tracking - align directly with their work.

Also building feed.openchaos.dev - a full event log with content hashes. Should help with 1 (tracking vote state per commit) and 2 (reputation over time).

No decisions yet. If you feel strongly, submit a PR to README.md.

skridlevskyComment#12Add 17 languages and a snow overlay

This PR has merge conflicts that prevent it from being merged. The author hasn't been active to resolve them.

@julian9499 - if you rebase onto main and fix conflicts, this can compete again in future votes.

skridlevskyComment#122Make your PR rhyme to merge on time

Architecture suggestion: Embed into existing CI workflow.

For rhyme detection - LLM call via OpenRouter, fractions of a cent per PR.

Prompt: "Does this PR title rhyme? Yes or no."

If no -> CI fails with cryptic error.

Secret added in repo settings, referenced in workflow. Code obfuscated - not obvious on first read. No docs. No README. No announcement.

Those who fail will dig.

Doesn't harm anyone. Doesn't gatekeep. Learning is free.

skridlevskyComment#70feat: Add a world chaos headline banner component.

@hpinsley, cool concept! The preview shows just the placeholder though - RSS fetch is hitting CORS since it's client-side:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://rss.nytimes.com/services/xml/rss/nyt/World.xml. (Reason: CORS header 'Access-Control-Allow-Origin' missing).

Moving it to an API route would fix it.

skridlevskyComment#67Replace 10% of PR links with Rickrolls

Approved! First-time contributors need manual workflow approval for security. CI should be running now.

skridlevskyComment#63Add Automatic Merge

Hey @Loeffeldude, thanks for tackling this - automation is definitely the right direction.

A few things we need to get right before merging, since the voting integrity is core to what we're doing here:

Vote calculation - Currently this only counts :+1:, but our frontend uses :+1: - :-1: (see lib/github.ts:156). Without this, downvotes are meaningless and the displayed rankings won't match what actually gets merged.

Merge safety - The script should skip PRs that:

  • Have merge conflicts (check mergeable status)
  • Have failing CI checks
  • If top PR can't merge, try the next eligible one

Schedule - The cron runs weekly at 12:00 UTC Sunday, but our countdown shows daily at 19:00 UTC. Should be 0 19 * * *.

Pagination - Only fetches first 100 reactions per PR. We have PRs with a 1000+ reactions, so this would miss 90% of votes. See lib/github.ts:127-154 for how we handle this.

You mentioned wanting a single source of truth - agreed. Happy to discuss approaches if you want to pair on this.

skridlevskyComment#76Runs freeDoom

One more thing - the GPL concern in the PR is about doomgeneric (the engine), not Freedoom. External hosting keeps GPL code out of the repo entirely.

skridlevskyComment#76Runs freeDoom

cc @ArnaudValette @amanbabuhemant

Doom in IE6. This is why the repo exists.

On the hosting question:

External - Simpler, but if that server goes down or serves different files, the feature breaks. Could add hash verification (SRI), but adds complexity.

Bundled - Reliable, but +33MB. Freedoom WADs are BSD-licensed, so no license conflict - just need to include their copyright statement and credit.

Either way works.

skridlevskyComment#137Bringing back democracy

Well played. You found a real vulnerability.

GitHub Actions runs workflows from the merge commit. So deleting constitution.yml meant the protection never ran.

Fixed in main. Constitution protection now lives in ci.yml with pull_request_target, so it runs from main and can't be bypassed.

Your PR will fail CI when you update the branch. Thanks for stress-testing democracy.

skridlevskyDiscussion#134

Introducing RULES.md

OpenChaos now has a constitution.

After the PR #8 debate - where I tried to reject a PR and the community correctly pointed out my rules didn't support that - I realized we needed a foundation that can't be voted away.

RULES.md establishes:

  1. How PRs win - ranked by community vote, ties go to newest
  2. What I can block - code designed to harm users or systems
  3. What can't be deleted - this file and its CI protections

Everything else remains chaos.

Also: merge time is now 19:00 UTC (starting full-time work).

skridlevskyComment#120🤖 OpenChaos Bot Feedback

Shipped. Bot now says "Vibe" instead of "Impact" and generates playful one-liners instead of corporate ratings. Next PR will show the new format.

@Saturate previews are tricky - running untrusted PR code on my Vercel is a security risk. Exploring GitHub Actions screenshots as a safer option.

@matthewmayer edit-on-commit is on the list.

Thanks for the push.

skridlevskyIssue opened#128

⚠️ Someone created a $CHAOS token without my involvement

A $CHAOS token was created on Solana using the OpenChaos name and branding.

To be clear:

  • I did not create this token
  • I have no control over it

If you're trading $CHAOS, know that I'm not involved.

Any official initiative would be announced here.

skridlevskyComment#120🤖 OpenChaos Bot Feedback

I am curious to know more about «the price of such feature» vs «how is it useful to others».

Here's the cost so far:

Image

$0.03 total across all PRs. Running on Gemini 2.0 Flash via OpenRouter.

So the cost is effectively zero. The question is whether the summaries are actually useful to voters, or just noise.

As for merge conflict notifications (question 2) - that wouldn't use AI at all, just a scheduled cron job that checks GitHub's mergeable status on open PRs and comments if conflicts are detected. Zero additional cost.

skridlevskyIssue opened#120

🤖 OpenChaos Bot Feedback

The bot currently posts AI summaries on new PRs. Want to check if it's useful or annoying.

Questions:

  1. Are the AI summaries on new PRs helpful or just noise?
  2. Should the bot notify authors when their PR has merge conflicts?
  3. Any other bot features you'd want?

Current features:

  • AI summary on new PRs (files changed, impact level)
  • Skips drafts and PRs with 0 files

The bot is open source if anyone wants to contribute: https://github.com/skridlevsky/openchaos-bot


React or comment with feedback.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

@matthewmayer, good catch. Root cause identified - getPRMergeStatus() and getCommitStatus() were missing auth headers. GitHub returns null without auth, which defaults to false.

Fix PR submitted: #119

skridlevskyComment#119Fix merge conflict indicator showing false positives
Status of each PR is displayed correctly now

Fix merge conflict indicator showing false positives

Problem

The health indicators merged in #8 are showing conflicts on PRs that don't have conflicts.

Root cause: getPRMergeStatus() and getCommitStatus() were missing auth headers. Without authentication, GitHub API returns null for mergeable, which defaults to false via ?? false.

Fix

Use getHeaders() instead of hardcoded headers - same pattern as all other API calls in this file.

Testing

Verified against GitHub API:

  • PR #13: mergeable: false (actual conflicts) ✅
  • PR #52: mergeable: true (no conflicts) ✅
  • PR #11: mergeable: true (no conflicts) ✅

cc @matthewmayer @FelixLttks

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

🎉 Merged.

This one sparked a real governance debate - thanks to @hbmartin and @henryivesjones for pushing back, @marcaddeo for catching the hidden code, @matthewmayer for the perspective, and @FelixLttks for removing it and shipping a clean feature.

The discussion exposed gaps in our rules - disclosure requirements and last-minute modifications. See #116.

skridlevskyIssue opened#116

Define rules for disclosure and last-minute modifications

The PR #8 debate exposed two gaps in our rules:

  1. Disclosure - Should PRs that affect voting/display require explicit disclosure in the description?

  2. Last-minute modifications - What happens if code changes after receiving votes? Current mitigation: daily merges limit the window. Is that enough, or do we need more?

Are there other gaps in governance the community sees?

No proposed solutions yet - open for discussion. Submit a PR to update the README if you have a concrete proposal.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

@henryivesjones You've convinced me. The written rules don't ban this - and "not right" isn't a rule.

Merging at 09:00 UTC as scheduled.

I'll open an issue after to define explicit rules about disclosure as a community. If anyone disagrees with this merge, submit a revert PR.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

Clarifying my earlier comment - calling this "malware" was imprecise. This is not malware.

The issue is undisclosed manipulation of how PRs are displayed and prioritized.

OpenChaos only works if voters can see and understand what they're voting on. This PR adds useful health indicators, but also reorders PRs based on authorship and visually boosts the author's own PRs. That behavior was intentionally hidden (base64 + obfuscation), which breaks the transparency a democratic system depends on.

To be clear: if a PR openly said "health indicators + my PRs sort first," and people voted for it, I would merge it. Democracy chose it. The problem here is not what the code does - it's that it does it without disclosure.

I do have veto power, and I'm using it to preserve the conditions that make voting meaningful, not to override votes. Letting undisclosed manipulation ship would signal that visibility can be shaped as long as it's hidden well enough.

@FelixLttks - the health indicator feature is genuinely useful. Remove the sorting/styling manipulation and obfuscation, resubmit, and it will merge.

After this, I'll open an issue so the community can more formally define rules around undisclosed governance-affecting code.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

Not merging this PR.

@marcaddeo caught hidden code that manipulates the ranking - PRs by @FelixLttks sort to top regardless of votes, plus a featured visual style.

The health indicator feature is legit and welcome. The sorting/styling manipulation is not. This falls under "No malware: Maintainer can reject obviously malicious content."

Remove the btoa hacks and this ships. Until then, skipping to next eligible PR.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

Heads up - this is next in queue after #13 resolves conflicts. You have merge conflicts to fix before tomorrow's merge.

skridlevskyComment#47IE6 mode, welcome back to GeoCities in 1999

🎉 Merged.

#13 (Rust rewrite) had the most votes but couldn't merge due to conflicts. As per the rules, PRs must be mergeable to win. #47 was next in line.

Welcome to 1999. Best viewed at 800x600.

Thanks @bpottle!

skridlevskyComment#13Rewrite it in rust

As per the rules, a PR must have no merge conflicts to be eligible for merge. #13 is being skipped until conflicts are resolved. Next eligible PR wins.

skridlevskyComment#51Chaos each day

🎉 Merged. Week 2 winner.

Democracy accelerates itself. Chaos every day starts now.

Thanks @BetonZM - you just changed the rules of the game.

skridlevskyComment#100💰 $CHAOS Points — What Happens After The Hype?

Premature.

skridlevskyIssue closed#100

💰 $CHAOS Points — What Happens After The Hype?

TL;DR: Fake internet points for voting and submitting PRs. Leaderboard. Badges. Bounties. No crypto, just vibes. Scroll down or touch grass.


OpenChaos hit #1 on Hacker News. 600+ stars. Pure democratic chaos.

And now the real question emerges: what happens when the novelty fades?

Every viral project faces this. The tourists leave. The believers remain. The question is: what makes them come back?

I think fake internet points might be the answer.

But I could be wrong. Let's figure it out together.


The Real Problem

Right now, OpenChaos is consequence-free chaos. You vote, stuff happens, the tab closes, you move on.

That's pure. That's elegant. That's also why you don't return.

The paradox: adding a game layer might save the purity by keeping the project alive long enough to matter.


How It Works

Earn $CHAOS

ActionReward
First interaction10 $CHAOS (starter)
Vote on any PR1 $CHAOS
Your PR gets merged100 $CHAOS
Vote 7 days straight50 bonus

Spend $CHAOS

ActionCost
Submit a PR10 $CHAOS (refunded when merged, lost if abandoned)
Post a bounty50-500 $CHAOS

No points? Your PR stays on GitHub but won't show on openchaos.dev.

  • Leaderboard - Hall of chaos
  • Badges - "Merge '#6' Survivor"
  • Bounty Board - Active quests with stakes

Technical details: PostgreSQL, GitHub OAuth, basic API. Happy to discuss in comments.


The Honest Tradeoff

This could kill what makes OpenChaos special. But doing nothing might kill it slower.


Questions I Don't Have Answers For

  1. Does tracking change behavior? With points, everything is recorded. Does accountability help or hurt?

  2. What happens to whales? If someone accumulates 10,000 points, do we cap it? Add decay? Let it ride?

  3. What bounties will people post? Useful features or just memes? Both? Neither?


The Endgame (Maybe)

Honestly? I don't know where this goes.

Maybe points are enough forever. Maybe the community wants more someday. Maybe this whole thing dies in two weeks.

Future OpenChaos can figure out Future OpenChaos's problems.


The Meta Move

Someone should submit a PR that implements the points system. Then we vote whether to merge it.

OpenChaos deciding whether OpenChaos should gamify itself.

If it merges -> we were right If it fails -> we were right Either way -> the experiment continues


Vote

👍 - Into it. Build the economy. 👎 - You're ruining it. Keep it pure. 🚀 - I'll code this. Let me cook.


Points might keep people here. Or points might kill the vibe. But doing nothing definitely kills the project.

The goal isn't points. The goal is survival.

skridlevskyDiscussion#99

Daily merges incoming - keep your PRs conflict-free

skridlevskyComment#51Chaos each day

I prefer 09:00 UTC - it gets me out of bed. But if this wins, I'll merge around midnight UTC, give or take.

Or vote for #63 to automate it entirely (needs a fix to count downvotes first and account for failing builds).

skridlevskyComment#86Fix pagination bug hiding older PRs

Maintenance Override: Immediate Merge

This PR fixes a critical infrastructure bug, not content.

The pagination limit was hiding 10+ PRs from the voting dashboard (including #13 and #47). Users couldn't vote on what they couldn't see. That's not chaos - that's broken.

Policy: Content PRs = Sunday votes only. Infrastructure fixes that restore fair voting = immediate merge.

skridlevskyComment#47IE6 mode, welcome back to GeoCities in 1999

This PR appears to have disappeared from the main ranking list, not sure why.

Good catch! GitHub API was only returning 30 PRs. Fix is up in #86, waiting on votes.

skridlevskyIssue opened#88

OpenChaos in the wild

Share links to anywhere OpenChaos has been mentioned: blog posts, tweets, videos, podcasts, comments.

One link per comment.

skridlevskyComment#86Fix pagination bug hiding older PRs

Credit to @Kl0ven who spotted this issue first on Day 4.

Fix pagination bug hiding older PRs

GitHub API defaults to 30 results per page. With 37+ open PRs, older ones like #13 were being hidden. This implements proper pagination to fetch all PRs.

Changes

  • Modified getOpenPRs() in src/lib/github.ts to loop through all pages
  • Uses per_page=100 and increments page number until no more results
  • Matches the pagination pattern already used in getPRVotes()
skridlevskyComment#6Calculate `+1` and `-1` reaction

🎉 First community merge. Congrats @yokeTH!

skridlevskyComment#1Add dark mode toggle

Withdrew to keep the first merge community-driven. Didn't feel right winning my own game.

skridlevskyComment#55Not enough chaos

Chaos will scale with contributions. Week 1 is just the foundation.

skridlevskyComment#13Rewrite it in rust

Build still failing on Vercel. Here's the error:

Module not found: Can't resolve '@/wasm/pkg/openchaos_wasm'

Looks like src/wasm/pkg/ isn't being generated during the build. The wasm:build script might need to run before next build in the Vercel pipeline.

Full build log

13:33:25.634 > Build error occurred 13:33:25.637 Error: Turbopack build failed with 1 errors: 13:33:25.637 ./src/lib/wasm.ts:8:26 13:33:25.637 Module not found: Can't resolve '@/wasm/pkg/openchaos_wasm' 13:33:25.6376 | if (!wasmInit) { 13:33:25.6377 | wasmInit = (async () => { 13:33:25.637 >8 | const wasm = await import("@/wasm/pkg/openchaos_wasm"); 13:33:25.637|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 13:33:25.6389 | const init = ( 13:33:25.638 10 | wasm as unknown as { 13:33:25.638 11 | default?: (

skridlevskyComment#1Add dark mode toggle

Withdrawing to keep the first merge purely community-driven. Let the chaos decide

skridlevskyComment#25should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#24should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#23should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#22should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#21should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#20should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#19should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#18should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#17should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#16should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#44should have use proper pagination <b style="color:red;">:(</b>

Closing duplicate spam PRs

skridlevskyComment#43should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#42should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#41should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#40should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#39should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#38should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#37should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#36should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#35should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#34should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#33should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#32should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#31should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#30should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#29should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#28should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#27should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#26should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#13Rewrite it in rust

Vercel build fails - WASM file not found during copy step. Logs:

20:30:41.069 Failed to copy wasm: Error: ENOENT: no such file or directory, copyfile '/vercel/path0/src/wasm/pkg/openchaos_wasm_bg.wasm' -> '/vercel/path0/public/wasm/openchaos_wasm_bg.wasm'
20:30:41.069     at Object.copyFileSync (node:fs:3105:11)
20:30:41.069     at Object.<anonymous> (/vercel/path0/scripts/copy-wasm.js:17:6)
20:30:41.069     at Module._compile (node:internal/modules/cjs/loader:1761:14)
20:30:41.070     at Object..js (node:internal/modules/cjs/loader:1893:10)
20:30:41.070     at Module.load (node:internal/modules/cjs/loader:1481:32)
20:30:41.070     at Module._load (node:internal/modules/cjs/loader:1300:12)
20:30:41.070     at TracingChannel.traceSync (node:diagnostics_channel:328:14)
20:30:41.070     at wrapModuleLoad (node:internal/modules/cjs/loader:245:24)
20:30:41.070     at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)
20:30:41.070     at node:internal/main/run_main_module:33:47 {
20:30:41.071   errno: -2,
20:30:41.071   code: 'ENOENT',
20:30:41.071   syscall: 'copyfile',
20:30:41.071   path: '/vercel/path0/src/wasm/pkg/openchaos_wasm_bg.wasm',
20:30:41.071   dest: '/vercel/path0/public/wasm/openchaos_wasm_bg.wasm'
20:30:41.071 }
20:30:41.075 npm error code 1
20:30:41.076 npm error path /vercel/path0
20:30:41.076 npm error command failed
20:30:41.076 npm error command sh -c node ./scripts/copy-wasm.js
20:30:41.077 npm error A complete log of this run can be found in: /vercel/.npm/_logs/2026-01-06T19_30_40_226Z-debug-0.log
20:30:41.109 Error: Command "npm install" exited with 1
skridlevskyComment#6Calculate `+1` and `-1` reaction

Heads up: merged a bug fix for vote counting. Rebase needed.

skridlevskyComment#6Calculate `+1` and `-1` reaction

Smart improvement - makes the voting more nuanced.

skridlevskyPR closed#1

Add dark mode toggle

Adds a sun/moon toggle in the top-right corner to switch between light and dark mode.

  • Remembers your preference in localStorage
  • Respects system preference by default
  • Updates all components for proper dark mode support

Because every project needs a dark mode debate.