Skip to content

tiagoporto/svg-music-logos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

SVG Music Logos

Total Artists Total Logos Total Origins Total Genres

Music-related logos and symbols collection in SVG.

---------------------------------------

Listen on

YouTube Music Spotify

Project πŸ’»

https://svg-music-logos.tiagoporto.com

Motivation πŸ”₯

I’ve been playing electric guitar since I was a teenager, and music has always been a significant part of my life. I went on to graduate with a degree in graphic design, which eventually led me to front-end development.

To continue growing my skills and stay current with the latest technologies, I actively explore new tools and innovations in my free time. The result of combining my passion for music with my professional skills is this project.

Status βœ…

Website W3C Validation WCAG Pagespeed Artists links check

Docs GA Workflow Status Checks Workflow Status Tests Workflow Status E2E Tests Workflow Status

Coverage Test Analytics Bundle Analysis

Tech Stack 🧰

Git Git LFS Node nvm NPM VS Code

nuxt.js vue.js gulp Inquirer typescript javascript sass SVG pwa

EditorConfig Prettier ESLint Stylelint Remark Lefthook Commitlint

vitest Playwright happo codecov

Sentry Dependabot GitHub Actions vercel

Folder structure πŸ“‚

.
β”œβ”€β”€ app
β”‚   β”œβ”€β”€ components // Shared components
β”‚   β”œβ”€β”€ layouts // Base layout components
β”‚   β”œβ”€β”€ pages // Nuxt routes
β”‚   └── app.vue // Nuxt root component
β”œβ”€β”€ docs
β”œβ”€β”€ logos
β”‚   └── {artist} // Artist folder
β”‚       β”œβ”€β”€ Style files
β”‚       β”œβ”€β”€ SVG files
β”‚       └── {artist}.json // Artist data
β”œβ”€β”€ public // Public assets
β”œβ”€β”€ scripts // NPM scripts
β”œβ”€β”€ server
β”‚   β”œβ”€β”€ db // Nuxt database
β”‚   └── api // Nuxt endpoints
β”œβ”€β”€ shared
β”‚   β”œβ”€β”€ schema
β”‚   └── utils
β”œβ”€β”€ test // E2E tests
β”‚
β”œβ”€β”€ package.json
β”œβ”€β”€ README.md
└── // config files

Architecture πŸ—

Frontend

Frontend is built with Nuxt and Vue.

The root component is app/app.vue, routes are defined in app/pages directory.

Styles

Logos styles are written in SASS with SCSS syntax.

APIs

APIs are provided by Nuxt.

Endpoints are defined in server/api directory.

GET /api/artists

Response

{
  artists: [
    {
      id: 'string',
      name: 'string',
      nameTemplate: 'string | undefined',
      origins: 'string[]',
      genres: 'string[] | undefined',
      link: 'string',
      logos: [
        {
          title: 'string',
          svg: 'string',
          inverse: 'boolean | undefined'
        }
      ]
    }
  ],
  count: 'number'
}

GET /api/artists/{id}

Parameters

name type description default
query.page number Current Page 1
query.itemsPerPage number Total items per page 30

Response

{
  artist: {
    id: 'string',
    name: 'string',
    nameTemplate: 'string | undefined',
    origins: 'string[]',
    genres: 'string[] | undefined',
    link: 'string',
    logos: [
      {
        title: 'string',
        svg: 'string',
        inverse: 'boolean | undefined'
      }
    ]
  },
  pagination: {
    totalRecords: 'number',
    currentPage: 'number',
    totalPages: 'number'
  }
}

GET /api/logos

Parameters

name type description default example
query.genre string Artist genre "Doom Metal"
query.origin string Artist country origin "Denmark"
query.page number Current Page 1 2
query.itemsPerPage number Total items per page 30 90

Response

{
  logos: [
    {
      id: 'string',
      name: 'string',
      nameTemplate: 'string | undefined',
      origins: 'string[]',
      genres: 'string[] | undefined',
      link: 'string',
      logo: {
        title: 'string',
        svg: 'string',
        inverse: 'boolean | undefined'
      }
    }
  ],
  count: 'number',
  pagination: {
    totalRecords: 'number',
    currentPage: 'number',
    totalPages: 'number'
  }
}

GET /api/genres

Response

{
  genres: 'string[]',
  count: 'number'
}

GET /api/origins

Response

{
  origins: 'string[]',
  count: 'number'
}

Artist Data

Artists data are located in logos/{artistId} directory.

The artist data is stored in {artistId}.json file.

All JSON files will be merged into a single file generated by Gulp and stored in shared/db/data.json.

SVG files will be processed by Gulp and stored in public/logos/{artist} directory.

If a logo has external styles.

E.g.

{
  "id": "zakk-sabbath",
  // ...
  "logos": [
    {
      "title": "Zakk Sabbath",
      "svg": "zakk-sabbath.svg",
      "css": "zakk-sabbath.css"
    }
  ]
}

The SCSS file will be compiled by Gulp and next the styles will be injected in the correlated SVG before story in the public directory.

Development πŸ› 

Pre-requirements

Install node

nvm install

Install dependencies and run prepare scripts

npm install

Running dev server

npm run dev

Adding new artists

For adding new artists, you can use the new-artist script.

The script will create a new folder with a JSON and a SVG.

npm run new-artist

Adding new logos

For adding new logos for a specific artist, you can use the new-logo script.

The script will add a new SVG to the artist folder and to JSON.

npm run new-logo

Contributing 🀝

Can’t find the logo you were looking for?

Check the guide how you can help

Donating πŸ€œπŸ€›

This project was developed in my free time. Any donations are greatly appreciated.

GITHUB Sponsor Paypal donate Bitcoin donate

License πŸ“„

SVG Music Logos Β© 2016 by Tiago Porto is licensed under CC BY-NC 4.0.

audio wave