januszek422/MtgCardsGenerator

An ASP.NET Core MVC application that harnesses the power of Groq's LLM to create unique MTG cards based on existing card data from Scryfall. Generate, visualize, and explore AI-crafted cards with authentic MTG styling.

C#

4

31 commits

updated Jun 6, 2026

See the code

README

๐ŸŽด AI Magic Cards Generator

Generate custom Magic: The Gathering cards using AI-powered creativity! โœจ

An ASP.NET Core MVC application that harnesses the power of Groq's LLM to create unique MTG cards based on existing card data from Scryfall. Generate, visualize, and explore AI-crafted cards with authentic MTG styling.

.NET License AI Powered


โœจ Features

๐ŸŽจ AI Card Generation - Leverage Groq's Llama 3.3 70B model to generate balanced, creative MTG cards

๐Ÿ–ผ๏ธ AI Card Artwork - Generate custom card artwork using HuggingFace's Stable Diffusion XL

๐Ÿ“ฅ Scryfall Integration - Import bulk card data directly from Scryfall's comprehensive database

๐ŸŽด Card Sharing & Gallery - Share your generated cards in a public gallery for others to see

โค๏ธ Like System - Like your favorite cards with real-time updates via Server-Sent Events

๐Ÿ’พ Card Persistence - All generated cards saved to database with image data and metadata

๐Ÿ” User Authentication - ASP.NET Core Identity integration for card ownership and likes

๐ŸŽฏ CMC-Based Balance - Cards are generated based on converted mana cost for power-level consistency

๐Ÿ” Card Browser - Browse and search through imported cards with pagination

๐ŸŽญ Multi-Color Support - Full support for all color identities (W/U/B/R/G/Multicolor/Colorless)

โฑ๏ธ Rate Limiting - Built-in rate limiting to prevent API abuse on card generation

๐Ÿ“Š Database Storage - SQLite-based persistence with EF Core for fast querying


๐Ÿš€ Quick Start

Prerequisites

Installation

  1. Clone the repository
git clone https://github.com/yourusername/AiMagicCardsGenerator.git
cd AiMagicCardsGenerator
  1. Configure your API keys

Edit appsettings.Development.json:

{
  "Groq": {
    "ApiKey": "your-groq-api-key-here"
  },
  "HuggingFace": {
    "ApiKey": "your-huggingface-api-key-here"
  }
}

Or use .NET User Secrets (recommended):

dotnet user-secrets set "Groq:ApiKey" "your-groq-api-key-here"
dotnet user-secrets set "HuggingFace:ApiKey" "your-huggingface-api-key-here"
  1. Download assets

Run PowerShell scripts to download card frames and mana symbols:

cd wwwroot/assets
./download_frames.ps1
./download_symbols.ps1
  1. Apply database migrations
dotnet ef database update
  1. Run the application
dotnet run

Visit https://localhost:7073 ๐ŸŽ‰


๐ŸŽฎ Usage

Import Card Data ๐Ÿ“ฆ

  1. Navigate to Data section
  2. View Scryfall bulk data information
  3. Click Import Cards to download and populate the database
  4. Wait for import completion (~100k+ cards)

Generate New Cards โœจ

Via Web Interface:

  1. Go to Generator page
  2. Click Generate Random Card
  3. View the generated card on the result page
  4. Share your card to the public gallery
  5. Download as PNG image
  6. Rate-limited to prevent abuse

Browse and Like Shared Cards โค๏ธ

  1. Visit the Home page to see the gallery of shared cards
  2. View recently shared cards and top-liked cards
  3. Sign in to like cards (ASP.NET Core Identity)
  4. Real-time like count updates via Server-Sent Events

Browse Imported Cards ๐Ÿ”

  1. Visit Cards section
  2. Browse paginated card list (20 per page)
  3. Click any card to view full details
  4. Search and filter capabilities

๐Ÿ› ๏ธ Tech Stack

Backend:

  • ๐Ÿ”ท ASP.NET Core 10.0 MVC
  • ๐Ÿ—„๏ธ Entity Framework Core with SQLite
  • ๐Ÿ” ASP.NET Core Identity
  • ๐ŸŒ HttpClient for external APIs

