Refine SEO, uploads, and deploy handling
This commit is contained in:
@@ -60,12 +60,12 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => 'Nova Cards - Skinbase Nova',
|
||||
'description' => 'Browse featured, trending, and latest Nova Cards. Discover beautiful quote cards, mood cards, and visual text art by the Skinbase Nova community.',
|
||||
'title' => 'Cards - Skinbase',
|
||||
'description' => 'Browse featured, trending, and latest Cards. Discover beautiful quote cards, mood cards, and visual text art by the Skinbase community.',
|
||||
'canonical' => route('cards.index'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => 'Nova Cards',
|
||||
'heading' => 'Cards',
|
||||
'subheading' => (string) config('nova_cards.brand.subtitle'),
|
||||
'cards' => $this->presenter->cards($latest->items()),
|
||||
'pagination' => $latest,
|
||||
@@ -90,13 +90,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => $category->name . ' Cards - Skinbase Nova',
|
||||
'description' => $category->description ?: ('Browse ' . strtolower($category->name) . ' Nova Cards on Skinbase Nova.'),
|
||||
'title' => $category->name . ' Cards - Skinbase',
|
||||
'description' => $category->description ?: ('Browse ' . strtolower($category->name) . ' Cards on Skinbase.'),
|
||||
'canonical' => route('cards.category', ['categorySlug' => $category->slug]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => $category->name,
|
||||
'subheading' => $category->description ?: 'Explore this Nova Cards category.',
|
||||
'subheading' => $category->description ?: 'Explore this Cards category.',
|
||||
'cards' => $this->presenter->cards($cards->items()),
|
||||
'pagination' => $cards,
|
||||
'featuredCards' => [],
|
||||
@@ -119,8 +119,8 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => 'Popular Cards - Skinbase Nova',
|
||||
'description' => 'Browse the most liked, saved, and viewed Nova Cards on Skinbase Nova.',
|
||||
'title' => 'Popular Cards - Skinbase',
|
||||
'description' => 'Browse the most liked, saved, and viewed Cards on Skinbase.',
|
||||
'canonical' => route('cards.popular'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
@@ -153,13 +153,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => 'Rising Cards - Skinbase Nova',
|
||||
'description' => 'Discover Nova Cards that are gaining traction right now — fresh creators and fast-rising saves and remixes.',
|
||||
'title' => 'Rising Cards - Skinbase',
|
||||
'description' => 'Discover Cards that are gaining traction right now — fresh creators and fast-rising saves and remixes.',
|
||||
'canonical' => route('cards.rising'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => 'Rising',
|
||||
'subheading' => 'Fresh Nova Cards gaining momentum right now.',
|
||||
'subheading' => 'Fresh Cards gaining momentum right now.',
|
||||
'cards' => $this->presenter->cards($paginated->items(), false, $request->user()),
|
||||
'pagination' => $paginated,
|
||||
'featuredCards' => [],
|
||||
@@ -182,13 +182,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => 'Remixed Cards - Skinbase Nova',
|
||||
'description' => 'Discover Nova Cards remixed from community originals with attribution and lineage.',
|
||||
'title' => 'Remixed Cards - Skinbase',
|
||||
'description' => 'Discover Cards remixed from community originals with attribution and lineage.',
|
||||
'canonical' => route('cards.remixed'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => 'Remixed cards',
|
||||
'subheading' => 'Community reinterpretations linked back to their original Nova Cards.',
|
||||
'subheading' => 'Community reinterpretations linked back to their original Cards.',
|
||||
'cards' => $this->presenter->cards($cards->items(), false, $request->user()),
|
||||
'pagination' => $cards,
|
||||
'featuredCards' => [],
|
||||
@@ -214,8 +214,8 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => 'Best Remixes - Skinbase Nova',
|
||||
'description' => 'Browse standout Nova Card remixes ranked by remix traction, saves, and likes.',
|
||||
'title' => 'Best Remixes - Skinbase',
|
||||
'description' => 'Browse standout Card remixes ranked by remix traction, saves, and likes.',
|
||||
'canonical' => route('cards.remix-highlights'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
@@ -295,13 +295,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => 'Editorial Picks - Nova Cards - Skinbase Nova',
|
||||
'description' => 'Browse editorial Nova Cards picks, featured collections, and highlighted challenges.',
|
||||
'title' => 'Editorial Picks - Cards - Skinbase',
|
||||
'description' => 'Browse editorial Cards picks, featured collections, and highlighted challenges.',
|
||||
'canonical' => route('cards.editorial'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => 'Editorial picks',
|
||||
'subheading' => 'Curated Nova Cards, featured collections, and standout challenge surfaces chosen for quality and cohesion.',
|
||||
'subheading' => 'Curated Cards, featured collections, and standout challenge surfaces chosen for quality and cohesion.',
|
||||
'cards' => $this->presenter->cards($cards->items(), false, $request->user()),
|
||||
'pagination' => $cards,
|
||||
'featuredCards' => [],
|
||||
@@ -329,13 +329,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => 'Seasonal Cards - Nova Cards - Skinbase Nova',
|
||||
'description' => 'Browse seasonal and event-aware Nova Cards grouped by recurring moods, holidays, and time-of-year themes.',
|
||||
'title' => 'Seasonal Cards - Cards - Skinbase',
|
||||
'description' => 'Browse seasonal and event-aware Cards grouped by recurring moods, holidays, and time-of-year themes.',
|
||||
'canonical' => route('cards.seasonal'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => 'Seasonal cards',
|
||||
'subheading' => 'Discover Nova Cards grouped by recurring seasonal and campaign-style themes.',
|
||||
'subheading' => 'Discover Cards grouped by recurring seasonal and campaign-style themes.',
|
||||
'cards' => $this->presenter->cards($cards->items(), false, $request->user()),
|
||||
'pagination' => $cards,
|
||||
'featuredCards' => [],
|
||||
@@ -363,13 +363,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.challenges', [
|
||||
'meta' => [
|
||||
'title' => 'Card Challenges - Skinbase Nova',
|
||||
'description' => 'Browse active and completed Nova Cards challenges, prompts, and winners.',
|
||||
'title' => 'Card Challenges - Skinbase',
|
||||
'description' => 'Browse active and completed Cards challenges, prompts, and winners.',
|
||||
'canonical' => route('cards.challenges'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => 'Card challenges',
|
||||
'subheading' => 'Official prompts and community challenge runs for Nova Cards creators.',
|
||||
'subheading' => 'Official prompts and community challenge runs for Cards creators.',
|
||||
'challenges' => $challenges,
|
||||
]);
|
||||
}
|
||||
@@ -388,8 +388,8 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.challenges', [
|
||||
'meta' => [
|
||||
'title' => $challenge->title . ' - Skinbase Nova',
|
||||
'description' => $challenge->description ?: 'Browse entries for this Nova Cards challenge.',
|
||||
'title' => $challenge->title . ' - Skinbase',
|
||||
'description' => $challenge->description ?: 'Browse entries for this Cards challenge.',
|
||||
'canonical' => route('cards.challenges.show', ['slug' => $challenge->slug]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
@@ -410,8 +410,8 @@ class NovaCardsController extends Controller
|
||||
{
|
||||
return view('cards.resources', [
|
||||
'meta' => [
|
||||
'title' => 'Template Packs - Skinbase Nova',
|
||||
'description' => 'Browse official Nova Cards template packs and starting points.',
|
||||
'title' => 'Template Packs - Skinbase',
|
||||
'description' => 'Browse official Cards template packs and starting points.',
|
||||
'canonical' => route('cards.templates'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
@@ -427,13 +427,13 @@ class NovaCardsController extends Controller
|
||||
{
|
||||
return view('cards.resources', [
|
||||
'meta' => [
|
||||
'title' => 'Asset Packs - Skinbase Nova',
|
||||
'description' => 'Browse official Nova Cards asset packs for decorative and editorial layouts.',
|
||||
'title' => 'Asset Packs - Skinbase',
|
||||
'description' => 'Browse official Cards asset packs for decorative and editorial layouts.',
|
||||
'canonical' => route('cards.assets'),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => 'Asset packs',
|
||||
'subheading' => 'Official decorative and editorial pack sets for the Nova Cards v2 editor.',
|
||||
'subheading' => 'Official decorative and editorial pack sets for the Cards v2 editor.',
|
||||
'packs' => collect($this->presenter->options()['asset_packs'] ?? []),
|
||||
'templates' => collect(),
|
||||
'resourceType' => 'asset',
|
||||
@@ -447,8 +447,8 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => '#' . $tag->name . ' Cards - Skinbase Nova',
|
||||
'description' => 'Browse Nova Cards tagged with #' . $tag->name . ' on Skinbase Nova.',
|
||||
'title' => '#' . $tag->name . ' Cards - Skinbase',
|
||||
'description' => 'Browse Cards tagged with #' . $tag->name . ' on Skinbase.',
|
||||
'canonical' => route('cards.tag', ['tagSlug' => $tag->slug]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
@@ -480,13 +480,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => $mood['label'] . ' Mood Cards - Skinbase Nova',
|
||||
'description' => 'Browse Nova Cards grouped into the ' . strtolower((string) $mood['label']) . ' mood family on Skinbase Nova.',
|
||||
'title' => $mood['label'] . ' Mood Cards - Skinbase',
|
||||
'description' => 'Browse Cards grouped into the ' . strtolower((string) $mood['label']) . ' mood family on Skinbase.',
|
||||
'canonical' => route('cards.mood', ['moodSlug' => $mood['key']]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => $mood['label'],
|
||||
'subheading' => 'Discover Nova Cards grouped by a curated mood family using durable tag mappings.',
|
||||
'subheading' => 'Discover Cards grouped by a curated mood family using durable tag mappings.',
|
||||
'cards' => $this->presenter->cards($cards->items(), false, $request->user()),
|
||||
'pagination' => $cards,
|
||||
'featuredCards' => [],
|
||||
@@ -514,13 +514,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => $style['label'] . ' Style Cards - Skinbase Nova',
|
||||
'description' => 'Browse Nova Cards using the ' . strtolower((string) $style['label']) . ' style family on Skinbase Nova.',
|
||||
'title' => $style['label'] . ' Style Cards - Skinbase',
|
||||
'description' => 'Browse Cards using the ' . strtolower((string) $style['label']) . ' style family on Skinbase.',
|
||||
'canonical' => route('cards.style', ['styleSlug' => $style['key']]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => $style['label'],
|
||||
'subheading' => 'Discover Nova Cards grouped by a shared visual style family.',
|
||||
'subheading' => 'Discover Cards grouped by a shared visual style family.',
|
||||
'cards' => $this->presenter->cards($cards->items(), false, $request->user()),
|
||||
'pagination' => $cards,
|
||||
'featuredCards' => [],
|
||||
@@ -548,13 +548,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', [
|
||||
'meta' => [
|
||||
'title' => $palette['label'] . ' Palette Cards - Skinbase Nova',
|
||||
'description' => 'Browse Nova Cards using the ' . strtolower((string) $palette['label']) . ' palette family on Skinbase Nova.',
|
||||
'title' => $palette['label'] . ' Palette Cards - Skinbase',
|
||||
'description' => 'Browse Cards using the ' . strtolower((string) $palette['label']) . ' palette family on Skinbase.',
|
||||
'canonical' => route('cards.palette', ['paletteSlug' => $palette['key']]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => $palette['label'],
|
||||
'subheading' => 'Discover Nova Cards grouped by shared palette families and color direction.',
|
||||
'subheading' => 'Discover Cards grouped by shared palette families and color direction.',
|
||||
'cards' => $this->presenter->cards($cards->items(), false, $request->user()),
|
||||
'pagination' => $cards,
|
||||
'featuredCards' => [],
|
||||
@@ -580,8 +580,8 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', array_merge($this->creatorPagePayload($request, $user), [
|
||||
'meta' => [
|
||||
'title' => '@' . $user->username . ' Cards - Skinbase Nova',
|
||||
'description' => 'Browse Nova Cards created by @' . $user->username . ' on Skinbase Nova.',
|
||||
'title' => '@' . $user->username . ' Cards - Skinbase',
|
||||
'description' => 'Browse Cards created by @' . $user->username . ' on Skinbase.',
|
||||
'canonical' => route('cards.creator', ['username' => strtolower((string) $user->username)]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
@@ -602,13 +602,13 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.index', array_merge($this->creatorPagePayload($request, $user), [
|
||||
'meta' => [
|
||||
'title' => '@' . $user->username . ' Portfolio - Skinbase Nova',
|
||||
'description' => 'Browse the dedicated Nova Cards portfolio page for @' . $user->username . ' on Skinbase Nova.',
|
||||
'title' => '@' . $user->username . ' Portfolio - Skinbase',
|
||||
'description' => 'Browse the dedicated Cards portfolio page for @' . $user->username . ' on Skinbase.',
|
||||
'canonical' => route('cards.creator.portfolio', ['username' => strtolower((string) $user->username)]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
'heading' => '@' . $user->username . ' Portfolio',
|
||||
'subheading' => 'A dedicated Nova Cards portfolio view for ' . ($user->name ?: '@' . $user->username) . '.',
|
||||
'subheading' => 'A dedicated Cards portfolio view for ' . ($user->name ?: '@' . $user->username) . '.',
|
||||
'context' => 'creator-portfolio',
|
||||
]));
|
||||
}
|
||||
@@ -695,8 +695,8 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.collection', [
|
||||
'meta' => [
|
||||
'title' => $collection->name . ' - Nova Cards Collection - Skinbase Nova',
|
||||
'description' => $collection->description ?: 'Browse this curated Nova Cards collection.',
|
||||
'title' => $collection->name . ' - Cards Collection - Skinbase',
|
||||
'description' => $collection->description ?: 'Browse this curated Cards collection.',
|
||||
'canonical' => route('cards.collections.show', ['slug' => $collection->slug, 'id' => $collection->id]),
|
||||
'robots' => 'index,follow',
|
||||
],
|
||||
@@ -721,7 +721,7 @@ class NovaCardsController extends Controller
|
||||
|
||||
return view('cards.lineage', [
|
||||
'meta' => [
|
||||
'title' => $card->title . ' Lineage - Nova Cards - Skinbase Nova',
|
||||
'title' => $card->title . ' Lineage - Cards - Skinbase',
|
||||
'description' => 'Browse the remix lineage and related variants for this Nova Card.',
|
||||
'canonical' => route('cards.lineage', ['slug' => $card->slug, 'id' => $card->id]),
|
||||
'robots' => 'index,follow',
|
||||
@@ -767,7 +767,7 @@ class NovaCardsController extends Controller
|
||||
return view('cards.show', [
|
||||
'card' => $this->presenter->card($card, true, $request->user()),
|
||||
'meta' => [
|
||||
'title' => $card->title . ' - Nova Cards - Skinbase Nova',
|
||||
'title' => $card->title . ' - Cards - Skinbase',
|
||||
'description' => $card->description ?: $card->quote_text,
|
||||
'canonical' => route('cards.show', ['slug' => $card->slug, 'id' => $card->id]),
|
||||
'robots' => $card->visibility === NovaCard::VISIBILITY_PUBLIC ? 'index,follow' : 'noindex,follow',
|
||||
|
||||
Reference in New Issue
Block a user