Compare commits

..

1 Commits

Author SHA1 Message Date
Dashboard Icons Manager
a4c78a533c feat(icons): update nomie 2025-04-06 10:24:19 +00:00
1596 changed files with 5038 additions and 35770 deletions

View File

@@ -10,19 +10,16 @@ body:
Once you've submitted the issue, sombody from the team will review it, before adding a label which automatically creates a pull request with the other filetypes.
If you submit a PNG icon, please note, that the SVG can not be generated from it.
- type: input
id: name
attributes:
label: Icon name
description: The name has to be unique and should be kebab-case.
placeholder: e.g. "icon-name"
- type: textarea
id: icon
attributes:
label: Paste icon
description: |
Please paste the icon here. It will automatically upload it to github.
- type: dropdown
id: type
attributes:
label: Icon type
options:

View File

@@ -8,7 +8,6 @@ body:
value: |
Hello and thank you for contributing to the project! Please fill out the following informations to update an existing icon in the project.
- type: input
id: iconName
attributes:
label: Icon name
description: The name has to be unique and should be kebab-case.

View File

@@ -8,7 +8,6 @@ body:
value: |
Hello and thank you for contributing to the project! Please fill out the following informations to update an existing icon in the project.
- type: input
id: iconName
attributes:
label: Icon name
description: The name has to match the existing icon name.

View File

@@ -1,15 +0,0 @@
name: Trigger Cloudflare Pages Build
on:
schedule:
- cron: '0 0 * * *' # Runs every day at midnight UTC
workflow_dispatch:
jobs:
cron_job:
runs-on: ubuntu-latest
steps:
- name: Run Your Cron Job
run: |
curl -X POST "${{ secrets.CLOUDFLARE_DEPLOY_HOOK_URL }}"

View File

@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
# This condition ensures the job only runs when the 'approved' label is added and the issue title starts with 'feat(icons): add '
if: |
contains(github.event.issue.labels.*.name, 'approved') &&
contains(github.event.issue.labels.*.name, 'approved') &&
startsWith(github.event.issue.title, 'feat(icons): add ')
env:
ICON_TYPE: ${{ contains(github.event.issue.labels.*.name, 'normal-icon') && 'normal' || 'monochrome' }}
@@ -49,6 +49,8 @@ jobs:
INPUT_ISSUE_FORM: ${{ steps.parse_issue_form.outputs.ISSUE_FORM }}
- name: Generate File Tree
run: python scripts/generate_file_tree.py svg png webp
- name: Generate ICONS.md
run: python scripts/generate_icons_page.py
- name: Generate full metadata file
run: python scripts/generate_metadata.py
- name: Extract icon name

View File

@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
# This condition ensures the job only runs when the 'approved' label is updated and the issue title starts with 'feat(icons): update '
if: |
contains(github.event.issue.labels.*.name, 'approved') &&
contains(github.event.issue.labels.*.name, 'approved') &&
startsWith(github.event.issue.title, 'feat(icons): update ')
env:
ICON_TYPE: ${{ contains(github.event.issue.labels.*.name, 'normal-icon') && 'normal' || 'monochrome' }}
@@ -49,6 +49,8 @@ jobs:
INPUT_ISSUE_FORM: ${{ steps.parse_issue_form.outputs.ISSUE_FORM }}
- name: Generate File Tree
run: python scripts/generate_file_tree.py svg png webp
- name: Generate ICONS.md
run: python scripts/generate_icons_page.py
- name: Generate full metadata file
run: python scripts/generate_metadata.py
- name: Extract icon name

View File

@@ -56,7 +56,7 @@ jobs:
run: |
git config --global user.email "homarr-labs@proton.me"
git config --global user.name "Dashboard Icons Bot"
git add tree.json
git add tree.json tree.xml
git commit -m "ci(github-actions): generate file tree" || exit 0
git pull --rebase origin ${{ github.ref_name }}
git push origin HEAD:${{ github.ref_name }}
@@ -77,9 +77,14 @@ jobs:
with:
python-version: "3.9"
- name: Generate ICONS.md
run: python scripts/generate_icons_page.py
- name: Commit and Push Changes
run: |
git config --global user.email "homarr-labs@proton.me"
git config --global user.name "Dashboard Icons Bot"
git add ICONS.md
git commit -m "ci(github-actions): generate ICONS.md" || exit 0
git pull --rebase origin ${{ github.ref_name }}
git push origin HEAD:${{ github.ref_name }}

View File

@@ -1,42 +1,30 @@
# Code of Conduct
## Code of Conduct
## Our Commitment
We are committed to creating a welcoming and harassment-free environment for everyone who contributes to our icon repository. This includes people of all genders, gender identities, sexual orientations, disabilities, appearances, body sizes, races, ages, religions, and nationalities.
We are committed to maintaining a welcoming and inclusive environment for everyone who contributes to our icon collection. This includes people of all backgrounds, identities, and experiences.
### Communication
## Expected Behavior
All communication should be appropriate for a professional audience, respectful, constructive, and considerate of people from different backgrounds. Please aim to create a positive and inclusive atmosphere.
- Be respectful and constructive in all communications
- Focus on what's best for the community
- Show empathy towards other community members
- Be open to different viewpoints and experiences
### Prohibited Behavior
## Unacceptable Behavior
We do not tolerate harassment, intimidation, discrimination, or any other inappropriate conduct, whether in communication or behavior. Prohibited actions include:
The following behaviors are unacceptable:
- The use of sexual language or imagery
- Deliberate intimidation or stalking
- Unwelcome sexual attention or harassment
- Inappropriate physical contact
- Disruptions during events or conversations
- Discrimination of any kind
- Harassment, discrimination, or intimidation
- Offensive comments related to personal characteristics
- Unwelcome sexual attention or advances
- Disruptive behavior in community spaces
- Any other conduct that could reasonably be considered inappropriate
### Reporting
## Reporting
If you witness or experience behavior that violates this code of conduct, please report it immediately to [homarr-labs@proton.me](mailto:homarr-labs@proton.me). All reports will be reviewed confidentially and promptly, and appropriate actions will be taken.
If you experience or witness behavior that violates this code:
### Consequences
1. Contact us at [homarr-labs@proton.me](mailto:homarr-labs@proton.me)
2. Provide as much detail as possible about the incident
3. All reports will be reviewed confidentially
Anyone violating this code of conduct may face consequences, such as warnings, removal from the repository, or a ban from future participation. We take violations seriously to ensure a safe and welcoming environment for everyone.
## Enforcement
### Acknowledgment
Violations of this code may result in:
- Warning
- Temporary suspension
- Permanent ban from the community
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.0.
By contributing to this repository, you agree to adhere to this code of conduct. Thank you for helping us create an inclusive and supportive environment for all contributors.

View File

