git clone https://github.com/harystyleseze/careguard
cd careguard
npm install --legacy-peer-deps
cp .env.example .env
npm run setup # generates testnet walletsSee QUICKSTART.md for full environment setup.
- Fork the repo and create a branch from
main - Make your changes with tests where applicable
- Run
npm test(root) andcd dashboard && npm testbefore pushing - Open a pull request — CI must be green before merge
Dependencies are kept up to date automatically via Dependabot.
| Ecosystem | Directory | Schedule | Auto-merge |
|---|---|---|---|
| npm (root) | / |
Weekly (Monday) | patch + minor |
| npm (dashboard) | /dashboard |
Weekly (Monday) | patch + minor |
| GitHub Actions | /.github/workflows |
Weekly (Monday) | patch + minor |
| Docker | / |
Weekly (Monday) | patch + minor |
Related packages are batched into a single PR to reduce noise:
@stellar/*— Stellar SDK and related packages@x402/*— x402 payment protocol packagesopenai— OpenAI SDK (solo PR, intentionally ungrouped)next+react+react-dom— Next.js core (dashboard)tailwindcss+@tailwindcss/*— Tailwind (dashboard)
Major bumps are not auto-merged. Dependabot will open a PR labeled major-update + needs-review. A maintainer must:
- Review the changelog / migration guide
- Update any breaking API usage
- Approve and merge manually
The dependabot-automerge workflow runs on every Dependabot PR:
- Waits for CI to pass
- Auto-squash-merges patch and minor updates
- Adds a comment and labels on major updates, blocking auto-merge
- Never commit secrets or
.envfiles — they are gitignored - Stellar private keys must stay out of source control
- Report vulnerabilities privately via GitHub Security Advisories
- TypeScript strict mode — no
anywithout justification - ESLint + Prettier (run
npm run lintbefore pushing) - Keep services self-contained; shared code goes in
shared/
If contributing to on-chain components:
- Use a two-step ownership transfer (
propose_admin→accept_admin) to prevent accidental transfers to dead addresses - Set the admin to a Stellar multisig account with appropriate
low_threshold,med_threshold, andhigh_threshold— a single-key admin is a single point of failure - Vesting rights transfers (
transfer_vesting_rights) must requirerecipient.require_auth()— never admin auth — so only the recipient can rotate their own address - Fee parameters must be stored in
DataKey::FeeConfigin persistent storage and must be immutable within a transaction to prevent bait-and-switch scenarios - Major contract changes require a security review before deployment