No description
Find a file
myrmidex 089ce4d973
All checks were successful
Build and Push Docker Image / build (push) Successful in 8m42s
Publish the app port on all interfaces, not just loopback
2026-08-23 23:18:38 +02:00
.forgejo/workflows 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +02:00
app 5 - Cache anagram results, keyed on the dictionary contents 2026-08-23 21:46:14 +02:00
bootstrap 3 - Add README for self-hosters 2026-08-23 21:58:27 +02:00
config Add license and screenshot 2026-08-23 15:18:28 +02:00
database Move Laravel into root 2026-08-22 23:42:57 +02:00
docker Fix Vite dev server binding and port mapping 2026-08-23 16:09:10 +02:00
docs Add favicon and logos 2026-08-23 17:49:02 +02:00
public Add favicon and logos 2026-08-23 17:49:02 +02:00
resources 4 - Fix mobile layout of header and footer 2026-08-23 21:37:57 +02:00
routes Show results 2026-08-23 10:04:08 +02:00
storage Move Laravel into root 2026-08-22 23:42:57 +02:00
tests Move Laravel into root 2026-08-22 23:42:57 +02:00
.dockerignore 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +02:00
.editorconfig Move Laravel into root 2026-08-22 23:42:57 +02:00
.env.example 3 - Add README for self-hosters 2026-08-23 21:58:27 +02:00
.gitattributes Move Laravel into root 2026-08-22 23:42:57 +02:00
.gitignore 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +02:00
.npmrc Move Laravel into root 2026-08-22 23:42:57 +02:00
.php-cs-fixer.dist.php Add main controller 2026-08-23 00:02:22 +02:00
artisan Move Laravel into root 2026-08-22 23:42:57 +02:00
compose.yaml Publish the app port on all interfaces, not just loopback 2026-08-23 23:18:38 +02:00
composer.json 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +02:00
composer.lock 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +02:00
Dockerfile 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +02:00
Dockerfile.dev Fix Vite dev server binding and port mapping 2026-08-23 16:09:10 +02:00
LICENSE Add license and screenshot 2026-08-23 15:18:28 +02:00
package-lock.json 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +02:00
package.json 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +02:00
phpstan.neon Move Laravel into root 2026-08-22 23:42:57 +02:00
phpunit.xml Move Laravel into root 2026-08-22 23:42:57 +02:00
pint.json Move Laravel into root 2026-08-22 23:42:57 +02:00
README.md Publish the app port on all interfaces, not just loopback 2026-08-23 23:18:38 +02:00
shell.nix Auto-start offer 2026-08-23 00:08:44 +02:00
vite.config.js Fix Vite dev server binding and port mapping 2026-08-23 16:09:10 +02:00

Anagram Finder

License Release

Type a handful of letters, get every word you can build from them. Self-hosted, no accounts, no tracking — one input and a list of results.

Anagram Finder

Features

  • Finds every dictionary word that fits your letters, longest first
  • 466,000-word English dictionary, bundled — no external lookups
  • Results are cached, so a repeated search is instant
  • Shareable result URLs (/find/eamstoxil)
  • Works without JavaScript; the whole thing is one form and one page
  • Terminal-styled, dark by default, readable on a phone

Self-hosting

Images are published to forge.lvl0.xyz/anagram-finder/web. Grab compose.yaml, set the three required variables, and start it:

mkdir anagram-finder && cd anagram-finder
curl -O https://forge.lvl0.xyz/anagram-finder/web/raw/branch/main/compose.yaml

cat > .env <<EOF
APP_KEY=base64:$(openssl rand -base64 32)
APP_URL=http://localhost:8000
DB_PASSWORD=$(openssl rand -hex 16)
DB_ROOT_PASSWORD=$(openssl rand -hex 16)
EOF

docker compose up -d

The app is then on http://localhost:8000. Put a reverse proxy in front of it for anything public-facing, and set APP_URL to the address people will actually use.

compose.yaml pins :latest. Check Releases and pin a version tag if you would rather upgrade deliberately.

Configuration

The snippet above generates everything required. In full:

Variable Description
APP_KEY Encryption key, base64: prefixed
APP_URL The address people will actually use
DB_PASSWORD Database password
DB_ROOT_PASSWORD MariaDB root password

APP_PORT moves the published port (default 8000) — set APP_URL to match if you change it. DB_DATABASE and DB_USERNAME both default to anagram. Anything else you might want to override is listed in .env.example.

Migrations run automatically on first boot.

Development

git clone https://forge.lvl0.xyz/anagram-finder/web.git
cd web
nix-shell

The shell prints the available commands and offers to start the containers.

Command Description
dev-up Start the development environment
dev-down Stop it (-v also drops the database volume)
dev-rebuild Rebuild images and restart
dev-shell Enter the app container
dev-artisan <cmd> Run an artisan command
dev-composer <cmd> Run composer in the container
dev-test Run the test suite
dev-db MariaDB client on the dev database
dev-logs / dev-logs-db Follow the app or database log
Service URL
App http://localhost:8001
Vite http://localhost:5174
MariaDB localhost:3308

The matching logic and the dictionary live in anagram-finder/core, shared with anagram-finder/tui, a terminal client. Styling comes from lvl0/ui.

Contributing

Issues and pull requests are welcome at Issues.

License

Anagram Finder is free software, licensed under the GNU AGPL-3.0.