Skip to content

Add devcontainer support for Codespaces, local, and Claude Code - #4308

Merged
abkfenris merged 2 commits into
devcontainer-base-imagefrom
devcontainer-config
Aug 5, 2026
Merged

Add devcontainer support for Codespaces, local, and Claude Code#4308
abkfenris merged 2 commits into
devcontainer-base-imagefrom
devcontainer-config

Conversation

@abkfenris

Copy link
Copy Markdown
Member

Adds .devcontainer/devcontainer.json (docker-compose based, reusing the
existing dev target/services) with:

  • git, github-cli, and common-utils features for a usable shell/terminal
  • the official Claude Code devcontainer feature, with CLAUDE_CONFIG_DIR
    pointed at a persisted volume so login survives rebuilds
  • docker-outside-of-docker so docker compose logs works from the
    integrated terminal (requires moby:false, since moby packages aren't
    published for Debian trixie)
  • forwarded ports for the app, Sentry Spotlight, and Storybook

Removes the old root-level devcontainer.json, which pointed at a
nonexistent workspace path and predates the .devcontainer/ convention.

Requires the Dockerfile syntax bump to 1.4: devcontainer feature injection
uses BuildKit named build contexts, which aren't supported under 1.2.

Also bakes Playwright's browsers into the dev image (otherwise lost every
time the devcontainer is recreated) so npm run test:e2e and the Storybook
vitest addon work out of the box, pins the compose port mappings to
0.0.0.0 (Docker's default dual-stack publish was confusing VS Code's port
forwarding into offering a non-working [::1] address), and allow-lists
localhost/127.0.0.1 as Next.js dev origins for the same forwarded-port
reason.

Fixes an unrelated Storybook glob that never matched any files (all
stories are .tsx; the plain .[jt]s pattern only matches .js/.ts) and was
printing a spurious "no story files found" warning on every start.

@abkfenris
abkfenris force-pushed the devcontainer-config branch 3 times, most recently from 65459c9 to b5cfbc6 Compare August 4, 2026 14:52
Adds .devcontainer/devcontainer.json (docker-compose based, reusing the
existing dev target/services) with:
- git, github-cli, and common-utils features for a usable shell/terminal
- the official Claude Code devcontainer feature, with CLAUDE_CONFIG_DIR
  pointed at a persisted volume so login survives rebuilds
- docker-outside-of-docker so `docker compose logs` works from the
  integrated terminal (requires moby:false, since moby packages aren't
  published for Debian trixie)
- forwarded ports for the app, Sentry Spotlight, and Storybook

Removes the old root-level devcontainer.json, which pointed at a
nonexistent workspace path and predates the .devcontainer/ convention.

Requires the Dockerfile syntax bump to 1.4: devcontainer feature injection
uses BuildKit named build contexts, which aren't supported under 1.2.

Also bakes Playwright's browsers into the dev image (otherwise lost every
time the devcontainer is recreated) so `npm run test:e2e` and the Storybook
vitest addon work out of the box, pins the compose port mappings to
0.0.0.0 (Docker's default dual-stack publish was confusing VS Code's port
forwarding into offering a non-working [::1] address), and allow-lists
localhost/127.0.0.1 as Next.js dev origins for the same forwarded-port
reason.

Fixes an unrelated Storybook glob that never matched any files (all
stories are .tsx; the plain .[jt]s pattern only matches .js/.ts) and was
printing a spurious "no story files found" warning on every start.
@abkfenris
abkfenris force-pushed the devcontainer-config branch from b5cfbc6 to 444604a Compare August 5, 2026 11:43
@abkfenris
abkfenris force-pushed the devcontainer-config branch from 5a2f823 to a3921c3 Compare August 5, 2026 12:43
@abkfenris
abkfenris merged commit 435a838 into main Aug 5, 2026
18 checks passed
@abkfenris
abkfenris deleted the devcontainer-config branch August 5, 2026 12:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant