{ "name": "webapp", "image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm", "features": { "ghcr.io/anthropics/devcontainer-features/claude-code:1": {} }, "mounts": [ "source=claude-config-${devcontainerId},target=/home/node/.claude,type=volume", "source=${localEnv:HOME}/.ssh/config,target=/home/node/.ssh/config,type=bind,readonly", "source=${localEnv:HOME}/.ssh/known_hosts,target=/home/node/.ssh/known_hosts,type=bind,readonly" ], "forwardPorts": [3000], "portsAttributes": { "3000": { "label": "App", "onAutoForward": "openBrowser" } }, "postCreateCommand": "sudo chown -R node:node /home/node/.claude && cd frontend-starter && npm install", "postStartCommand": "cd frontend-starter && npm install --no-audit --no-fund", "postAttachCommand": "cd frontend-starter && npx -y kill-port 3000 && npm run dev", "customizations": { "vscode": { "settings": { "git.branchProtection": ["main"], "git.branchProtectionPrompt": "alwaysCommitToNewBranch", "git.branchPrefix": "feat/", "git.branchRandomName.enable": true, "git.postCommitCommand": "push", "git.autofetch": true }, "extensions": [ "anthropic.claude-code", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "bradlc.vscode-tailwindcss" ] } }