← Back to projects

thepsychopathic.me

Status: in-progress•October 14, 2026

A lightweight hub of browser rage games that lie to you on purpose, then confess every lie. Daily puzzles, no installs, no accounts.

AstroTypeScriptPhaserpnpmViteHonoWorkboxDocker

Overview

thepsychopathic.me is a small, lightweight hub of browser rage games, the kind that feel impossible because someone designed them to be. Its tagline sums it up: "Games that want you to lose."

Every game on the site has one rule it will not follow. A word game where the feedback lies, a platformer where the floor betrays you, a number puzzle with forged digits. The twist that keeps it fun rather than just frustrating is the promise behind all of them: every game confesses. When a round ends, it shows you every lie it told and which ones you caught.

The games are free, run straight in the browser, and need nothing installed. There's a new daily round of each game, the same for everyone, plus practice/free-play modes for when one daily dose of betrayal isn't enough.

The Games

Three games are live today, with more already in the lab.

Gaslit: the word game that lies to you

A daily five-letter word-guessing game with seven guesses and a catch: exactly one tile in every row of feedback is lying. A tile might claim a letter is in the right spot when it isn't, or that a letter isn't in the word when it is. Even the on-screen keyboard repeats the lie.

The lies aren't mood swings. Everyone playing the daily puzzle is lied to the same way, which turns it into a puzzle instead of a coin toss. Mark the tiles you suspect, cross-check your rows, and work out who's lying. At the end, the game replays every lie with the truth beside it.

Trust Issues: the floor is safe ahead :)

A daily one-screen troll platformer. Floors drop, spikes appear out of nowhere, and the door has opinions about being reached. Every death is counted, and reloading mid-attempt counts as a death too (only the game gets to cheat).

On top of the traps there's a narrator who's "here to help". About half of what it says is a lie. When you escape or give up, the confession replays your run with every trap revealed, every death marked, and every narrator line stamped TRUE or LIE. You can even save the replay as a video, recorded and downloaded entirely on your device.

The daily level stays the same all day, so you can learn it. Free play has endless levels across Easy, Normal and Hell, where the traps refuse to stay put.

Psychodoku: three of these numbers are lying

A daily sudoku where three of the printed starting digits are forgeries. They look legitimate and never break the rules at a glance, but follow the logic far enough and something becomes impossible.

You get a limited number of accusations to strike out the digits you think are fake, and by default the game won't tell you whether you were right. The grid will, eventually. Prefer instant verdicts? There's a setting for that. The game will judge you for it.

Key Features

  • Daily rounds: One daily puzzle/level per game, identical for every player, resetting at midnight UTC
  • Honest deception: The cheating follows rules, and every round ends with a full confession
  • Practice & free play: Unlimited extra rounds that never touch your daily streak
  • Spoiler-free sharing: Share how badly it went without giving away the answers
  • Works offline: After the first visit, the site and its games keep working without a connection
  • No accounts, no third-party requests: Progress, streaks, and settings live on your device and can be wiped from Settings at any time
  • Accessible by design: Light/dark themes, a high-contrast mode with symbols, reduced motion, and keyboard and touch controls

The Stack, and Why

I had a few clear goals going in, and every technology choice traces back to one of them:

  1. It has to be light. These are quick daily games, often opened from a shared link on a phone. They should load instantly, even on a bad connection.
  2. It has to be found. A games hub lives or dies by search and social sharing, so every page needs real, crawlable HTML.
  3. It has to grow. Three games is the start, not the finish. Adding the next one should be cheap.
  4. Each game gets the right tool. A word puzzle and a physics platformer have very different needs.

Astro for the hub

The hub (homepage, game pages, about and legal pages) is built with Astro, using fully static output. Astro prerenders every route to plain HTML with its own meta tags and ships zero JavaScript by default. That covers both of the first two goals at once: pages are fast because there's almost nothing to download, and they're SEO-friendly because search engines and link previews get complete HTML instead of an empty shell waiting for a script.

The few interactive bits of the shell (theme toggle, settings, dialogs) are written in vanilla TypeScript rather than a UI framework. The shell simply doesn't need React-sized machinery for a toggle and a dialog, and leaving it out keeps the homepage JavaScript to a few kilobytes. Fonts are self-hosted, and OG images for every page and game are generated at build time, so shared links look good everywhere.

A pnpm workspace to keep things modular

The whole project is one pnpm workspace (a monorepo). The hub, the server, shared UI pieces and every game each live in their own package, but they're developed, linted and built together.

This is what makes the "it has to grow" goal realistic:

  • Each game is self-contained. It brings its own dependencies and build setup, so Trust Issues can depend on a game engine without the word game paying for it.
  • Shared design, defined once. Design tokens, base styles and brand assets live in one shared package that every game and the hub use, so a new game looks like it belongs from day one.
  • One version of everything. pnpm's catalog feature keeps shared dependency versions in a single place, so one bump updates every package together.
  • Adding a game doesn't touch the hub. A new game gets dropped into the workspace, and its page, homepage card, sitemap entry and share image appear on the next build.

pnpm itself is fast, strict about dependencies, and disk-efficient. With its built-in workspace filters, I didn't need heavier monorepo tooling like Turborepo or Nx at this size.

Phaser for the action games

The puzzle games (Gaslit and Psychodoku) are plain TypeScript with no framework at all. They're grids, tiles and text, and the DOM is perfectly good at that.

A platformer is a different story. Trust Issues needs physics, collision, a steady game loop, input handling, particles and camera effects, and writing all of that from scratch would be reinventing the wheel. That's where Phaser comes in: a mature, open-source 2D game framework built specifically for the browser. It covers rendering (WebGL with a Canvas fallback), arcade physics, input, tweens and particles, and it's a fraction of the size of exporting a game from a full desktop engine to the web.

That let me spend my time on what actually makes the game: how the jump feels, the traps, and the lies. To protect the "it has to be light" goal, Phaser is kept out of every page load except Trust Issues itself. Someone opening the word game never waits on a game engine; it's fetched quietly in the background afterwards, so the platformer works offline too. The rest of the game's interface, including the narrator, menus and touch controls, stays regular HTML on top of the canvas, so text is crisp and screen readers can follow along.

Vite for the games

Every game is built with Vite. It's fast in development, produces small optimized bundles for production, and works the same whether the game is plain TypeScript or built on Phaser.

A tiny server and an offline-first site

  • Hono, a very small, web-standards-based server framework, serves the site. It's bundled into a single file, so the Docker image needs nothing but Node and the static output.
  • Everything is precompressed (Brotli and gzip) at build time and served with aggressive, cache-friendly headers, so repeat visits are near-instant.
  • A Workbox service worker keeps an offline copy of the site, so your daily game still works on a plane.
  • The whole thing ships as a lean Docker image.

Challenges

  1. Making lies fair: A game that lies at random isn't a game, it's a broken app. The real design work was finding rules for each game's deception that are cruel but still solvable, and the confession at the end proves the game played by its own rules.

  2. Making sure every troll level is beatable: "Unfair" is the point, "impossible" isn't. Every level that reaches players is checked to be beatable before it ships.

  3. The same daily round for everyone: Daily games only work if every player gets the same puzzle on the same day, whether they're online or offline, and wherever they are in the world.

  4. Keeping it light while adding a game engine: Phaser is by far the heaviest thing on the site. Keeping it off the critical path of every other page, and caching it in the background for offline play, keeps the rest of the hub as lean as it started.

Privacy & Quality

  • No accounts and no third-party requests today; all player data stays on your device
  • Honest about the future: ads and leaderboards are planned, and the privacy and cookie policies will be updated before they ship, never after
  • Strict quality gates: linting, type checks, and an automated WCAG contrast check that fails the build if any color pair isn't readable in light or dark mode
  • Security headers set on every response

What I Learned

  • Designing deception is a game-design problem, not a randomness problem: the fun comes from rules the player can reason about, and from a confession that proves the game was fair in its unfairness
  • Static-first goes a long way: a prerendered Astro site with a tiny server is fast, cheap to host, and great for SEO
  • A modular workspace pays off early: by the third game, adding a new one barely touched anything else
  • Use a game engine when it's a game: Phaser saved weeks of work on physics and rendering, and keeping it off the other games' critical path meant they didn't get any slower

Future Plans

  • More games: several more are in development and will join the hub very soon
  • Leaderboards and synced progress: optional online features on top of the current on-device storage
  • Ads: with a proper consent banner and updated legal pages before launch

Comments