AI & APIs:

  • ๐Ÿค– Groq - Llama 3.3 70B LLM for card design
  • ๐ŸŽจ HuggingFace - Stable Diffusion XL for card artwork
  • ๐Ÿƒ Scryfall API - MTG card database

Image Processing:

  • ๐ŸŽจ SixLabors.ImageSharp - Image manipulation
  • โœ๏ธ ImageSharp.Drawing - Text and shape rendering
  • ๐Ÿ”ค ImageSharp.Fonts - Custom font rendering
  • ๐Ÿ“ Svg - SVG mana symbol rendering

Frontend:

  • ๐ŸŽญ Razor Views with Bootstrap 5
  • ๐Ÿ’… Custom CSS styling
  • โšก Vanilla JavaScript
  • ๐Ÿ“ก Server-Sent Events (SSE) for real-time like updates

๐Ÿ“‚ Project Structure

AiMagicCardsGenerator/
โ”œโ”€โ”€ ๐ŸŽฎ Controllers/          # MVC Controllers
โ”‚   โ”œโ”€โ”€ HomeController.cs    # Gallery with likes & SSE
โ”‚   โ”œโ”€โ”€ DataController.cs    # Scryfall import
โ”‚   โ”œโ”€โ”€ CardsController.cs   # Card browsing
โ”‚   โ””โ”€โ”€ GeneratorController.cs # Generation & sharing
โ”œโ”€โ”€ ๐Ÿ“Š Models/
โ”‚   โ”œโ”€โ”€ Entities/            # Domain models
โ”‚   โ”‚   โ”œโ”€โ”€ Card.cs          # Imported Scryfall cards
โ”‚   โ”‚   โ”œโ”€โ”€ GeneratedCard.cs # User-generated cards
โ”‚   โ”‚   โ””โ”€โ”€ CardLike.cs      # Like relationships
โ”‚   โ””โ”€โ”€ Dto/                 # Data transfer objects
โ”‚       โ””โ”€โ”€ ScryfallModels.cs
โ”œโ”€โ”€ ๐Ÿ—„๏ธ Data/
โ”‚   โ”œโ”€โ”€ ApplicationDbContext.cs
โ”‚   โ””โ”€โ”€ Migrations/          # EF Core migrations
โ”œโ”€โ”€ ๐Ÿ”ง Services/             # Business logic
โ”‚   โ”œโ”€โ”€ Interfaces/
โ”‚   โ”‚   โ”œโ”€โ”€ ICardService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IGeneratorService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IScryfallService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ ICardRenderService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IImageGeneratorService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ ICardLikeService.cs
โ”‚   โ”‚   โ””โ”€โ”€ ILikesBroadcastService.cs
โ”‚   โ”œโ”€โ”€ CardService.cs
โ”‚   โ”œโ”€โ”€ GeneratorService.cs
โ”‚   โ”œโ”€โ”€ ScryfallService.cs
โ”‚   โ”œโ”€โ”€ CardRenderService.cs
โ”‚   โ”œโ”€โ”€ ImageGeneratorService.cs # HuggingFace integration
โ”‚   โ”œโ”€โ”€ CardLikeService.cs
โ”‚   โ”œโ”€โ”€ LikesBroadcastService.cs # SSE broadcasting
โ”‚   โ””โ”€โ”€ CardRenderConfig.cs
โ”œโ”€โ”€ ๐Ÿ“ฆ Repositories/         # Data access
โ”‚   โ”œโ”€โ”€ Interfaces/
โ”‚   โ”‚   โ”œโ”€โ”€ ICardRepository.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IGeneratedCardRepository.cs
โ”‚   โ”‚   โ””โ”€โ”€ ICardLikeRepository.cs
โ”‚   โ”œโ”€โ”€ CardRepository.cs
โ”‚   โ”œโ”€โ”€ GeneratedCardRepository.cs
โ”‚   โ””โ”€โ”€ CardLikeRepository.cs
โ”œโ”€โ”€ ๐ŸŽจ Views/                # Razor templates
โ”œโ”€โ”€ ๐Ÿ” Areas/Identity/       # ASP.NET Core Identity pages
โ”œโ”€โ”€ ๐Ÿงช AiMagicCardsGenerator.Tests/ # Unit tests
โ”œโ”€โ”€ ๐ŸŒ wwwroot/
โ”‚   โ””โ”€โ”€ assets/
โ”‚       โ”œโ”€โ”€ frames/          # Card frame images
โ”‚       โ”œโ”€โ”€ fonts/           # MTG fonts
โ”‚       โ””โ”€โ”€ symbols/         # Mana symbols (SVG)
โ””โ”€โ”€ โš™๏ธ Program.cs            # Application entry point

