skills/stack-compatibility-oracle/SKILL.md
Pre-flight architecture dependency check — maps the Tech Stack Taxonomy (15 domains) and flags known incompatibilities BEFORE code gets written. Use when evaluating a proposed tech stack for a new project or major feature.
npx skillsauth add ahmedhamadto/software-forge stack-compatibility-oracleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A dependency resolver for architectural decisions, not packages. Before building, check whether the chosen technologies across layers actually work well together. npm install succeeding does not mean the architecture is sound.
Work through these four stages in order:
Gather the proposed tech stack. Sources:
/brainstorming or /ddia-designMap each choice to the 15-domain taxonomy:
| # | Domain | Example Choices | |---|--------|----------------| | 1 | Language | TypeScript, Python, Go, Rust | | 2 | Frontend Framework | React, Vue, Svelte, SwiftUI | | 3 | CSS / Styling | Tailwind, CSS Modules, Styled Components | | 4 | UI Component Library | shadcn/ui, MUI, Chakra, Radix | | 5 | Backend Framework | Next.js, FastAPI, Express, Django | | 6 | API Style | REST, GraphQL, gRPC, tRPC | | 7 | Database | PostgreSQL, MongoDB, DynamoDB, SQLite | | 8 | ORM / Data Access | Prisma, Drizzle, SQLAlchemy, TypeORM | | 9 | Auth | Supabase Auth, Clerk, Auth0, NextAuth | | 10 | Hosting / Deployment | Vercel, AWS, Fly.io, Railway | | 11 | Infrastructure as Code | Terraform, Pulumi, CDK, SST | | 12 | CI/CD | GitHub Actions, GitLab CI, CircleCI | | 13 | Monitoring / Observability | Sentry, Datadog, Grafana, OpenTelemetry | | 14 | Caching / Queues | Redis, BullMQ, SQS, RabbitMQ | | 15 | Testing | Vitest, Pytest, Playwright, Cypress |
Not every project fills all 15 domains. Mark unused domains as "N/A" and move on.
Plot each choice into the taxonomy table. Identify any domains with multiple competing choices (red flag) or domains left blank that probably shouldn't be (gap).
Run compatibility checks across all five dimensions (see below). For each technology pair that interacts, assign a severity level.
Produce the compatibility report (see Deliverable section).
Does the technology actually work at runtime with its neighbors?
Does the stack fit the deployment target?
Do the tools connect to each other without excessive glue code?
Will this stack hold up at the expected load?
Can the team actually build and maintain this stack?
| Level | Meaning | Action | |-------|---------|--------| | BLOCKER | These technologies cannot work together | Must swap one or both | | WARNING | Known friction, workarounds exist but add complexity | Document the workaround, consider alternatives | | INFO | Suboptimal but functional, better options exist | Note for future improvement | | OK | Well-tested combination, community-proven | No action needed |
The oracle uses a hybrid approach:
When encountering an unlisted combination, state your confidence level and reasoning. Do not present uncertain assessments with the same confidence as curated entries.
These are concrete, documented incompatibilities. Use as a starting checklist:
| # | Tech A | Tech B | Severity | Issue | |---|--------|--------|----------|-------| | 1 | Prisma | DynamoDB | BLOCKER | Prisma does not support DynamoDB. Use DynamoDB SDK or ElectroDB. | | 2 | React Server Components | Styled Components | BLOCKER | CSS-in-JS runtime libraries cannot run in server components. Use CSS Modules or Tailwind. | | 3 | React Server Components | Emotion (runtime) | BLOCKER | Same runtime CSS-in-JS conflict. Emotion's non-runtime extraction mode is experimental. | | 4 | SQLite | Horizontal scaling | BLOCKER | SQLite is single-writer. Cannot scale horizontally without LiteFS/Turso (adds complexity). | | 5 | Django | Vercel (serverless) | WARNING | Django's process model is a poor fit for serverless cold starts. Use containers or Railway. | | 6 | gRPC | Browser (direct) | WARNING | Browsers cannot make gRPC calls directly. Requires grpc-web proxy or Connect protocol. | | 7 | AWS CDK | GCP / Azure | BLOCKER | CDK is AWS-only. Use Terraform or Pulumi for multi-cloud. | | 8 | Next.js App Router | Express middleware | WARNING | App Router uses its own middleware system. Express middleware patterns do not transfer directly. | | 9 | MongoDB | Complex joins | WARNING | MongoDB lacks native joins. $lookup is limited. If your data model is heavily relational, use PostgreSQL. | | 10 | Prisma | Edge runtimes | WARNING | Prisma requires a query engine binary. Edge deployments need Prisma Accelerate or Drizzle as an alternative. | | 11 | GraphQL | File uploads | WARNING | GraphQL has no native file upload spec. Requires multipart request spec or separate REST endpoint. | | 12 | Serverless functions | WebSockets | WARNING | Stateless functions cannot hold persistent connections. Use dedicated WebSocket services (Ably, Pusher, AWS API Gateway WebSocket). | | 13 | Tailwind CSS | Component library theming | INFO | Tailwind's utility-first approach can conflict with component libraries that use their own design tokens. shadcn/ui is built for Tailwind; MUI is not. | | 14 | TypeORM | Modern TypeScript | WARNING | TypeORM's decorator-based approach has stale maintenance. Drizzle or Prisma are more actively maintained. | | 15 | Redis | Persistent storage | WARNING | Redis is primarily in-memory. Using it as a primary database risks data loss without AOF/RDB persistence configured. | | 16 | Next.js | Python backend | INFO | Using Next.js as a frontend with a separate Python backend is fine but negates Next.js's full-stack capabilities. Consider whether you need Next.js or a lighter React setup. | | 17 | Cypress | Unit testing | INFO | Cypress is an E2E tool. Using it for unit tests is slow and overcomplicated. Use Vitest or Jest for unit/integration tests. | | 18 | Supabase Auth | Non-Supabase DB | WARNING | Supabase Auth is tightly coupled to Supabase's PostgreSQL. Using it with a different database requires custom session management. | | 19 | React Native | Web CSS frameworks | BLOCKER | React Native does not use CSS. Tailwind, Bootstrap, and other web CSS frameworks do not work. Use NativeWind for Tailwind-like syntax. | | 20 | Terraform | Niche cloud providers | WARNING | Terraform provider quality varies. Major clouds have mature providers; niche platforms may have incomplete or community-only providers. |
These combinations are battle-tested and well-documented. When a team has no strong preferences, these are safe recommendations:
Next.js + TypeScript + Tailwind + shadcn/ui + Prisma/Drizzle + PostgreSQL + Vercel + NextAuth/Clerk
Why it works: Tight integration across all layers. Vercel optimizes for Next.js. Prisma/Drizzle handle PostgreSQL well. shadcn/ui is built for Tailwind. Massive community.
Django + Python + HTMX + PostgreSQL + Redis + Celery + Docker + AWS/Railway
Why it works: Django's batteries-included philosophy means fewer integration decisions. HTMX avoids a separate frontend framework. Celery + Redis is the standard async task pattern.
Go + Chi/Echo + PostgreSQL + gRPC (internal) + REST (external) + Docker + Kubernetes + Prometheus + Grafana
Why it works: Go's standard library is strong. Chi/Echo are thin routers. gRPC is native to Go. Prometheus client is first-class. Kubernetes handles Go binaries efficiently.
Next.js/React + Supabase (Auth + DB + Storage + Realtime) + Tailwind + Vercel
Why it works: Supabase bundles auth, database, storage, and realtime into one platform. Minimal integration decisions. Fast time-to-market. Good for prototypes and MVPs.
TypeScript/Python + CDK + Lambda + API Gateway + DynamoDB/Aurora + SQS + CloudWatch + CodePipeline
Why it works: All AWS-native, single vendor. CDK provides type-safe IaC. Scales to zero with Lambda. Enterprise support available. Well-documented patterns.
React Native + Expo + TypeScript + NativeWind + tRPC + PostgreSQL + Supabase/Firebase + EAS Build
Why it works: Expo simplifies React Native. NativeWind brings Tailwind patterns to mobile. tRPC gives end-to-end type safety. EAS handles builds and submissions.
Produce this report after running all checks:
# Stack Compatibility Report
**Project:** [name]
**Date:** [date]
**Verdict:** GO | GO WITH CAVEATS | NO-GO
## Stack Map
| Domain | Choice | Notes |
|--------|--------|-------|
| Language | | |
| Frontend Framework | | |
| CSS / Styling | | |
| UI Component Library | | |
| Backend Framework | | |
| API Style | | |
| Database | | |
| ORM / Data Access | | |
| Auth | | |
| Hosting / Deployment | | |
| Infrastructure as Code | | |
| CI/CD | | |
| Monitoring | | |
| Caching / Queues | | |
| Testing | | |
## Compatibility Matrix
| Tech A | Tech B | Dimension | Status | Notes |
|--------|--------|-----------|--------|-------|
| | | Runtime | OK/WARNING/BLOCKER/INFO | |
## Risk Items
### BLOCKERS
<!-- Must be resolved before proceeding -->
### WARNINGS
<!-- Should be addressed, workarounds documented -->
### INFO
<!-- Noted for future consideration -->
## Recommended Alternatives
| Current Choice | Suggested Alternative | Reason |
|---------------|----------------------|--------|
| | | |
## Final Verdict
[GO / GO WITH CAVEATS / NO-GO]
**Rationale:** [1-2 sentence summary]
**Conditions (if GO WITH CAVEATS):**
- [ ] [condition 1]
- [ ] [condition 2]
Only checking package-level compatibility. npm install working does not mean the architecture is sound. Prisma installs fine alongside DynamoDB — it just cannot connect to it.
Ignoring team experience. A technically perfect stack the team cannot maintain is worse than a "boring" stack they know well. Always weigh Dimension 5.
Recommending complete rewrites for minor incompatibilities. If the team has a working Django app and one WARNING-level issue, do not suggest rewriting in Next.js. Suggest targeted fixes.
Treating all warnings as blockers. Warnings mean friction, not impossibility. Document the workaround and move on. Only blockers require technology swaps.
Not considering migration cost when suggesting alternatives. Swapping a database on a running system is not the same as choosing one for a greenfield project. Factor in migration effort and risk.
Checking only adjacent layers. Frontend-backend compatibility is obvious. Check diagonal relationships too: does the monitoring tool work with the deployment target? Does the testing framework support the API style?
Rubber-stamping popular stacks. Popular does not mean compatible for your use case. Next.js + MongoDB is popular but painful if your data is relational. Evaluate against the actual requirements.
testing
Craft stunning macOS desktop experiences with SwiftUI — cinematic animations, particle systems, glass materials, and wallpaper-grade visual design. Use like `/apple-craftsman A minimalist weather widget with aurora particle effects`.
development
Use when you have a spec or requirements for a multi-step task, before touching code
development
Use when testing a web application for security vulnerabilities, before deployment or during security review — guides through a structured 10-phase penetration testing methodology covering mapping, authentication, session management, access controls, injection, logic flaws, and server configuration.
data-ai
Engineer system prompts for LiveKit voice agents with multilingual support. Use when creating or optimizing AI agent conversation flows.