{"id":51552935,"url":"https://github.com/thedaviddias/stackmatch","last_synced_at":"2026-07-10T01:30:24.722Z","repository":{"id":361697865,"uuid":"1255344959","full_name":"thedaviddias/stackmatch","owner":"thedaviddias","description":"🧬 Discover developers by the stacks they actually build with.","archived":false,"fork":false,"pushed_at":"2026-07-01T07:12:32.000Z","size":3854,"stargazers_count":8,"open_issues_count":4,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-01T09:12:27.784Z","etag":null,"topics":["collaboration","convex","dependency-analysis","developer-discovery","developer-tools","github","monorepo","nextjs","open-source","package-json","pnpm","react","tech-stack","typescript"],"latest_commit_sha":null,"homepage":"https://stackmatch.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thedaviddias.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"thedaviddias","custom":["https://thanks.dev/u/thedaviddias"]}},"created_at":"2026-05-31T18:02:59.000Z","updated_at":"2026-06-21T18:16:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/thedaviddias/stackmatch","commit_stats":null,"previous_names":["thedaviddias/stackmatch"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thedaviddias/stackmatch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thedaviddias%2Fstackmatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thedaviddias%2Fstackmatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thedaviddias%2Fstackmatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thedaviddias%2Fstackmatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thedaviddias","download_url":"https://codeload.github.com/thedaviddias/stackmatch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thedaviddias%2Fstackmatch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35317805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collaboration","convex","dependency-analysis","developer-discovery","developer-tools","github","monorepo","nextjs","open-source","package-json","pnpm","react","tech-stack","typescript"],"created_at":"2026-07-10T01:30:24.044Z","updated_at":"2026-07-10T01:30:24.705Z","avatar_url":"https://github.com/thedaviddias.png","language":"TypeScript","funding_links":["https://github.com/sponsors/thedaviddias","https://thanks.dev/u/thedaviddias"],"categories":[],"sub_categories":[],"readme":"# Stackmatch\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-111827.svg)](./LICENSE)\n[![Built with Next.js](https://img.shields.io/badge/Next.js-16-000000.svg)](https://nextjs.org/)\n[![Powered by Convex](https://img.shields.io/badge/Convex-realtime-7c3aed.svg)](https://www.convex.dev/)\n[![Package manager: pnpm](https://img.shields.io/badge/package%20manager-pnpm-f69220.svg)](https://pnpm.io/)\n[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors)\n\nFind developers who build with your stack.\n\nStackmatch scans public GitHub `package.json` files, builds dependency fingerprints for developers and organizations, and surfaces **stackmates**: people whose real project stacks overlap with yours.\n\n**Live site:** [stackmatch.dev](https://stackmatch.dev)\n\n**Docs:** [stackmatch.dev/docs](https://stackmatch.dev/docs)\n\n![Stackmatch preview](https://stackmatch.dev/api/og/global)\n\n## Why Stackmatch Exists\n\nGitHub is rich with signals, but most developer discovery still starts from bios, follower counts, or keyword search. Stackmatch starts from what people actually build with.\n\nThe project maps developers, packages, languages, topics, and communities through dependency overlap. That makes it easier to find peers using similar tools, spot emerging package communities, and turn shared technical context into collaboration.\n\n## What Stackmatch Does\n\n- Builds public stack fingerprints from root and nested `package.json` files.\n- Finds stackmates using shared package counts and stack similarity scoring.\n- Creates public profile pages for indexed developers and organizations.\n- Surfaces package pages, package leaderboards, language pages, and topic communities.\n- Supports GitHub sign-in so developers can claim their profile.\n- Offers optional private stack sync through separate GitHub App consent.\n- Keeps private analysis aggregate-only: dependency names and counts, not source code.\n\n## Architecture\n\nStackmatch is a TypeScript monorepo built around a Next.js web app and a Convex backend.\n\n| Area | Technology |\n| --- | --- |\n| Web app | Next.js App Router, React, Tailwind CSS |\n| Backend/data | Convex queries, mutations, actions, scheduled jobs |\n| Auth | Better Auth with GitHub OAuth |\n| UI | Shared `@stackmatch/ui` package, Lucide icons, Radix primitives |\n| Tooling | pnpm, Turborepo, Biome, TypeScript |\n| Testing | Vitest, Testing Library, jsdom accessibility tests |\n\n## Repository Layout\n\n```text\napps/web                 Next.js app, Convex functions, routes, UI surfaces\npackages/api             Shared API-facing contracts and helpers\npackages/config          Site config, routes, themes, shared app config\npackages/constants       Centralized policy and product constants\npackages/localization    User-facing copy and metadata strings\npackages/ui              Shared UI primitives\npackages/utils           Shared scoring and utility logic\ndocs                     Architecture notes, governance docs, planning docs\n```\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js compatible with the version expected by the repo tooling.\n- [pnpm](https://pnpm.io/) 10.x.\n- Convex configured for this repo; local development uses the bundled Convex watcher.\n- A GitHub token for public repository reads.\n\n### Install\n\n```bash\npnpm install\n```\n\n### Configure Environment\n\nCreate `.env.local` at the repo root or `apps/web/.env.local` with the values required by the web app and Convex backend:\n\n```bash\nCONVEX_DEPLOYMENT=...\nNEXT_PUBLIC_CONVEX_URL=...\nGITHUB_TOKEN=...\nANALYZE_API_KEY=...\nBETTER_AUTH_SECRET=...\nSITE_URL=http://stackmatch-web.localhost:1355\nNEXT_PUBLIC_SITE_URL=http://stackmatch-web.localhost:1355\nNEXT_PUBLIC_BASE_URL=http://stackmatch-web.localhost:1355\n```\n\nUse a dedicated Convex project/database for Stackmatch. Do not point local development at another product's Convex deployment.\n\n### Run Locally\n\n```bash\npnpm --filter @stackmatch/web dev\n```\n\nThis starts the correct local development pair: portless for Next.js plus the Convex local backend watcher. Use the portless URL printed by the command, usually:\n\n```text\nhttp://stackmatch-web.localhost:1355\n```\n\nDo not run `next dev`, `pnpm --filter @stackmatch/web dev:next`, or a raw localhost-only server for profile or data-backed pages.\n\n## Validation\n\nRun the quick repo verification before opening a pull request:\n\n```bash\npnpm verify:quick\n```\n\nUseful targeted checks:\n\n```bash\npnpm --filter @stackmatch/web typecheck\npnpm --filter @stackmatch/web test\npnpm --filter @stackmatch/web test:a11y\npnpm check:constants\npnpm check:data-boundary\n```\n\nRun the full verification, including build, when the change is broad or release-facing:\n\n```bash\npnpm verify\n```\n\n## Contributing\n\nStackmatch is opening publicly and welcomes focused contributions that improve developer discovery, stack analysis, product quality, documentation, and reliability.\n\nGood first areas:\n\n- Improve onboarding and documentation.\n- Add tests around stack scoring, profile rendering, and data boundary behavior.\n- Improve package, topic, language, and profile discovery flows.\n- Tighten accessibility and performance for public pages.\n- Refine Convex ingestion and sync reliability.\n- Strengthen sponsor transparency, package ecosystem briefs, and contributor recognition.\n\nBefore contributing, read [CONTRIBUTING.md](./CONTRIBUTING.md). This repo uses pnpm, Conventional Commits, Lefthook, centralized constants governance, and data-boundary rules for Convex access.\n\n## Data And Privacy\n\nStackmatch reads public GitHub repository metadata and `package.json` manifests to build public dependency fingerprints. Source code is not cloned or stored for public stack analysis.\n\nPrivate repository analysis is optional and requires a separate GitHub App installation where the user chooses which repositories to grant. For private sync, Stackmatch stores aggregate dependency names/counts and sync status keyed to the GitHub login. It does not store private source code, private file paths, private repository names, commit messages, or commit SHAs.\n\n## Roadmap Themes\n\n- Better stackmate explanations and match transparency.\n- Richer package and ecosystem pages.\n- More contributor-friendly development docs.\n- Stronger profile claiming, moderation, and privacy controls.\n- Community surfaces for maintainers, OSS projects, and DevRel teams.\n\n## Contributors\n\nThanks goes to these people:\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://thedaviddias.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/237229?v=4?s=100\" width=\"100px;\" alt=\"David Dias\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDavid Dias\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/thedaviddias/stackmatch/commits?author=thedaviddias\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#design-thedaviddias\" title=\"Design\"\u003e🎨\u003c/a\u003e \u003ca href=\"#ideas-thedaviddias\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [All Contributors](https://allcontributors.org/) specification. Contributions of any kind are welcome.\n\n## License\n\nMIT © 2026 [David Dias Digital](https://daviddias.digital). See [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthedaviddias%2Fstackmatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthedaviddias%2Fstackmatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthedaviddias%2Fstackmatch/lists"}