# TODO - [x] Refactor `justfile` to reduce redundancy and merge similar recipes - [x] Merge `deploy-*` recipes into a single `deploy-script` recipe - [x] Remove rarely used recipes (`show id`, `setup-dirs`) - [x] Simplify `test-*` recipes - [x] Remove redundant `default` recipe - [x] Preserve all critical functionality - [x] Enhance `serve` recipe to automatically open the browser - [x] Keep `serve` recipe in the foreground (browser open backgrounded, PHP server blocks) - [x] Add `psalm` recipe (auto-inits config on first run, then analyses) - [x] Fix all genuine Psalm errors (InvalidOperand, UnusedVariable, InvalidReturnType, NullableReturnStatement, InvalidArrayOffset, UnusedForeachValue, RedundantFunctionCall) - [x] Generate psalm-baseline.xml to suppress false positives (UndefinedConstant, PossiblyUnused*, UnusedClass) - [x] Add `lint-biome` recipe; fix all JS errors and warnings (arrow functions, template literals, noRedundantUseStrict, noUnusedVariables, useIterableCallbackReturn) - [x] Replace Psalm with PHPStan + PHP-CS-Fixer - [x] Remove vimeo/psalm and all its deps from vendor/ - [x] Install phpstan.phar (2.1.54) and php-cs-fixer.phar (3.95.1) in vendor/bin/ - [x] Create phpstan.neon (level 5, bootstraps app/bootstrap.php, scanFiles Parsedown) - [x] Generate phpstan-baseline.neon (10 pre-existing errors baselined) - [x] Create .php-cs-fixer.dist.php (PSR-12 + PHP80Migration, targets app/src + app/tests) - [x] Replace `psalm` justfile recipe with `phpstan`, `cs-check`, `cs-fix` - [x] Remove psalm.xml, psalm-baseline.xml - [x] Remove @psalm-suppress annotations from SmtpRelay.php and RateLimit.php - [x] Add .phpstan.result.cache and .php-cs-fixer.cache to .gitignore