diff --git a/.github/workflows/project-status.yml b/.github/workflows/project-status.yml new file mode 100644 index 0000000..ea9b0f0 --- /dev/null +++ b/.github/workflows/project-status.yml @@ -0,0 +1,22 @@ +name: 📋 Project status + +on: + workflow_dispatch: # Manual + push: + branches: [main] + paths: ['status.json'] + schedule: + # Saturday 07:00 AEST (08:00 AEDT over summer) — lands before the weekend + # so there's time to act on it. + - cron: '0 21 * * 5' + +jobs: + status: + uses: privacykey/gh-workflows/.github/workflows/project-status.yml@v1 + with: + target: profile/README.md + collapsed: false + secrets: + # Read-only, scoped to privacykey alone. Without it the drift check is + # skipped and says so, rather than reporting private repos as healthy. + status-token: ${{ secrets.STATUS_TOKEN }} diff --git a/STATUS.md b/STATUS.md new file mode 100644 index 0000000..20d6151 --- /dev/null +++ b/STATUS.md @@ -0,0 +1,90 @@ +# Project status + +What I promise for each privacykey project, and what I don't. Every repo's +status badge links here. + +**Tiers last reviewed: 2026-08-08.** Set by hand — it's when I last actually +looked, not when a script last ran. + +| Tier | What it means | +| --- | --- | +| 🟢 **Active** | I'm in this most weeks. Features are landing, so expect breaking changes between releases — read the changelog before you upgrade. I read issues and generally act on them quickly. | +| 🚧 **Building** | Being built. Nothing is released, nothing is supported, and it can change shape or disappear without notice. Don't build on it — watch the repo if you want to know when it ships. | +| 🛡️ **Maintained** | I'm not adding features here. It still gets security patches, dependency bumps and fixes for anything that breaks. Safe to depend on for exactly what it does today. | +| 📦 **Parked** | Finished or paused. It does what the README says and I left it working, but nothing is watching it, so it could rot quietly. I'll answer a question. I'm not promising a fix or a release. | +| ⚠️ **Unmaintained** | I'm not watching this one. Something it advertises may already be broken, and bugs won't be fixed on a schedule. Read it, fork it, vendor it — this says nothing about whether the code is any good. | +| 📁 **Archived** | Archived on GitHub and read-only. Kept so links don't rot. | + +Private and pre-announcement projects aren't listed here. + +--- + +## privacy tools + +### mantis + +🟢 **Active** — shipping now; installable today and still gaining capability + +I'm in this most weeks. Features are landing, so expect breaking changes between releases — read the changelog before you upgrade. I read issues and generally act on them quickly. + + + +### privacycommand + +🟢 **Active** — shipping now; installable today and still gaining capability + +I'm in this most weeks. Features are landing, so expect breaking changes between releases — read the changelog before you upgrade. I read issues and generally act on them quickly. + + + +### privacytracker + +🟢 **Active** — shipping now; installable today and still gaining capability + +I'm in this most weeks. Features are landing, so expect breaking changes between releases — read the changelog before you upgrade. I read issues and generally act on them quickly. + + + +## shared infrastructure + +### gh-workflows + +🛡️ **Maintained** — feature-complete; kept working and patched, not grown + +I'm not adding features here. It still gets security patches, dependency bumps and fixes for anything that breaks. Safe to depend on for exactly what it does today. + + + +### homebrew-tap + +🛡️ **Maintained** — feature-complete; kept working and patched, not grown + +I'm not adding features here. It still gets security patches, dependency bumps and fixes for anything that breaks. Safe to depend on for exactly what it does today. + + + +### renovate-config + +🛡️ **Maintained** — feature-complete; kept working and patched, not grown + +I'm not adding features here. It still gets security patches, dependency bumps and fixes for anything that breaks. Safe to depend on for exactly what it does today. + + + +## sites & docs + +### docs-mantis + +🛡️ **Maintained** — feature-complete; kept working and patched, not grown + +I'm not adding features here. It still gets security patches, dependency bumps and fixes for anything that breaks. Safe to depend on for exactly what it does today. + + + +### website-privacykey + +📦 **Parked** — done or paused; it works, nothing is watching it + +Finished or paused. It does what the README says and I left it working, but nothing is watching it, so it could rot quietly. I'll answer a question. I'm not promising a fix or a release. + + diff --git a/badges/docs-mantis.json b/badges/docs-mantis.json new file mode 100644 index 0000000..f78ece0 --- /dev/null +++ b/badges/docs-mantis.json @@ -0,0 +1,8 @@ +{ + "schemaVersion": 1, + "label": "status", + "message": "Maintained", + "color": "1f6feb", + "style": "flat", + "cacheSeconds": 3600 +} diff --git a/badges/gh-workflows.json b/badges/gh-workflows.json new file mode 100644 index 0000000..f78ece0 --- /dev/null +++ b/badges/gh-workflows.json @@ -0,0 +1,8 @@ +{ + "schemaVersion": 1, + "label": "status", + "message": "Maintained", + "color": "1f6feb", + "style": "flat", + "cacheSeconds": 3600 +} diff --git a/badges/homebrew-tap.json b/badges/homebrew-tap.json new file mode 100644 index 0000000..f78ece0 --- /dev/null +++ b/badges/homebrew-tap.json @@ -0,0 +1,8 @@ +{ + "schemaVersion": 1, + "label": "status", + "message": "Maintained", + "color": "1f6feb", + "style": "flat", + "cacheSeconds": 3600 +} diff --git a/badges/mantis.json b/badges/mantis.json new file mode 100644 index 0000000..f0f55cf --- /dev/null +++ b/badges/mantis.json @@ -0,0 +1,8 @@ +{ + "schemaVersion": 1, + "label": "status", + "message": "Active", + "color": "2ea043", + "style": "flat", + "cacheSeconds": 3600 +} diff --git a/badges/privacycommand.json b/badges/privacycommand.json new file mode 100644 index 0000000..f0f55cf --- /dev/null +++ b/badges/privacycommand.json @@ -0,0 +1,8 @@ +{ + "schemaVersion": 1, + "label": "status", + "message": "Active", + "color": "2ea043", + "style": "flat", + "cacheSeconds": 3600 +} diff --git a/badges/privacytracker.json b/badges/privacytracker.json new file mode 100644 index 0000000..f0f55cf --- /dev/null +++ b/badges/privacytracker.json @@ -0,0 +1,8 @@ +{ + "schemaVersion": 1, + "label": "status", + "message": "Active", + "color": "2ea043", + "style": "flat", + "cacheSeconds": 3600 +} diff --git a/badges/renovate-config.json b/badges/renovate-config.json new file mode 100644 index 0000000..f78ece0 --- /dev/null +++ b/badges/renovate-config.json @@ -0,0 +1,8 @@ +{ + "schemaVersion": 1, + "label": "status", + "message": "Maintained", + "color": "1f6feb", + "style": "flat", + "cacheSeconds": 3600 +} diff --git a/badges/website-privacykey.json b/badges/website-privacykey.json new file mode 100644 index 0000000..e096418 --- /dev/null +++ b/badges/website-privacykey.json @@ -0,0 +1,8 @@ +{ + "schemaVersion": 1, + "label": "status", + "message": "Parked", + "color": "8b949e", + "style": "flat", + "cacheSeconds": 3600 +} diff --git a/profile/README.md b/profile/README.md index cf47754..d6d81b0 100644 --- a/profile/README.md +++ b/profile/README.md @@ -4,13 +4,44 @@ privacykey builds open-source tools that help people understand, protect, and take control of their personal data — small, specific apps built around a shared identity. + ## Projects -- [**privacytracker**](https://github.com/privacykey/privacytracker) — track how App Store privacy labels and policies change over time, with historical imports and scheduled syncs. -- [**Mantis**](https://github.com/privacykey/mantis) — open-source serverless tripwires for detecting unwanted access. -- [**privacycommand**](https://github.com/privacykey/privacycommand) — static and basic dynamic forensics on macOS apps: see bundled telemetry, requested permissions, and preview updates before they land. +What I promise for every privacykey project, and what I don't. Reviewed 2026-08-08. -More tools are in development — watch this organization to follow along. +Each badge links to the full promise. Private and pre-announcement projects aren't listed. + +| | Tier | What it means | +| - | - | - | +| 🟢 | **Active** | shipping now; installable today and still gaining capability | +| 🛡️ | **Maintained** | feature-complete; kept working and patched, not grown | +| 📦 | **Parked** | done or paused; it works, nothing is watching it | + +**privacy tools** + +| Project | Status | | +| - | - | - | +| [mantis](https://github.com/privacykey/mantis) | 🟢 Active | | +| [privacycommand](https://github.com/privacykey/privacycommand) | 🟢 Active | | +| [privacytracker](https://github.com/privacykey/privacytracker) | 🟢 Active | | + +**shared infrastructure** + +| Project | Status | | +| - | - | - | +| [gh-workflows](https://github.com/privacykey/gh-workflows) | 🛡️ Maintained | | +| [homebrew-tap](https://github.com/privacykey/homebrew-tap) | 🛡️ Maintained | | +| [renovate-config](https://github.com/privacykey/renovate-config) | 🛡️ Maintained | | + +**sites & docs** + +| Project | Status | | +| - | - | - | +| [docs-mantis](https://github.com/privacykey/docs-mantis) | 🛡️ Maintained | | +| [website-privacykey](https://github.com/privacykey/website-privacykey) | 📦 Parked | | + +See [STATUS.md](STATUS.md) for what each tier promises. + ## Links diff --git a/status.json b/status.json new file mode 100644 index 0000000..845a79a --- /dev/null +++ b/status.json @@ -0,0 +1,153 @@ +{ + "owner": "privacykey", + "reviewed": "2026-08-08", + "repos": { + "privacytracker": { + "tier": "Active", + "group": "privacy", + "public": true, + "listed": true, + "distribution": "open-source" + }, + "mantis": { + "tier": "Active", + "group": "privacy", + "public": true, + "listed": true, + "distribution": "open-source" + }, + "privacycommand": { + "tier": "Active", + "group": "privacy", + "public": true, + "listed": true, + "distribution": "open-source" + }, + "pt-mcp": { + "tier": "Building", + "group": "privacy", + "public": false, + "listed": false, + "distribution": "private", + "note": "Went private on 2026-08-07 after the initial audit. Flip back to public/listed when it ships." + }, + "privacysentinel": { + "tier": "Building", + "group": "privacy", + "public": false, + "listed": false, + "distribution": "private" + }, + "handseal": { + "tier": "Building", + "group": "privacy", + "public": false, + "listed": false, + "distribution": "private" + }, + "on-country": { + "tier": "Building", + "group": "apps", + "public": false, + "listed": false, + "distribution": "private", + "note": "Zero-byte README — nowhere to paste a disclosure yet." + }, + "sentinelcatalogue": { + "tier": "Parked", + "group": "privacy", + "public": false, + "listed": false, + "distribution": "private" + }, + "iOSauditor": { + "tier": "Archived", + "group": "archive", + "public": false, + "listed": false, + "distribution": "private" + }, + "gh-workflows": { + "tier": "Maintained", + "group": "infra", + "public": true, + "listed": true, + "distribution": "open-source" + }, + "renovate-config": { + "tier": "Maintained", + "group": "infra", + "public": true, + "listed": true, + "distribution": "open-source" + }, + "homebrew-tap": { + "tier": "Maintained", + "group": "infra", + "public": true, + "listed": true, + "distribution": "open-source" + }, + ".github": { + "tier": "Maintained", + "group": "infra", + "public": true, + "listed": false, + "distribution": "open-source", + "note": "Supplies SECURITY.md, CONTRIBUTING.md and CODE_OF_CONDUCT.md to every privacykey repo, plus the org profile page." + }, + "docs-privacytracker": { + "tier": "Building", + "group": "sites", + "public": false, + "listed": false, + "distribution": "private", + "note": "Mintlify source. Site not live — no DNS, not connected." + }, + "docs-privacysentinel": { + "tier": "Building", + "group": "sites", + "public": false, + "listed": false, + "distribution": "private", + "note": "Mintlify source. Both declared hosts are NXDOMAIN." + }, + "docs-mantis": { + "tier": "Maintained", + "group": "sites", + "public": true, + "listed": true, + "distribution": "open-source" + }, + "website-privacykey": { + "tier": "Parked", + "group": "sites", + "public": true, + "listed": true, + "distribution": "open-source" + }, + "website-mantis": { + "tier": "Parked", + "group": "sites", + "public": false, + "listed": false, + "distribution": "private" + }, + "website-privacytracker": { + "tier": "Unmaintained", + "group": "sites", + "public": false, + "listed": false, + "distribution": "private", + "note": "Empty git repo. Push something or delete it." + }, + "website-privacycommand": { + "tier": "Unmaintained", + "group": "sites", + "public": false, + "listed": false, + "distribution": "private", + "note": "Empty git repo. Push something or delete it." + } + } +}