🎯

vueuse-composables

🎯Skill

from zatkniz/sporty-group

VibeIndex|
What it does

Provides reusable Vue composition functions leveraging VueUse utilities for managing reactive state, API interactions, and common frontend logic in the sports leagues application.

vueuse-composables

Installation

Install skill:
npx skills add https://github.com/zatkniz/sporty-group --skill vueuse-composables
1
AddedJan 27, 2026

Skill Details

SKILL.md

Overview

# Sports Leagues SPA

A single-page application that displays sports leagues from around the world with filtering capabilities and badge viewing.

![Vue.js](https://img.shields.io/badge/Vue.js-3.x-4FC08D?logo=vue.js)

![Nuxt](https://img.shields.io/badge/Nuxt-4.x-00DC82?logo=nuxt.js)

![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript)

![Tailwind CSS](https://img.shields.io/badge/Tailwind-4.x-06B6D4?logo=tailwindcss)

Features

  • πŸ† Browse Leagues - View all sports leagues from TheSportsDB API
  • πŸ” Search - Filter leagues by name in real-time
  • 🎯 Filter by Sport - Dropdown to filter by sport type (Soccer, Basketball, etc.)
  • πŸ… View Badges - Click any league to view its season badge
  • πŸ’Ύ Caching - Badge responses are cached in localStorage
  • πŸ“± Responsive - Works on mobile, tablet, and desktop
  • πŸŒ™ Dark Mode - Automatic dark mode support

Tech Stack

  • Framework: [Nuxt 4](https://nuxt.com/) + [Vue 3](https://vuejs.org/)
  • Language: [TypeScript](https://www.typescriptlang.org/)
  • UI Library: [Nuxt UI](https://ui.nuxt.com/) + [Tailwind CSS](https://tailwindcss.com/)
  • State Management: [Pinia](https://pinia.vuejs.org/)
  • Utilities: [VueUse](https://vueuse.org/)
  • API: [TheSportsDB](https://www.thesportsdb.com/free_sports_api)

Getting Started

Prerequisites

  • Node.js 20.x or higher
  • npm, yarn, or pnpm

Installation

```bash

# Clone the repository

git clone https://github.com/zatkniz/sporty-group.git

cd sporty-group

# Install dependencies

npm install

```

Development

Start the development server on http://localhost:3000:

```bash

npm run dev

```

Production

Build for production:

```bash

npm run build

```

Preview the production build:

```bash

npm run preview

```

Project Structure

```

app/

β”œβ”€β”€ components/ # Vue components

β”‚ β”œβ”€β”€ LeagueCard.vue # Individual league card

β”‚ β”œβ”€β”€ LeaguesFilters.vue # Search & filter controls

β”‚ β”œβ”€β”€ LeaguesGrid.vue # Grid layout for leagues

β”‚ └── BadgeModal.vue # Modal for displaying badges

β”œβ”€β”€ composables/ # Reusable composition functions

β”‚ └── useApi.ts # API client wrapper

β”œβ”€β”€ stores/ # Pinia stores

β”‚ └── sportsLeagues.ts # Leagues state management

β”œβ”€β”€ types/ # TypeScript definitions

β”‚ └── thesportsdb.ts # API response types

β”œβ”€β”€ pages/ # Route pages

β”‚ └── index.vue # Main leagues page

└── layouts/ # Layout components

└── default.vue # Default layout

```

API Endpoints

| Endpoint | Description |

|----------|-------------|

| all_leagues.php | Fetch all sports leagues |

| search_all_seasons.php?badge=1&id={id} | Fetch league badge by ID |

Documentation

For detailed development documentation, including architecture decisions and AI tools used, see [DEVELOPMENT.md](./DEVELOPMENT.md).

License

This project is for demonstration purposes.