No description
Find a file
myrmidex edfa58579b
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
Add readme
2026-08-23 21:52:51 +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 Move Laravel into root 2026-08-22 23:42:57 +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 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +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 2 - Add production Dockerfile and release image pipeline 2026-08-23 20:55:23 +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 Add readme 2026-08-23 21:52:51 +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://127.0.0.1:8000. It binds to localhost only; put a reverse proxy in front of it for anything public-facing.

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

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.