A modular monolith for the Tri-Cities developer community, assembled from independently
deployed projects using git submodules. Each project lives in its own repository with its
own CI/CD pipeline, language, and deploy target — but tridev-hub composes them into a single
workspace you can clone, query, and reason about as a whole.
The root repository is the org brain: shared standards (CLAUDE.md) and reusable skills that work across every project.
tridev-hub/
├── README.md ← you are here
├── CLAUDE.md ← org-wide standards (the shared brain)
├── .claude/skills/ ← reusable capabilities that span projects
│ └── tridev-pulse/ ← cross-submodule query: "what's happening at TriDev?"
├── data/ ← seed data used as a resilient fallback
├── scripts/ ← small cross-project tools
└── projects/ ← the submodules
├── meetup-scrapper/ → tricities-dev/meetup-scrapper (TypeScript · Cloudflare Worker)
├── vertex/ → tricities-dev/vertex (Rust · Discord bot)
└── events-site/ → tricities-dev/events-site (SvelteKit · planned)
Clone the whole ecosystem in one shot — --recursive pulls every submodule:
git clone --recursive https://github.com/tricities-dev/tridev-hub.git
cd tridev-hubAlready cloned without --recursive? Pull the submodules after the fact:
git submodule update --init --recursiveUpdate every project to its latest committed pointer:
git submodule update --remote --merge| Independent repos give you… | The hub adds… |
|---|---|
| Own CI/CD, own deploy, own language | One workspace to clone and search |
| Small blast radius per change | Cross-project queries (see tridev-pulse) |
| Teams own their project | Shared standards + skills that travel with it |
Each submodule is pinned to a specific commit, so the hub is always a reproducible snapshot of the whole org — while each project still ships on its own schedule.
The payoff. From the root, run the tridev-pulse skill (in Claude Code) to answer
"what's happening at TriDev right now?" — it reads the next meetup event (live, with a seed
fallback), the Discord bot's command set, and the events site, then synthesizes one answer that
spans three languages and three deploy targets.
# the data half of the query, runnable on its own:
node scripts/next-event.mjs| Project | Stack | Deploy | Status |
|---|---|---|---|
| meetup-scrapper | TypeScript / Worker | Cloudflare | live |
| vertex | Rust | (unchanged) | live |
| events-site | SvelteKit | Cloudflare Pages | planned |