caching
Use when same data is fetched repeatedly. Use when database queries are slow. Use when implementing caching without invalidation strategy.
Browse published AI skills maintained by yanko-belov. Compare skill descriptions and follow each source repository for setup instructions.
Indexed skills
32Repository stars across indexed skills
192Repository forks
0Average repository stars per indexed skill
6Repository stars may repeat across skills from the same repository.
Use when same data is fetched repeatedly. Use when database queries are slow. Use when implementing caching without invalidation strategy.
Use when tempted to write clever code. Use when solution feels complex. Use when showing off skills instead of solving problems.
Always active. Tracks usage of code-craft skills across sessions. Log skill applications to enable analytics and identify gaps.
Use when multiple operations access shared state. Use when order of operations matters. Use when "it works most of the time" but occasionally fails mysteriously.
Use when deciding where to catch errors. Use when errors propagate too far or not far enough. Use when designing component/service isolation.
Use when designing or modifying APIs. Use when adding breaking changes. Use when clients depend on API stability.
Use when tempted to use class inheritance. Use when creating class hierarchies. Use when subclass needs only some parent behavior.
Use when a class creates its own dependencies. Use when instantiating concrete implementations inside a class. Use when told to avoid dependency injection for simplicity.
Use when handling errors. Use when tempted to catch and swallow exceptions. Use when returning default values to hide failures.
Use when acquiring multiple locks. Use when operations wait for each other. Use when system hangs without crashing.
Use when creating subclasses or implementing interfaces. Use when tempted to override methods with exceptions or no-ops. Use when inheritance hierarchy feels wrong.
Use when designing interfaces. Use when implementing interfaces with methods you don't need. Use when forced to implement throw/no-op for interface methods.
Use when tempted to add features "for later". Use when building "production-ready" systems before needed. Use when adding flexibility that isn't required yet.
Use when creating custom exceptions. Use when error handling feels chaotic. Use when catch blocks are too broad or too specific.
Use when adding new functionality to existing code. Use when tempted to add if/else or switch branches. Use when extending behavior of existing classes.
Use when component does too many things. Use when mixing data fetching, logic, and presentation. Use when code is hard to test.
Use when loading all data upfront. Use when initial page load is slow. Use when fetching data that might not be needed.
Use when modifying objects or arrays. Use when tempted to mutate function parameters. Use when state changes cause unexpected bugs.
Use when accessing nested object properties. Use when chaining method calls. Use when reaching through objects to get data.
Use when exposing internal state. Use when making fields public for convenience. Use when external code modifies object internals.
Use when returning errors from APIs. Use when exposing internal errors. Use when error responses lack structure.
Use when fetching related data in loops. Use when seeing multiple queries for one request. Use when database is slow on list endpoints.
Use when creating mutation endpoints. Use when trusting frontend to prevent duplicates. Use when payments or critical operations can be repeated.
Use when designing API endpoints. Use when using wrong HTTP methods. Use when POST is used for reads.
The default order uses GitHub repository stars from our indexed data. Stars belong to the source repository and may be shared by multiple skills. They indicate repository interest, not skill installs or an independent quality score.