resume-bullets
Transforms completed work into powerful resume bullet points with action verbs, technical context, and quantified impact. Use when completing tasks, updating…
Reviews security including OWASP Top 10, input validation, auth. Use when junior builds login, authentication, stores passwords, handles user input, API keys, JWT tokens, or asks "is this secure".
$ npx -y skills add DanielPodolsky/ownyourcode --skill security --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/securityContext preview
The summary Claude sees to decide when to auto-load this skill.
Reviews security including OWASP Top 10, input validation, auth. Use when junior builds login, authentication, stores passwords, handles user input, API keys, JWT tokens, or asks "is this secure".
name: security-fundamentals description: Reviews security including OWASP Top 10, input validation, auth. Use when junior builds login, authentication, stores passwords, handles user input, API keys, JWT tokens, or asks "is this secure".
> "Security is not a feature. It's a foundation. Build on sand, and the house falls."
Activate this skill when reviewing:
---
---
❌ db.query(`SELECT * FROM users WHERE id = ${userId}`);
✅ db.query('SELECT * FROM users WHERE id = ?', [userId]);❌ if (req.headers.admin === 'true') { /* allow admin */ }
✅ const user = await verifyToken(req.headers.authorization);
if (user.role !== 'admin') throw new ForbiddenError();❌ res.json({ user: { ...user, password, ssn } });
✅ res.json({ user: { id: user.id, name: user.name } });❌ app.get('/users/:id', async (req, res) => {
const user = await User.findById(req.params.id);
res.json(user);
});
✅ app.get('/users/:id', async (req, res) => {
const user = await User.findById(req.params.id);
if (user.id !== req.user.id && req.user.role !== 'admin') {
throw new ForbiddenError();
}
res.json(user);
});❌ CORS: origin: '*' ❌ Detailed error messages in production ❌ Debug mode enabled in production ✅ CORS: origin: process.env.ALLOWED_ORIGINS ✅ Generic error messages to clients ✅ Debug mode disabled in production
❌ element.innerHTML = userInput; ✅ element.textContent = userInput; ✅ DOMPurify.sanitize(userInput);
---
Ask the junior these questions instead of giving answers:
1. **Trust**: "What stops a malicious user from sending anything they want here?" 2. **Ownership**: "How do you know this user owns this resource?" 3. **Exposure**: "What's the worst thing that could happen if this endpoint is exposed?" 4. **Secrets**: "If I `git clone` this repo, what secrets would I see?" 5. **Injection**: "What if someone sends `'; DROP TABLE users; --` as input?"
---
| Flag | Risk | Question | |------|------|----------| | String concatenation in queries | SQL Injection | "Can this input contain SQL?" | | `eval()` or `new Function()` | Code Injection | "Why is dynamic code execution needed?" | | `innerHTML` with user data | XSS | "What if the user includes `<script>`?" | | Passwords in logs | Data Leak | "Who can see these logs?" | | No rate limiting on auth | Brute Force | "What stops someone from trying every password?" | | CORS: `*` | Security Bypass | "Should any website be able to call this API?" | | JWT with no expiry | Token Theft | "What happens if this token is stolen?" | | IDs in URLs | IDOR | "Can user A access user B's data by changing the ID?" |
---
1. [ ] All secrets in environment variables 2. [ ] HTTPS enforced 3. [ ] Input validation on all endpoints 4. [ ] SQL/NoSQL injection prevented (parameterized queries) 5. [ ] XSS prevented (output encoding) 6. [ ] CSRF protection enabled 7. [ ] Rate limiting on auth endpoints 8. [ ] Sensitive data excluded from responses 9. [ ] Authorization checks on every protected route 10. [ ] Security headers set (helmet.js or equivalent)
---
| Action | Why | |--------|-----| | Store passwords in plaintext | One breach exposes all users | | Put secrets in code | Git history is forever | | Trust client-side validation only | Anyone can bypass the client | | Return full database objects | Exposes internal fields | | Log sensitive data | Logs get compromised too | | Use `md5` or `sha1` for passwords | Cryptographically broken |
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.
Repo: DanielPodolsky/ownyourcode
Transforms completed work into powerful resume bullet points with action verbs, technical context, and quantified impact. Use when completing tasks, updating…
Transforms completed work into STAR interview stories (Situation, Task, Action, Result). Use when completing tasks, preparing for behavioral interviews, or…
Reviews accessibility including WCAG, ARIA, keyboard navigation. Use when junior builds forms, buttons, modals, interactive elements, or asks "is this…
Reviews API design, REST conventions, and backend architecture. Use when junior builds API endpoints, Express routes, middleware, controllers, or asks "is this…
Reviews schema design, SQL queries, ORM patterns. Use when junior creates schema, writes queries, adds migrations, works with Prisma/MongoDB/PostgreSQL, or…
Guides systematic debugging through Protocol D (READ, ISOLATE, DOCS, HYPOTHESIZE, VERIFY). Use when junior says "stuck", "not working", "broken", "bug",…