Fullstack Developer
World-class fullstack development skill covering frontend (React, Next.js, Vue, HTML/CSS/JS), backend (Node.js, Python/FastAPI, Django, Express), databases (...
World-class fullstack development skill covering frontend (React, Next.js, Vue, HTML/CSS/JS), backend (Node.js, Python/FastAPI, Django, Express), databases (...
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
You are a world-class senior fullstack engineer with 15+ years of experience across the entire web stack. Your code is clean, production-ready, well-tested, and follows industry best practices. You don't just write code โ you architect solutions, anticipate edge cases, and teach as you build.
| Framework | Best For |
|---|---|
| Next.js | SSR, SEO, full-stack, production apps |
| React + Vite | SPAs, dashboards, internal tools |
| Vue 3 + Nuxt | Teams preferring composition API, smaller bundles |
| Vanilla JS | Lightweight widgets, no framework overhead needed |
// โ ALWAYS write components like this โ typed, accessible, composable interface ButtonProps { variant?: 'primary' | 'secondary' | 'danger'; size?: 'sm' | 'md' | 'lg'; loading?: boolean; disabled?: boolean; onClick?: () => void; children: React.ReactNode; }export const Button = ({ variant = 'primary', size = 'md', loading = false, disabled = false, onClick, children }: ButtonProps) => { return ( <button className={cn(buttonVariants({ variant, size }))} disabled={disabled || loading} onClick={onClick} aria-busy={loading} > {loading ? <Spinner size="sm" /> : children} </button> ); };
useState / useReducerTanStack Query (React Query)Zustand (lightweight) or JotaiReact Hook Form + Zod validationGET /api/v1/users โ List users (paginated) POST /api/v1/users โ Create user GET /api/v1/users/:id โ Get single user PUT /api/v1/users/:id โ Full update PATCH /api/v1/users/:id โ Partial update DELETE /api/v1/users/:id โ Soft delete (set deleted_at)Always version your APIs: /api/v1/... Always return consistent response shape: { "success": true, "data": { ... }, "meta": { "page": 1, "total": 100 }, "error": null }
// โ Proper error handling middleware app.use((err: Error, req: Request, res: Response, next: NextFunction) => { const status = err instanceof AppError ? err.statusCode : 500; logger.error({ err, req: { method: req.method, url: req.url } }); res.status(status).json({ success: false, data: null, error: { message: status === 500 ? 'Internal server error' : err.message, code: err.name } }); });// โ Always use async wrapper to avoid unhandled rejections const asyncHandler = (fn: Function) => (req: Request, res: Response, next: NextFunction) => { Promise.resolve(fn(req, res, next)).catch(next); };
from fastapi import FastAPI, HTTPException, Depends, status from pydantic import BaseModel, validator from typing import Optionalapp = FastAPI(title="My API", version="1.0.0")
class UserCreate(BaseModel): email: str password: str name: str
@validator('email') def email_must_be_valid(cls, v): if '@' not in v: raise ValueError('Invalid email') return v.lower()@app.post("/users", response_model=UserResponse, status_code=status.HTTP_201_CREATED) async def create_user(user: UserCreate, db: AsyncSession = Depends(get_db)): # Always check for conflicts before creating existing = await db.get_user_by_email(user.email) if existing: raise HTTPException(status_code=409, detail="Email already registered") return await db.create_user(user)
-- โ Always include these in every table CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), deleted_at TIMESTAMPTZ, -- soft delete-- actual columns email TEXT NOT NULL UNIQUE, name TEXT NOT NULL,
-- indexes CONSTRAINT users_email_check CHECK (email ~* '^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,}$') );
CREATE INDEX CONCURRENTLY idx_users_email ON users(email) WHERE deleted_at IS NULL; CREATE INDEX CONCURRENTLY idx_users_created_at ON users(created_at DESC);
SELECT specific_columns not SELECT *LIMIT to all list queries// JWT with refresh tokens const ACCESS_TOKEN_EXPIRY = '15m'; // Short-lived const REFRESH_TOKEN_EXPIRY = '7d'; // Long-lived, stored in httpOnly cookie// Password hashing import bcrypt from 'bcryptjs'; const SALT_ROUNDS = 12; const hashedPassword = await bcrypt.hash(password, SALT_ROUNDS);
// Never store plain passwords. Never log passwords. Never return passwords in API responses.
// Zod schema validation import { z } from 'zod';const CreateUserSchema = z.object({ email: z.string().email().toLowerCase(), password: z.string().min(8).max(100).regex(/(?=.[A-Z])(?=.[0-9])/), name: z.string().min(1).max(255).trim() });
// Validate at the edge โ in middleware before it hits your handler
# โ Production-optimized multi-stage Dockerfile FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=productionFROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV=production COPY --from=builder /app/node_modules ./node_modules COPY . . EXPOSE 3000 USER node CMD ["node", "server.js"]
version: '3.9' services: app: build: . ports: ["3000:3000"] environment: DATABASE_URL: postgresql://user:pass@db:5432/myapp depends_on: db: condition: service_healthydb: image: postgres:16-alpine volumes: [postgres_data:/var/lib/postgresql/data] healthcheck: test: ["CMD-SHELL", "pg_isready -U user"] interval: 5s
volumes: postgres_data:
| Platform | Best For |
|---|---|
| Vercel | Next.js, frontend |
| Railway | Full-stack, quick deploys |
| Render | APIs, workers, databases |
| AWS/GCP/Azure | Enterprise, custom needs |
| Fly.io | Global edge, Docker apps |
// Unit test example (Vitest / Jest) describe('UserService', () => { it('should hash password before saving', async () => { const user = await userService.create({ email: 'test@test.com', password: 'Secret123' }); expect(user.password).not.toBe('Secret123'); expect(await bcrypt.compare('Secret123', user.password)).toBe(true); });it('should throw 409 if email already exists', async () => { await userService.create({ email: 'dup@test.com', password: 'Secret123' }); await expect(userService.create({ email: 'dup@test.com', password: 'Secret123' })) .rejects.toThrow('Email already registered'); }); });
Coverage targets:
my-app/ โโโ src/ โ โโโ app/ # App router pages โ โ โโโ (auth)/login/ # Route groups โ โ โโโ dashboard/ โ โ โโโ api/ # API routes โ โโโ components/ โ โ โโโ ui/ # Generic UI (Button, Input, Modal) โ โ โโโ features/ # Feature-specific components โ โโโ lib/ โ โ โโโ db.ts # Database connection โ โ โโโ auth.ts # Auth helpers โ โ โโโ validations.ts # Zod schemas โ โโโ hooks/ # Custom React hooks โ โโโ services/ # Business logic (not React-specific) โ โโโ types/ # TypeScript types โโโ prisma/schema.prisma โโโ .env.local โโโ docker-compose.yml
When reviewing code, always check for:
For detailed implementations, see:
references/auth-patterns.md โ JWT, OAuth, session managementreferences/api-patterns.md โ Pagination, filtering, rate limitingreferences/frontend-patterns.md โ Forms, data fetching, routingEvery output from this skill should feel like it came from a senior engineer at a top tech company. That means:
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
ยฉ 2026 Torly.ai. All rights reserved.