๐ŸŽจ Card Generation Process

  1. ๐ŸŽฏ CMC Selection - Randomly select target converted mana cost (1-7)
  2. ๐Ÿ” Example Gathering - Fetch 5 random cards with matching CMC from database
  3. ๐Ÿค– LLM Prompt - Send structured prompt to Groq API with examples
  4. ๐Ÿ“ JSON Parsing - Extract and validate card data from LLM response
  5. ๐ŸŽจ Artwork Generation - Generate custom artwork via HuggingFace Stable Diffusion
  6. ๐Ÿ–ผ๏ธ Card Rendering - Generate card image using ImageSharp
    • Load appropriate color frame
    • Overlay generated artwork in art box
    • Render card name, mana cost, type line
    • Process oracle text with mana symbols
    • Add power/toughness for creatures
  7. ๐Ÿ’พ Database Storage - Save generated card with image data and metadata
  8. โœ… Return Result - Redirect to result page with share and download options

โš™๏ธ Configuration

Required Settings

appsettings.json / appsettings.Development.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "DataSource=mtg.db;Cache=Shared"
  },
  "Groq": {
    "ApiKey": "your-groq-api-key-here"
  },
  "HuggingFace": {
    "ApiKey": "your-huggingface-api-key-here"
  }
}

Asset Requirements

The application requires these assets in wwwroot/assets/:

  • ๐Ÿ–ผ๏ธ Card Frames - PNG images for each color (W/U/B/R/G/M/C)
  • ๐Ÿ”ค Fonts - MTG-specific fonts (Beleren, Matrix, PlantinMTPro)
  • โšก Symbols - SVG files for mana and tap symbols

Use provided PowerShell scripts to download automatically.


๐Ÿ”ง Development

Building

# Build the project
dotnet build

# Run with hot reload
dotnet watch run

Database Migrations

# Add new migration
dotnet ef migrations add MigrationName

# Apply migrations
dotnet ef database update

# Remove last migration (if not applied)
dotnet ef migrations remove

Testing

# Run all tests
dotnet test

# Run specific test project
dotnet test AiMagicCardsGenerator.Tests/AiMagicCardsGenerator.Tests.csproj

# Run with detailed output
dotnet test --verbosity detailed

๐Ÿค Contributing

Contributions are welcome! Here's how you can help:

  1. ๐Ÿด Fork the repository
  2. ๐ŸŒฟ Create a feature branch (git checkout -b feature/AmazingFeature)
  3. ๐Ÿ’พ Commit your changes (git commit -m 'โœจ Add some AmazingFeature')
  4. ๐Ÿ“ค Push to the branch (git push origin feature/AmazingFeature)
  5. ๐ŸŽฏ Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


๐Ÿ™ Acknowledgments

  • ๐Ÿƒ Scryfall for providing comprehensive MTG card data
  • ๐Ÿค– Groq for fast and powerful LLM inference
  • ๐ŸŽจ Wizards of the Coast for creating Magic: The Gathering
  • ๐Ÿ–ผ๏ธ SixLabors for ImageSharp library

โš ๏ธ Disclaimer

This project is a fan-made tool and is not affiliated with, endorsed by, or associated with Wizards of the Coast. Magic: The Gathering is a trademark of Wizards of the Coast LLC. Card frames, fonts, and symbols are used for educational and demonstration purposes only.


Made with โค๏ธ and AI

โญ Star this repo if you find it useful!

januszek422/MtgCardsGenerator

