From ja
Team code review conventions for ProVet Cloud frontend. Use when writing Vue components, composables, templates, or translations.
npx claudepluginhub josephanson/claude-plugin --plugin jaThis skill uses the workspace's default tool permissions.
Coding patterns enforced during team code reviews. Apply when writing/modifying Vue components, composables, or translations.
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
Coding patterns enforced during team code reviews. Apply when writing/modifying Vue components, composables, or translations.
<nord-button> → add square prop; omit size on child <nord-icon> (inherits from button)<div class="n:flex n:flex-col n:gap-m">) over <nord-stack> componentn:flex n:flex-col n:gap-l) over Nord layout web componentsemit<!-- ✓ -->
<nord-button @click="emit('delete')">Delete</nord-button>
<!-- ✗ -->
<nord-button @click="handleDelete">Delete</nord-button>
<!-- where handleDelete() only calls emit('delete') -->
MaybeRefOrGetter<T> + toValue() to unwrapcomputed() when depending on reactive paramscomposables/api/ResourceName.tscomposables/useResourceName.ts// ✓
function useCatalogItems(
pagination: MaybeRefOrGetter<PaginationState>,
enabled?: MaybeRefOrGetter<boolean>,
) {
return useQuery({
queryKey: computed(() => keys.list(toValue(pagination))),
queryFn: () => fetch({ query: toValue(pagination) }),
enabled: toValue(enabled),
})
}
Check existing composables before writing new ones:
useAuth() → user-scoped departments/department groups (don't query all)useFiltersStateSync() → filter state + debounce (don't write manual watchers)useConsultationItemDisplay() → item type display/translationlocales/en-US/application.json for existing keys before adding new onestCommon() for shared stringsutils/ with unit tests#components alias — use actual relative paths instead#components imports to relative paths when encounteredas casts when type already matchesKeep TanStack Table cell renderers simple — single element preferred.
// ✓
cell: (props) => h('span', { style: { paddingLeft: `${level * 1.25}rem` } }, title)
// ✗ nested divs for simple indentation
square prop, no size on child iconsMaybeRefOrGetter + toValue()computed() when reactiveutils/ with testscomposables/api/