Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# DHIS2 Platform
node_modules
# Project-local pnpm store created when installing inside an sbx sandbox
# (node_modules on the bind mount, global store on another filesystem)
.pnpm-store
.d2
src/locales/*
Expand All @@ -14,13 +12,9 @@ cypress/downloads
.aider*
.github/copilot-instructions.md
.claude/settings.local.json
# Installed by `playwright-cli install --skills`, not authored here
.claude/skills/playwright-cli
cypress/downloads
Comment thread
HendrikThePendric marked this conversation as resolved.
.vscode
.scannerwork
opensrc
docs/superpowers

# playwright-cli session artifacts (AI sandboxes)
.playwright-cli
8 changes: 3 additions & 5 deletions .hooks/pre-commit
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
#!/bin/sh

# The sandbox clone sets RUN_PRE_COMMIT_HOOK=0 (see scripts/sbx.sh): it verifies
# lint/types/tests itself and runs i18n extract as a final step, so this hook is
# redundant there. commit-msg still runs so the clone's messages are linted against
# the project config; pre-push never fires (the clone never pushes). Humans skip a
# hook with `git commit --no-verify`.
# Escape hatch for automated environments that already run lint, types, tests and
# i18n extract themselves; commit-msg and pre-push still run. `git commit --no-verify`
# is not a substitute — it also skips commit-msg, leaving the message unlinted.
if [ "$RUN_PRE_COMMIT_HOOK" = "0" ]; then
exit 0
fi
Expand Down
66 changes: 0 additions & 66 deletions .sbx/Dockerfile

This file was deleted.

19 changes: 0 additions & 19 deletions .sbx/base.md

This file was deleted.

11 changes: 0 additions & 11 deletions .sbx/clone.md

This file was deleted.

65 changes: 0 additions & 65 deletions .sbx/ide-forward.js

This file was deleted.

5 changes: 0 additions & 5 deletions .sbx/mount.md

This file was deleted.

31 changes: 0 additions & 31 deletions .sbx/network-allowlist.txt

This file was deleted.

6 changes: 3 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ timing-dependent hook tests need a specific setup. See the `testing-with-fake-ti
- **Internationalization**: Use DHIS2 i18n utilities for all user-facing strings
- **Testing environments**: Test against DHIS2 instances (development and production)
- **Authentication**: Handle DHIS2 authentication and authorization properly
- **Browser testing**: On the host, drive the running app with **claude-in-chrome** (works in both terminal and desktop Claude Code; the developer sets it up via the Claude browser extension — see README). If you need browser automation on the host and it isn't connected, ask the human to set it up. In the AI sandboxes, use the `playwright-cli` tool instead (see [docs/claude-sandboxes.md](docs/claude-sandboxes.md)). Read `cypress.env.json` (gitignored) for the DHIS2 server URL and login credentials. The dev server on `localhost:3000` shows a login form requiring Server, Username, and Password
- **Browser testing**: Drive the running app with **claude-in-chrome** (works in both terminal and desktop Claude Code; the developer sets it up via the Claude browser extension — see README). If it isn't connected, ask the human to set it up. Read `cypress.env.json` (gitignored) for the DHIS2 server URL and login credentials. The dev server on `localhost:3000` shows a login form requiring Server, Username, and Password
- **Deployment**: App can be deployed as both a standalone app and a plugin

## Understanding the DHIS2 Web API
Expand All @@ -216,9 +216,9 @@ The following are enabled for this project via `.claude/settings.json`:

- **Grep by Vercel** (`grep_*`): Fast code search across GitHub repositories. **Usage**: Trigger-based only — add `use the grep tool` to your prompts when you want cross-repo search.

**Browser automation**: On the host, use **claude-in-chrome** (terminal or desktop Claude Code; requires the developer to install and connect the Claude browser extension — see README). If you need to drive the browser on the host and it isn't set up, you may ask the human to set it up for you. In the AI sandboxes, browser automation is provided by the baked-in `playwright-cli` (see [docs/claude-sandboxes.md](docs/claude-sandboxes.md)).
**Browser automation**: Use **claude-in-chrome** (terminal or desktop Claude Code; requires the developer to install and connect the Claude browser extension — see README). If you need to drive the browser and it isn't set up, you may ask the human to set it up for you.

**GitHub**: Use the `gh` CLI via Bash for all GitHub operations (issues, PRs, code search, actions). Requires the [GitHub CLI](https://cli.github.com/) to be installed and authenticated (`gh auth login`). In the AI sandboxes `gh` is authenticated read-only (writes fail by design).
**GitHub**: Use the `gh` CLI via Bash for all GitHub operations (issues, PRs, code search, actions). Requires the [GitHub CLI](https://cli.github.com/) to be installed and authenticated (`gh auth login`).

**Linting**: ESLint, Stylelint, and Prettier are run automatically via PostToolUse hooks. For manual checks, use `pnpm exec eslint <file-path>`.

Expand Down
14 changes: 0 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,26 +90,12 @@ gh auth login
# extension and connect it to Claude Code.
# https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn
# Once connected, Claude can drive your browser to load http://localhost:3000.
# (This is host-only; the AI sandboxes use playwright-cli instead — no setup needed.)

# 4. Inside Claude Code, install and activate plugins
/plugin install typescript-lsp@claude-plugins-official
/reload-plugins
```

### AI sandboxes (opt-in)

Two optional, **experimental**, isolated AI workspaces built on [Docker Sandboxes](https://docs.docker.com/ai/sandboxes/) (`sbx`) — a hands-on **mount** (your live working tree) and an autonomous **clone**. Fully opt-in: if you do not install `sbx`, nothing here affects you. (Tested on macOS/arm64 + Neovim; see the guide for portability.)

One-time setup needs the `sbx` CLI, a read-only GitHub token, and a dedicated SSH signing key (all covered in the guide). With that done, launch one with:

```bash
pnpm sbx:mount # hands-on, edits your live files
pnpm sbx:clone # autonomous, isolated clone
```

See **[docs/claude-sandboxes.md](docs/claude-sandboxes.md)** for installation and setup, mount vs clone, the `node_modules` overlay, Neovim integration, browser automation, and the full workflow.

### Development Workflow

1. **Create a feature branch** from `main`
Expand Down
Loading
Loading