By OpenSaasAU
OpenSaaS Stack migration assistant with AI-guided configuration, schema analysis, and code generation support
Creates comprehensive GitHub issues when bugs, improvements, or technical debt are discovered. Use when you find issues that should be tracked but are outside the scope of the current task.
OpenSaaS Stack migration expert. Use when helping users migrate from Prisma, KeystoneJS, or Next.js projects to OpenSaaS Stack. Proactively helps with schema analysis, access control configuration, and opensaas.config.ts generation.
Detailed migration patterns for Keystone virtual fields and context.graphql โ context.db when migrating to OpenSaaS Stack. Invoke this skill when virtual fields or context.graphql usage is detected in a project.
Migrate context.graphql.run/raw and context.query.* calls to context.db.* across a project. Invoke as a forked subagent when these patterns are detected, passing the project root path as arguments.
Migrate Keystone document fields (@keystone-6/fields-document) to OpenSaaS Stack tiptap rich text fields. Invoke as a forked subagent, passing the config file path and document field details.
Migrate Keystone image and file fields to OpenSaaS Stack. Leads with the non-destructive multi-column path (map onto the existing Keystone columns in place โ no data migration, no re-upload). Invoke as a forked subagent, passing the project details.
Find and replace all @keystone-6 import paths across every file in the project. Invoke as a forked subagent, passing the project root path.
Uses power tools
Uses Bash, Write, or Edit tools
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimnpx claudepluginhub opensaasau/stack --plugin opensaas-migrationBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Beta. The onboarding path and core APIs are stable enough to build on; some advanced features are still evolving. Pin versions for production.
A config-first stack for building admin-heavy applications with Next.js App Router โ designed so you can describe features to an AI coding agent (Claude Code) and let the framework handle the technical complexity, with access control enforced on every database operation by default.
context.db operation is automatically secured; denied reads return null/[] (no information leakage).CLAUDE.md and MCP tooling, so you build by describing features.You need Node.js 18+ and pnpm (npm install -g pnpm).
# 1. Scaffold โ installs deps, generates the schema, and creates a SQLite DB for you
npm create opensaas-app@latest my-app
# 2. Run
cd my-app
pnpm dev
3. Build with Claude Code. Open the project in Claude Code and describe what you want โ e.g. "add a comments feature to posts" or "add authentication". The scaffolded project ships a CLAUDE.md and MCP tooling so Claude builds within the framework's guardrails.
Your app runs at http://localhost:3000; the auto-generated admin UI is at /admin.
Want authentication from the start?
npm create opensaas-app@latest my-app --with-auth
The scaffolder runs install โ generate โ db:push for you. To skip that and run the steps yourself, pass
--no-install.
๐ Full documentation โ ยท Quick Start guide โ ยท Building with Claude Code โ
opensaas.config.tsimport { config, list } from '@opensaas/stack-core'
import { text, select, relationship } from '@opensaas/stack-core/fields'
import type { AccessControl } from '@opensaas/stack-core'
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3'
// Access control returns a boolean, or a Prisma filter that scopes the rows.
const isAuthor: AccessControl = ({ session }) =>
session ? { authorId: { equals: session.userId } } : false
export default config({
db: {
provider: 'sqlite',
url: process.env.DATABASE_URL || 'file:./dev.db',
prismaClientConstructor: (PrismaClient) => {
const adapter = new PrismaBetterSqlite3({ url: process.env.DATABASE_URL || 'file:./dev.db' })
return new PrismaClient({ adapter })
},
},
lists: {
Post: list({
fields: {
title: text({ validation: { isRequired: true } }),
content: text(),
status: select({
options: [
{ label: 'Draft', value: 'draft' },
{ label: 'Published', value: 'published' },
],
defaultValue: 'draft',
}),
author: relationship({ ref: 'User.posts' }),
},
access: {
operation: {
// Anonymous users only see published posts; authors see their own drafts too.
query: ({ session }) => (session ? true : { status: { equals: 'published' } }),
update: isAuthor,
delete: isAuthor,
},
},
}),
User: list({
fields: {
name: text({ validation: { isRequired: true } }),
email: text({ isIndexed: 'unique' }),
posts: relationship({ ref: 'Post.author', many: true }),
},
}),
},
})
pnpm generate # โ prisma/schema.prisma, .opensaas/types.ts, .opensaas/context.ts
pnpm db:push # creates the database
import { getContext } from '@/.opensaas/context'
export async function getPosts() {
const context = await getContext() // pass a session for authenticated access
// Access control is enforced automatically.
return context.db.post.findMany({ include: { author: true } })
}
Denied operations return null (single) or [] (many) rather than throwing, so callers can't distinguish "denied" from "doesn't exist". Always null-check writes:
const post = await context.db.post.update({ where: { id }, data })
if (!post) return { error: 'Not found or access denied' }
Packages
Feature-driven development assistant for OpenSaaS Stack. Build complete applications by describing what you want to build instead of configuring infrastructure.
Complete fullstack development toolkit: React, Express/FastAPI, PostgreSQL scaffolding with AI agents
A full-stack development framework and toolkit for building scalable applications with integrated deployment and infrastructure management.
Build full-stack apps with Butterbase โ AI-Native Backend-as-a-Service. Skills for app creation, schema design, frontend deployment, RLS debugging, serverless functions, and contributing.
Scaffold Cloudflare Workers, Hono APIs, D1/Drizzle schemas, D1 migration workflows, full-stack Vite+Workers apps, and TanStack Start SSR dashboards.
SaaS Builder Guide - Build production-ready SaaS from design to deployment with 11 skill guides, 5 AI agents, and beginner-friendly FAQ
AI agent skill for Catalyst by Zoho โ full-stack serverless cloud platform. Covers all services, SDKs, CLI, architecture patterns, pricing, migration guides, and Zoho MCP tool-based resource management.