> sst-ion
You are an expert in SST (Ion), the framework for building full-stack serverless applications on AWS. You help developers deploy Next.js, Remix, Astro, and API services with infrastructure-as-code defined in TypeScript, automatic IAM permissions, live Lambda debugging, secrets management, and zero-config deployments — replacing CDK/Terraform complexity with a developer-friendly abstraction over AWS services.
curl "https://skillshub.wtf/TerminalSkills/skills/sst-ion?format=md"SST (Ion) — Full-Stack Serverless Framework
You are an expert in SST (Ion), the framework for building full-stack serverless applications on AWS. You help developers deploy Next.js, Remix, Astro, and API services with infrastructure-as-code defined in TypeScript, automatic IAM permissions, live Lambda debugging, secrets management, and zero-config deployments — replacing CDK/Terraform complexity with a developer-friendly abstraction over AWS services.
Core Capabilities
Infrastructure as Code
// sst.config.ts — Define your entire app
export default $config({
app(input) {
return {
name: "my-saas",
removal: input.stage === "production" ? "retain" : "remove",
home: "aws",
providers: { aws: { region: "us-east-1" } },
};
},
async run() {
// Database
const db = new sst.aws.Postgres("MyDB", { scaling: { min: "0.5 ACU", max: "4 ACU" } });
// S3 bucket for uploads
const bucket = new sst.aws.Bucket("Uploads", {
access: "public",
cors: { allowOrigins: ["*"], allowMethods: ["GET", "PUT"] },
});
// Secrets
const stripeKey = new sst.Secret("StripeKey");
const openaiKey = new sst.Secret("OpenAIKey");
// API
const api = new sst.aws.Function("Api", {
handler: "packages/api/src/handler.handler",
link: [db, bucket, stripeKey], // Auto-grants IAM permissions
url: true, // Creates function URL
});
// Cron job
new sst.aws.Cron("DailyReport", {
schedule: "rate(1 day)",
job: {
handler: "packages/api/src/cron/daily-report.handler",
link: [db],
timeout: "5 minutes",
},
});
// Queue
const queue = new sst.aws.Queue("EmailQueue", {
consumer: {
handler: "packages/api/src/queue/email.handler",
link: [db],
},
});
// Next.js frontend
const site = new sst.aws.Nextjs("Web", {
path: "packages/web",
link: [api, bucket, stripeKey],
environment: { NEXT_PUBLIC_API_URL: api.url },
domain: {
name: "app.example.com",
dns: sst.aws.dns(),
},
});
return { api: api.url, site: site.url };
},
});
Using Linked Resources
// packages/api/src/handler.ts — Access linked resources type-safely
import { Resource } from "sst";
export async function handler(event) {
// Resource bindings — type-safe, auto-permissioned
const dbUrl = Resource.MyDB.url; // RDS connection string
const bucketName = Resource.Uploads.name; // S3 bucket name
const stripeKey = Resource.StripeKey.value; // Secret value
// Upload to S3 (IAM permissions auto-granted by `link`)
await s3.putObject({
Bucket: Resource.Uploads.name,
Key: `uploads/${event.fileName}`,
Body: event.fileBuffer,
});
}
Installation
# Install SST
curl -fsSL https://sst.dev/install | bash
# Create new project
sst init
# Development (live Lambda debugging)
sst dev
# Deploy
sst deploy --stage production
# Set secrets
sst secret set StripeKey sk_live_...
Best Practices
- Link for permissions — Use
link: [resource]instead of manual IAM policies; SST auto-grants minimal permissions - Resource bindings — Access linked resources via
Resource.Name.property; fully typed, no env var juggling - Stages for environments — Use
--stage dev/staging/prod; each stage gets isolated resources - Live debugging — Use
sst devfor real-time Lambda debugging; edit code, test instantly, see logs - Secrets management — Use
sst.Secretfor API keys; encrypted, per-stage, accessible viaResource - Domain configuration — Use
domainproperty on sites; SST handles SSL certificates and DNS records - Monorepo structure — Use
packages/directory; separate api, web, shared code; SST links them automatically - Removal policy — Set
removal: "retain"in production; prevents accidental deletion of databases and buckets
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zoho
Integrate and automate Zoho products. Use when a user asks to work with Zoho CRM, Zoho Books, Zoho Desk, Zoho Projects, Zoho Mail, or Zoho Creator, build custom integrations via Zoho APIs, automate workflows with Deluge scripting, sync data between Zoho apps and external systems, manage leads and deals, automate invoicing, build custom Zoho Creator apps, set up webhooks, or manage Zoho organization settings. Covers Zoho CRM, Books, Desk, Projects, Creator, and cross-product integrations.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> zipkin
Deploy and configure Zipkin for distributed tracing and request flow visualization. Use when a user needs to set up trace collection, instrument Java/Spring or other services with Zipkin, analyze service dependencies, or configure storage backends for trace data.