Initial commit: Animexe Laravel platform

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 00:01:48 +03:00
co-authored by Claude Opus 4.8
commit a63515cfc6
366 changed files with 74773 additions and 0 deletions
+235
View File
@@ -0,0 +1,235 @@
<?php
namespace App\Services;
class PremiumFeatures
{
// Tüm mevcut premium özellikler — key → metadata
public const ALL = [
// ── İzleme ────────────────────────────────────────────────────────────
'watchlist_export' => [
'name' => 'İzleme Listesi Dışa Aktarımı',
'description' => 'Tüm izleme listeni CSV veya JSON olarak indir',
'category' => 'İzleme',
'icon' => 'bi-download',
],
'anime_notes' => [
'name' => 'Kişisel Anime Notları',
'description' => 'Her bölüm için sadece sana görünen gizli notlar bırak',
'category' => 'İzleme',
'icon' => 'bi-journal-text',
],
'stream_history' => [
'name' => 'Sınırsız İzleme Geçmişi',
'description' => 'Tüm geçmiş saklanır; standart üyede 30 kayıt limiti',
'category' => 'İzleme',
'icon' => 'bi-clock-history',
],
// ── Sosyal / Yorum ────────────────────────────────────────────────────
'comment_bg' => [
'name' => 'Yorum Arkaplanı Efekti',
'description' => 'Yorumlarına özel animasyonlu arkaplan ekle',
'category' => 'Sosyal',
'icon' => 'bi-fire',
],
'extended_comments' => [
'name' => 'Uzun Yorum (1000 karakter)',
'description' => 'Ücretsiz kullanıcıların 2 katı yorum uzunluğu',
'category' => 'Sosyal',
'icon' => 'bi-chat-text-fill',
],
'comment_gif' => [
'name' => 'Yoruma GIF Ekle',
'description' => 'Yorumlarına Tenor/GIPHY GIFleri ekleyebilirsin',
'category' => 'Sosyal',
'icon' => 'bi-filetype-gif',
],
'comment_glow' => [
'name' => 'Yorum Aura / Parıltı',
'description' => 'Yorumlarının çevresinde renkli parlayan enerji halkası',
'category' => 'Sosyal',
'icon' => 'bi-brightness-high-fill',
],
'comment_signature' => [
'name' => 'Yorum İmzası',
'description' => 'Her yorumun altında görünen kişisel imza satırı',
'category' => 'Sosyal',
'icon' => 'bi-pen-fill',
],
// ── Profil / Kozmetik ─────────────────────────────────────────────────
'gif_avatar' => [
'name' => 'GIF Profil Fotoğrafı',
'description' => 'Hareketli GIF\'i profil resmi olarak ayarla',
'category' => 'Profil',
'icon' => 'bi-image-fill',
],
'username_color' => [
'name' => 'Renkli Kullanıcı Adı',
'description' => 'Yorumlarda kullanıcı adın özel renkte görünsün',
'category' => 'Profil',
'icon' => 'bi-palette-fill',
],
'username_effect' => [
'name' => 'Kullanıcı Adı Animasyonu',
'description' => 'Shimmer, dalga, glitch gibi özel animasyon efektleri',
'category' => 'Profil',
'icon' => 'bi-lightning-charge-fill',
],
'profile_frame' => [
'name' => 'Profil Çerçevesi',
'description' => 'Avatarının çevresinde animasyonlu çerçeve',
'category' => 'Profil',
'icon' => 'bi-circle-fill',
],
'profile_badge' => [
'name' => 'Özel Rozet/Unvan',
'description' => 'Kullanıcı adının yanında özel rozet veya unvan',
'category' => 'Profil',
'icon' => 'bi-award-fill',
],
'profile_bg' => [
'name' => 'Animasyonlu Profil Arka Planı',
'description' => 'Profil sayfanda canlı animasyonlu arka plan',
'category' => 'Profil',
'icon' => 'bi-stars',
],
'animated_banner' => [
'name' => 'Animasyonlu Profil Bannerı',
'description' => 'Profil bannerın parçacık ve dalga efektiyle canlanır',
'category' => 'Profil',
'icon' => 'bi-image-alt',
],
'entry_effect' => [
'name' => 'Sayfa Giriş Efekti',
'description' => 'Sayfalara girerken özel giriş animasyonu',
'category' => 'Profil',
'icon' => 'bi-play-circle-fill',
],
'watch_rank' => [
'name' => 'İzleme Rank Rozeti',
'description' => 'İzleme saatine göre Acemi→Efsane arası özel rank',
'category' => 'Profil',
'icon' => 'bi-trophy-fill',
],
// ── Hesap ─────────────────────────────────────────────────────────────
'custom_profile_url' => [
'name' => 'Özel Profil URL\'i',
'description' => 'animexe.com/u/senin-adin gibi kişisel URL',
'category' => 'Hesap',
'icon' => 'bi-link-45deg',
],
'profile_music' => [
'name' => 'Profil Müziği',
'description' => 'Profil sayfanda bir anime OST çal',
'category' => 'Hesap',
'icon' => 'bi-music-note-beamed',
],
];
// Kategori sıralaması
public const CATEGORIES = ['İzleme', 'Sosyal', 'Profil', 'Hesap'];
// Yorum aura/parıltı efektleri
public const COMMENT_GLOWS = [
'cyan' => ['label' => 'Siyan', 'color' => '#00f5ff'],
'pink' => ['label' => 'Pembe', 'color' => '#ff2d7d'],
'gold' => ['label' => 'Altın', 'color' => '#ffd700'],
'green' => ['label' => 'Yeşil', 'color' => '#00f564'],
'purple' => ['label' => 'Mor', 'color' => '#b84dff'],
'fire' => ['label' => 'Alev', 'color' => '#ff6b35'],
];
// Kullanıcı adı animasyon efektleri
public const USERNAME_EFFECTS = [
'shimmer' => ['label' => 'Işıltı'],
'wave' => ['label' => 'Dalga'],
'pulse' => ['label' => 'Nabız'],
'glitch' => ['label' => 'Glitch'],
'bounce' => ['label' => 'Zıplama'],
];
// Sayfa giriş efektleri
public const ENTRY_EFFECTS = [
'fade' => ['label' => 'Solma'],
'slide' => ['label' => 'Kayma'],
'zoom' => ['label' => 'Yakınlaştırma'],
'glitch' => ['label' => 'Glitch'],
'wave' => ['label' => 'Dalga'],
];
// Profil arka plan stilleri
public const PROFILE_BACKGROUNDS = [
'fire' => ['label' => 'Alev', 'preview' => '#ff6b35,#ff2d7d'],
'galaxy' => ['label' => 'Galaksi', 'preview' => '#0d0520,#050510'],
'aurora' => ['label' => 'Aurora', 'preview' => '#040e0e,#071a1a'],
'ice' => ['label' => 'Buz', 'preview' => '#040d11,#071420'],
'sakura' => ['label' => 'Sakura', 'preview' => '#ff9ec4,#ffd6e7'],
'neon' => ['label' => 'Neon', 'preview' => '#00f5ff,#b84dff'],
'stars' => ['label' => 'Yıldızlar', 'preview' => '#0a0a2e,#7c3aed'],
];
// Yorum arkaplan stilleri
public const COMMENT_BACKGROUNDS = [
'fire' => ['label' => 'Alev', 'preview' => '#ff6b35,#ff2d7d'],
'aurora' => ['label' => 'Aurora', 'preview' => '#00f5b4,#00f5ff'],
'stars' => ['label' => 'Yıldızlar', 'preview' => '#0a0a2e,#7c3aed'],
'sakura' => ['label' => 'Sakura', 'preview' => '#ff9ec4,#ffd6e7'],
'neon' => ['label' => 'Neon', 'preview' => '#00f5ff,#b84dff'],
'galaxy' => ['label' => 'Galaksi', 'preview' => '#0d0d2e,#4a1d96'],
'ice' => ['label' => 'Buz', 'preview' => '#a8edff,#e0f7ff'],
];
// Profil çerçeve stilleri
public const PROFILE_FRAMES = [
'neon' => ['label' => 'Neon', 'color' => '#00f5ff'],
'fire' => ['label' => 'Alev', 'color' => '#ff6b35'],
'sakura' => ['label' => 'Sakura', 'color' => '#ff9ec4'],
'galaxy' => ['label' => 'Galaksi', 'color' => '#b84dff'],
'gold' => ['label' => 'Altın', 'color' => '#ffd700'],
'ice' => ['label' => 'Buz', 'color' => '#a8edff'],
'blood' => ['label' => 'Kan', 'color' => '#dc143c'],
'mint' => ['label' => 'Mint', 'color' => '#00ff7f'],
'rainbow' => ['label' => 'Gökkuşağı', 'color' => '#ff0000'],
'ocean' => ['label' => 'Okyanus', 'color' => '#006fbf'],
'poison' => ['label' => 'Zehir', 'color' => '#9400d3'],
];
// Kullanıcı adı renk presetleri
public const USERNAME_COLORS = [
'fire' => ['label' => 'Alev', 'css' => 'linear-gradient(90deg,#ff6b35,#ff2d7d)'],
'aurora' => ['label' => 'Aurora', 'css' => 'linear-gradient(90deg,#00f5b4,#00f5ff)'],
'sakura' => ['label' => 'Sakura', 'css' => 'linear-gradient(90deg,#ff9ec4,#ff2d7d)'],
'neon' => ['label' => 'Neon', 'css' => 'linear-gradient(90deg,#00f5ff,#b84dff)'],
'galaxy' => ['label' => 'Galaksi', 'css' => 'linear-gradient(90deg,#7c3aed,#b84dff)'],
'gold' => ['label' => 'Altın', 'css' => 'linear-gradient(90deg,#ffd700,#ff8c00)'],
'ice' => ['label' => 'Buz', 'css' => 'linear-gradient(90deg,#a8edff,#60cfff)'],
'blood' => ['label' => 'Kan', 'css' => 'linear-gradient(90deg,#8b0000,#dc143c)'],
'sunset' => ['label' => 'Gün Batımı', 'css' => 'linear-gradient(90deg,#ff6b00,#ff0080)'],
'ocean' => ['label' => 'Okyanus', 'css' => 'linear-gradient(90deg,#006fbf,#00d2ff)'],
'poison' => ['label' => 'Zehir', 'css' => 'linear-gradient(90deg,#6b0ac9,#c300ff)'],
'silver' => ['label' => 'Gümüş', 'css' => 'linear-gradient(90deg,#9ca3af,#e5e7eb)'],
'rainbow' => ['label' => 'Gökkuşağı', 'css' => 'linear-gradient(90deg,#ff0000,#ff8c00,#ffd700,#00c800,#0088ff,#8b00ff)'],
];
/** Feature key'e göre metadata döner, yoksa null */
public static function get(string $key): ?array
{
return self::ALL[$key] ?? null;
}
/** Kategoriye göre gruplanmış feature listesi */
public static function grouped(): array
{
$groups = [];
foreach (self::CATEGORIES as $cat) {
$groups[$cat] = [];
}
foreach (self::ALL as $key => $meta) {
$groups[$meta['category']][$key] = $meta;
}
return array_filter($groups);
}
}