Code Examples

See the production-quality code SKYCOT generates for every build.

Archetype Detection

When you describe your app, SKYCOT matches it to the best archetype with a confidence score. This determines which pre-built patterns to apply.

archetype-detection-output.json
JSON
// User input: "I want a marketplace where artists can sell digital art"
// SKYCOT archetype detection output:
{
"archetype": "marketplace",
"confidence": 0.92,
"tier": 1,
"suggestedFeatures": [
"product-listings",
"seller-profiles",
"search-filtering",
"reviews-ratings",
"payment-processing"
],
"questionsToAsk": 4
}

Generated React Component

Every component follows SKYCOT coding standards: typed props interface, functional component, Tailwind classes with the cn() utility, and proper accessibility attributes.

src/components/marketplace/product-card.tsx
TypeScript
1import { cn } from "@/lib/utils";
2
3interface ProductCardProps {
4 title: string;
5 price: number;
6 imageUrl: string;
7 sellerName: string;
8 rating: number;
9 className?: string;
10}
11
12export function ProductCard({
13 title,
14 price,
15 imageUrl,
16 sellerName,
17 rating,
18 className,
19}: ProductCardProps) {
20 return (
21 <div
22 className={cn(
23 "group overflow-hidden rounded-xl border border-zinc-200",
24 "transition-shadow hover:shadow-lg dark:border-zinc-700",
25 className
26 )}
27 >
28 <div className="aspect-square overflow-hidden bg-zinc-100">
29 <img
30 src={imageUrl}
31 alt={title}
32 className="h-full w-full object-cover transition-transform group-hover:scale-105"
33 />
34 </div>
35 <div className="p-4">
36 <h3 className="font-semibold text-zinc-900 dark:text-white">
37 {title}
38 </h3>
39 <p className="mt-1 text-sm text-zinc-500">by {sellerName}</p>
40 <div className="mt-3 flex items-center justify-between">
41 <span className="text-lg font-bold text-zinc-900 dark:text-white">
42 ${price.toFixed(2)}
43 </span>
44 <span className="text-sm text-zinc-500">
45 {"\u2605"} {rating.toFixed(1)}
46 </span>
47 </div>
48 </div>
49 </div>
50 );
51}

Generated tRPC API Route

API routes use tRPC with Zod input validation and Drizzle ORM queries. Every async function has error handling and typed responses.

src/server/routers/product.ts
TypeScript
1import { z } from "zod";
2import { eq, desc, and, ilike } from "drizzle-orm";
3import { protectedProcedure } from "@/server/trpc/trpc";
4import { db } from "@/server/db";
5import { products } from "@/server/db/schema/products";
6import { TRPCError } from "@trpc/server";
7
8export const listProducts = protectedProcedure
9 .input(
10 z.object({
11 page: z.number().int().min(1).default(1),
12 limit: z.number().int().min(1).max(50).default(20),
13 search: z.string().optional(),
14 sellerId: z.string().uuid().optional(),
15 })
16 )
17 .query(async ({ input }) => {
18 try {
19 const offset = (input.page - 1) * input.limit;
20 const conditions = [];
21
22 if (input.search) {
23 conditions.push(ilike(products.title, `%${input.search}%`));
24 }
25 if (input.sellerId) {
26 conditions.push(eq(products.sellerId, input.sellerId));
27 }
28
29 const items = await db
30 .select()
31 .from(products)
32 .where(conditions.length > 0 ? and(...conditions) : undefined)
33 .orderBy(desc(products.createdAt))
34 .limit(input.limit)
35 .offset(offset);
36
37 return { items, page: input.page, limit: input.limit };
38 } catch {
39 throw new TRPCError({
40 code: "INTERNAL_SERVER_ERROR",
41 message: "Failed to fetch products",
42 });
43 }
44 });

Generated Drizzle Schema

Database schemas are generated with proper column types, foreign keys, constraints, and performance indexes.

src/server/db/schema/products.ts
TypeScript
1import {
2 pgTable,
3 uuid,
4 text,
5 numeric,
6 integer,
7 timestamp,
8 index,
9} from "drizzle-orm/pg-core";
10import { users } from "./users";
11
12export const products = pgTable(
13 "products",
14 {
15 id: uuid("id").defaultRandom().primaryKey(),
16 sellerId: uuid("seller_id")
17 .notNull()
18 .references(() => users.id, { onDelete: "cascade" }),
19 title: text("title").notNull(),
20 description: text("description").notNull(),
21 price: numeric("price", { precision: 10, scale: 2 }).notNull(),
22 imageUrl: text("image_url"),
23 category: text("category").notNull(),
24 rating: numeric("rating", { precision: 3, scale: 2 }).default("0"),
25 reviewCount: integer("review_count").default(0),
26 status: text("status", { enum: ["active", "draft", "sold"] })
27 .notNull()
28 .default("draft"),
29 createdAt: timestamp("created_at").defaultNow().notNull(),
30 updatedAt: timestamp("updated_at").defaultNow().notNull(),
31 },
32 (table) => [
33 index("products_seller_idx").on(table.sellerId),
34 index("products_category_idx").on(table.category),
35 index("products_status_idx").on(table.status),
36 ]
37);

Generated Test File

Tests are generated before implementation code using the AgentCoder pattern. This test-first approach achieves production-quality output on first generation.

tests/unit/product/list-products.test.ts
TypeScript
1// This test was generated BEFORE the implementation code.
2// The code agent implements until these tests pass.
3
4import { describe, it, expect, vi, beforeEach } from "vitest";
5
6// Mock the database
7vi.mock("@/server/db", () => ({
8 db: {
9 select: vi.fn().mockReturnThis(),
10 from: vi.fn().mockReturnThis(),
11 where: vi.fn().mockReturnThis(),
12 orderBy: vi.fn().mockReturnThis(),
13 limit: vi.fn().mockReturnThis(),
14 offset: vi.fn().mockResolvedValue([]),
15 },
16}));
17
18describe("listProducts", () => {
19 beforeEach(() => {
20 vi.clearAllMocks();
21 });
22
23 it("returns paginated products with default params", async () => {
24 const result = await caller.listProducts({
25 page: 1,
26 limit: 20,
27 });
28 expect(result).toHaveProperty("items");
29 expect(result).toHaveProperty("page", 1);
30 expect(result).toHaveProperty("limit", 20);
31 expect(Array.isArray(result.items)).toBe(true);
32 });
33
34 it("filters products by search term", async () => {
35 const result = await caller.listProducts({
36 page: 1,
37 limit: 20,
38 search: "digital art",
39 });
40 expect(result.items).toBeDefined();
41 });
42
43 it("filters products by seller ID", async () => {
44 const sellerId = "550e8400-e29b-41d4-a716-446655440000";
45 const result = await caller.listProducts({
46 page: 1,
47 limit: 20,
48 sellerId,
49 });
50 expect(result.items).toBeDefined();
51 });
52
53 it("rejects invalid page numbers", async () => {
54 await expect(
55 caller.listProducts({ page: 0, limit: 20 })
56 ).rejects.toThrow();
57 });
58
59 it("rejects limit above maximum", async () => {
60 await expect(
61 caller.listProducts({ page: 1, limit: 100 })
62 ).rejects.toThrow();
63 });
64});