@@ -1,104 +1,104 @@
# Contributing to Dashboard Icons
![Contributions Welcome](https://img.shields.io/badge/contributions-welcome-brightgreen?style=flat-square)
Thank you for your interest in contributing to our icon collection! These guidelines will help ensure smooth collaboration and maintain the quality of our collection.
## Contribution Guidelines
Thank you for your interest in contributing to the icon repository! To ensure smooth collaboration, please follow these guidelines. Your contributions help make this project better.
## Table of Contents
- [Contributing to Dashboard Icons](#contributing-to-dashboard-icons)
- [Table of Contents](#table-of-contents)
- [Icon Specifications](#icon-specifications)
- [Format Requirements](#format-requirements)
- [Quality Standards](#quality-standards)
- [Light \& Dark Variants](#light--dark-variants)
- [File Naming](#file-naming)
- [Requesting New Icons](#requesting-new-icons)
- [Improving the Repository](#improving-the-repository)
- [Code of Conduct](#code-of-conduct)
- [Questions?](#questions)
- [Contribution Guidelines](#contribution-guidelines)
- [Table of Contents](#table-of-contents)
- [Icon Specifications](#icon-specifications)
- [Format](#format)
- [Cropping](#cropping)
- [Light and Dark Versions](#light-and-dark-versions)
- [File Naming](#file-naming)
- [Quality Requirements](#quality-requirements)
- [Git Commit Messages](#git-commit-messages)
- [Contribution Process](#contribution-process)
- [Code of Conduct](#code-of-conduct)
- [Contact](#contact)
## Icon Specifications
### Format Requirements
### Format
- **SVG Format**: All icons must be submitted in SVG format
- **Auto-Generated Formats**: PNG and WEBP versions are generated automatically with:
- Height: 512 pixels
- Width: Auto (maintaining aspect ratio)
- Transparency: Enabled
- **SVG Format Required**: All icons should be submitted in SVG format. If an SVG version is unavailable, a PNG version will suffice, and a WEBP version will be generated accordingly.
- **Automatic PNG and WEBP Generation**: PNG and WEBP versions are generated automatically from the SVG (or PNG) files using the following settings:
- **Dimensions**:
- Height: 512 pixels
- Width: Auto (maintaining aspect ratio)
- **Transparency**: Enabled
### Quality Standards
### Cropping
- **Clean SVG**: No embedded raster images in SVG files
- **Proper Cropping**: Remove empty space for proper centering
- Use [SVG Crop](https://svgcrop.com/) for assistance
- **No Upscaling**: Maintain original quality without artificial enlargement
- **Remove Empty Space**: Crop any empty space from your SVG files to ensure the icon is properly centered and sized. You can use [SVG Crop](https://svgcrop.com/) to assist with this.
### Light & Dark Variants
### Light and Dark Versions
For monochrome or single-color icons:
- **Light Variant**: Required for dark backgrounds
- Invert black elements
- Adjust colors for visibility
- **Dark Variant**: Required for light backgrounds
- Invert white elements
- Adjust colors for visibility
**Tool Recommendation**: [DEEditor](https://deeditor.com/) for color adjustments
- **Monochrome or Single Primary Color Icons**:
- If your icon is monochrome, please provide additional versions if applicable:
- **`-light` Version**: For icons primarily dark or using black as a main color, provide a `-light` version for light backgrounds.
- **`-dark` Version**: For icons primarily light or using white as a main color, provide a `-dark` version for dark backgrounds.
- **Examples**:
- A black logo should include a `-light` version where black is inverted.
- A multicolored logo using black should provide a `-light` version with the black replaced.
- **Tool Recommendation**: [DEEditor](https://deeditor.com/) can help adjust icon colors if needed.
### File Naming
- **Kebab Case**: Use lowercase with hyphens
- Example: "Nextcloud Calendar" → `nextcloud-calendar.svg`
- **Variant Suffixes**:
- `-light` for dark backgrounds
- `-dark` for light backgrounds
- **Kebab Case**: Name your files using kebab case (lowercase words separated by hyphens). For example, "Nextcloud Calendar" becomes `nextcloud-calendar.svg`.
- **Note**: Filenames are automatically converted to kebab case, but please double-check your naming to avoid conflicts or errors.
## Requesting New Icons
### Quality Requirements
To request a new icon:
- **No Upscaled Images**: Icons should maintain their original quality without artificial enlargement.
- **No Embedded Raster Images in SVGs**: Ensure that SVG files are true vector graphics without embedded raster images.
1. **Create an Issue**:
- Use the appropriate [issue template](https://github.com/homarr-labs/dashboard-icons/issues/new/choose)
- Choose between "Light & dark icon" or "Normal icon" template
## Git Commit Messages
2. **Provide Information**:
- Service/application name
- Official logo or icon source
- Any specific requirements or notes
- **Use Semantic Commits**: Follow the format <type>(scope): description:
- `feat(icons): add nextcloud-calendar` when adding new icons.
3. **Upload Icon** (optional):
- Attach the SVG file directly to the issue
- Include both light and dark variants if applicable
## Contribution Process
4. **Wait for Review**:
- Our team will review your request
- We may request adjustments if needed
- Once approved, we'll add the icon to the collection
### Adding an icon
## Improving the Repository
To add an icon to the repository, follow these steps:
To contribute to the repository itself:
1. **Create issue**: Create an issue from one of the add [templates](https://github.com/homarr-labs/dashboard-icons/issues/new/choose):
- **Light & dark icon**: Use this template to request a new icon with both light and dark versions.
- **Normal icon**: Use this template to request a new icon with a single version.
2. **Fill out the template**: Provide the requested information in the template. You can upload the icons directly to the issue.
3. **Wait for approval**: Wait for the issue to be approved by a maintainer. If any changes are needed, they will be requested in the issue.
4. **Maintainer approves & merges**: Once the issue is approved, a pull request with all the necessary changes will be created and merged by a maintainer.
1. **Fork the Repository**
2. **Make Your Changes**:
- Documentation improvements
- Website enhancements
- Repository maintenance
- Bug fixes
### Updating an icon
3. **Submit a Pull Request**:
- Use semantic commit messages following the format: `<type>(scope): description`
- `feat(icons): add nextcloud-calendar`
- `fix(website): correct icon preview`
- `docs(readme): update installation instructions`
- Reference any related issues
- Follow our [Code of Conduct](CODE_OF_CONDUCT.md)
To update an icon in the repository, follow these steps:
1. **Create issue**: Create an issue from the update [template](https://github.com/homarr-labs/dashboard-icons/issues/new/choose).
- **Light & dark icon**: Use this template to request a new icon with both light and dark versions.
- **Normal icon**: Use this template to request a new icon with a single version.
2. **Fill out the template**: Provide the requested information in the template. You can upload the icons directly to the issue.
3. **Wait for approval**: Wait for the issue to be approved by a maintainer. If any changes are needed, they will be requested in the issue.
4. **Maintainer approves & merges**: Once the issue is approved, a pull request with all the necessary changes will be created and merged by a maintainer.
### Change metadata / any other change
To change the metadata of an existing icon or any other change, follow these steps:
1. **Fork the Repository**: Create a fork of this repository on your GitHub account.
2. **Clone the Repository**: Clone your forked repository to your local machine.
3. **Add Your Icons**: Place your SVG icon(s) into the appropriate directory, following the specifications above.
4. **Commit Your Changes**: Commit your additions with clear and descriptive commit messages using Gitmoji.
5. **Push to Your Fork**: Push your committed changes to your forked repository on GitHub.
6. **Create a Pull Request**: Submit a pull request to the main repository for review.
## Code of Conduct
By contributing, you agree to abide by our [Code of Conduct](CODE_OF_CONDUCT.md). Please review it to understand the expectations for all participants.
## Questions?
## Contact
If you have any questions or need assistance, contact us at [homarr-labs@proton.me](mailto:homarr-labs@proton.me).
If you have any questions or need assistance, feel free to reach out at [homarr-labs@proton.me](mailto:homarr-labs@proton.me). I'm happy to help.

2190
ICONS.md Normal file

File diff suppressed because it is too large Load Diff

188
README.md
View File

@@ -1,126 +1,116 @@
# Dashboard Icons
> [!WARNING]
> The repository has been migrated from `walkxcode` to `homarr-labs`, because I do not have the capacity/time to keep maintaining it. The Homarr team will take over all management and maintenance, whilst keeping all functionality for you, the user, the same. The project will always be usable outside of Homarr itself and breaking changes will not be made. ^Bjorn
>
> The license and guidelines have changed, so please review them. If you want to help with maintenance, reach out to [homarr-labs@proton.me](mailto:homarr-labs@proton.me).
[![jsDelivr hits](https://img.shields.io/jsdelivr/gh/hy/walkxcode/dashboard-icons?style=flat-square&color=%23A020F0)](https://www.jsdelivr.com/package/gh/walkxcode/dashboard-icons)
[![jsDelivr hits](https://img.shields.io/jsdelivr/gh/hy/homarr-labs/dashboard-icons?style=flat-square&color=%23A020F0)](https://www.jsdelivr.com/package/gh/homarr-labs/dashboard-icons)
[![GitHub Stars](https://img.shields.io/github/stars/homarr-labs/dashboard-icons?style=flat-square&color=yellow)](https://github.com/homarr-labs/dashboard-icons/stargazers)
[![Contributors](https://img.shields.io/github/contributors/homarr-labs/dashboard-icons?style=flat-square&color=blue)](https://github.com/homarr-labs/dashboard-icons/graphs/contributors)
[![jsDelivr hits (GitHub)](https://img.shields.io/jsdelivr/gh/hy/homarr-labs/dashboard-icons?style=flat-square&color=%23A020F0)](https://www.jsdelivr.com/package/gh/homarr-labs/dashboard-icons)
[![jsDelivr hits (GitHub)](https://img.shields.io/jsdelivr/gh/hy/walkxcode/dashboard-icons?style=flat-square&color=%23A020F0)](https://www.jsdelivr.com/package/gh/walkxcode/dashboard-icons)
> **Your definitive source for dashboard icons.**
## Dashboard Icons
A collection of over 1800 curated icons for services, applications and tools, designed specifically for dashboards and app directories.
The best source for dashboard icons.<br />
[**View icons →**](ICONS.md)
**[→ Browse the collection at dashboardicons.com](https://dashboardicons.com)**
## Table of Contents
- [Dashboard Icons](#dashboard-icons)
- [Table of Contents](#table-of-contents)
- [Icon Requests](#icon-requests)
- [Supported Dashboards](#supported-dashboards)
- [Usage and Details](#usage-and-details)
- [Direct Links](#direct-links)
- [Base URL](#base-url)
- [Name](#name)
- [Formats](#formats)
- [Dark/Light Versions](#darklight-versions)
- [Downloading Icons](#downloading-icons)
- [Disclaimer](#disclaimer)
## Why Dashboard Icons?
## Icon Requests
- **Comprehensive Collection**: 1800+ icons for all popular services and tools
- **Consistent Style**: Uniform visual language across different services
- **Multiple Formats**: Available in SVG, PNG, and WEBP to suit your needs
- **Light & Dark Variants**: Icons optimized for both light and dark themes
- **Community-Driven**: Easy process to request missing icons
If you're looking to add a new icon, please read the [Contribution Guidelines](CONTRIBUTING.md). Afterwards, submit a Pull Request or open an issue.
<p align="center">
<a href="https://dashboardicons.com">
<video width="650" autoplay loop muted playsinline>
<source src="assets/preview.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</a>
</p>
## Supported Dashboards
## Using the Icons
### Website
Find and download icons at [dashboardicons.com](https://dashboardicons.com):
1. Search for the icon you need
2. Click on an icon to view details
3. Choose your preferred format
4. Download or copy the direct link
### Direct Links
Use icons from CDN with this pattern:
```
<Base URL>/<Format>/<Icon Name>.<Format>
```
**Base URL options:**
- jsDelivr (recommended): `https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons`
- GitHub Direct: `https://raw.githubusercontent.com/homarr-labs/dashboard-icons/main`
**Example:**
```html
<img src="https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/plex.svg" alt="Plex">
```
### Technical Details
- **Naming Convention**: Kebab-case (lowercase with hyphens)
- Example: "Nextcloud Calendar" → `nextcloud-calendar`
- **Available Formats**:
- SVG: Vector format (original source)
- PNG: 512px height (auto-generated)
- WEBP: 512px height (auto-generated)
- **Variants**:
- `-light` suffix for dark backgrounds (e.g., `github-light.svg`)
- `-dark` suffix for light backgrounds (e.g., `github-dark.svg`)
- **Command Line**:
```bash
# Download with curl
curl -O https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
# Download with wget
wget https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
```
## Dashboard Integration
These icons integrate seamlessly with popular dashboard applications:
Several dashboards offer seamless integration with Dashboard Icons. Here are some of the most popular options:
- [Homarr](https://github.com/ajnart/homarr)
- [Homepage](https://github.com/gethomepage/homepage)
- [Dashy](https://github.com/Lissy93/dashy)
...and many others!
## Usage and Details
## Contributing
### Direct Links
### Request Icons
Icons can be used directly from either GitHub or jsDelivr (recommended). Links consist of three components, each described below:
Need an icon that's not in our collection?
- **Base URL**
- **Name**
- **Format**
1. Check the [Contribution Guidelines](CONTRIBUTING.md) for specifications
2. Submit a request using our [issue templates](https://github.com/homarr-labs/dashboard-icons/issues/new/choose)
3. Provide service details and optionally upload the icon
4. Our team will review, optimize, and add it to the collection
A complete link will look like this:
### Improve the Repository
https://<Base URL>/<Format>/<Name>.<Format>
Want to help with the repository itself?
For example, the icon URL for the WEBP version of Nextcloud Calendar would be:
- Review our [Contribution Guidelines](CONTRIBUTING.md)
- Fork the repository, make your changes, and submit a pull request
- We welcome help with documentation, website improvements, and maintenance
https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/webp/nextcloud-calendar.webp
## Support
#### Base URL
- **GitHub Issues**: Report bugs or request icons
- **Email**: [homarr-labs@proton.me](mailto:homarr-labs@proton.me)
We recommend using jsDelivr, a free and fast CDN:
## Legal
- `https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons`
**Disclaimer**: All product names, trademarks, and registered trademarks are the property of their respective owners. Icons are used for identification purposes only and do not imply endorsement.
Alternatively, you can use direct links to the repository:
**License**: This project is available under the terms of the [LICENSE](LICENSE) file.
- `https://raw.githubusercontent.com/homarr-labs/dashboard-icons/refs/heads/main`
---
#### Name
<p align="center">
Made with ♥ by the <a href="https://github.com/homarr-labs">Homarr Labs</a> team and contributors
</p>
Icons are named using kebab case (lowercase words separated by hyphens). For example, "Nextcloud Calendar" becomes `nextcloud-calendar`.
#### Formats
Icons are available in the following formats:
- SVG
- PNG
- WEBP
All icons are generated from the SVG file as the base.
*Read more about the specifics and standards of icons in the [Contribution Guidelines](CONTRIBUTING.md).*
### Dark/Light Versions
In some cases, an icon might have very light or dark colors, making it hard to see on certain backgrounds. In this situation, a `-light` or `-dark` version will be added to the end of the icon's name, with colors adjusted accordingly.
For example, "2fauth" becomes `2fauth-light`.
*Read more about the specifics and standards of icons in the [Contribution Guidelines](CONTRIBUTING.md).*
### Downloading Icons
To download icons from the [icons page](ICONS.md), simply Right-click the icon link and select "Save link as".
**Warning**: Visiting the icons page will load every icon in the repository. This may result in:
- High data usage.
- System slowdowns.
- Browser crashes on some devices.
If you prefer not to load all icons at once, consider using the direct links or downloading icons individually.
To download icons using the terminal, use `curl` or `wget`. Refer to [Direct Links](#direct-links) for details on the link structure.
curl -O https://<Base URL>/<Format>/<Name>.<Format>
or
wget https://<Base URL>/<Format>/<Name>.<Format>
## Disclaimer
Unless otherwise indicated, all images and assets in this repository, including product names, trademarks, and registered trademarks, are the property of their respective owners. These images and assets are used for identification purposes only, and their use does not imply endorsement.
Read the [LICENSE](LICENSE) for more information about the project itself. For questions or concerns, contact us at [homarr-labs@proton.me](mailto:homarr-labs@proton.me).

916
SEO.md
View File

@@ -1,916 +0,0 @@
# Dashboard Icons SEO Audit 2025
## Overview
This document presents a comprehensive SEO audit for the Dashboard Icons website built with Next.js 15.3. The audit analyzes current implementation and provides detailed recommendations based on the latest Next.js best practices for optimal search engine visibility and performance.
## Table of Contents
- [Current Implementation Assessment](#current-implementation-assessment)
- [Metadata Implementation](#metadata-implementation)
- [SEO Optimization Checklist](#seo-optimization-checklist)
- [Technical SEO](#technical-seo)
- [Performance Optimization](#performance-optimization)
- [Content and User Experience](#content-and-user-experience)
- [Mobile Optimization](#mobile-optimization)
- [Advanced Next.js 15.3 SEO Features](#advanced-nextjs-153-seo-features)
- [Recommendations](#recommendations)
- [Conclusion](#conclusion)
- [References](#references)
## Current Implementation Assessment
The Dashboard Icons project currently implements several good SEO practices:
- [x] Basic metadata configuration in layout.tsx and page.tsx files
- [x] Dynamic title and description generation with appropriate keyword inclusion
- [x] Open Graph tags for social sharing with proper image dimensions
- [x] Twitter Card metadata implementation for social visibility
- [x] Proper use of semantic HTML elements for content structure
- [x] Server-side rendering for improved indexing and crawler access
- [x] Canonical URLs properly configured across page types
- [x] Image optimization with next/image component for improved Core Web Vitals
However, there are several opportunities for improvement:
- [ ] No robots.txt implementation for directing crawler behavior
- [ ] Missing XML sitemap for improved content discovery
- [ ] No structured data (JSON-LD) for enhanced search results
- [ ] Limited use of advanced Next.js 15.3 metadata features
- [ ] Missing breadcrumb navigation for enhanced user experience and SEO
- [ ] No dynamic OG images for improved social sharing
## Metadata Implementation
The project uses Next.js App Router's built-in metadata API effectively across different page types:
### Root Layout Metadata Analysis
In `layout.tsx`, the site establishes global metadata that provides a solid foundation:
```typescript
// In layout.tsx
export async function generateMetadata(): Promise<Metadata> {
const { totalIcons } = await getTotalIcons()
return {
metadataBase: new URL(WEB_URL),
title: websiteTitle,
description: getDescription(totalIcons),
keywords: ["dashboard icons", "service icons", "application icons", "tool icons", "web dashboard", "app directory"],
robots: {
index: true,
follow: true,
googleBot: "index, follow",
},
openGraph: {
siteName: WEB_URL,
title: websiteTitle,
url: BASE_URL,
description: getDescription(totalIcons),
images: [
{
url: "/og-image.png",
width: 1200,
height: 630,
alt: "Dashboard Icons - Dashboard icons for self hosted services",
type: "image/png",
},
],
},
twitter: {
card: "summary_large_image",
title: WEB_URL,
description: getDescription(totalIcons),
images: ["/og-image.png"],
},
applicationName: WEB_URL,
alternates: {
canonical: BASE_URL,
},
// Additional configurations...
}
}
```
**Strengths:**
- Properly sets metadataBase for all relative URLs
- Includes comprehensive metadata for SEO and social sharing
- Dynamically generates description based on content (totalIcons)
- Properly configures robots directives
**Areas for improvement:**
- The `websiteTitle` ("Free Dashboard Icons - Download High-Quality UI & App Icons") could be more specific
- The OpenGraph URL points to BASE_URL (CDN) rather than WEB_URL (the actual site)
- Twitter title uses WEB_URL instead of an actual title
- Missing locale information for international SEO
### Page-Specific Metadata Analysis
For individual icon pages, metadata is comprehensively generated based on icon data:
```typescript
// In [icon]/page.tsx
export async function generateMetadata({ params, searchParams }: Props, parent: ResolvingMetadata): Promise<Metadata> {
const { icon } = await params
const iconsData = await getAllIcons()
// ...processing code...
const formattedIconName = icon
.split("-")
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(" ")
return {
title: `${formattedIconName} Icon | Dashboard Icons`,
description: `Download the ${formattedIconName} icon in SVG, PNG, and WEBP formats for FREE. Part of a collection of ${totalIcons} curated icons...`,
openGraph: {
title: `${formattedIconName} Icon | Dashboard Icons`,
description: `Download the ${formattedIconName} icon in SVG, PNG, and WEBP formats for FREE...`,
type: "article",
url: pageUrl,
authors: [authorName],
publishedTime: updateDate.toISOString(),
modifiedTime: updateDate.toISOString(),
section: "Icons",
tags: [formattedIconName, "dashboard icon", "service icon", ...],
},
twitter: {
card: "summary_large_image",
title: `${formattedIconName} Icon | Dashboard Icons`,
description: `Download the ${formattedIconName} icon...`,
images: [iconImageUrl],
},
alternates: {
canonical: pageUrl,
media: {
png: iconImageUrl,
svg: `${BASE_URL}/svg/${icon}.svg`,
webp: `${BASE_URL}/webp/${icon}.webp`,
},
},
}
}
```
**Strengths:**
- Excellent dynamic title generation with proper formatting
- Comprehensive description with icon-specific information
- Proper OpenGraph article configuration with author and timestamp data
- Well-structured alternates configuration for different media types
- Good keyword inclusion in meta tags
**Areas for improvement:**
- Could benefit from structured data for product/image entity
- Could implement dynamic OG images with the ImageResponse API
### Icons Browse Page Metadata Analysis
The icons browse page implements specific metadata optimized for its purpose:
```typescript
// In icons/page.tsx
export async function generateMetadata(): Promise<Metadata> {
const icons = await getIconsArray()
const totalIcons = icons.length
return {
title: "Browse Icons | Free Dashboard Icons",
description: `Search and browse through our collection of ${totalIcons} curated icons for services, applications and tools...`,
keywords: [
"browse icons",
"dashboard icons",
"icon search",
// ...
],
openGraph: {
title: "Browse Icons | Free Dashboard Icons",
description: `Search and browse through our collection of ${totalIcons} curated icons...`,
// ...
},
// Additional configurations...
}
}
```
**Strengths:**
- Clear, purpose-driven title
- Dynamic description that includes the collection size
- Relevant keywords for the browse page functionality
**Areas for improvement:**
- Could implement pagination metadata (prev/next) if applicable
- Missing structured data for collection/gallery
## SEO Optimization Checklist
### Metadata and Head Tags
- [x] Page titles are unique, descriptive, and include keywords
- [x] Meta descriptions are compelling and keyword-rich (under 160 characters)
- [x] Open Graph tags are implemented for social sharing
- [x] Twitter Card metadata is implemented
- [x] Canonical URLs are properly set
- [ ] Structured data/JSON-LD for rich snippets
- [x] Properly configured viewport meta tag
- [x] Favicon and apple-touch-icon are set
- [x] Keywords meta tag is implemented (though not as influential for rankings as before)
- [ ] Language and locale information (hreflang) for international SEO
### Indexation and Crawling
- [x] Server-side rendering for improved indexability
- [ ] robots.txt file implementation
- [ ] XML sitemap generation
- [x] Proper HTTP status codes (200, 404, etc.)
- [x] Internal linking structure
- [ ] Pagination handling with proper rel="next" and rel="prev" tags
- [ ] Implementation of dynamic sitemap with Next.js 15.3 file-based API
### Content Structure
- [x] Clean URL structure (`/icons/[icon]`)
- [x] Semantic HTML headings (h1, h2, etc.)
- [x] Content hierarchy matches visual hierarchy
- [ ] Breadcrumb navigation for improved user experience and crawlability
- [ ] Schema.org markup for content types
## Technical SEO
### Server-side Rendering and Static Generation
The project effectively uses Next.js App Router to implement:
- **Static Generation (SSG)** for homepage and catalog pages, providing fast initial load times and improved indexability
- **Server-Side Rendering (SSR)** for dynamic content, ensuring fresh content is always accessible to crawlers
- **Incremental Static Regeneration (ISR)** potential for optimal performance and content freshness
These approaches ensure search engines can properly crawl and index content while providing optimal performance.
### Dynamic Routes Implementation
Dynamic routes like `/icons/[icon]` are properly implemented with `generateStaticParams` to pre-render paths at build time:
```typescript
export async function generateStaticParams() {
const iconsData = await getAllIcons()
return Object.keys(iconsData).map((icon) => ({
icon,
}))
}
```
This approach ensures all icon pages are pre-rendered during build time, optimizing both performance and SEO by making all content immediately available to search engine crawlers without requiring JavaScript execution.
### Missing Critical Components
#### robots.txt Implementation
Currently missing a robots.txt file which is essential for directing search engine crawlers. Next.js 15.3 offers a file-based API that should be implemented:
```typescript
// app/robots.ts
import { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
},
sitemap: 'https://dashboardicons.com/sitemap.xml',
}
}
```
#### sitemap.xml Implementation
No sitemap implementation was found. A sitemap is critical for search engines to discover and index all pages efficiently. Next.js 15.3's file-based API makes this easy to implement:
```typescript
// app/sitemap.ts
import { MetadataRoute } from 'next'
import { getAllIcons } from '@/lib/api'
import { BASE_URL, WEB_URL } from '@/constants'
export default async function sitemap(): MetadataRoute.Sitemap {
const iconsData = await getAllIcons()
const lastModified = new Date()
// Base routes
const routes = [
{
url: WEB_URL,
lastModified,
changeFrequency: 'weekly',
priority: 1.0,
},
{
url: `${WEB_URL}/icons`,
lastModified,
changeFrequency: 'daily',
priority: 0.9,
},
// Other static routes
]
// Icon routes
const iconRoutes = Object.keys(iconsData).map((icon) => ({
url: `${WEB_URL}/icons/${icon}`,
lastModified: new Date(iconsData[icon].update.timestamp),
changeFrequency: 'weekly' as const,
priority: 0.7,
}))
return [...routes, ...iconRoutes]
}
```
For larger icon collections, Next.js 15.3 supports `generateSitemaps` for creating multiple sitemap files:
```typescript
// app/sitemap.ts
export async function generateSitemaps() {
const totalIcons = await getTotalIconCount()
// Google's limit is 50,000 URLs per sitemap
const sitemapsNeeded = Math.ceil(totalIcons / 50000)
return Array.from({ length: sitemapsNeeded }, (_, i) => ({ id: i }))
}
export default async function sitemap({ id }: { id: number }): Promise<MetadataRoute.Sitemap> {
// Fetch icons for this specific sitemap segment
// ...implementation
}
```
#### JSON-LD Structured Data
Missing structured data for improved search results appearance. For icon pages, implement ImageObject schema:
```typescript
// In [icon]/page.tsx component
import { JsonLd } from 'next-seo';
// Within component return statement
return (
<>
<JsonLd
type="ImageObject"
data={{
'@context': 'https://schema.org',
'@type': 'ImageObject',
name: `${formattedIconName} Icon`,
description: `Dashboard icon for ${formattedIconName}`,
contentUrl: `${BASE_URL}/png/${icon}.png`,
license: 'https://creativecommons.org/licenses/by-sa/4.0/',
acquireLicensePage: `${WEB_URL}/icons/${icon}`,
creditText: `Dashboard Icons`,
creator: {
'@type': 'Person',
name: authorData.name || authorData.login
}
}}
/>
<IconDetails icon={icon} iconData={originalIconData} authorData={authorData} />
</>
)
```
For the homepage, implement Organization schema:
```typescript
// In layout.tsx or page.tsx
import { JsonLd } from 'next-seo';
// Within component return statement
<JsonLd
type="Organization"
data={{
'@context': 'https://schema.org',
'@type': 'Organization',
name: 'Dashboard Icons',
url: WEB_URL,
logo: `${WEB_URL}/logo.png`,
description: 'Collection of free icons for self-hosted dashboards and services',
sameAs: [
REPO_PATH,
// Social media links if available
]
}}
/>
```
## Performance Optimization
### Core Web Vitals
Performance is a crucial SEO factor. Current implementation has:
- [x] Image optimization through next/image (reduces LCP)
- [x] Font optimization with the Inter variable font
- [ ] Proper lazy loading of below-the-fold content
- [ ] Optimized Cumulative Layout Shift (CLS)
- [ ] Interaction to Next Paint (INP) optimization
### Detailed Recommendations
#### 1. Image Optimization
- **Priority attribute**: Add priority attribute to critical above-the-fold images:
```tsx
<Image
src="/hero-image.jpg"
alt="Dashboard Icons"
width={1200}
height={630}
priority
/>
```
- **Size optimization**: Ensure images use appropriate sizes for their display contexts:
```tsx
<Image
src={`${BASE_URL}/png/${icon}.png`}
alt={`${formattedIconName} icon`}
width={64}
height={64}
sizes="(max-width: 640px) 32px, (max-width: 1024px) 48px, 64px"
/>
```
#### 2. JavaScript Optimization
- **Use dynamic imports**: Implement dynamic imports for non-critical components:
```tsx
import dynamic from 'next/dynamic'
const IconGrid = dynamic(() => import('@/components/IconGrid'), {
loading: () => <p>Loading icons...</p>,
})
```
- **Component-level code splitting**: Break large components into smaller, more manageable pieces
#### 3. Core Web Vitals Focus
- **LCP Optimization**:
- Preload critical resources
- Optimize server response time
- Prioritize above-the-fold content rendering
- **CLS Minimization**:
- Reserve space for dynamic content
- Define explicit width/height for images and embeds
- Avoid inserting content above existing content
- **INP Improvement**:
- Optimize event handlers
- Use debouncing for input-related events
- Avoid long-running JavaScript tasks
## Content and User Experience
- [x] Clean, semantic HTML structure
- [x] Clear content hierarchy with proper heading tags
- [ ] Comprehensive alt text for all images
- [x] Mobile-friendly responsive design
- [ ] Breadcrumb navigation for improved user experience and SEO
- [ ] Related icons section for internal linking and improved user engagement
### Recommended Content Improvements
#### Breadcrumb Navigation
Implement structured breadcrumb navigation with Schema.org markup:
```tsx
// components/Breadcrumbs.tsx
import Link from 'next/link'
import { JsonLd } from 'next-seo'
interface BreadcrumbItem {
name: string
url: string
}
export function Breadcrumbs({ items }: { items: BreadcrumbItem[] }) {
return (
<>
<JsonLd
type="BreadcrumbList"
data={{
'@context': 'https://schema.org',
'@type': 'BreadcrumbList',
itemListElement: items.map((item, index) => ({
'@type': 'ListItem',
position: index + 1,
name: item.name,
item: item.url,
})),
}}
/>
<nav aria-label="Breadcrumb" className="breadcrumbs">
<ol>
{items.map((item, index) => (
<li key={item.url}>
{index < items.length - 1 ? (
<Link href={item.url}>{item.name}</Link>
) : (
<span aria-current="page">{item.name}</span>
)}
</li>
))}
</ol>
</nav>
</>
)
}
```
#### Related Icons Section
Add a related icons section to improve internal linking and user engagement:
```tsx
// components/RelatedIcons.tsx
import Link from 'next/link'
import Image from 'next/image'
import { BASE_URL } from '@/constants'
export function RelatedIcons({
currentIcon,
similarIcons
}: {
currentIcon: string,
similarIcons: string[]
}) {
return (
<section aria-labelledby="related-icons-heading">
<h2 id="related-icons-heading">Related Icons</h2>
<div className="icon-grid">
{similarIcons.map(icon => (
<Link
key={icon}
href={`/icons/${icon}`}
className="icon-card"
>
<Image
src={`${BASE_URL}/png/${icon}.png`}
alt={`${icon.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ')} icon`}
width={48}
height={48}
/>
<span>{icon.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ')}</span>
</Link>
))}
</div>
</section>
)
}
```
## Mobile Optimization
- [x] Responsive design with fluid layouts
- [x] Appropriate viewport configuration:
```html
<meta name="viewport" content="width=device-width, initial-scale=1, minimumScale=1, maximumScale=5, userScalable=true, themeColor=#ffffff, viewportFit=cover" />
```
- [ ] Touch-friendly navigation and interface elements (minimum 44x44px tap targets)
- [ ] Mobile page speed optimization (reduced JavaScript, optimized images)
### Mobile-Specific Recommendations
1. **Implement mobile-specific image handling**:
```tsx
<Image
src={`${BASE_URL}/png/${icon}.png`}
alt={`${formattedIconName} icon`}
width={64}
height={64}
sizes="(max-width: 480px) 32px, 64px"
quality={90}
/>
```
2. **Enhanced touch targets for mobile**:
```css
@media (max-width: 768px) {
.nav-link, .button, .interactive-element {
min-height: 44px;
min-width: 44px;
padding: 12px;
}
}
```
3. **Simplified navigation for mobile**:
Implement a hamburger menu or collapsible navigation for mobile devices
## Advanced Next.js 15.3 SEO Features
Next.js 15.3 offers enhanced SEO features that should be implemented:
### Dynamic OG Images
Implement dynamic Open Graph images using the ImageResponse API:
```typescript
// app/icons/[icon]/opengraph-image.tsx
import { ImageResponse } from 'next/og'
import { getAllIcons } from '@/lib/api'
import { BASE_URL } from '@/constants'
export const runtime = 'edge'
export const alt = 'Dashboard Icon Preview'
export const size = { width: 1200, height: 630 }
export const contentType = 'image/png'
export default async function OgImage({ params }: { params: { icon: string } }) {
const { icon } = params
const iconsData = await getAllIcons()
const iconData = iconsData[icon]
if (!iconData) {
return new ImageResponse(
(
<div
style={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
width: '100%',
height: '100%',
backgroundColor: '#f8fafc',
color: '#334155',
fontFamily: 'sans-serif',
}}
>
<h1 style={{ fontSize: 64 }}>Icon Not Found</h1>
</div>
)
)
}
const formattedIconName = icon
.split('-')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
return new ImageResponse(
(
<div
style={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
width: '100%',
height: '100%',
backgroundColor: '#f8fafc',
color: '#334155',
fontFamily: 'sans-serif',
padding: 40,
}}
>
<img
src={`${BASE_URL}/png/${icon}.png`}
width={200}
height={200}
alt={`${formattedIconName} icon`}
style={{ marginBottom: 40 }}
/>
<h1 style={{ fontSize: 64, marginBottom: 20, textAlign: 'center' }}>
{formattedIconName} Icon
</h1>
<p style={{ fontSize: 32, textAlign: 'center' }}>
Free download in SVG, PNG, and WEBP formats
</p>
</div>
)
)
}
```
### Next.js Route Segments for SEO
Utilize route segment config options to optimize SEO aspects:
```typescript
// app/icons/[icon]/page.tsx
export const dynamic = 'force-static' // Ensure static generation even with dynamic data fetching
export const revalidate = 3600 // Revalidate content every hour
export const fetchCache = 'force-cache' // Enforce caching of fetched data
export const generateStaticParams = async () => {
// Generate static paths for all icons
const iconsData = await getAllIcons()
return Object.keys(iconsData).map((icon) => ({ icon }))
}
```
### Advanced Caching Strategies
Implement advanced caching with revalidation tags for dynamic content:
```typescript
// lib/api.ts
import { cache, revalidateTag } from 'next/cache'
// Cache API calls using tags
export const getTotalIcons = cache(
async () => {
const response = await fetch(METADATA_URL, {
next: { tags: ['icons-metadata'] },
})
const data = await response.json()
return { totalIcons: Object.keys(data).length }
}
)
// Function to trigger revalidation when new icons are added
export async function revalidateIconsCache() {
revalidateTag('icons-metadata')
}
```
## Recommendations
### Immediate (High Impact/Low Effort)
1. **Create robots.txt**
- Implement a file-based robots.txt using Next.js 15.3 API
- Include sitemap reference
```typescript
// app/robots.ts
import { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
},
sitemap: 'https://dashboardicons.com/sitemap.xml',
}
}
```
2. **Generate XML Sitemap**
- Create a dynamic sitemap.xml file using Next.js 15.3 file-based API
- Include changefreq and priority attributes
- Implement sitemap index for large icon collections
```typescript
// app/sitemap.ts
import { MetadataRoute } from 'next'
import { getAllIcons } from '@/lib/api'
import { WEB_URL } from '@/constants'
export default async function sitemap(): MetadataRoute.Sitemap {
const iconsData = await getAllIcons()
// Implementation as shown in Technical SEO section
}
```
3. **Add Structured Data**
- Implement JSON-LD for icon pages (ImageObject schema)
- Add WebSite schema to the homepage
- Include BreadcrumbList schema for navigation
```typescript
// app/layout.tsx
import { JsonLd } from 'next-seo'
// In component return
<JsonLd
type="WebSite"
data={{
'@context': 'https://schema.org',
'@type': 'WebSite',
name: 'Dashboard Icons',
url: WEB_URL,
description: getDescription(totalIcons),
potentialAction: {
'@type': 'SearchAction',
target: `${WEB_URL}/icons?q={search_term_string}`,
'query-input': 'required name=search_term_string'
}
}}
/>
```
4. **Enhance Internal Linking**
- Implement breadcrumb navigation
- Add "related icons" or "similar icons" sections
- Create more internal links between icon categories or tags
### Medium-term Improvements
1. **Performance Optimization**
- Implement priority attribute for critical images
- Optimize component-level code splitting
- Refine Largest Contentful Paint (LCP) elements
2. **Enhanced Metadata**
- Implement dynamic OG images with the ImageResponse API
- Add more specific structured data for each icon category
- Implement comprehensive hreflang tags if multilingual support is added
3. **Content Enhancement**
- Add more descriptive text for each icon
- Include usage examples and contexts
- Improve alt text for all images with detailed descriptions
### Long-term Strategy
1. **Advanced Metrics Tracking**
- Implement Real User Monitoring (RUM)
- Set up Core Web Vitals tracking in the field
- Establish regular SEO audit cycles
2. **Enhanced User Experience**
- Implement advanced search functionality with filtering options
- Add user collections/favorites feature
- Develop a comprehensive filtering system by icon type, style, color, etc.
3. **Content Expansion**
- Add tutorials on how to use the icons
- Create themed icon collections
- Implement a blog for icon design tips and updates
## Conclusion
### Overall SEO Health Assessment
The Dashboard Icons website currently implements many SEO best practices through Next.js 15.3's App Router features. The project demonstrates strong implementation of:
- Metadata configuration with the built-in Metadata API
- Dynamic generation of page-specific metadata
- Open Graph and Twitter Card integration
- Server-side rendering and static generation
- Proper canonical URL management
- Clean, semantic HTML structure
- Responsive design for mobile devices
However, several critical components are missing that would significantly improve search engine visibility:
1. **Missing Technical Components**:
- No robots.txt file
- No XML sitemap
- No structured data (JSON-LD)
- Limited use of Next.js 15.3's advanced features
2. **Performance Optimization Gaps**:
- Missing priority attributes on critical images
- Limited implementation of advanced caching strategies
- Potential Core Web Vitals optimizations
3. **Enhanced User Experience Opportunities**:
- No breadcrumb navigation
- Limited internal linking between related icons
- Missing advanced search and filtering capabilities
### SEO Implementation Score
| Category | Score | Notes |
|----------|-------|-------|
| Metadata Implementation | 8/10 | Strong implementation, missing structured data |
| Technical SEO | 6/10 | Missing robots.txt and sitemap |
| Performance | 7/10 | Good image optimization, room for improvement |
| Content Structure | 7/10 | Semantic HTML present, needs better internal linking |
| Mobile Optimization | 8/10 | Responsive design, opportunity for touch optimizations |
| Next.js 15.3 Features | 5/10 | Not utilizing latest features like dynamic OG images |
| Overall | 6.8/10 | Good foundation, specific improvements needed |
### Priority Action Items
1. **Immediate (High Impact/Low Effort)**:
- Create robots.txt file using file-based API
- Generate XML sitemap with Next.js 15.3 API
- Add JSON-LD structured data to all page types
2. **Short-term (Medium Impact)**:
- Optimize Core Web Vitals (LCP, CLS, INP)
- Add priority attribute to above-the-fold images
- Implement breadcrumb navigation with schema
3. **Long-term (Strategic)**:
- Implement dynamic OG images with ImageResponse API
- Add more descriptive content for each icon
- Develop a comprehensive internal linking strategy
- Consider content expansion with tutorials and icon usage guides
By implementing these SEO improvements, Dashboard Icons will significantly enhance its search engine visibility, user experience, and overall organic traffic growth potential. The existing implementation provides a solid foundation, and these targeted enhancements will help maximize the site's search performance in an increasingly competitive landscape.
## References
1. [Next.js 15.3 Metadata API Documentation](https://nextjs.org/docs/app/building-your-application/optimizing/metadata)
2. [Google's SEO Starter Guide](https://developers.google.com/search/docs/fundamentals/seo-starter-guide)
3. [Next.js File-Based Metadata](https://nextjs.org/docs/app/api-reference/file-conventions/metadata)
4. [Core Web Vitals - Google Web Dev](https://web.dev/articles/vitals)
5. [Schema.org Documentation](https://schema.org/docs/documents.html)
6. [Next.js Image Component Documentation](https://nextjs.org/docs/app/api-reference/components/image)
7. [Next.js ImageResponse API](https://nextjs.org/docs/app/api-reference/functions/image-response)
8. [Google Search Central Documentation](https://developers.google.com/search)
9. [Next.js 15.3 App Router SEO Checklist](https://dev.to/simplr_sh/nextjs-15-app-router-seo-comprehensive-checklist-3d3f)
10. [Mobile Optimization - Google Search Central](https://developers.google.com/search/mobile-sites)
11. [Next.js 15.3 Performance Optimization](https://nextjs.org/docs/app/building-your-application/optimizing)

Binary file not shown.

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"paywall-remover",
"article-unblocker"
],
"categories": [
"Web-Browsers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-13T18:25:47Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"2FA Authenticator"
],
"categories": [
"Password-Managers",
"Security"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-13T18:37:13Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "svg",
"aliases": [
"7-zip"
],
"categories": [
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-05T00:02:27Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Database Management"
],
"categories": [
"Databases",
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2022-08-16T17:22:56Z",
"author": {

View File

@@ -1,12 +0,0 @@
{
"base": "svg",
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-04-06T16:32:41.752755",
"author": {
"id": 63781622,
"login": "Meierschlumpf"
}
}
}

View File

@@ -1,9 +1,7 @@
{
"base": "png",
"aliases": [],
"categories": [
"Monitoring-Tools"
],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,14 +0,0 @@
{
"base": "svg",
"aliases": [],
"categories": [
"Media"
],
"update": {
"timestamp": "2025-04-18T08:34:26.627973",
"author": {
"id": 2432100,
"login": "lyneld"
}
}
}

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"no-code-platform",
"app-builder"
],
"categories": [
"Developper-Tools",
"Cloud-Computing"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-06-01T17:32:11Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "png",
"aliases": [
"Download Manager"
],
"categories": [
"Download-Managers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"prime-video",
"amazon-video"
],
"categories": [
"Video-Streaming"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"online-marketplace",
"shopping-website"
],
"categories": [
"E-commerce-Platforms"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"processor-company",
"computer-chips"
],
"categories": [
"Hardware",
"Organization"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"Asterisk Manager"
],
"categories": [
"Networking-Tools",
"Communication"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "png",
"aliases": [
"music-server",
"audio-streaming"
],
"categories": [
"Media-Servers",
"Music-Streaming"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,9 +1,7 @@
{
"base": "svg",
"aliases": [],
"categories": [
"Smart-Home"
],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"android-logo",
"mobile-os-icon"
],
"categories": [
"Operating-Systems"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"android-os",
"mobile-os"
],
"categories": [
"Operating-Systems"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Email Aliases"
],
"categories": [
"Email-Providers",
"Security"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Automation Tool"
],
"categories": [
"Developper-Tools",
"DevOps"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "svg",
"aliases": [
"NoSQL Database"
],
"categories": [
"Databases"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"realtime-database",
"analytics-database"
],
"categories": [
"Databases"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"Home Automation"
],
"categories": [
"Home-Automation",
"Smart-Home"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"itunes-music",
"apple-music-service"
],
"categories": [
"Music-Streaming"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"apple-tv",
"streaming-service"
],
"categories": [
"Video-Streaming"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -13,4 +13,4 @@
"light": "apple",
"dark": "apple-light"
}
}
}

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"steam-idler",
"game-farmer"
],
"categories": [
"Gaming-Platforms"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"web-archiver",
"site-scraper"
],
"categories": [
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"GitOps Tool"
],
"categories": [
"Developper-Tools",
"DevOps",
"Containerization-&-Orchestration"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"ipmi-tool",
"server-remote-management"
],
"categories": [
"Server-Panels",
"Hardware"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "png",
"aliases": [
"digital-asset-management",
"media-library"
],
"categories": [
"File-Sharing-&-Sync",
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T19:32:46Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Help Desk"
],
"categories": [
"Office-Suites",
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"gaming-laptop",
"gaming-pc"
],
"categories": [
"Gaming-Platforms",
"Hardware"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Router"
],
"categories": [
"Networking-Tools",
"Smart-Home"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-16T12:26:21Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"continuous-integration",
"build-server"
],
"categories": [
"Developper-Tools",
"Version-Control-Systems"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Issue Tracker"
],
"categories": [
"Developper-Tools",
"Office-Suites"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"audio-editing-software",
"sound-editor"
],
"categories": [
"Graphics-Editors"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"reverse-proxy-auth",
"identity-provider"
],
"categories": [
"Security",
"Networking-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,8 @@
{
"base": "png",
"aliases": [
"minecraft-server-script",
"game-server-automation"
],
"aliases": [],
"categories": [
"Gaming-Platforms",
"Home-Automation"
"Gaming"
],
"update": {
"timestamp": "2025-03-24T19:26:25.573313",

View File

@@ -1,22 +1,12 @@
{
"base": "png",
"aliases": [
"security-camera-company",
"video-surveillance"
],
"categories": [
"Smart-Home",
"Hardware"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {
"id": 71191962,
"name": "walkxcode"
}
},
"colors": {
"dark": "axis",
"light": "axis-light"
}
}

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"Baby Tracker"
],
"categories": [
"Home-Automation",
"Personal"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Cloud Backup"
],
"categories": [
"Cloud-Computing",
"File-Sharing-&-Sync"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Backup Tool"
],
"categories": [
"Databases",
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"enterprise-backup",
"data-backup"
],
"categories": [
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"CalDAV Server"
],
"categories": [
"Server-Panels",
"File-Sharing-&-Sync"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,14 +0,0 @@
{
"base": "svg",
"aliases": [],
"categories": [
"Cloud"
],
"update": {
"timestamp": "2025-04-17T16:57:40.799513",
"author": {
"id": 48109134,
"login": "jdcool00"
}
}
}

View File

@@ -1,12 +0,0 @@
{
"base": "svg",
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-04-17T16:55:42.720426",
"author": {
"id": 48109134,
"login": "jdcool00"
}
}
}

View File

@@ -1,13 +1,7 @@
{
"base": "png",
"aliases": [
"Session Manager"
],
"categories": [
"Security",
"Developper-Tools",
"Networking-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Habit Tracker"
],
"categories": [
"Note-taking-Apps",
"Office-Suites"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "svg",
"aliases": [
"php-web-framework"
],
"categories": [
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "svg",
"aliases": [
"Hosting Provider"
],
"categories": [
"Cloud-Computing"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-05T20:55:05Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"Instagram Frontend"
],
"categories": [
"Social-Media",
"Web-Browsers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "png",
"aliases": [
"Supermarket"
],
"categories": [
"E-commerce-Platforms"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "svg",
"aliases": [
"Finance Tracker"
],
"categories": [
"Finance-&-Banking"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"microsoft-search",
"web-search"
],
"categories": [
"Search-Engines"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"btc",
"digital-currency"
],
"categories": [
"Finance-&-Banking"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"private-tracker",
"torrent-site"
],
"categories": [
"Download-Managers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Password Manager"
],
"categories": [
"Password-Managers",
"Security"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2022-08-16T17:22:56Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"dns-server",
"adblocking-dns"
],
"categories": [
"Networking-Tools",
"Security"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2022-09-12T10:23:51Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "png",
"aliases": [
"helium-hotspot",
"crypto-miner"
],
"categories": [
"Hardware",
"Networking-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"book-tracker",
"reading-log"
],
"categories": [
"Note-taking-Apps"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"brave-developer",
"dev-browser"
],
"categories": [
"Web-Browsers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"homebrewing-controller",
"fermentation-control"
],
"categories": [
"Home-Automation"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,22 +1,12 @@
{
"base": "svg",
"aliases": [
"printer-company",
"office-equipment"
],
"categories": [
"Hardware",
"Office-Suites"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {
"id": 71191962,
"name": "walkxcode"
}
},
"colors": {
"dark": "brother",
"light": "brother-light"
}
}

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"CI/CD"
],
"categories": [
"Developper-Tools",
"DevOps"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"budget-manager",
"personal-finance"
],
"categories": [
"Finance-&-Banking",
"Note-taking-Apps"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "png",
"aliases": [
"go-web-framework"
],
"categories": [
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,14 +0,0 @@
{
"base": "svg",
"aliases": [],
"categories": [
"Finance"
],
"update": {
"timestamp": "2025-04-22T18:36:00.262663",
"author": {
"id": 41155244,
"login": "giovannicalabro"
}
}
}

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"Reverse Proxy"
],
"categories": [
"Networking-Tools",
"Server-Panels",
"Security"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-06-01T17:44:17Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"File Uploader"
],
"categories": [
"File-Sharing-&-Sync",
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-05T01:06:46Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"service-monitor",
"alerting-tool"
],
"categories": [
"Monitoring-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"network-graphing",
"performance-monitoring"
],
"categories": [
"Monitoring-Tools",
"Networking-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"mastodon-server",
"federated-social-network"
],
"categories": [
"Social-Media"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,14 +0,0 @@
{
"base": "png",
"aliases": [],
"categories": [
"Media"
],
"update": {
"timestamp": "2025-04-22T17:31:36.311538",
"author": {
"id": 2319445,
"login": "samcro1967"
}
}
}

View File

@@ -1,14 +1,9 @@
{
"base": "svg",
"aliases": [
"ebook-library",
"book-converter"
],
"categories": [
"Media-Servers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T20:27:58",
"timestamp": "2023-04-13T20:27:58Z",
"author": {
"id": 71191962,
"name": "walkxcode"

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"Camera Interface"
],
"categories": [
"Home-Automation",
"Monitoring-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Ubuntu Company"
],
"categories": [
"Operating-Systems",
"Linux-Distributions"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T20:27:58Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"centos-linux",
"enterprise-linux"
],
"categories": [
"Linux-Distributions",
"Operating-Systems"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"digital-video-recorder",
"tv-recording"
],
"categories": [
"Media-Servers",
"Home-Automation"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "svg",
"aliases": [
"AI Chatbot"
],
"categories": [
"AI-&-LLM-Platforms"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-01-29T22:26:51Z",
"author": {

View File

@@ -1,11 +1,7 @@
{
"base": "png",
"aliases": [
"recipe-app"
],
"categories": [
"Home-Automation"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "png",
"aliases": [
"chrome-beta-channel",
"beta-browser"
],
"categories": [
"Web-Browsers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"chrome-developer",
"dev-browser"
],
"categories": [
"Web-Browsers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2022-08-16T17:22:56Z",
"author": {

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"developer-tools",
"browser-inspector"
],
"categories": [
"Developper-Tools",
"Web-Browsers"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2022-08-16T17:22:56Z",
"author": {

View File

@@ -1,10 +1,7 @@
{
"base": "png",
"aliases": [],
"categories": [
"Media-Servers",
"Smart-Home"
],
"categories": [],
"update": {
"timestamp": "2025-01-07T17:54:03Z",
"author": {

View File

@@ -1,12 +1,7 @@
{
"base": "svg",
"aliases": [
"Matrix Client"
],
"categories": [
"Communication",
"Social-Media"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2024-10-20T17:24:03Z",
"author": {

View File

@@ -1,14 +0,0 @@
{
"base": "svg",
"aliases": [],
"categories": [
"Communication"
],
"update": {
"timestamp": "2025-04-16T19:38:28.420494",
"author": {
"id": 71135175,
"login": "Lela810"
}
}
}

View File

@@ -1,13 +1,7 @@
{
"base": "svg",
"aliases": [
"cloud-paas",
"deployment-service"
],
"categories": [
"Cloud-Computing",
"Developper-Tools"
],
"aliases": [],
"categories": [],
"update": {
"timestamp": "2023-04-13T13:56:18Z",
"author": {

Some files were not shown because too many files have changed in this diff Show More