Skip to content

Commit 7383d18

Browse files
committed
feat: add directory with registry, standards, catalog site, and scaffold generator
- registry.json cataloging all 9 public developer tool repos - standards/ with 9 docs covering folder structure, CI/CD, versioning, etc. - docs/ GitHub Pages catalog site (dark theme, filterable card grid) - scaffold/ repo generator with 18 Jinja2 templates - .github/workflows/ for validation and Pages deployment - assets/logo.png Made-with: Cursor
1 parent ae029cf commit 7383d18

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+3317
-1
lines changed

.github/workflows/pages.yml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Deploy GitHub Pages
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- "docs/**"
8+
- "assets/**"
9+
- "registry.json"
10+
workflow_dispatch:
11+
12+
permissions:
13+
pages: write
14+
id-token: write
15+
16+
concurrency:
17+
group: pages
18+
cancel-in-progress: true
19+
20+
jobs:
21+
deploy:
22+
environment:
23+
name: github-pages
24+
url: ${{ steps.deployment.outputs.page_url }}
25+
runs-on: ubuntu-latest
26+
steps:
27+
- uses: actions/checkout@v4
28+
29+
- name: Copy registry into docs for client-side fetch
30+
run: cp registry.json docs/registry.json
31+
32+
- name: Copy assets into docs
33+
run: |
34+
mkdir -p docs/assets
35+
cp -r assets/* docs/assets/ 2>/dev/null || true
36+
37+
- uses: actions/configure-pages@v5
38+
39+
- uses: actions/upload-pages-artifact@v4
40+
with:
41+
path: docs
42+
43+
- uses: actions/deploy-pages@v5
44+
id: deployment

.github/workflows/validate.yml

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
name: Validate
2+
3+
on:
4+
pull_request:
5+
branches: [main]
6+
push:
7+
branches: [main]
8+
9+
permissions:
10+
contents: read
11+
12+
jobs:
13+
validate-registry:
14+
name: Validate registry.json
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Validate JSON syntax
20+
run: python3 -c "import json; json.load(open('registry.json'))"
21+
22+
- name: Validate registry schema
23+
run: python3 << 'EOF'
24+
import json, sys
25+
26+
data = json.load(open("registry.json"))
27+
assert isinstance(data, list), "registry.json must be an array"
28+
29+
required = ["name", "repo", "slug", "description", "type", "skills", "rules", "mcpTools", "status"]
30+
valid_types = ["cursor-plugin", "mcp-server"]
31+
errors = []
32+
33+
for i, tool in enumerate(data):
34+
for field in required:
35+
if field not in tool:
36+
errors.append(f"Entry {i} ({tool.get('name', '?')}): missing '{field}'")
37+
if tool.get("type") not in valid_types:
38+
errors.append(f"Entry {i} ({tool.get('name', '?')}): invalid type '{tool.get('type')}'")
39+
if not isinstance(tool.get("skills", 0), int):
40+
errors.append(f"Entry {i} ({tool.get('name', '?')}): skills must be int")
41+
if not isinstance(tool.get("rules", 0), int):
42+
errors.append(f"Entry {i} ({tool.get('name', '?')}): rules must be int")
43+
if not isinstance(tool.get("mcpTools", 0), int):
44+
errors.append(f"Entry {i} ({tool.get('name', '?')}): mcpTools must be int")
45+
46+
if errors:
47+
for e in errors:
48+
print(f"::error::{e}", file=sys.stderr)
49+
sys.exit(1)
50+
51+
print(f"Registry valid: {len(data)} tools")
52+
EOF
53+
54+
validate-docs:
55+
name: Validate docs site
56+
runs-on: ubuntu-latest
57+
steps:
58+
- uses: actions/checkout@v4
59+
60+
- name: Check docs/index.html exists
61+
run: test -f docs/index.html
62+
63+
- name: Check docs/style.css exists
64+
run: test -f docs/style.css
65+
66+
- name: Check docs/script.js exists
67+
run: test -f docs/script.js
68+
69+
validate-scaffold:
70+
name: Validate scaffold
71+
runs-on: ubuntu-latest
72+
steps:
73+
- uses: actions/checkout@v4
74+
75+
- uses: actions/setup-python@v5
76+
with:
77+
python-version: "3.12"
78+
79+
- name: Install dependencies
80+
run: pip install Jinja2
81+
82+
- name: Check scaffold syntax
83+
run: python3 -m py_compile scaffold/create-tool.py
84+
85+
- name: Test scaffold dry run
86+
run: |
87+
python3 scaffold/create-tool.py \
88+
--name "CI Test Plugin" \
89+
--description "Automated test" \
90+
--mcp-server \
91+
--skills 2 \
92+
--rules 1 \
93+
--output /tmp/scaffold-test
94+
95+
test -f /tmp/scaffold-test/ci-test-plugin/.cursor-plugin/plugin.json
96+
test -f /tmp/scaffold-test/ci-test-plugin/.github/workflows/validate.yml
97+
test -f /tmp/scaffold-test/ci-test-plugin/mcp-server/server.py
98+
echo "Scaffold test passed"

.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
__pycache__/
2+
*.pyc
3+
*.pyo
4+
.env
5+
.venv/
6+
venv/
7+
*.egg-info/
8+
dist/
9+
build/
10+
.DS_Store
11+
Thumbs.db
12+
node_modules/
13+
output/

LICENSE

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International
2+
3+
Copyright (c) 2026 TMHSDigital
4+
5+
This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
6+
7+
You are free to:
8+
Share - copy and redistribute the material in any medium or format
9+
10+
Under the following terms:
11+
Attribution - You must give appropriate credit, provide a link to the
12+
license, and indicate if changes were made.
13+
14+
NonCommercial - You may not use the material for commercial purposes.
15+
16+
NoDerivatives - If you remix, transform, or build upon the material,
17+
you may not distribute the modified material.
18+
19+
No additional restrictions - You may not apply legal terms or technological
20+
measures that legally restrict others from doing anything the license permits.
21+
22+
Full license text: https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode

README.md

Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,109 @@
1-
# Developer-Tools-Directory
1+
# Developer Tools Directory
2+
3+
**Centralized catalog, standards, and scaffolding for TMHSDigital Cursor IDE plugins, MCP servers, and developer tools.**
4+
5+
![License: CC BY-NC-ND 4.0](https://img.shields.io/badge/license-CC--BY--NC--ND--4.0-green)
6+
7+
---
8+
9+
> 9 repos -- 186 skills -- 77 rules -- 377 MCP tools
10+
11+
## Tools
12+
13+
| Tool | Type | Skills | Rules | MCP Tools | Links |
14+
| --- | --- | ---: | ---: | ---: | --- |
15+
| **CFX Developer Tools** | Plugin | 9 | 6 | 6 | [Repo](https://github.com/TMHSDigital/CFX-Developer-Tools) - [Docs](https://tmhsdigital.github.io/CFX-Developer-Tools/) |
16+
| **Unity Developer Tools** | Plugin | 18 | 8 | 4 | [Repo](https://github.com/TMHSDigital/Unity-Developer-Tools) |
17+
| **Docker Developer Tools** | Plugin | 17 | 10 | 150 | [Repo](https://github.com/TMHSDigital/Docker-Developer-Tools) - [Docs](https://tmhsdigital.github.io/Docker-Developer-Tools/) |
18+
| **Home Lab Developer Tools** | Plugin | 22 | 11 | 50 | [Repo](https://github.com/TMHSDigital/Home-Lab-Developer-Tools) - [Docs](https://tmhsdigital.github.io/Home-Lab-Developer-Tools/) |
19+
| **Mobile App Developer Tools** | Plugin | 43 | 12 | 36 | [Repo](https://github.com/TMHSDigital/Mobile-App-Developer-Tools) |
20+
| **Plaid Developer Tools** | Plugin | 17 | 7 | 30 | [Repo](https://github.com/TMHSDigital/Plaid-Developer-Tools) |
21+
| **Monday Cursor Plugin** | Plugin | 21 | 8 | 45 | [Repo](https://github.com/TMHSDigital/Monday-Cursor-Plugin) - [Docs](https://tmhsdigital.github.io/Monday-Cursor-Plugin/) |
22+
| **Steam Cursor Plugin** | Plugin | 30 | 9 | 25 | [Repo](https://github.com/TMHSDigital/Steam-Cursor-Plugin) - [Docs](https://tmhsdigital.github.io/Steam-Cursor-Plugin/) |
23+
| **Steam MCP Server** | MCP Server | 0 | 0 | 25 | [Repo](https://github.com/TMHSDigital/steam-mcp) - [npm](https://www.npmjs.com/package/@tmhs/steam-mcp) |
24+
25+
## Standards
26+
27+
Documented conventions for building new developer tools. See the full standards in [`standards/`](standards/).
28+
29+
| Standard | Summary |
30+
| --- | --- |
31+
| [Folder Structure](standards/folder-structure.md) | Canonical repo layout for plugins and MCP servers |
32+
| [Plugin Manifest](standards/plugin-manifest.md) | `.cursor-plugin/plugin.json` specification |
33+
| [CI/CD](standards/ci-cd.md) | GitHub Actions workflows every repo must have |
34+
| [GitHub Pages](standards/github-pages.md) | Documentation site setup (static HTML or MkDocs) |
35+
| [Commit Conventions](standards/commit-conventions.md) | Conventional commits and version bumping rules |
36+
| [README Template](standards/readme-template.md) | Standard README structure |
37+
| [AGENTS.md Template](standards/agents-template.md) | AI agent guidance file structure |
38+
| [Versioning](standards/versioning.md) | Semver management and release flow |
39+
40+
## Scaffold Generator
41+
42+
Generate a fully standards-compliant repository from the command line.
43+
44+
### Prerequisites
45+
46+
```bash
47+
pip install Jinja2
48+
```
49+
50+
### Usage
51+
52+
```bash
53+
python scaffold/create-tool.py \
54+
--name "Unreal Developer Tools" \
55+
--description "Cursor plugin for Unreal Engine development" \
56+
--mcp-server \
57+
--skills 5 \
58+
--rules 3
59+
```
60+
61+
### Options
62+
63+
| Flag | Required | Default | Description |
64+
| --- | --- | --- | --- |
65+
| `--name` | Yes | -- | Display name (e.g., "Unreal Developer Tools") |
66+
| `--description` | Yes | -- | One-line description |
67+
| `--slug` | No | auto | Kebab-case identifier (derived from name) |
68+
| `--type` | No | `cursor-plugin` | `cursor-plugin` or `mcp-server` |
69+
| `--mcp-server` | No | false | Include MCP server scaffold |
70+
| `--skills N` | No | 0 | Number of placeholder skill directories |
71+
| `--rules N` | No | 0 | Number of placeholder rule files |
72+
| `--license` | No | `cc-by-nc-nd-4.0` | `cc-by-nc-nd-4.0`, `mit`, or `apache-2.0` |
73+
| `--output` | No | `./output` | Output directory |
74+
| `--author-name` | No | TMHSDigital | Author name for manifests |
75+
| `--author-email` | No | contact@... | Author email |
76+
77+
### What It Generates
78+
79+
- Full folder structure per the [standard](standards/folder-structure.md)
80+
- Populated `plugin.json` with provided metadata
81+
- All 4 core GitHub Actions workflows (validate, release, pages, stale)
82+
- Skeleton docs: `AGENTS.md`, `CLAUDE.md`, `README.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`, `ROADMAP.md`
83+
- GitHub Pages site template (`docs/index.html`)
84+
- MCP server scaffold (if `--mcp-server` flag)
85+
- `.cursorrules`, `.gitignore`, `LICENSE`
86+
87+
## Catalog Site
88+
89+
Browse all tools visually at the [GitHub Pages catalog](https://tmhsdigital.github.io/Developer-Tools-Directory/).
90+
91+
## Project Structure
92+
93+
```
94+
Developer-Tools-Directory/
95+
.github/workflows/ CI/CD for this repo (validate, pages)
96+
docs/ GitHub Pages catalog site
97+
scaffold/ Repo generator script + Jinja2 templates
98+
standards/ Convention documentation
99+
registry.json Tool registry (source of truth)
100+
README.md
101+
```
102+
103+
## License
104+
105+
CC-BY-NC-ND-4.0 -- see [LICENSE](LICENSE) for details.
106+
107+
---
108+
109+
**Built by [TMHSDigital](https://github.com/TMHSDigital)**

assets/logo.png

736 KB
Loading

0 commit comments

Comments
 (0)