An ASP.NET Core MVC application that harnesses the power of Groq's LLM to create unique MTG cards based on existing card data from Scryfall. Generate, visualize, and explore AI-crafted cards with authentic MTG styling.

C#

4

31 commits

updated Jun 6, 2026

See the code

README

๐ŸŽด AI Magic Cards Generator

Generate custom Magic: The Gathering cards using AI-powered creativity! โœจ

An ASP.NET Core MVC application that harnesses the power of Groq's LLM to create unique MTG cards based on existing card data from Scryfall. Generate, visualize, and explore AI-crafted cards with authentic MTG styling.

.NET License AI Powered


โœจ Features

๐ŸŽจ AI Card Generation - Leverage Groq's Llama 3.3 70B model to generate balanced, creative MTG cards

๐Ÿ–ผ๏ธ AI Card Artwork - Generate custom card artwork using HuggingFace's Stable Diffusion XL

๐Ÿ“ฅ Scryfall Integration - Import bulk card data directly from Scryfall's comprehensive database

๐ŸŽด Card Sharing & Gallery - Share your generated cards in a public gallery for others to see

โค๏ธ Like System - Like your favorite cards with real-time updates via Server-Sent Events

๐Ÿ’พ Card Persistence - All generated cards saved to database with image data and metadata

๐Ÿ” User Authentication - ASP.NET Core Identity integration for card ownership and likes

๐ŸŽฏ CMC-Based Balance - Cards are generated based on converted mana cost for power-level consistency

๐Ÿ” Card Browser - Browse and search through imported cards with pagination

๐ŸŽญ Multi-Color Support - Full support for all color identities (W/U/B/R/G/Multicolor/Colorless)

โฑ๏ธ Rate Limiting - Built-in rate limiting to prevent API abuse on card generation

๐Ÿ“Š Database Storage - SQLite-based persistence with EF Core for fast querying


๐Ÿš€ Quick Start

Prerequisites

Installation

  1. Clone the repository
git clone https://github.com/yourusername/AiMagicCardsGenerator.git
cd AiMagicCardsGenerator
  1. Configure your API keys

Edit appsettings.Development.json:

{
  "Groq": {
    "ApiKey": "your-groq-api-key-here"
  },
  "HuggingFace": {
    "ApiKey": "your-huggingface-api-key-here"
  }
}

Or use .NET User Secrets (recommended):

dotnet user-secrets set "Groq:ApiKey" "your-groq-api-key-here"
dotnet user-secrets set "HuggingFace:ApiKey" "your-huggingface-api-key-here"
  1. Download assets

Run PowerShell scripts to download card frames and mana symbols:

cd wwwroot/assets
./download_frames.ps1
./download_symbols.ps1
  1. Apply database migrations
dotnet ef database update
  1. Run the application
dotnet run

Visit https://localhost:7073 ๐ŸŽ‰


๐ŸŽฎ Usage

Import Card Data ๐Ÿ“ฆ

  1. Navigate to Data section
  2. View Scryfall bulk data information
  3. Click Import Cards to download and populate the database
  4. Wait for import completion (~100k+ cards)

Generate New Cards โœจ

Via Web Interface:

  1. Go to Generator page
  2. Click Generate Random Card
  3. View the generated card on the result page
  4. Share your card to the public gallery
  5. Download as PNG image
  6. Rate-limited to prevent abuse

Browse and Like Shared Cards โค๏ธ

  1. Visit the Home page to see the gallery of shared cards
  2. View recently shared cards and top-liked cards
  3. Sign in to like cards (ASP.NET Core Identity)
  4. Real-time like count updates via Server-Sent Events

Browse Imported Cards ๐Ÿ”

  1. Visit Cards section
  2. Browse paginated card list (20 per page)
  3. Click any card to view full details
  4. Search and filter capabilities

๐Ÿ› ๏ธ Tech Stack

Backend:

  • ๐Ÿ”ท ASP.NET Core 10.0 MVC
  • ๐Ÿ—„๏ธ Entity Framework Core with SQLite
  • ๐Ÿ” ASP.NET Core Identity
  • ๐ŸŒ HttpClient for external APIs

