Foxws
Stry

Development

Development Setup

What you need

Setup

cd ~/projects
git clone git@github.com:francoism90/stry.git
cd stry
composer install
cp .env.example .env
php artisan key:generate

Choose a preset for the app image (see Podman Quadlet for the full list of services):

  • development mounts your working copy into the container, so your changes show up right away. Use this for everyday work.
  • production uses the same image as production, with the code built in. Use this to test a production build locally.
php artisan podman:setup --preset=development
# or: --preset=production

lpod install development/app.quadlets --replace
lpod install development/pgsql.quadlets --replace
# ...and so on for every service (see podman.md)

Set PODMAN_DEFAULT_PRESETS in .env to a comma-separated list, for example PODMAN_DEFAULT_PRESETS=development,devcontainer,s3, so you don't have to pass --preset to every podman:setup run.

Before you store .env with lpod stry secrets, set APP_ENV=local, APP_DEBUG=true and PWA_ENABLED=false, plus any other local settings you need.

When it's running, the app is available at http://localhost:8000. You don't need a reverse proxy locally. See Reverse Proxy if you want to test the subdomain routing used in production.

Once the containers are up, install the dependencies and seed the database:

lpod stry shell
composer install
php artisan storage:link
php artisan migrate --seed
php artisan scout:sync --import
pnpm install

The development preset runs the Vite dev server in its own container (vite.quadlets), next to stry. You don't need to run pnpm dev yourself:

lpod install development/vite.quadlets --replace

Admin account

For testing, you can seed a super-admin user:

lpod stry a db:seed --class=AdminSeeder

Only use this seeder for testing. Never run it in production. See the security checklist.

You can also create an admin interactively, without the seeder: lpod stry artisan users:create --super-admin (see CLI Interaction).

VS Code Dev Containers

The devcontainer preset builds an image for the Dev Containers extension, so you can develop stry inside a container. This is separate from the development and production presets above, which run the app as a service. With stry running, open the project:

code ~/projects/stry

.devcontainer/devcontainer.json connects to the systemd-stry network and gives you PHP IntelliSense, debugging and a terminal inside the container. Generate the configs, then symlink the one you want. Use a symlink rather than a copy, so it stays up to date when you run podman:generate again:

php artisan podman:generate devcontainer
mkdir -p .devcontainer
ln -sf ../podman/devcontainer/runtimes/devcontainer-ai.json .devcontainer/devcontainer.json

stry uses the -ai config by default, which adds the Claude Code and Codex CLIs to the base image. There are four configs in total: prebuilt or built locally, each with or without the AI CLIs. See Devcontainer in the package docs for the others.

~/.claude.json must exist as a file on your machine before the first launch. Otherwise Podman creates an empty directory with that name instead.

After changing the preset, generate the configs again and run Dev Containers: Rebuild Container.

Laravel IDE Helper

lpod stry artisan ide-helper:generate
lpod stry artisan ide-helper:meta
lpod stry artisan ide-helper:models --nowrite

AI-assisted development

Laravel Boost is set up as an MCP server. In VS Code, open the Command Palette (Ctrl+Shift+P or Cmd+Shift+P), choose MCP: List Servers and start laravel-boost.

The -ai devcontainer config (see above) also installs the claude and codex CLIs. Your ~/.claude and ~/.codex folders are mounted into the container, so you stay logged in after a rebuild. Use either CLI together with Boost, which gives it Laravel-specific context such as routes, the database schema, config and Tinker.

Testing and code quality

lpod stry artisan test
lpod stry artisan test --filter=testMethodName
lpod stry bin pint
lpod stry bin larastan

Admin services

Available when you're logged in as a super-admin:

Service URL Description
Horizon http://localhost:8000/horizon Monitor and manage queues
Telescope http://localhost:8000/telescope Debugging tool (only in development)

Troubleshooting

  • A container won't start: run journalctl --user -u stry -f. Look for a missing or invalid stry-env secret, or another process using port 8000, 5173 or 6001.
  • Permission errors: run chown -R 1000:1000 ~/projects/stry/storage. Use your own PODMAN_QUADLET_UID and GID if you changed them.
  • Assets don't build: run rm -rf bootstrap/ssr && lpod stry npm run build.
  • Tests fail with could not translate host name "systemd-stry-pgsql": you ran php artisan test on your machine instead of inside the container network. Start the containers with lpod stry up, then run lpod stry artisan test.

Next steps