Starting point

Problem

Learning Vue does not always mean knowing how to apply it. Someone can read documentation, follow tutorials, and copy examples, but still need a quick way to check whether they truly understand concepts like directives, routes, state, computed properties, or watchers.

Vue Training responds to that need with a direct practice experience: quizzes to assess concepts, challenges to apply logic, and short tips to reinforce good practices within the Vue ecosystem.

Audience

User Persona 1

Biography

Carla is a digital designer with experience in visual tools, but recently she has felt the need to learn frontend development so she can collaborate better with engineers and prototype her own ideas.

She has tried video courses, but feels there is a large gap between "watching someone code" and doing it herself. She is looking for a way to practice technical Vue concepts in an isolated and safe environment before applying them in larger projects.

I understand how the interface should look, but I get frustrated when I do not know how to bring it to life with code without feeling like I might break something.

Goals

  • Practice Vue by topic and difficulty.
  • Recognize concepts before taking them into code.
  • Solve small exercises that simulate real interface decisions.
  • Find quick tips linked to documentation sources.

Frustrations

  • Tutorials create a sense of progress, but they do not always measure understanding.
  • Practice is often scattered across videos, documentation, and isolated exercises.
  • It is easy to forget good practices when they do not appear within the learning flow.

Known Brands

Audience

User Persona 2

Biography

Lucas has spent years working on the server side. He is experienced in logic, databases, and security. However, in his personal projects or startup ideas, he often depends on someone else to build the interface.

He decided to learn Vue 3 because he heard that the Composition API feels more logical and closer to the functional programming style he already knows. He does not have time for 10-hour tutorials; he needs to break things and see the code in action.

I do not need someone to teach me how to program. I need to understand Vue syntax and how it handles state so I can build the frontend for my APIs quickly.

Goals

  • Learn just enough to become productive within 48 hours.
  • Understand the difference between ref() and reactive() deeply enough to avoid state-related mistakes.
  • Translate backend logic into frontend patterns, such as state management with Pinia.

Frustrations

  • He dislikes platforms that waste time with long animations or overly basic explanations.
  • He gets frustrated when a correct answer does not explain what is happening under the framework.
  • He hates having to configure a local environment just to test a small code concept.

Known Brands

Core decision

Solution

The solution was to organize learning into simple and repeatable paths. The home page presents the main proposition, while the Quizzes, Challenges, and Random tip sections separate three different ways of practicing: checking knowledge, applying logic, and discovering focused recommendations.

The core decision was to treat learning as small understanding checks rather than a long sequence of lessons. That is why the interface relies on cards, category and difficulty filters, level badges, and direct calls to action.

Process

How I approached it

  1. 01

    Separate practice modes

    I divided the experience into quizzes for assessing concepts, challenges for applying logic, and random tips for reinforcing good practices.

  2. 02

    Design useful filters

    In quizzes, content can be filtered by categories such as Pinia, Vue Router, or Vue, and by difficulty levels such as Basic or Intermediate.

  3. 03

    Use cards as the content unit

    Each quiz or challenge is presented as a card with a topic, level, title, and short description to help users quickly decide what to practice.

  4. 04

    Support a flexible experience

    The interface includes light and dark modes, mobile navigation, and a language selector so practice does not depend on a single usage context.

Visual system

Typography

Aa

Font family

Poppins

Poppins was chosen as the main typeface because of its clean, modern, and accessible appearance. Its geometric structure helps build a clear interface, especially across cards, filters, navigation, and short reading content.

The scale prioritizes quick scanning: titles with strong visual weight, comfortable descriptive text, and functional labels that support user navigation.

Display

Poppins Bold · 40/48

Aprende a tu ritmo

Heading

Poppins SemiBold · 24/32

Cursos recomendados

Body

Poppins Regular · 16/24

Contenido claro para explorar módulos, niveles y actividades.

Caption

Poppins Medium · 12/16

Nivel intermedio · 8 lecciones

Visual system

Color palette

The palette is organized with semantic tokens based on shadcn-vue. Each color has a role within the interface: surfaces, text, actions, states, structure, and interaction.

The system supports both light and dark mode through the same visual roles, keeping consistency across components, cards, forms, and navigation states.

Light mode

Surface

Background

Main interface background

Light value

oklch(1 0 0)

Text

Foreground

Main text

Light value

oklch(0.1511 0.0178 224.4773)

Surface

Card

Cards and containers

Light value

oklch(0.9751 0.0055 183.0314)

Surface

Popover

Floating menus and layered elements

Light value

oklch(0.9807 0.0084 225.0796)

Action

Primary

Primary actions and brand elements

Light value

oklch(0.815 0.1706 151.2684)

Action

Secondary

Secondary actions

Light value

oklch(0.0577 0.0313 296.8468)

Neutral

Muted

Soft backgrounds and secondary content

Light value

oklch(0.9396 0.0202 229.0448)

Accent

Accent

Active states, hover states, and soft highlights

Light value

oklch(0.9192 0.0162 187.3124)

Feedback

Destructive

Errors and destructive actions

Light value

oklch(0.5502 0.22 25.0385)

Structure

Border

Borders and dividers

Light value

oklch(0.9477 0.0085 225.084)

Structure

Input

Form fields

Light value

oklch(0.8794 0.0196 230.727)

Interaction

Ring

Visible focus and interaction

Light value

oklch(0.6126 0.1866 252.6519)


Dark mode

Surface

Background

Main interface background

Dark value

oklch(0.2077 0.0398 265.7549)

Text

Foreground

Main text

Dark value

oklch(0.9205 0.0086 225.0879)

Surface

Card

Cards and containers

Dark value

oklch(0.2513 0.0395 268.7473)

Surface

Popover

Floating menus and layered elements

Dark value

oklch(0.1802 0.0325 266.6248)

Action

Primary

Primary actions and brand elements

Dark value

oklch(0.815 0.1706 151.2684)

Action

Secondary

Secondary actions

Dark value

oklch(0.9067 0 0)

Neutral

Muted

Soft backgrounds and secondary content

Dark value

oklch(0.1394 0.0106 220.3811)

Accent

Accent

Active states, hover states, and soft highlights

Dark value

oklch(0.2552 0.0415 267.5355)

Feedback

Destructive

Errors and destructive actions

Dark value

oklch(0.5679 0.2323 28.2503)

Structure

Border

Borders and dividers

Dark value

oklch(0.2824 0.0229 224.7083)

Structure

Input

Form fields

Dark value

oklch(0.3338 0.0293 220.7787)

Interaction

Ring

Visible focus and interaction

Dark value

oklch(0.6126 0.1866 252.6519)

Interface

Screens

Home

Initial view of the project.

Quiz start

View for starting a quiz.

Loading screen

View shown while quiz data is being loaded.

Quiz in progress

View of a quiz in progress.

Correct answer explanation

Modal that provides a detailed explanation of the correct answer after answering a question.

Quiz results

View that shows the results after completing a quiz.

Challenge description

View that presents the description and requirements of a specific challenge.

Challenge editor

Code editor view for solving a specific challenge.

Random tip

View that displays a random Vue-related tip to reinforce good practices.

Final reflections

Learnings

Vue Training was a learning and experimentation project that allowed me to explore the design of educational experiences for developers and the practical organization of technical content.

It also helped me better understand the Vue ecosystem through the research required to create quizzes and challenges, and through their later implementation in an interactive experience focused on practice.

Although the project is still in development, it has already given me valuable lessons about how to structure frontend framework learning and design interfaces that make direct practice easier.