Roles · Frontend Developer (Vue) · Mid-level

What a Mid-level } should know

26 core skills, 55 in total. Expectations per skill, and what changes at the next level.

This page lists what a Mid-level } is expected to know and do, skill by skill. Core skills are the ones a manager and peers assess in a review cycle; the rest count only in self-assessment. Main areas: Programming Fundamentals, Frontend Development, Security.

26core skills
29additional skills
3skill areas
0%at Advanced or Expert
Assess myself as Mid-level Full role matrix

Core skills for a Mid-level

Grouped by area. The label on the right is the expected depth: Awareness, Working, Advanced or Expert.

Programming Fundamentals · 6

Optimizes filtering and sorting algorithms in Pinia store computed properties. Applies memoization and caching in VueUse composables to prevent unnecessary computations when reactive state updates.

Implements complex async flows with useAsyncState and useFetch from VueUse. Manages race conditions in watchers through watchEffect with cleanup functions, organizes parallel data loading in Nuxt 3 middleware.

Configures strict ESLint rules for Vue 3 — vue/recommended, TypeScript strict mode, auto-fix through Vite plugin. Introduces Husky + lint-staged for pre-commit checks, writes reusable composables with JSDoc.

Data Structures Working

Designs normalized data structures in Pinia stores for efficient UI updates. Uses Map and Set in composables, understands Vue 3 reactive proxy behavior with different collection types.

Design Patterns Working

Implements Renderless Components, Compound Components and Headless UI patterns in Vue 3. Designs reusable composables with inversion of control, applies Strategy and Observer through Vue reactivity system.

Creates strictly typed composables and Pinia stores with generics. Configures TypeScript strict mode for Vue project, types provide/inject, route params in Nuxt 3 and API responses through Zod validation.

Frontend Development · 19

Optimizes Vue application bundle — configuring Vite rollupOptions for chunk splitting, manualChunks for vendor libraries. Configures code splitting by Nuxt 3 routes, optimizes Pinia store size through tree shaking.

Creates comprehensive component tests — mocking Pinia stores, Vue Router, API calls through MSW. Tests composables in isolation, uses Vitest snapshot tests and custom matchers for Vue-specific checks.

Core Web Vitals Working

Optimizes Vue application Core Web Vitals — code splitting through dynamic import(), LCP optimization with Nuxt Image, CLS elimination through skeleton screens and aspect-ratio for media content.

CSS-in-JS Working

Implements complex Vue components using CSS-in-JS libraries (e.g., vue-styled-components) or scoped styles with dynamic bindings. Optimizes rendering by minimizing style recalculations in reactive contexts. Applies proper patterns for theme switching and state-driven styling in Vue SFCs.

Data Fetching Working

Implements efficient data loading — caching through useFetch with keys, parallel requests, deduplication. Configures interceptors through ofetch, implements optimistic updates in Pinia stores with rollback on errors.

Creates Vue component library with unified API — slots, expose, v-model customization. Documents components in Storybook with Histoire, writes component tests through Vitest and Vue Test Utils.

Micro Frontends Working

Works with micro-frontends in Vue: uses vite-plugin-federation for Module Federation, implements Vue components as Web Components for framework-agnostic integration, configures shared Pinia store between micro-frontends. Manages shared CSS through CSS Modules isolation.

Modern CSS Working

Creates responsive layouts with Container Queries and CSS Grid in Vue components. Implements animations through CSS Transitions and Vue Transition/TransitionGroup, uses :deep() and :slotted() selectors.

Nuxt Working

Independently implements complex UI components with Nuxt. Optimizes rendering performance. Writes tests. Applies state management tools.

Configures PWA for Vue/Nuxt — Workbox caching strategies, push notifications, background sync. Implements offline-first approach with Pinia stores and IndexedDB, configures @vite-pwa/nuxt for Nuxt 3.

Implements hybrid rendering in Nuxt 3 — ISR through routeRules, SWR caching, prerendering static pages. Solves hydration mismatch issues, configures client-only and server-only components.

Designs Pinia store structure — modular organization, composable stores, plugins for persistence and devtools. Uses VueUse composables for global state — useStorage, useBreakpoints, createSharedComposable.

Tailwind CSS Working

Creates custom design system on Tailwind for Vue project — custom theme, plugins, Headless UI components. Optimizes PurgeCSS configuration for Vite, uses @tailwindcss/typography and animations.

Configures visual regression tests for Vue components through Playwright and Percy/Chromatic. Integrates with Storybook — automated screenshot tests for each story, configures threshold and viewport breakpoints.

Configures Vite for Vue project — plugins (unplugin-auto-import, unplugin-vue-components), API proxy, dep pre-bundling optimization. Configures Vitest through vite.config, sets up SSR mode for Nuxt.

Vue Core Working

Independently implements complex UI components with Vue Core. Optimizes rendering performance. Writes tests. Applies state management tools.

Implements accessible Vue components: creates keyboard-navigable components with v-on:keydown, manages focus through template refs, implements accessible form validation with aria-describedby and aria-invalid. Uses Headless UI or Radix Vue for accessible primitives.

Web APIs Working

Implements Web API integration through custom composables — WebSocket, Geolocation, Notifications, Clipboard API. Uses VueUse as reference for patterns, handles permissions and fallbacks correctly.

Web Components Working

Creates Web Components from Vue components through defineCustomElement for integration with other frameworks. Configures Vite for building component library as Web Components with correct styling and event handling.

Security · 1

Implements Vue application protection against OWASP Top 10 — CSP headers in Nuxt, user input sanitization, secure cookie configuration. Configures Nuxt Security module, conducts dependency audit through npm audit.

Additional skills

Not assessed by the team, but part of the self-assessment and the development plan.

Accessibility TestingAPI DocumentationAWSChatGPT / ClaudeCode ReviewCursor IDEDatabase IndexingDockerE2E TestingGit AdvancedGitHub Actions / GitLab CIGitHub CopilotGraphQL DesignIntegration TestingKubernetes CoreMultithreadingNetwork FundamentalsOOP & SOLID PrinciplesOpenTelemetryPerformance BudgetsPostgreSQLPrometheus & GrafanaPrompt Engineering for CodeRedisREST API DesignSecure Coding PracticesStructured LoggingSystem Design FundamentalsUnit Testing

What changes at Senior

55 skills get a higher expectation or become core when moving from Mid-level to Senior. The biggest jumps first.

See the Senior page →
Run this with your whole team
Self-assessment plus manager and peer reviews against the same matrix, gap analysis and next-level readiness for every engineer. Team Pro is free for 14 days; individual tools stay free forever.
Start a team trial (14 days free) Send to my manager

} in the open competency matrix: 55 skills across 5 levels. The matrix is free for individuals and stays free.