AI & APIs:

  • ๐Ÿค– Groq - Llama 3.3 70B LLM for card design
  • ๐ŸŽจ HuggingFace - Stable Diffusion XL for card artwork
  • ๐Ÿƒ Scryfall API - MTG card database

Image Processing:

  • ๐ŸŽจ SixLabors.ImageSharp - Image manipulation
  • โœ๏ธ ImageSharp.Drawing - Text and shape rendering
  • ๐Ÿ”ค ImageSharp.Fonts - Custom font rendering
  • ๐Ÿ“ Svg - SVG mana symbol rendering

Frontend:

  • ๐ŸŽญ Razor Views with Bootstrap 5
  • ๐Ÿ’… Custom CSS styling
  • โšก Vanilla JavaScript
  • ๐Ÿ“ก Server-Sent Events (SSE) for real-time like updates

๐Ÿ“‚ Project Structure

AiMagicCardsGenerator/
โ”œโ”€โ”€ ๐ŸŽฎ Controllers/          # MVC Controllers
โ”‚   โ”œโ”€โ”€ HomeController.cs    # Gallery with likes & SSE
โ”‚   โ”œโ”€โ”€ DataController.cs    # Scryfall import
โ”‚   โ”œโ”€โ”€ CardsController.cs   # Card browsing
โ”‚   โ””โ”€โ”€ GeneratorController.cs # Generation & sharing
โ”œโ”€โ”€ ๐Ÿ“Š Models/
โ”‚   โ”œโ”€โ”€ Entities/            # Domain models
โ”‚   โ”‚   โ”œโ”€โ”€ Card.cs          # Imported Scryfall cards
โ”‚   โ”‚   โ”œโ”€โ”€ GeneratedCard.cs # User-generated cards
โ”‚   โ”‚   โ””โ”€โ”€ CardLike.cs      # Like relationships
โ”‚   โ””โ”€โ”€ Dto/                 # Data transfer objects
โ”‚       โ””โ”€โ”€ ScryfallModels.cs
โ”œโ”€โ”€ ๐Ÿ—„๏ธ Data/
โ”‚   โ”œโ”€โ”€ ApplicationDbContext.cs
โ”‚   โ””โ”€โ”€ Migrations/          # EF Core migrations
โ”œโ”€โ”€ ๐Ÿ”ง Services/             # Business logic
โ”‚   โ”œโ”€โ”€ Interfaces/
โ”‚   โ”‚   โ”œโ”€โ”€ ICardService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IGeneratorService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IScryfallService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ ICardRenderService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IImageGeneratorService.cs
โ”‚   โ”‚   โ”œโ”€โ”€ ICardLikeService.cs
โ”‚   โ”‚   โ””โ”€โ”€ ILikesBroadcastService.cs
โ”‚   โ”œโ”€โ”€ CardService.cs
โ”‚   โ”œโ”€โ”€ GeneratorService.cs
โ”‚   โ”œโ”€โ”€ ScryfallService.cs
โ”‚   โ”œโ”€โ”€ CardRenderService.cs
โ”‚   โ”œโ”€โ”€ ImageGeneratorService.cs # HuggingFace integration
โ”‚   โ”œโ”€โ”€ CardLikeService.cs
โ”‚   โ”œโ”€โ”€ LikesBroadcastService.cs # SSE broadcasting
โ”‚   โ””โ”€โ”€ CardRenderConfig.cs
โ”œโ”€โ”€ ๐Ÿ“ฆ Repositories/         # Data access
โ”‚   โ”œโ”€โ”€ Interfaces/
โ”‚   โ”‚   โ”œโ”€โ”€ ICardRepository.cs
โ”‚   โ”‚   โ”œโ”€โ”€ IGeneratedCardRepository.cs
โ”‚   โ”‚   โ””โ”€โ”€ ICardLikeRepository.cs
โ”‚   โ”œโ”€โ”€ CardRepository.cs
โ”‚   โ”œโ”€โ”€ GeneratedCardRepository.cs
โ”‚   โ””โ”€โ”€ CardLikeRepository.cs
โ”œโ”€โ”€ ๐ŸŽจ Views/                # Razor templates
โ”œโ”€โ”€ ๐Ÿ” Areas/Identity/       # ASP.NET Core Identity pages
โ”œโ”€โ”€ ๐Ÿงช AiMagicCardsGenerator.Tests/ # Unit tests
โ”œโ”€โ”€ ๐ŸŒ wwwroot/
โ”‚   โ””โ”€โ”€ assets/
โ”‚       โ”œโ”€โ”€ frames/          # Card frame images
โ”‚       โ”œโ”€โ”€ fonts/           # MTG fonts
โ”‚       โ””โ”€โ”€ symbols/         # Mana symbols (SVG)
โ””โ”€โ”€ โš™๏ธ Program.cs            # Application entry point

