|
All checks were successful
Build and Push Docker Image / build (push) Successful in 7m51s
|
||
|---|---|---|
| .forgejo/workflows | ||
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| docker | ||
| docs | ||
| public | ||
| resources | ||
| routes | ||
| storage | ||
| tests | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .npmrc | ||
| .php-cs-fixer.dist.php | ||
| artisan | ||
| compose.yaml | ||
| composer.json | ||
| composer.lock | ||
| Dockerfile | ||
| Dockerfile.dev | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| phpstan.neon | ||
| phpunit.xml | ||
| pint.json | ||
| README.md | ||
| shell.nix | ||
| vite.config.js | ||
Anagram Finder
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.
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 |
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 |
Related
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.
