Skip to content
Development
Skill

/backend

Reviews API design, REST conventions, and backend architecture. Use when junior builds API endpoints, Express routes, middleware, controllers, or asks "is this RESTful", "check my endpoint".

From plugin
ownyourcode
29518 skills12 commands

Claude Code

$ npx -y skills add DanielPodolsky/ownyourcode --skill backend --agent claude-code

SKILL.md

backend.SKILL.md
name: backend-fundamentals
description: Reviews API design, REST conventions, and backend architecture. Use when junior builds API endpoints, Express routes, middleware, controllers, or asks "is this RESTful", "check my endpoint".

Backend Fundamentals Review

> "APIs are contracts. Break them, and you break trust."

When to Apply

Activate this skill when reviewing:

  • API route handlers
  • Express/Fastify/Hono middleware
  • Database queries and models
  • Authentication/authorization logic
  • Server-side business logic

---

Review Checklist

API Design

  • [ ] **RESTful**: Do routes follow REST conventions? (GET for read, POST for create, etc.)
  • [ ] **Naming**: Are endpoints nouns, not verbs? (`/users` not `/getUsers`)
  • [ ] **Versioning**: Is API versioned for future changes? (`/api/v1/`)
  • [ ] **Status Codes**: Are correct HTTP status codes returned?

Separation of Concerns

  • [ ] **Routes**: Do routes only handle HTTP concerns (req/res)?
  • [ ] **Controllers**: Is business logic in controllers/services, not routes?
  • [ ] **Services**: Is data access abstracted from business logic?
  • [ ] **Models**: Are models responsible only for data shape/validation?

Error Handling

  • [ ] **Try/Catch**: Are async operations wrapped properly?
  • [ ] **Error Responses**: Are errors returned with proper status codes?
  • [ ] **Logging**: Are errors logged with context?
  • [ ] **No Leaks**: Are internal errors hidden from clients?

Security

  • [ ] **Input Validation**: Is ALL input validated before use?
  • [ ] **Authentication**: Are protected routes actually protected?
  • [ ] **Authorization**: Can users only access their own data?
  • [ ] **Rate Limiting**: Are endpoints protected from abuse?

---

Common Mistakes (Anti-Patterns)

1. Fat Routes

❌ app.post('/users', async (req, res) => {
     // 100 lines of validation, business logic, DB queries
   });

✅ app.post('/users', validateUser, userController.create);

2. No Input Validation

❌ const { email } = req.body;
   await db.query(`SELECT * FROM users WHERE email = '${email}'`);

✅ const { email } = validateBody(req.body, userSchema);
   await User.findByEmail(email); // parameterized

3. Wrong Status Codes

❌ res.status(200).json({ error: 'Not found' });

✅ res.status(404).json({ error: 'User not found' });

4. Leaking Internal Errors

❌ catch (error) {
     res.status(500).json({ error: error.message, stack: error.stack });
   }

✅ catch (error) {
     logger.error('User creation failed', { error, userId });
     res.status(500).json({ error: 'Something went wrong' });
   }

---

Socratic Questions

Ask the junior these questions instead of giving answers:

1. **Architecture**: "If I wanted to switch from Express to Fastify, what would need to change?" 2. **Validation**: "What happens if someone sends malformed JSON?" 3. **Auth**: "How do you know this user owns this resource?" 4. **Errors**: "What does the client see when the database is down?" 5. **Testing**: "How would you test this endpoint in isolation?"

---

HTTP Status Code Reference

| Code | When to Use | |------|-------------| | 200 | Success (with body) | | 201 | Created (after POST) | | 204 | Success (no content, after DELETE) | | 400 | Bad request (validation failed) | | 401 | Unauthorized (not logged in) | | 403 | Forbidden (logged in but not allowed) | | 404 | Not found | | 409 | Conflict (duplicate resource) | | 500 | Server error (hide details from client) |

---

Architecture Layers

Request → Route → Controller → Service → Repository → Database
                     ↓
              Middleware (auth, validation, logging)

| Layer | Responsibility | |-------|----------------| | Route | HTTP verbs, paths, middleware chain | | Controller | Request/response handling, calling services | | Service | Business logic, orchestration | | Repository | Data access, queries |

---

Red Flags to Call Out

| Flag | Question to Ask | |------|-----------------| | SQL in route handler | "Should data access be in a separate layer?" | | No try/catch on async | "What happens if this fails?" | | req.body used directly | "What if someone sends unexpected fields?" | | Hardcoded secrets | "How would this work in production?" | | No pagination on list endpoints | "What if there are 10,000 records?" |

Read more
@danielpodolsky
Ships withownyourcode

Claude Code workflow for AI-mentored development. Work efficiently with Spec-Driven Development and the 6 Gates. Built to fight cognitive offloading — for developers using AI to grow and maintain ownership.

Stars on GitHub

Momentum

stars in total
295
Star history of DanielPodolsky/ownyourcode on GitHub, a chart by star-history.com

Other skills on ownyourcode.

star-stories

star-stories

Transforms completed work into STAR interview stories (Situation, Task, Action, Result). Use when completing tasks, preparing for…

database

database

Reviews schema design, SQL queries, ORM patterns. Use when junior creates schema, writes queries, adds migrations, works with…

debugging

debugging

Guides systematic debugging through Protocol D (READ, ISOLATE, DOCS, HYPOTHESIZE, VERIFY). Use when junior says "stuck", "not…

documentation

documentation

Guides documentation standards including READMEs, JSDoc, and code comments. Use when writing documentation, adding comments, or…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills2w309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react5d252k
@facebook@facebookInstall Skill

Questions about backend.

Which coding agents can use backend?
backend installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.