๐ŸŽจ Card Generation Process

  1. ๐ŸŽฏ CMC Selection - Randomly select target converted mana cost (1-7)
  2. ๐Ÿ” Example Gathering - Fetch 5 random cards with matching CMC from database
  3. ๐Ÿค– LLM Prompt - Send structured prompt to Groq API with examples
  4. ๐Ÿ“ JSON Parsing - Extract and validate card data from LLM response
  5. ๐ŸŽจ Artwork Generation - Generate custom artwork via HuggingFace Stable Diffusion
  6. ๐Ÿ–ผ๏ธ Card Rendering - Generate card image using ImageSharp
    • Load appropriate color frame
    • Overlay generated artwork in art box
    • Render card name, mana cost, type line
    • Process oracle text with mana symbols
    • Add power/toughness for creatures
  7. ๐Ÿ’พ Database Storage - Save generated card with image data and metadata
  8. โœ… Return Result - Redirect to result page with share and download options

โš™๏ธ Configuration

Required Settings

appsettings.json / appsettings.Development.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "DataSource=mtg.db;Cache=Shared"
  },
  "Groq": {
    "ApiKey": "your-groq-api-key-here"
  },
  "HuggingFace": {
    "ApiKey": "your-huggingface-api-key-here"
  }
}

Asset Requirements

The application requires these assets in wwwroot/assets/:

  • ๐Ÿ–ผ๏ธ Card Frames - PNG images for each color (W/U/B/R/G/M/C)
  • ๐Ÿ”ค Fonts - MTG-specific fonts (Beleren, Matrix, PlantinMTPro)
  • โšก Symbols - SVG files for mana and tap symbols

Use provided PowerShell scripts to download automatically.


๐Ÿ”ง Development

Building

# Build the project
dotnet build

# Run with hot reload
dotnet watch run

Database Migrations

# Add new migration
dotnet ef migrations add MigrationName

# Apply migrations
dotnet ef database update

# Remove last migration (if not applied)
dotnet ef migrations remove

Testing

# Run all tests
dotnet test

# Run specific test project
dotnet test AiMagicCardsGenerator.Tests/AiMagicCardsGenerator.Tests.csproj

# Run with detailed output
dotnet test --verbosity detailed

๐Ÿค Contributing

Contributions are welcome! Here's how you can help:

  1. ๐Ÿด Fork the repository
  2. ๐ŸŒฟ Create a feature branch (git checkout -b feature/AmazingFeature)
  3. ๐Ÿ’พ Commit your changes (git commit -m 'โœจ Add some AmazingFeature')
  4. ๐Ÿ“ค Push to the branch (git push origin feature/AmazingFeature)
  5. ๐ŸŽฏ Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


๐Ÿ™ Acknowledgments

  • ๐Ÿƒ Scryfall for providing comprehensive MTG card data
  • ๐Ÿค– Groq for fast and powerful LLM inference
  • ๐ŸŽจ Wizards of the Coast for creating Magic: The Gathering
  • ๐Ÿ–ผ๏ธ SixLabors for ImageSharp library

โš ๏ธ Disclaimer

This project is a fan-made tool and is not affiliated with, endorsed by, or associated with Wizards of the Coast. Magic: The Gathering is a trademark of Wizards of the Coast LLC. Card frames, fonts, and symbols are used for educational and demonstration purposes only.


Made with โค๏ธ and AI

โญ Star this repo if you find it useful!

Languages

C#

68.2%

HTML

19.8%

CSS

9.1%

JavaScript

2.2%