diff --git a/app/Helpers/FirstParty/AI/OpenAI.php b/app/Helpers/FirstParty/AI/OpenAI.php new file mode 100644 index 0000000..5791ff8 --- /dev/null +++ b/app/Helpers/FirstParty/AI/OpenAI.php @@ -0,0 +1,111 @@ + 'application/json', + 'Authorization' => 'Bearer ' . env('OPENAI_API_KEY'), + ]) + ->post('https://api.openai.com/v1/responses', [ + 'model' => 'gpt-4.1-nano', + 'input' => [ + [ + 'role' => 'system', + 'content' => [ + [ + 'type' => 'input_text', + 'text' => '"You are an AI meme writer for a video meme generator.\n\nYour task is to generate a JSON array containing a unique, short-form workplace-related video meme ideas.\n\nEach meme object must include the following fields, with the format shown below. Each field contains an inline description of the type of content it must generate.\n\nReturn **only** a Markdown code block containing valid JSON with inline content guidance (as strings). Do not add any commentary or explanation outside the code block.\n\n- All memes must be funny, relatable, and clearly connected to the provided topic.\n- Use realistic but exaggerated expressions and settings to match meme-style content.\n- Style should suit video formats like TikTok, Instagram Reels, or YouTube Shorts."', + ] + ] + ], + [ + 'role' => 'user', + 'content' => [ + [ + 'type' => 'input_text', + 'text' => $user_prompt + ] + ] + ] + ], + 'text' => [ + 'format' => [ + 'type' => 'json_schema', + 'name' => 'meme_generator_single_1', + 'strict' => true, + 'schema' => [ + 'type' => 'object', + 'properties' => [ + 'caption' => [ + 'type' => 'string', + 'description' => 'A humorous, one-liner or POV meme (under 15 words, no punctuation)' + ], + 'meme_overlay' => [ + 'type' => 'string', + 'description' => 'A short visual reaction that pairs with the caption (e.g., "guy blinking in disbelief")' + ], + 'background' => [ + 'type' => 'string', + 'description' => 'The setting or location of the meme (e.g., "Zoom call grid", "office cubicle")' + ], + 'keywords' => [ + 'type' => 'array', + 'description' => 'Relevant lowercase tags for the meme (e.g., "burnout", "email fail", "meetings")', + 'items' => [ + 'type' => 'string' + ] + ] + ], + 'required' => [ + 'caption', + 'meme_overlay', + 'background', + 'keywords' + ], + 'additionalProperties' => false + ] + ] + ], + 'reasoning' => (object)[], + 'tools' => [], + 'temperature' => 1, + 'max_output_tokens' => 2048, + 'top_p' => 1, + 'store' => true + ]); + + // Get the response data + $data = $response->json(); + + // Check if the request was successful + if ($response->successful()) { + // Handle successful response + return $data; + } else { + // Handle error + throw new \Exception('API request failed: ' . $response->body()); + } + } + + public static function getOpenAIOutput($data) + { + if (isset($data['output'])) { + if (count($data['output']) > 0) { + + if (isset($data['output'][0]['content'])) { + if (isset($data['output'][0]['content'][0]['text'])) { + return $data['output'][0]['content'][0]['text']; + } + } + } + } + } +} diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php index 2e0d19e..66f8bcf 100644 --- a/app/Http/Controllers/TestController.php +++ b/app/Http/Controllers/TestController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Helpers\FirstParty\AI\OpenAI; + class TestController extends Controller { public function index() @@ -13,4 +15,13 @@ public function populateDuration() { \App\Helpers\FirstParty\Maintenance\MemeMediaMaintenance::populateDurations(); } + + public function writeMeme() + { + $meme_response = OpenAI::getSingleMemeGenerator('Write me 1 meme about workplace stress'); + + $meme_output = json_decode(OpenAI::getOpenAIOutput($meme_response)); + + dd($meme_output); + } } diff --git a/database/seeders/data/json/.DS_Store b/database/seeders/data/json/.DS_Store new file mode 100644 index 0000000..70f36e5 Binary files /dev/null and b/database/seeders/data/json/.DS_Store differ diff --git a/database/seeders/data/json/category/.DS_Store b/database/seeders/data/json/category/.DS_Store new file mode 100644 index 0000000..0ba3590 Binary files /dev/null and b/database/seeders/data/json/category/.DS_Store differ diff --git a/database/seeders/data/json/category/10_social_media.json b/database/seeders/data/json/category/10_social_media.json new file mode 100644 index 0000000..2bbe58c --- /dev/null +++ b/database/seeders/data/json/category/10_social_media.json @@ -0,0 +1,77 @@ +{ + "category": { + "name": "Social Media", + "description": "A world of curated chaos where likes define self-worth, filters distort reality, and everyone's chasing clout in their own highlight reel.", + "keywords": ["social media", "influencers", "followers", "filters", "viral", "TikTok", "Instagram", "algorithms", "clout", "likes"], + "subcategories": [ + { + "name": "Filters & Fakery", + "description": "Where no one looks like their profile pic — including you.", + "meme_angles": [ + "Extreme use of face filters", + "Before vs After editing", + "Feeling ugly without filters", + "Catfishing yourself", + "Trying to look natural — after 12 edits" + ], + "keywords": ["filters", "FaceTune", "editing", "beauty standards", "selfie anxiety"], + "sample_captions": [ + "POV: I don't recognize myself without the Paris filter.", + "Reality: 4/10. Filtered: 11/10.", + "When the filter falls off mid-video and your identity goes with it." + ] + }, + { + "name": "Influencer Life", + "description": "Where holding a smoothie and saying 'rise and grind' counts as a career move.", + "meme_angles": [ + "Influencers pretending to be relatable", + "Selling products they’ve never used", + "Fake morning routines", + "Vlogging boring days", + "Getting sponsored to breathe" + ], + "keywords": ["influencer", "brand deal", "content creator", "vlog life", "promo code"], + "sample_captions": [ + "POV: You just got paid to say 'I love this shampoo' once.", + "Influencer starter pack: ring light, fake laugh, product code.", + "My toxic trait: Thinking I can become an influencer with zero content." + ] + }, + { + "name": "Algorithms & Engagement", + "description": "Shouting into the void hoping the algorithm loves you back.", + "meme_angles": [ + "One viral post = main character syndrome", + "Getting no likes and blaming the algorithm", + "Posting at ‘optimal’ times", + "Chasing trends you don’t understand", + "Checking insights like a stock trader" + ], + "keywords": ["algorithm", "engagement", "reach", "analytics", "posting schedule"], + "sample_captions": [ + "Me: Posts fire content. Instagram: 3 likes and a prayer.", + "POV: You post at 7:01PM instead of 7:00 and now your dreams are dead.", + "If the algorithm doesn’t love me back, I’ll simply perish." + ] + }, + { + "name": "Clout Chasing", + "description": "Doing the absolute most for likes, followers, and temporary validation.", + "meme_angles": [ + "Faking pranks", + "Jumping on every trend", + "Flexing borrowed stuff", + "Desperate thirst traps", + "Pretending to go viral" + ], + "keywords": ["clout", "trend hopping", "fake it", "attention", "viral fail"], + "sample_captions": [ + "POV: You said ‘Do it for the gram’ and now you’re banned.", + "Me: I’m not a clout chaser. Also me: *posts daily thirst traps*", + "The hustle? Real. The dignity? Gone." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/11_fitness_life.json b/database/seeders/data/json/category/11_fitness_life.json new file mode 100644 index 0000000..4598da7 --- /dev/null +++ b/database/seeders/data/json/category/11_fitness_life.json @@ -0,0 +1,77 @@ +{ + "category": { + "name": "Fitness Life", + "description": "That chaotic space between motivation, muscle failure, protein shakes, skipped leg days, and gym selfies no one asked for.", + "keywords": ["fitness", "gym", "workout", "leg day", "cardio", "gains", "cheat meal", "protein", "lifting", "gym fail"], + "subcategories": [ + { + "name": "Gym Bros & Gym Culture", + "description": "Grunting, flexing, oversized tanks, and asking if you lift, bro.", + "meme_angles": [ + "Alpha energy in Planet Fitness", + "Overhyping pre-workout", + "Talking louder than lifting", + "Mirror selfies between sets", + "Hoarding dumbbells like treasure" + ], + "keywords": ["gym bros", "lifting", "protein", "alpha", "pre-workout"], + "sample_captions": [ + "POV: You bench once and now you're giving advice to strangers.", + "Me: Spends 30 minutes talking, 10 minutes lifting, 1 hour flexing.", + "If he says 'No days off' — run." + ] + }, + { + "name": "Cheat Days & Food Guilt", + "description": "Because you crushed one workout and now deserve 4 pizzas.", + "meme_angles": [ + "Over-rewarding after a light workout", + "One salad = 3 desserts", + "Cheat day turning into cheat week", + "Justifying every craving", + "Tracking macros while inhaling fries" + ], + "keywords": ["cheat day", "diet fail", "junk food", "calorie bomb", "food guilt"], + "sample_captions": [ + "POV: One push-up and I’ve earned cake, right?", + "I burned 200 calories — time to consume 2,000 in celebration.", + "Macros? I only count cravings." + ] + }, + { + "name": "Leg Day & Suffering", + "description": "It’s not a workout until you can't walk for 3 days.", + "meme_angles": [ + "Skipping leg day tradition", + "Dying halfway through squats", + "Sitting down like a grandma after", + "Elevator envy post-leg day", + "Trying to act normal while in pain" + ], + "keywords": ["leg day", "sore legs", "skipped leg day", "quad pain", "stairs pain"], + "sample_captions": [ + "POV: You sneeze and your legs collapse.", + "Leg day: The only time you pray for escalators.", + "Skipped leg day once, and now jeans fit weird forever." + ] + }, + { + "name": "Fitness Fails & Injuries", + "description": "Trying to be a beast but pulled something doing warmups.", + "meme_angles": [ + "Slipping mid rep", + "YouTube workouts gone wrong", + "Bad form equals back pain", + "Trying advanced moves with beginner stamina", + "Pretending the pain is part of the plan" + ], + "keywords": ["gym fail", "fitness injury", "bad form", "pulled muscle", "fail workout"], + "sample_captions": [ + "Me: *Lifts with bad form* Also me: 'Why does my spine hurt?'", + "POV: You tried a handstand for content and now need surgery.", + "Fitness level: Injured while stretching." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/12_mental_health.json b/database/seeders/data/json/category/12_mental_health.json new file mode 100644 index 0000000..a7440ee --- /dev/null +++ b/database/seeders/data/json/category/12_mental_health.json @@ -0,0 +1,77 @@ +{ + "category": { + "name": "Mental Health", + "description": "Exploring the chaotic but deeply relatable experience of trying to stay sane, heal, grow, and maybe cry a little in peace.", + "keywords": ["mental health", "anxiety", "depression", "burnout", "therapy", "overthinking", "self-help", "self-care", "panic", "healing"], + "subcategories": [ + { + "name": "Anxiety & Overthinking", + "description": "When your brain turns a simple ‘k’ into a full-blown existential crisis.", + "meme_angles": [ + "Spiraling over small things", + "Overanalyzing texts", + "Social anxiety at max", + "Assuming the worst instantly", + "Trying to act chill while panicking" + ], + "keywords": ["anxious", "overthinker", "social panic", "brain spiral", "worry loop"], + "sample_captions": [ + "POV: You said 'no worries' but now you're full of worry.", + "Me: ‘It’s fine.’ Also me: *overthinks for 6 hours straight*", + "Brain: Remember that awkward thing you did in 2014? Let’s replay it now." + ] + }, + { + "name": "Burnout & Breakdown", + "description": "Running on caffeine, deadlines, and existential dread — and crashing mid-task.", + "meme_angles": [ + "Being productive for 5 minutes then crashing", + "Faking energy at work", + "Crying in between Zoom calls", + "Breakdown in the most inconvenient places", + "Acting fine while emotionally melting" + ], + "keywords": ["burnout", "emotional exhaustion", "shutdown", "overworked", "collapse"], + "sample_captions": [ + "POV: You powered through the day but now you’re crying in the car.", + "Me after replying to one email: Time for a 6-hour nap.", + "Burnout level: Got emotional over a spilled coffee." + ] + }, + { + "name": "Therapy & Coping", + "description": "Healing, growing, and coping — one sarcastic breakdown at a time.", + "meme_angles": [ + "Oversharing in therapy", + "Practicing responses for tough conversations", + "Making progress but still dramatic", + "Googling symptoms instead of talking", + "Acting healed but triggered by small talk" + ], + "keywords": ["therapy", "coping", "healing", "emotional growth", "mental clarity"], + "sample_captions": [ + "POV: Your therapist said something too real and now you're spiraling.", + "Me: *learns one coping skill* Also me: I am healed now.", + "Therapy is just me paying someone to watch me cry with metaphors." + ] + }, + { + "name": "Self-Help & Self-Care", + "description": "Reading all the books, lighting all the candles — and still forgetting to drink water.", + "meme_angles": [ + "Fake-deep Instagram quotes", + "Trying every morning routine", + "Spending more on journals than groceries", + "Romanticizing productivity", + "Self-care that’s just online shopping" + ], + "keywords": ["self-help", "self-care", "journaling", "routine", "growth journey"], + "sample_captions": [ + "POV: You journaled one time and now think you’re spiritually evolved.", + "Me doing ‘self-care’: ignoring my problems in a bubble bath.", + "Self-help or just me buying another planner I won’t use?" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/13_weekend_life.json b/database/seeders/data/json/category/13_weekend_life.json new file mode 100644 index 0000000..3e91b29 --- /dev/null +++ b/database/seeders/data/json/category/13_weekend_life.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Weekend Life", + "description": "The sacred 48 hours where time bends — Friday feels like freedom, Saturday is chaos, and Sunday is existential dread in pajamas.", + "keywords": [ + "weekend", + "sunday scaries", + "friday night", + "saturday plans", + "hangover", + "partying", + "sleeping in", + "brunch", + "weekend vibes", + "burnout recovery" + ], + "subcategories": [ + { + "name": "Friday Freedom", + "description": "Clock hits 5PM and suddenly you’re Beyoncé.", + "meme_angles": [ + "The joy of logging off work", + "Friday night outfit vs plans", + "False hope for productivity", + "Overbooking the weekend", + "Dancing in your kitchen alone" + ], + "keywords": ["friday", "end of week", "plans", "happy hour", "friday mood"], + "sample_captions": [ + "POV: You haven’t done laundry in 2 weeks but it’s Friday so it’s fine.", + "Me at 4:59PM: Depressed. Me at 5:00PM: Unstoppable.", + "If Friday had a scent, it would be freedom and takeout." + ] + }, + { + "name": "Saturday Shenanigans", + "description": "Peak chaos energy, where brunch turns into regret real quick.", + "meme_angles": [ + "Overdressing for basic errands", + "Day drinking disasters", + "Spontaneous plans that spiral", + "Friends who ghost last-minute", + "Feeling broke but spending like royalty" + ], + "keywords": ["saturday", "weekend fun", "partying", "brunch", "last-minute plans"], + "sample_captions": [ + "Me: I’ll stay in and save money. Also me: *Buys 3 rounds at brunch*", + "POV: You left for one mimosa and returned at 2AM with no wallet.", + "Saturday plans: Chill. Reality: Chaos in heels." + ] + }, + { + "name": "Sunday Scaries & Recovery", + "description": "Waking up with regrets, anxiety, and a questionable text from last night.", + "meme_angles": [ + "Hungover introspection", + "Ignoring Monday’s to-do list", + "Fake productivity attempts", + "Existential couch spirals", + "Trying to ‘reset’ with no energy" + ], + "keywords": ["sunday scaries", "hangover", "reset", "recovery mode", "mental prep"], + "sample_captions": [ + "POV: You’re doing your skincare routine to distract from your life falling apart.", + "Sunday mood: One blanket away from emotional collapse.", + "Me: Gonna be so productive Sunday. Also me: Didn’t even shower." + ] + }, + { + "name": "Weekend Sleep Habits", + "description": "Sleeping like royalty — until 2PM or until the group chat wakes you.", + "meme_angles": [ + "Waking up at noon like it’s a personality", + "Sleeping through plans", + "Overcompensating for weekday sleep loss", + "Forgetting what day it is", + "That one nap that ruins everything" + ], + "keywords": ["sleep in", "weekend nap", "oversleep", "snooze button", "no alarm"], + "sample_captions": [ + "Me: I’ll sleep in. My body: Wakes up at 7AM out of spite.", + "POV: You napped so hard you forgot who you are.", + "Sleep schedule: Chaos. Weekend status: Nap king." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/14_travel_life.json b/database/seeders/data/json/category/14_travel_life.json new file mode 100644 index 0000000..3f553b5 --- /dev/null +++ b/database/seeders/data/json/category/14_travel_life.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Travel Life", + "description": "The glamorous illusion of wanderlust — until your suitcase breaks, your flight's delayed, and your Airbnb has no doors.", + "keywords": [ + "travel", + "airport", + "flight delay", + "packing", + "Airbnb fail", + "jet lag", + "lost luggage", + "vacation", + "budget travel", + "passport panic" + ], + "subcategories": [ + { + "name": "Airports & Flights", + "description": "A place where time stops, food costs $17, and boarding group envy is real.", + "meme_angles": [ + "Racing to the gate despite being 2 hours early", + "Security panic over water bottles", + "Trying to sleep upright", + "Boarding zone rage", + "Flight delays becoming personality traits" + ], + "keywords": ["airport chaos", "flight delay", "TSA stress", "boarding drama", "economy class pain"], + "sample_captions": [ + "POV: You ran to the gate just to wait another hour.", + "Airports: Where $9 water feels like a steal.", + "Me on a 6-hour flight: Sleeps 7 minutes, neck permanently ruined." + ] + }, + { + "name": "Packing & Baggage", + "description": "Fitting your entire life into a carry-on — and still forgetting underwear.", + "meme_angles": [ + "Packing for 3 days like it’s 3 months", + "Forgetting essentials but bringing 8 outfits", + "Lost luggage rage", + "Overweight baggage drama", + "Toiletry explosions mid-flight" + ], + "keywords": ["packing fail", "carry-on chaos", "overpacking", "lost bag", "travel checklist"], + "sample_captions": [ + "POV: You packed 12 outfits but wore the same hoodie every day.", + "Packing anxiety: 80% ‘what if’ outfits, 20% essentials.", + "Me: Packs light. Also me: Brings 4 pairs of shoes for a weekend." + ] + }, + { + "name": "Lodging & Airbnb Nightmares", + "description": "What looked like luxury online turns into 'shared bathroom with 7 cats'.", + "meme_angles": [ + "Photos vs reality", + "Hidden fees galore", + "Hosts with wild rules", + "Weird smells and sounds", + "Booking regret at 2AM" + ], + "keywords": ["Airbnb fail", "hotel horror", "booking regret", "false advertising", "vacation rental drama"], + "sample_captions": [ + "POV: The Airbnb said 'cozy' — it meant no windows.", + "Me: ‘Private room.’ Reality: You’re sharing it with a parrot named Kevin.", + "This host really said 'No noise, no guests, no fun.'" + ] + }, + { + "name": "Wanderlust & Expectations", + "description": "Dreaming of adventure, getting sunburned and scammed instead.", + "meme_angles": [ + "Instagram vs. sweaty reality", + "Tourist traps that trap your soul", + "Romanticizing travel but hating crowds", + "Trying to 'live like a local' and failing", + "Getting lost immediately" + ], + "keywords": ["wanderlust fail", "tourist traps", "vacation vs reality", "lost tourist", "instagram travel"], + "sample_captions": [ + "POV: You imagined an Amalfi sunset but got sunstroke and loud kids.", + "Travel tip: Lower your expectations and pack snacks.", + "Living like a local = asking 4 strangers how to use the subway." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/15_retail_jobs.json b/database/seeders/data/json/category/15_retail_jobs.json new file mode 100644 index 0000000..7e09b32 --- /dev/null +++ b/database/seeders/data/json/category/15_retail_jobs.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Retail Jobs", + "description": "Where customer service smiles hide existential dread, ‘Karen’ is a daily boss fight, and your sanity is on clearance.", + "keywords": [ + "retail", + "customer service", + "closing shift", + "POS drama", + "Karen", + "coworkers", + "store opening", + "minimum wage", + "holiday shift", + "receipt panic" + ], + "subcategories": [ + { + "name": "Karen Customers", + "description": "The ‘Can I speak to your manager?’ energy that fuels your nightmares.", + "meme_angles": [ + "Unreasonable demands", + "Coupon expired in 2014", + "Yelling for no reason", + "Personal insults over policies", + "Fake return stories" + ], + "keywords": ["Karen", "entitled customer", "return drama", "manager request", "complaint"], + "sample_captions": [ + "POV: You explained the policy 3 times and now Karen wants NASA involved.", + "Karen: ‘I shop here all the time.’ Also Karen: Tries to return socks from Walmart.", + "Me pretending not to hear ‘Can I speak to your manager?’ while sweeping." + ] + }, + { + "name": "Register & Checkout Drama", + "description": "The register freezes, the line grows, and someone is paying in coins.", + "meme_angles": [ + "Card declines awkwardly", + "Price check panic", + "POS system crashes", + "Coupon scanning fails", + "Customer counts change for 7 minutes" + ], + "keywords": ["register fail", "checkout panic", "cashier life", "price check", "coupon chaos"], + "sample_captions": [ + "POV: You hit total and the register says ‘Error 404: Hope not found.’", + "‘It said $4 online’ — ma’am, this is a meatball sub.", + "Checkout math: Customer hands $100 for $9.98 and wants $17.42 back." + ] + }, + { + "name": "Closing Shift Nightmares", + "description": "The doors are locked but someone’s still knocking, asking if you're open.", + "meme_angles": [ + "Cleaning aisle, customer walks in", + "Clock says 9:59 PM, they walk in with a cart", + "Manager vanishes during chaos", + "End-of-day register count panic", + "Doing 3 people's work after close" + ], + "keywords": ["closing shift", "last minute shopper", "after hours", "retail exhaustion", "store cleanup"], + "sample_captions": [ + "POV: You mopped the floor and Karen moonwalked across it.", + "If you come in 1 minute before close, I legally can’t see you.", + "Me: Clocked out. Manager: ‘Quick favor?’" + ] + }, + { + "name": "Coworker & Staff Chaos", + "description": "Teamwork makes the dream work… unless you're scheduled with Chad again.", + "meme_angles": [ + "No-shows and late coworkers", + "Over-sharing in the break room", + "Retail cliques and drama", + "Coworker disappears mid-shift", + "Crushing on someone from produce" + ], + "keywords": ["coworker drama", "shift problems", "team issues", "break room gossip", "staff chaos"], + "sample_captions": [ + "POV: You're covering 2 registers because your coworker ‘went to the back’ 30 minutes ago.", + "Me: Working hard. Chad: Talking about crypto in the break room again.", + "Retail bonding = trauma-sharing over half-price muffins at 11PM." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/16_tech_life.json b/database/seeders/data/json/category/16_tech_life.json new file mode 100644 index 0000000..4a27256 --- /dev/null +++ b/database/seeders/data/json/category/16_tech_life.json @@ -0,0 +1,82 @@ +{ + "category": { + "name": "Tech Life", + "description": "The digital jungle of endless pings, infinite tabs, broken builds, and meetings that haunt your calendar — all while pretending to ‘circle back’.", + "keywords": [ + "tech life", + "developer memes", + "zoom fatigue", + "slack overload", + "debugging", + "deploy", + "standup meetings", + "agile chaos", + "tech startup", + "jira hell" + ], + "subcategories": [ + { + "name": "Zoom Calls & Virtual Meetings", + "description": "When you’re 90% muted, 10% pretending your camera is ‘broken’.", + "meme_angles": ["Talking on mute", "Camera off life", "Forgetting to leave the call", "Awkward silences", "Over-talking each other"], + "keywords": ["zoom fatigue", "video call chaos", "mute button fail", "virtual meeting", "calendar bloat"], + "sample_captions": [ + "POV: You just said ‘Sorry, you go ahead’ 4 times in one sentence.", + "Me: Turns camera on. Immediately regrets it.", + "Zoom ended and I stared into the void for 7 minutes straight." + ] + }, + { + "name": "Slack Overload & Messaging Hell", + "description": "Unread threads, @here abuse, and DMs that feel like quests.", + "meme_angles": [ + "Ping anxiety", + "Unread messages stack", + "Slackbot being passive-aggressive", + "Too many channels", + "Notifications mid-focus" + ], + "keywords": ["slack overload", "chat chaos", "ping stress", "notification storm", "DM confusion"], + "sample_captions": [ + "Slack: 87 unread messages. Brain: No.", + "POV: You missed a thread and now a feature exists you’ve never heard of.", + "When Slackbot reminds you to be productive but you’re spiritually offline." + ] + }, + { + "name": "Deploy Night & Debug Hell", + "description": "It worked in dev… and now the prod server is screaming.", + "meme_angles": [ + "Late night hotfix", + "Deploying on Friday (aka sin)", + "Blaming the merge", + "Rubber duck debugging", + "Logs that reveal nothing" + ], + "keywords": ["deploy night", "hotfix panic", "prod crash", "debug mode", "rollback drama"], + "sample_captions": [ + "POV: You deployed one line and the internet broke.", + "Deploying on Friday is brave. And also a mistake.", + "Debugging is just arguing with your own code in public." + ] + }, + { + "name": "Meetings That Could Be Emails", + "description": "30 minutes of ‘synergy’ just to say what could’ve been typed in 2 lines.", + "meme_angles": [ + "Calendar filled with nonsense", + "Meeting about a meeting", + "Nothing decided, again", + "Forced icebreakers", + "Overusing buzzwords" + ], + "keywords": ["useless meetings", "calendar spam", "email-worthy", "sync fatigue", "corporate buzzwords"], + "sample_captions": [ + "This meeting could’ve been a Slack emoji.", + "POV: You sat through 40 minutes to hear ‘let’s circle back.’", + "When they say ‘quick sync’ but it’s your whole afternoon." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/17_freelance_creative.json b/database/seeders/data/json/category/17_freelance_creative.json new file mode 100644 index 0000000..8da06e7 --- /dev/null +++ b/database/seeders/data/json/category/17_freelance_creative.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Freelance & Creative", + "description": "The chaotic freedom of being your own boss — until the client ghosts, scope explodes, and you’re revising version 17.3 at 3AM.", + "keywords": [ + "freelance", + "client drama", + "scope creep", + "unpaid invoices", + "creative block", + "endless revisions", + "exposure gigs", + "project deadline", + "last-minute requests", + "creative burnout" + ], + "subcategories": [ + { + "name": "Client Feedback Chaos", + "description": "When ‘minor tweaks’ actually mean redoing the whole thing.", + "meme_angles": [ + "Confusing revision notes", + "Clients contradicting themselves", + "Changing the brief mid-project", + "‘Can we try something completely different?’", + "Vague feedback like ‘make it pop’" + ], + "keywords": ["client feedback", "vague notes", "revision hell", "miscommunication", "creative frustration"], + "sample_captions": [ + "Client: ‘It just needs more... energy.’ Me: What kind of energy?!", + "POV: You delivered exactly what they asked for and now they hate it.", + "‘Make it pop’ is not a design direction, Karen." + ] + }, + { + "name": "Scope Creep Survival", + "description": "When a ‘quick logo’ turns into a full branding kit + website + your soul.", + "meme_angles": [ + "Adding tasks with no pay", + "Assuming unlimited edits", + "Last-minute requests", + "‘Can you just...’ syndrome", + "The line between helpful and exploited" + ], + "keywords": ["scope creep", "project boundaries", "extra work", "unpaid time", "freelance limits"], + "sample_captions": [ + "POV: You agreed to a flyer and now you're designing their wedding invitations.", + "‘Can you just…’ is how all freelancing nightmares begin.", + "Client: ‘Quick revision.’ Also client: Sends 12 paragraphs and a mood board." + ] + }, + { + "name": "Unpaid & Ghosted Clients", + "description": "They vanished like a magician — but with your invoice.", + "meme_angles": [ + "Clients disappearing post-delivery", + "Excuses to delay payment", + "‘Exposure’ as currency", + "Chasing invoices like a hobby", + "Friendly at first, ghost later" + ], + "keywords": ["unpaid invoice", "client ghosted", "no pay", "freelance scam", "exposure culture"], + "sample_captions": [ + "Me: Sends final draft. Client: *Leaves the galaxy*", + "POV: You just worked 30 hours for an Instagram tag.", + "If ‘payment pending’ was a love language, freelancers would feel adored." + ] + }, + { + "name": "Creative Burnout & Hustle", + "description": "That moment when your passion feels like punishment.", + "meme_angles": [ + "Too many side projects", + "Saying yes to everything", + "Imposter syndrome creeping in", + "Creative block at the worst time", + "Juggling 3 deadlines and a mental breakdown" + ], + "keywords": ["creative burnout", "no boundaries", "hustle fatigue", "artist block", "deadline stress"], + "sample_captions": [ + "POV: You turned your passion into work and now everything is stressful.", + "Creative block hits hardest when the invoice is due.", + "Freelancer starter pack: Coffee, anxiety, and 4 open tabs of regret." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/18_housing_life.json b/database/seeders/data/json/category/18_housing_life.json new file mode 100644 index 0000000..db8a519 --- /dev/null +++ b/database/seeders/data/json/category/18_housing_life.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Housing Life", + "description": "Whether it’s a passive-aggressive roommate, a ghost landlord, or a dishwasher that just gave up — home is where the memes are.", + "keywords": [ + "renting", + "landlord problems", + "roommate drama", + "noisy neighbors", + "appliance breakdown", + "housing struggle", + "maintenance issues", + "tenant life", + "shared living", + "security deposit" + ], + "subcategories": [ + { + "name": "Landlord Drama", + "description": "They want rent on time, but fixing the heat takes six reminders and a prayer.", + "meme_angles": [ + "Unreachable landlords", + "Refusing to fix things", + "Blaming the tenant for everything", + "Random rent increases", + "Security deposit vanishing acts" + ], + "keywords": ["bad landlord", "rent drama", "maintenance delay", "ignored repair request", "deposit withheld"], + "sample_captions": [ + "POV: You texted your landlord 4 times and still shower with cold water.", + "Landlord: ‘Normal wear and tear’ = You breathing too hard.", + "They reply instantly when rent’s late — but disappear when the ceiling leaks." + ] + }, + { + "name": "Roommate Chaos", + "description": "Living with strangers who become family… or your final boss.", + "meme_angles": [ + "Stealing food", + "Never washing dishes", + "Parties on weeknights", + "Mismatched sleep schedules", + "Passive-aggressive notes" + ], + "keywords": ["roommate drama", "shared kitchen", "living with strangers", "cleaning fights", "apartment tension"], + "sample_captions": [ + "POV: Your roommate ‘forgot’ to take the trash out for the 8th time.", + "Living with roommates: It’s fun until someone eats your leftovers.", + "Me: Hears door creak at 2AM. Also me: Not my business." + ] + }, + { + "name": "Neighbor Nightmares", + "description": "You live next to a drummer, a yeller, or someone who vacuums at midnight.", + "meme_angles": [ + "Thin walls reveal everything", + "Noise complaints from both sides", + "Awkward elevator encounters", + "Weird smells from next door", + "Pet drama between neighbors" + ], + "keywords": ["noisy neighbor", "apartment life", "awkward encounters", "bad smells", "neighbor feud"], + "sample_captions": [ + "POV: Your neighbor plays bass like rent depends on it — oh wait.", + "Thin walls got me unintentionally learning their breakup script.", + "That awkward nod in the hallway after filing a noise complaint." + ] + }, + { + "name": "Broken Things & DIY Panic", + "description": "Your apartment is falling apart and you’ve become a YouTube-certified handyman.", + "meme_angles": [ + "Leaky faucet symphonies", + "Appliances dying mysteriously", + "Trying to fix things without tools", + "No hot water at 7AM", + "Waiting weeks for maintenance" + ], + "keywords": ["broken appliance", "DIY repair", "home maintenance", "apartment issues", "no heat"], + "sample_captions": [ + "POV: You Googled how to fix a dryer and now it’s somehow louder.", + "My shower: Cold. My soul: Colder.", + "Living in an apartment means knowing which lights *not* to touch." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/19_holidays_seasons.json b/database/seeders/data/json/category/19_holidays_seasons.json new file mode 100644 index 0000000..cda7280 --- /dev/null +++ b/database/seeders/data/json/category/19_holidays_seasons.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Holidays & Seasons", + "description": "The rollercoaster of seasonal chaos — from forced family dinners to ghosting on Halloween and pretending summer break means rest.", + "keywords": [ + "holiday stress", + "seasonal memes", + "christmas chaos", + "summer break", + "valentine’s day pressure", + "halloween costumes", + "family gatherings", + "gift anxiety", + "seasonal depression", + "holiday parties" + ], + "subcategories": [ + { + "name": "Christmas Chaos", + "description": "The season of joy… and passive-aggressive family fights, overspending, and fake gratitude.", + "meme_angles": [ + "Last-minute shopping panic", + "Awkward family gatherings", + "Gift-giving guilt", + "Decor wars in the neighborhood", + "Trying to act grateful for socks" + ], + "keywords": ["christmas stress", "family tension", "bad gifts", "holiday prep", "santa panic"], + "sample_captions": [ + "POV: You’re wrapping gifts at 2AM with one hand and losing will to live with the other.", + "Me: Gets gifted another mug. Also me: Smiles like it’s gold.", + "Nothing says ‘Christmas’ like explaining to grandma why you’re still single." + ] + }, + { + "name": "Summer Break Struggles", + "description": "The sun’s out, the pressure’s on, and your AC just gave up.", + "meme_angles": [ + "Pretending to relax while working", + "Overpriced vacations", + "FOMO from Instagram", + "Unbearable heatwaves", + "Plans that never actually happen" + ], + "keywords": ["summer stress", "vacation planning", "ac problems", "heat memes", "staycation regret"], + "sample_captions": [ + "POV: It’s 38°C and your AC is blowing slightly warm prayers.", + "Summer break as a kid: paradise. Summer break now: catching up on emails with sweat.", + "Instagram: beach pics. Reality: lying in front of the fan eating ice cubes." + ] + }, + { + "name": "Valentine’s Day Vibes", + "description": "Whether you’re taken, talking, or totally over it — the pressure is everywhere.", + "meme_angles": [ + "Singles avoiding IG stories", + "Forced romance dates", + "Gift comparison wars", + "Last-minute bouquet scramble", + "Ghosting right before the 14th" + ], + "keywords": ["valentine’s pressure", "single life", "love memes", "bad date stories", "relationship expectations"], + "sample_captions": [ + "Valentine’s Day tip: Get chocolate on the 15th — it’s cheaper and commitment-free.", + "POV: You’re 3 months into talking and they disappear on Feb 13th.", + "Roses are red, violets are blue, this holiday is fake, and dating apps too." + ] + }, + { + "name": "Halloween Antics", + "description": "The one day we wear costumes — and hide all responsibilities.", + "meme_angles": [ + "Costume regret", + "Forgetting Halloween at work", + "Too much candy vs no candy", + "Adult parties vs kid expectations", + "Themed office embarrassment" + ], + "keywords": ["halloween chaos", "costume fail", "candy overload", "party pressure", "holiday cringe"], + "sample_captions": [ + "POV: You wore a full costume and no one else at the office got the memo.", + "Halloween starter pack: cape, chaos, and commitment issues.", + "Too old for trick-or-treating, too tired for partying — welcome to adult Halloween." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/1_work_life.json b/database/seeders/data/json/category/1_work_life.json new file mode 100644 index 0000000..fa75d3b --- /dev/null +++ b/database/seeders/data/json/category/1_work_life.json @@ -0,0 +1,76 @@ +{ + "category": { + "name": "Work Life", + "description": "The daily grind, corporate buzzwords, Zoom fatigue, and wondering if everyone else is also pretending to know what they’re doing.", + "keywords": [ + "corporate life", + "burnout", + "remote work", + "zoom calls", + "office politics", + "toxic work culture", + "work memes", + "slacking off", + "job stress", + "performance reviews" + ], + "subcategories": [ + { + "name": "Corporate Circus", + "description": "Buzzwords, pointless meetings, and pretending spreadsheets are exciting.", + "meme_angles": [ + "Fake productivity", + "Replying-all unnecessarily", + "Endless meetings", + "‘Per my last email…’", + "Wearing a badge of burnout like a trophy" + ], + "keywords": ["corporate jargon", "office culture", "busy work", "email games", "desk life"], + "sample_captions": [ + "POV: You survived 3 meetings that could’ve been emails.", + "Me: Writes one paragraph. Also me: Deserves a raise.", + "Nothing feels more dangerous than replying-all by mistake." + ] + }, + { + "name": "Remote Work Realities", + "description": "Freedom, flexibility, and forgetting what pants are.", + "meme_angles": [ + "Pajamas on Zoom", + "Overusing the mute button", + "Fake backgrounds", + "Interruptions from pets/kids", + "Saying ‘you’re on mute’ daily" + ], + "keywords": ["work from home", "zoom fails", "home office life", "mute button", "virtual meetings"], + "sample_captions": [ + "POV: You've been on mute for 5 minutes of your own presentation.", + "Work from home dress code: Business top, chaos below.", + "My boss: Let’s turn on cameras. Me: *activates witness protection mode*" + ] + }, + { + "name": "Burnout Culture", + "description": "Running on caffeine, anxiety, and pure survival instinct.", + "meme_angles": ["Waking up tired", "5PM existential dread", "Sleep deprivation", "Over-caffeination", "Toxic hustle pride"], + "keywords": ["burnout", "hustle culture", "work exhaustion", "coffee dependency", "emotional fatigue"], + "sample_captions": [ + "POV: You took a lunch break and felt guilty for 3 hours.", + "Burnout but make it high-functioning.", + "Monday energy: Already dreaming about Friday at 5:01 PM." + ] + }, + { + "name": "Office Politics & Drama", + "description": "It’s less about work and more about knowing who not to CC.", + "meme_angles": ["Favoritism games", "The micromanager", "Petty power moves", "HR mystery decisions", "Strategic small talk"], + "keywords": ["office politics", "team drama", "manager issues", "gossip culture", "HR confusion"], + "sample_captions": [ + "POV: You said ‘no worries’ but there are, in fact, many worries.", + "Why do we act like replying in Slack is a power play?", + "Nothing like your manager explaining how ‘we’re a family’ as they underpay you." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/20_pet_ownership.json b/database/seeders/data/json/category/20_pet_ownership.json new file mode 100644 index 0000000..b60bc25 --- /dev/null +++ b/database/seeders/data/json/category/20_pet_ownership.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Pet Ownership", + "description": "From midnight zoomies to vet bill panic, it’s all cuddles and chaos when you're living that pet parent life.", + "keywords": [ + "pet owner", + "cat behavior", + "dog memes", + "pet struggles", + "vet visits", + "funny pets", + "animal logic", + "training fails", + "pet interruptions", + "dog vs cat life" + ], + "subcategories": [ + { + "name": "Cat Logic", + "description": "Living with a tiny diva who ignores you until 3AM.", + "meme_angles": [ + "Sits on your laptop", + "Stares at walls", + "Sleeps all day, parties all night", + "Sudden zoomies", + "Litter box judgment" + ], + "keywords": ["cat memes", "indoor cat life", "feline drama", "cats are weird", "midnight chaos"], + "sample_captions": [ + "POV: Your cat just sprinted across the house at 3AM for no reason.", + "Me: Buys expensive toy. Cat: Plays with the box.", + "My cat ignoring me until I open tuna: a love story." + ] + }, + { + "name": "Dog Zoomies & Drama", + "description": "Unmatched energy, endless loyalty, and no personal space ever.", + "meme_angles": [ + "Zoomies mid-Zoom call", + "Overreacting to doorbells", + "Selective hearing", + "Tail wag crimes", + "Big bark, small courage" + ], + "keywords": ["dog life", "puppy zoomies", "barking dog", "funny dog behavior", "dog logic"], + "sample_captions": [ + "POV: It’s 7AM and your dog is already doing laps like it’s the Olympics.", + "Dogs when the wind moves a leaf: DEFCON 1.", + "Me: sneezes. Dog: Calls an emotional meeting." + ] + }, + { + "name": "Vet Visits & Pet Drama", + "description": "One trip to the vet and your animal suddenly speaks fluent betrayal.", + "meme_angles": [ + "Faking confidence until you park", + "Hiding under the car seat", + "The bill is the real emergency", + "Post-vet silent treatment", + "Medication nightmares" + ], + "keywords": ["vet visits", "pet health", "emotional pets", "pet medication", "vet bill memes"], + "sample_captions": [ + "POV: Your pet made eye contact with the vet and filed an internal complaint.", + "The vet bill hit harder than the diagnosis.", + "My cat after the vet: I no longer recognize you." + ] + }, + { + "name": "Pet Interruptions & Zoom Bombs", + "description": "Your pet is the real boss of your home office.", + "meme_angles": [ + "Jumping on your keyboard", + "Barking during meetings", + "Sitting directly in the camera frame", + "Needing attention at the worst time", + "Knocking stuff over mid-presentation" + ], + "keywords": ["pet interruptions", "work from home pets", "cat on laptop", "zoom call pets", "pet distractions"], + "sample_captions": [ + "POV: You’re in a serious meeting and your dog starts barking at nothing.", + "My cat walked across the keyboard and now I’m scheduled to marry my boss.", + "Pet logic: You sitting still = cuddle opportunity." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/21_genz_humor.json b/database/seeders/data/json/category/21_genz_humor.json new file mode 100644 index 0000000..147b4ef --- /dev/null +++ b/database/seeders/data/json/category/21_genz_humor.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Gen Z Humor", + "description": "Hyper-ironic, chronically online, emotionally fried but still vibing — Gen Z memes are an inside joke with no punchline.", + "keywords": [ + "gen z memes", + "no context humor", + "ironic jokes", + "chronically online", + "✨ trauma ✨", + "hyper-specific vibes", + "digital nihilism", + "absurd relatability", + "emotionally dead inside", + "post-irony culture" + ], + "subcategories": [ + { + "name": "Ironic Detachment", + "description": "Feelings? Nah, just laughing through the void with deadpan delivery.", + "meme_angles": [ + "Pretending not to care but caring deeply", + "Making fun of everything including self", + "Sarcastic reactions to life events", + "Self-aware emotional numbness", + "Clowning coping mechanisms" + ], + "keywords": ["irony overload", "emotionally distant memes", "haha pain", "fake deep humor", "coping through sarcasm"], + "sample_captions": [ + "POV: Laughing at your own mental breakdown like it’s a sitcom.", + "Nothing matters. Also me: *carefully curates meme aesthetic*", + "Me pretending I’m fine while my Spotify Wrapped says otherwise." + ] + }, + { + "name": "✨ Trauma ✨ Memes", + "description": "Crying, but aesthetic. Sad, but with glitter. Laughing through generational trauma.", + "meme_angles": [ + "Normalizing dysfunction through memes", + "Oversharing as a bit", + "Therapy jokes 24/7", + "Dark humor but cute font", + "“It’s fine” energy" + ], + "keywords": ["trauma core", "sad but make it funny", "therapy culture", "mental health memes", "cute font pain"], + "sample_captions": [ + "POV: Diagnosing yourself with ✨everything✨ instead of going to therapy.", + "Me: I’m fine. Also me: *has 400 memes about spiraling*", + "Coping mechanism? I just laugh at memes that make me more broken." + ] + }, + { + "name": "Hyper-specific Vibes", + "description": "So specific it’s universal. If you know, you know — and if you don’t, you still laugh.", + "meme_angles": [ + "Memes that feel like déjà vu", + "Too niche but somehow relatable", + "Oddly specific yet widely shared", + "Unhinged but real", + "Memes that describe an emotion that doesn’t exist" + ], + "keywords": ["oddly specific memes", "relatable chaos", "if you know you know", "vibecore", "hyper niche humor"], + "sample_captions": [ + "POV: You see a meme that perfectly describes that one time in 2017 at 3AM.", + "This meme has no caption. Yet you feel seen. Deeply.", + "Me watching a video with 12 views that perfectly captures my internal panic cycle." + ] + }, + { + "name": "No Context Chaos", + "description": "Unhinged captions, cursed images, and random screenshots that should not be this funny.", + "meme_angles": [ + "Cursed screenshots", + "No setup, no punchline", + "Memes that feel like fever dreams", + "Unstable but iconic energy", + "Memes you can’t explain but must share" + ], + "keywords": ["no context posts", "cursed humor", "weirdcore", "unfiltered chaos", "absurdism"], + "sample_captions": [ + "Me: I need serious help. Also me: *laughs at a JPEG of a rotisserie chicken on a Roomba*", + "This image has no meaning. But you laughed. And now it owns you.", + "When the meme makes no sense but your soul resonates at 3AM." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/22_developers_coders.json b/database/seeders/data/json/category/22_developers_coders.json new file mode 100644 index 0000000..4836ab6 --- /dev/null +++ b/database/seeders/data/json/category/22_developers_coders.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Developers / Coders", + "description": "Sleep-deprived, caffeine-fueled builders of the internet who communicate exclusively in bugs, branches, and despair.", + "keywords": [ + "coding memes", + "dev humor", + "debugging pain", + "git struggles", + "stack overflow jokes", + "programmer life", + "syntax errors", + "deployment drama", + "tech burnout", + "code spaghetti" + ], + "subcategories": [ + { + "name": "Debugging Despair", + "description": "It worked yesterday. Now it’s haunted. Welcome to the bug dimension.", + "meme_angles": [ + "Code breaks for no reason", + "Console.log therapy", + "Bug you can’t reproduce", + "One semicolon ruins your life", + "Blindly changing things until it works" + ], + "keywords": ["debugging hell", "console.log everywhere", "rubber ducking", "invisible bugs", "why it no work"], + "sample_captions": [ + "POV: You fixed one bug and created three new ones.", + "Me: Adds a print statement. Code: Starts working out of fear.", + "Debugging: The part where I stare at my screen until the error fixes itself." + ] + }, + { + "name": "Stack Overflow Worship", + "description": "If it’s not on Stack Overflow, it’s unsolvable. Also: copy-paste until functional.", + "meme_angles": [ + "Blind copy-paste", + "Stack Overflow as holy scripture", + "Zero understanding, but it works", + "Top answer from 2011 still saving lives", + "Code Frankenstein" + ], + "keywords": [ + "stackoverflow gods", + "code without understanding", + "stackoverflow dependency", + "developer coping", + "copy paste culture" + ], + "sample_captions": [ + "My code? 10% logic, 90% Stack Overflow and prayer.", + "Stack Overflow really said: 'Here’s some magic. Don’t question it.'", + "If Stack Overflow goes down, so do all my apps." + ] + }, + { + "name": "Comment Wars", + "description": "// Half the team writes comments, the other half declares war on them.", + "meme_angles": [ + "Passive aggressive code comments", + "Commented-out legacy code still haunts the repo", + "Zero comments gang", + "Docs are lies", + "Explaining code with memes instead" + ], + "keywords": ["code comments", "comment wars", "team coding chaos", "inline trolling", "doc betrayal"], + "sample_captions": [ + "// Not sure what this does but don’t delete it", + "Code comments are either a novella or a crime scene.", + "Me writing: // TODO: Fix this before launch. Also me: *never fixes it*" + ] + }, + { + "name": "Last-Minute Deployments", + "description": "It’s 4:59 on a Friday and someone just hit ‘merge.’ Chaos is now live.", + "meme_angles": ["Friday deploy fear", "Hotfix panic", "Production roulette", "Push and pray", "Coworker pushed to main"], + "keywords": ["prod deploy", "late deploy stress", "hotfix fire", "merge disasters", "git regrets"], + "sample_captions": [ + "POV: You deployed at 4:59 PM. Now the weekend is a hostage situation.", + "It’s not a real launch until prod is on fire.", + "Coworker: 'Just a small update.' Entire platform: *dies instantly*" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/23_designers_creatives.json b/database/seeders/data/json/category/23_designers_creatives.json new file mode 100644 index 0000000..fc96a77 --- /dev/null +++ b/database/seeders/data/json/category/23_designers_creatives.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Designers / Creatives", + "description": "Aesthetically overwhelmed professionals haunted by vague feedback, midnight inspiration, and a crippling addiction to perfect kerning.", + "keywords": [ + "design memes", + "creative burnout", + "client feedback", + "revision fatigue", + "font obsession", + "creative block", + "inspiration panic", + "moodboards", + "photoshop pain", + "aesthetic overload" + ], + "subcategories": [ + { + "name": "Endless Revisions", + "description": "Version 34_final_FINAL2.pdf lives here. So does your sanity — or what’s left of it.", + "meme_angles": [ + "Infinite revision loops", + "Client wants one more change", + "The design was better in v2", + "Naming nightmare for file versions", + "Hiding layers out of spite" + ], + "keywords": ["revision spiral", "final final v3", "client edits", "PSD rage", "design fatigue"], + "sample_captions": [ + "POV: They asked for one last revision... again.", + "File: 'final_FINAL_v7_actuallyFINAL.psd'", + "Me pretending this version is new even though it's v3 renamed." + ] + }, + { + "name": "Client Feedback Hell", + "description": "They don’t know what they want, but they’ll know it when they don’t see it.", + "meme_angles": [ + "Vague and impossible feedback", + "Clients asking for 'pop' with no context", + "Contradictory requests", + "“Can you make the logo bigger?”", + "Misunderstanding basic design terms" + ], + "keywords": ["client chaos", "feedback pain", "make it pop", "scope creep", "endless notes"], + "sample_captions": [ + "Client: 'Make it pop.' Me: *sets it on fire*", + "Client feedback: 'Can you make it more... design-y?'", + "POV: The client says 'almost perfect!' and sends 18 changes." + ] + }, + { + "name": "Font Obsession", + "description": "You’ve spent three hours choosing between two fonts no one else can tell apart.", + "meme_angles": [ + "Font pairing madness", + "Kerning rage", + "Custom typography drama", + "Hating Comic Sans with passion", + "Illegible but aesthetic" + ], + "keywords": ["font memes", "kerning hell", "typography crisis", "designer OCD", "aesthetic font struggle"], + "sample_captions": [ + "POV: I downloaded 47 fonts and still used Helvetica.", + "If you think all fonts are the same, we can’t be friends.", + "Me defending my font choice like it’s a human rights issue." + ] + }, + { + "name": "Inspiration Crisis", + "description": "Creative block + deadline = sobbing over Pinterest at 2AM.", + "meme_angles": [ + "Staring at blank canvas panic", + "Looking for ideas that don’t exist", + "Creative deadlines vs burnout", + "Moodboard obsession spiral", + "Idea arrives after submission" + ], + "keywords": ["creative block", "no inspiration", "panic designing", "idea drought", "design paralysis"], + "sample_captions": [ + "Me: I’ll start early this time. Also me: Panicking at 2AM with zero ideas.", + "Moodboards: 10/10. Execution: currently crying.", + "POV: Your brain gives you the perfect design idea 5 minutes after the deadline." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/24_crypto_finance_bros.json b/database/seeders/data/json/category/24_crypto_finance_bros.json new file mode 100644 index 0000000..f13d3ba --- /dev/null +++ b/database/seeders/data/json/category/24_crypto_finance_bros.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Crypto & Finance Bros", + "description": "A world where memes are trading signals, vibes dictate market trends, and financial freedom is always ‘one pump away’.", + "keywords": [ + "crypto memes", + "finance bros", + "hodl life", + "rugpull trauma", + "chart addiction", + "discord alpha", + "pump and dump", + "bear vs bull", + "meme coin chaos", + "trading psychology" + ], + "subcategories": [ + { + "name": "To The Moon Hype", + "description": "Blind optimism meets rocket emojis. Every dip is a buying opportunity… allegedly.", + "meme_angles": [ + "Overconfidence in terrible coins", + "Buying the top, selling the bottom", + "HODL as religion", + "‘This is the one’ energy", + "Elon Musk tweet dependency" + ], + "keywords": ["to the moon", "hodl memes", "moonboy mentality", "hopium addiction", "crypto cult energy"], + "sample_captions": [ + "Me buying at the top like: 'We’re early, boys!'", + "If we all believe hard enough, it’ll moon, right?", + "POV: You’re holding a coin that’s 97% down but spiritually up." + ] + }, + { + "name": "Rugpull PTSD", + "description": "Trust issues powered by DeFi disasters. Fool me once, shame on you. Rug me five times, still HODLing.", + "meme_angles": [ + "Investing in scam coins", + "Being rugged and still going back", + "Unrealistic whitepapers", + "Watching friends get rugged too", + "Crypto PTSD flashbacks" + ], + "keywords": ["rugpull memes", "scam coin trauma", "web3 trust issues", "defi regret", "exit scam jokes"], + "sample_captions": [ + "POV: The dev wallet just sold everything. Again.", + "It’s not a rug if you never had hope to begin with.", + "Me reading a whitepaper like it’s not about to steal my soul (and funds)." + ] + }, + { + "name": "Chart Watching", + "description": "You’ve got TradingView open like it’s Netflix. Every candle feels personal.", + "meme_angles": [ + "Staring at charts all day", + "Moving average obsession", + "Thinking you're a TA expert", + "Micro-analyzing 1-minute candles", + "Letting charts dictate mood" + ], + "keywords": ["chart addiction", "technical analysis fail", "candlestick cope", "emotional investing", "price watching stress"], + "sample_captions": [ + "POV: It moves 0.3% and I feel it in my bones.", + "Me trying to predict price movement like I work for the universe.", + "Every green candle = hope. Every red one = an identity crisis." + ] + }, + { + "name": "Discord Pump Schemes", + "description": "Private servers, fake hype, and ‘insider tips’ from someone named CryptoLord69.", + "meme_angles": [ + "Joining pump groups too late", + "‘Alpha’ leaks that ruin portfolios", + "Groupthink gone wrong", + "Fake whales leading the hype", + "Shill posts from randoms" + ], + "keywords": ["pump and dump", "discord shill", "alpha group scams", "signal fraud", "fomo trading"], + "sample_captions": [ + "Discord: 'Buy now!' Reality: Already dumped.", + "Taking financial advice from someone with a Pepe PFP and zero accountability.", + "Me after blindly following a signal: *cries in red candles*" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/25_gamers.json b/database/seeders/data/json/category/25_gamers.json new file mode 100644 index 0000000..e8c6f34 --- /dev/null +++ b/database/seeders/data/json/category/25_gamers.json @@ -0,0 +1,82 @@ +{ + "category": { + "name": "Gamers", + "description": "Digital warriors fueled by caffeine, questionable sleep schedules, and an endless pursuit of loot, wins, and nonexistent sunlight.", + "keywords": [ + "gaming memes", + "rage quit", + "lag excuses", + "NPC behavior", + "sweaty lobbies", + "touch grass", + "no life grinding", + "respawn humor", + "gamer rage", + "clutch moments" + ], + "subcategories": [ + { + "name": "Rage Quits", + "description": "That moment when your controller almost becomes a projectile.", + "meme_angles": ["Unplugging mid-match", "Blaming teammates", "Throwing the headset", "Alt+F4 energy", "Screaming in the lobby"], + "keywords": ["rage quit memes", "controller yeet", "toxic lobbies", "tilted gamer", "gamer meltdown"], + "sample_captions": [ + "POV: You said 'one more game' 3 hours ago and now you're screaming.", + "Me: Calm and collected. Also me: *breaks controller in half*", + "If you didn’t rage quit, did you even try?" + ] + }, + { + "name": "Lag Blame", + "description": "It’s not your skill—it’s your ping. Always.", + "meme_angles": [ + "Blaming lag for everything", + "Rubberbanding into death", + "Microwave = lag spike", + "Excuses that don’t check out", + "Blaming Wi-Fi while on Ethernet" + ], + "keywords": ["lag memes", "bad ping rage", "network copium", "gamer denial", "excuse.exe"], + "sample_captions": [ + "Not me blaming lag with 12ms ping.", + "Game: You died. Me: Nah, that was lag.", + "My internet when I need it most: *drops to potato mode*" + ] + }, + { + "name": "NPC Energy", + "description": "Sometimes the most human characters act the least human.", + "meme_angles": [ + "Weird AI behavior", + "Walking into walls", + "Repeating the same line forever", + "Bugged NPCs mid-dialogue", + "Players acting like NPCs" + ], + "keywords": ["npc memes", "weird ai", "game bugs", "npc dialogue loop", "glitch moments"], + "sample_captions": [ + "Me watching an NPC try to walk through a tree like it’s not real.", + "When the side quest NPC says 'Help!' but never moves.", + "POV: You’re acting with major NPC energy today." + ] + }, + { + "name": "Grinding vs. Touching Grass", + "description": "Your level 97 character is thriving. Your social life? Not so much.", + "meme_angles": [ + "Game > life priorities", + "XP obsession", + "Skipping sleep to level up", + "Daily logins like it’s a job", + "Forgetting what outside looks like" + ], + "keywords": ["grind life", "no life gamer", "touch grass memes", "game addiction jokes", "sleep is for casuals"], + "sample_captions": [ + "Me: I’ll go outside after I hit level 100. It’s been 3 months.", + "Touching grass? Nah, I’m grinding dailies.", + "Real life: unpaid. Game life: XP boost. You decide." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/26_healthcare_workers.json b/database/seeders/data/json/category/26_healthcare_workers.json new file mode 100644 index 0000000..08c12bf --- /dev/null +++ b/database/seeders/data/json/category/26_healthcare_workers.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Healthcare Workers", + "description": "Frontline heroes powered by caffeine, sarcasm, and a permanent state of sleep deprivation. Living proof that dark humor saves lives.", + "keywords": [ + "nurse memes", + "doctor humor", + "healthcare chaos", + "night shift struggle", + "code blue panic", + "charting nightmares", + "scrubs life", + "ER drama", + "hospital burnout", + "medical humor" + ], + "subcategories": [ + { + "name": "Night Shifts", + "description": "Running on caffeine, adrenaline, and spite while the world sleeps.", + "meme_angles": [ + "Delirium at 3AM", + "Back-to-back shifts", + "Zombie mode at sunrise", + "Night shift bonding trauma", + "Sunlight? Never heard of her" + ], + "keywords": ["night shift memes", "overnight fatigue", "third shift life", "hospital vampires", "sleep-deprived chaos"], + "sample_captions": [ + "POV: You forgot what daylight looks like.", + "Me during night shift: functioning on caffeine and questionable choices.", + "When your sleep schedule is just a suggestion." + ] + }, + { + "name": "Code Blues", + "description": "When calm turns into chaos in 0.3 seconds.", + "meme_angles": [ + "Adrenaline overload", + "Organized panic", + "Sprinting with a crash cart", + "Code blue silence = trauma flashback", + "Everyone pretending it’s normal" + ], + "keywords": ["code blue chaos", "emergency room panic", "hospital adrenaline", "resus humor", "critical care stress"], + "sample_captions": [ + "Code blue? More like code brown in my scrubs.", + "POV: You're running down the hallway with zero context and full panic.", + "Me: Calm. Code blue: Initiated. Me: *Naruto runs with defib paddles*" + ] + }, + { + "name": "Patient Stories", + "description": "They say 'you won’t believe this one' — and they’re always right.", + "meme_angles": [ + "Weird ER visits", + "TMI from patients", + "Self-diagnosed WebMD warriors", + "“I Googled my symptoms” energy", + "Explaining basic things 10 times" + ], + "keywords": ["patient chaos", "weird symptoms", "funny hospital moments", "hypochondria memes", "medical TMI"], + "sample_captions": [ + "Patient: 'I didn’t take any meds.' Also patient: *pulls out 5 pill bottles*", + "Me trying to keep a straight face during a wild patient story.", + "POV: Patient says they 'just have a little cough'—they’re blue." + ] + }, + { + "name": "Charting Misery", + "description": "You saved five lives but forgot to document it, so technically it didn’t happen.", + "meme_angles": [ + "Backlog of notes", + "Charting during lunch (and dinner)", + "Clicking through 50 screens", + "EMR rage", + "Documenting your own mental breakdown" + ], + "keywords": ["charting hell", "epic burnout", "documentation fatigue", "EMR stress", "nurse note overload"], + "sample_captions": [ + "Me: Did 20 things. EMR: Please prove it in 1,000 words.", + "POV: You finish your shift but stay another hour just to chart it.", + "EMR: 'Incomplete note.' Me: So is my will to live." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/27_teachers_educators.json b/database/seeders/data/json/category/27_teachers_educators.json new file mode 100644 index 0000000..3637968 --- /dev/null +++ b/database/seeders/data/json/category/27_teachers_educators.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Teachers & Educators", + "description": "Educators balancing lesson plans, grading mountains, Zoom fatigue, and wild student energy — all while pretending everything is totally under control.", + "keywords": [ + "teacher memes", + "grading chaos", + "student antics", + "zoom fatigue", + "classroom management", + "education burnout", + "school humor", + "report card panic", + "parent emails", + "lesson plan breakdown" + ], + "subcategories": [ + { + "name": "Zoom Fatigue", + "description": "Virtual teaching with frozen screens, muted mics, and existential dread.", + "meme_angles": [ + "Talking to black boxes all day", + "Students never unmuting", + "Wi-Fi sabotaging your lesson", + "Accidentally screen-sharing chaos", + "Endless tech issues" + ], + "keywords": ["zoom school", "virtual teaching", "muted class", "remote learning memes", "edtech fails"], + "sample_captions": [ + "POV: You just asked a question and 25 kids pretend to freeze.", + "Me: Explaining for the 3rd time. Student: 'Sorry, I was lagging.'", + "Teaching virtually: 10% lesson, 90% asking 'Can you hear me now?'" + ] + }, + { + "name": "Unhinged Parents", + "description": "Because sometimes the adults are worse than the kids.", + "meme_angles": [ + "Emails at 2AM", + "Blaming the teacher for everything", + "Overinvolved vs. MIA", + "Parent-teacher conference dread", + "Entitled helicopter parents" + ], + "keywords": ["crazy parent emails", "school complaints", "teacher vs parent", "conference nightmares", "PTA drama"], + "sample_captions": [ + "Parent: ‘My child never lies.’ Also parent’s child: *actively lying*", + "POV: You get an angry email about something the kid 100% made up.", + "Me reading a 6-paragraph parent email about a missing pencil." + ] + }, + { + "name": "Grading Hell", + "description": "When red ink starts feeling personal and the pile never shrinks.", + "meme_angles": [ + "Procrastinating grading", + "Forgetting who turned what in", + "The horror of unreadable handwriting", + "Students submitting work at 11:59pm", + "Rubric rage" + ], + "keywords": ["grading burnout", "teacher workload", "late assignments", "infinite grading loop", "rubric despair"], + "sample_captions": [ + "POV: You blinked and now you have 84 essays to grade.", + "Me: I’ll just grade one paper. Also me: *wakes up 3 hours later in despair*", + "Every time I finish grading: *another assignment drops in*" + ] + }, + { + "name": "Student Chaos", + "description": "Little agents of chaos with sticky fingers and limitless energy.", + "meme_angles": [ + "Random questions mid-lesson", + "Bathroom breaks as escape plans", + "Students roasting the teacher", + "Trying to quiet the class for 30 mins", + "Accidentally teaching future stand-up comics" + ], + "keywords": ["classroom chaos", "funny students", "discipline struggles", "class clown moments", "student logic"], + "sample_captions": [ + "POV: You planned a whole lesson, but the class wants to talk about aliens.", + "Student: 'I wasn't talking.' Me: *has literal footage*", + "Me: Explains math. Student: ‘What if the moon had legs tho?’" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/28_parents_new_moms.json b/database/seeders/data/json/category/28_parents_new_moms.json new file mode 100644 index 0000000..c82f2ae --- /dev/null +++ b/database/seeders/data/json/category/28_parents_new_moms.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Parents / New Moms", + "description": "Sleep-deprived superheroes navigating tantrums, teething, and the existential dread of screen time limits — all powered by cold coffee and chaos.", + "keywords": [ + "new mom memes", + "parenting humor", + "toddler tantrums", + "sleep deprived life", + "diaper explosions", + "screen time guilt", + "baby milestones", + "mom brain", + "dad jokes", + "wine o’clock" + ], + "subcategories": [ + { + "name": "Diaper Life", + "description": "Where blowouts defy physics and baby wipes are currency.", + "meme_angles": [ + "Midnight diaper changes", + "Public blowout emergencies", + "Wipe-counting stress", + "Diaper math (again?!)", + "Changing table acrobatics" + ], + "keywords": ["diaper memes", "blowout chaos", "changing baby humor", "baby poop jokes", "parent struggle"], + "sample_captions": [ + "Me: Just changed him. Baby: Time to go again.", + "POV: You’re holding your breath like it’s a bomb diffusal mission.", + "Nothing humbles you like a diaper blowout in aisle 6." + ] + }, + { + "name": "Sleep Deprivation", + "description": "Running on caffeine, vibes, and sheer willpower since 3AM.", + "meme_angles": [ + "Zombie mode mornings", + "3AM feedings", + "Trading sleep shifts with your partner", + "Dozing mid-sentence", + "Rocking an invisible baby" + ], + "keywords": ["sleep deprived parents", "newborn nights", "baby won't sleep", "mom exhaustion", "night shift mom life"], + "sample_captions": [ + "Me: Functioning. Also me: *hallucinates Elmo in the fridge*", + "Sleep is a luxury I vaguely remember.", + "POV: The baby finally sleeps… so naturally, you just stare at them." + ] + }, + { + "name": "Screen Time Guilt", + "description": "The struggle between surviving the day and the fear of raising a screen zombie.", + "meme_angles": [ + "Giving in to the tablet", + "Judging yourself while judging others", + "Educational videos = parenting win?", + "Buying 10 minutes of peace with YouTube", + "Paw Patrol again?!" + ], + "keywords": ["screen time memes", "tablet guilt", "parenting trade-offs", "youtube babysitter", "mom shame"], + "sample_captions": [ + "Me: Screen time is bad. Also me: ‘Here’s an iPad, don’t talk to me.’", + "It’s called Bluey and it’s saving lives.", + "POV: You promised yourself no screens, but it’s 7AM and the coffee’s not even ready." + ] + }, + { + "name": "Toddler Negotiations", + "description": "Masterclass in reverse psychology, bribery, and low-key hostage situations.", + "meme_angles": [ + "Arguing with tiny lawyers", + "Meltdowns over nothing", + "Bribing with snacks", + "Dress negotiations", + "Surviving public tantrums" + ], + "keywords": ["toddler logic", "terrible twos", "snack negotiations", "mom vs kid", "bribery parenting"], + "sample_captions": [ + "Toddler: ‘No.’ Me: ‘That wasn’t a yes-or-no question.’", + "POV: You’re negotiating over pants like it’s a hostage situation.", + "Me: ‘Don’t touch that.’ Toddler: *touches it harder*" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/29_astrology.json b/database/seeders/data/json/category/29_astrology.json new file mode 100644 index 0000000..24417f3 --- /dev/null +++ b/database/seeders/data/json/category/29_astrology.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Astrology", + "description": "A humorous look into zodiac signs, birth charts, and chaotic cosmic events that people swear influence their daily lives.", + "keywords": ["zodiac", "horoscope", "birth chart", "stars", "signs", "retrograde", "moon", "astrology memes"], + "subcategories": [ + { + "name": "Zodiac Signs in Chaos", + "description": "Memes and moments when zodiac signs live up to their most chaotic stereotypes.", + "meme_angles": [ + "All Scorpios when they feel betrayed", + "Every Aries in a group project", + "Pisces disappearing for 3 days then acting like nothing happened" + ], + "keywords": ["zodiac", "signs", "chaos", "traits", "relatable astrology"], + "sample_captions": [ + "When you're a Virgo and someone messes with your color-coded planner 👀", + "Gemini season is here, prepare for the duality drama™", + "Capricorn trying to relax on vacation: *opens laptop anyway*" + ] + }, + { + "name": "Mercury Retrograde", + "description": "Tech fails, miscommunication, and general existential crises blamed on the infamous Mercury retrograde.", + "meme_angles": [ + "Your ex texting you during Mercury retrograde = a universal test", + "That moment when your Zoom crashes and you remember it’s retrograde", + "Triple-checking every message because Mercury is wildin’" + ], + "keywords": ["retrograde", "mercury", "tech fails", "astrology blame", "communication breakdown"], + "sample_captions": [ + "Mercury retrograde is the new 'my dog ate my homework' excuse", + "If I say something dumb, blame the planets 🌌", + "Mercury is in the group chat and it’s messy" + ] + }, + { + "name": "Sign Compatibility", + "description": "Exploring love, friendship, and chaos based on zodiac pairings.", + "meme_angles": [ + "Cancer x Sagittarius = tears and travel plans", + "When you realize your crush is a walking red flag... and also a Gemini", + "Libras flirting with literally everyone but still 'undecided'" + ], + "keywords": ["compatibility", "zodiac match", "dating", "friendship signs", "astrology love"], + "sample_captions": [ + "When a Scorpio and a Leo date... who wins?", + "Your sign says ‘hopeless romantic’ but your text history says ‘ghosting champion’", + "The stars said we were a match. My therapist disagrees." + ] + }, + { + "name": "Birth Chart Bragging", + "description": "When people flex their birth chart like it's their resume.", + "meme_angles": [ + "Explaining your crush’s rising sign like it’s a red flag you can fix", + "Saying ‘I’m not just a Leo, I have a Pisces moon’ like that explains your emotional spiral", + "That friend who needs your exact birth time before being friends" + ], + "keywords": ["birth chart", "sun moon rising", "natal chart", "zodiac flex", "astro analysis"], + "sample_captions": [ + "She’s a Virgo sun, Scorpio moon, and chaos rising 😩", + "Me calculating compatibility based on their chart before the first date", + "Sorry I can’t help it — my Mars is in Gemini 💅" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/2_school_college.json b/database/seeders/data/json/category/2_school_college.json new file mode 100644 index 0000000..1339b3c --- /dev/null +++ b/database/seeders/data/json/category/2_school_college.json @@ -0,0 +1,70 @@ +{ + "category": { + "name": "School & College", + "description": "Where sleep is rare, deadlines are closer than they appear, and group projects test your patience more than your GPA.", + "keywords": [ + "student life", + "exams", + "college stress", + "group project pain", + "online class struggles", + "study burnout", + "dorm chaos", + "midterms", + "procrastination", + "finals week" + ], + "subcategories": [ + { + "name": "Exam Overload", + "description": "Because nothing screams panic like realizing you studied the wrong chapter — again.", + "meme_angles": [ + "Last-minute cramming", + "Forgetting everything mid-exam", + "Open-book test betrayal", + "Calculators not allowed", + "Brain fog under pressure" + ], + "keywords": ["exam stress", "test week", "study fail", "finals panic", "pop quiz"], + "sample_captions": [ + "POV: You studied all night… and still didn’t recognize Question 1.", + "Open book exam — and still nothing in the book is helping.", + "Me reading the exam like it’s written in a different language." + ] + }, + { + "name": "Online Class Struggles", + "description": "Learning through frozen screens, muted microphones, and pretending you're paying attention.", + "meme_angles": ["Accidentally unmuted", "WiFi betrayal", "Sleeping through lectures", "Fake attendance tactics", "Camera-on panic"], + "keywords": ["online learning", "zoom university", "remote class", "e-learning", "virtual school"], + "sample_captions": [ + "POV: Your WiFi dies the moment the teacher says ‘this part’s important.’", + "Online class tip: Nod, smile, and hope they don’t call on you.", + "Nothing hits harder than hearing ‘you’re still muted’ three times in one lecture." + ] + }, + { + "name": "Group Project Pains", + "description": "One person does everything. One disappears. One shows up last minute. Every. Time.", + "meme_angles": ["Uneven workload", "Ghosting groupmates", "Awkward team chats", "Last-minute panic", "Grade leeches"], + "keywords": ["group work stress", "school teamwork", "project chaos", "presentation anxiety", "collab fails"], + "sample_captions": [ + "POV: You're carrying a group project while two members have gone full ghost mode.", + "Group project roles: Leader, ghost, complainer, and guy who just vibes.", + "Me submitting the entire group project alone: Academy Award-worthy performance." + ] + }, + { + "name": "Dorm Life Diaries", + "description": "A shared room, a microwave, and the sounds of 3AM chaos.", + "meme_angles": ["Microwave meal disasters", "Roommate with no chill", "Fire alarms at 4AM", "Decor wars", "Laundry room fights"], + "keywords": ["dorm life", "campus living", "roommate drama", "college housing", "student meals"], + "sample_captions": [ + "POV: Someone burned popcorn in the dorm again and now it’s a fire drill.", + "Dorm cooking: Where cereal counts as dinner.", + "My roommate: studying. Me: recreating TikToks at full volume." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/30_boomer_logic.json b/database/seeders/data/json/category/30_boomer_logic.json new file mode 100644 index 0000000..27a9ca9 --- /dev/null +++ b/database/seeders/data/json/category/30_boomer_logic.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Boomer Logic", + "description": "Hot takes from the generation that walked uphill both ways — featuring Facebook rants, emoji misuse, and a total breakdown over QR codes.", + "keywords": [ + "boomer memes", + "back in my day", + "facebook logic", + "tech confused parents", + "misinformation memes", + "boomer takes", + "emoji fails", + "political facebook posts", + "tech panic", + "boomer vs gen z" + ], + "subcategories": [ + { + "name": "Back In My Day Takes", + "description": "Unsolicited lectures about how things were better when everything was worse.", + "meme_angles": [ + "Rants about $5 coffee", + "Kids these days don't work!", + "No phones at dinner... like 1982!", + "Romanticizing suffering", + "Everyone's too sensitive now" + ], + "keywords": ["back in my day", "boomer rants", "kids these days", "boomer nostalgia", "old school takes"], + "sample_captions": [ + "Boomer: ‘When I was your age…’ Me: *emotionally logging off*", + "POV: You mentioned mental health and they started a lecture about chores.", + "Nothing starts an argument faster than ‘Things were better in the 70s.’" + ] + }, + { + "name": "Tech Panic", + "description": "Where using a PDF or changing Wi-Fi counts as high-stakes espionage.", + "meme_angles": [ + "Forgetting passwords daily", + "Accidentally printing 67 pages", + "Calling for tech help... again", + "Fear of 'the cloud'", + "Using Google like a diary" + ], + "keywords": ["boomer tech fails", "technology confusion", "password chaos", "boomer iphone meme", "wifi panic"], + "sample_captions": [ + "POV: They asked you how to ‘download the internet.’", + "Me: ‘Click the link.’ Boomer: ‘Where is the link??’", + "Boomer logic: Forgot the password, so they made a new email." + ] + }, + { + "name": "Out-of-Touch Opinions", + "description": "From takes on TikTok to totally missing the point of pronouns.", + "meme_angles": [ + "Misunderstanding trends", + "Making everything political", + "Hot takes no one asked for", + "Misreading memes", + "Getting mad at avocado toast" + ], + "keywords": ["boomer opinions", "boomer vs gen z", "generation gap", "old school rants", "unwanted advice"], + "sample_captions": [ + "Boomer: ‘TikTok is ruining kids.’ Also boomer: Shares 3-hour conspiracy video.", + "POV: You explained gender once and now they’re on a crusade.", + "Boomer logic: If you don’t own a house by 23, it’s clearly avocado toast’s fault." + ] + }, + { + "name": "Misinformation Mayhem", + "description": "Where chain emails meet Facebook comment wars and nobody checks Snopes.", + "meme_angles": [ + "Believing obvious satire", + "Forwarding hoaxes", + "Facebook news addiction", + "Arguing in all caps", + "Using emojis as facts" + ], + "keywords": ["boomer facebook memes", "fake news humor", "misinfo chaos", "facebook comment drama", "email forwards jokes"], + "sample_captions": [ + "POV: You told them the article was fake. They blocked you.", + "Boomer: ‘I saw it on Facebook, so it must be true.’", + "Me: ‘Please stop sharing hoaxes.’ Boomer: Shares 7 more." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/31_gen_alpha_kids.json b/database/seeders/data/json/category/31_gen_alpha_kids.json new file mode 100644 index 0000000..c7ce001 --- /dev/null +++ b/database/seeders/data/json/category/31_gen_alpha_kids.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Gen Alpha / Kids", + "description": "iPad-raised, Roblox-rich, and savage beyond their years — Gen Alpha is here to roast you, flex digital clout, and demand nuggets at 7AM.", + "keywords": [ + "gen alpha memes", + "ipad kids", + "roblox jokes", + "tiktok brainrot", + "fortnite dances", + "skibidi toilet", + "tablet addiction", + "kid roasting adults", + "zoomer kids", + "digital natives" + ], + "subcategories": [ + { + "name": "Tablet Tyrants", + "description": "These kids operate tablets better than your IT guy… and will scream if you take it away.", + "meme_angles": [ + "iPad at full volume in public", + "Meltdowns when battery’s at 3%", + "Tablet as a parenting strategy", + "Refusing to eat without screen time", + "Holding the iPad 1 inch from their face" + ], + "keywords": ["ipad zombie", "screen addicted kids", "tablet tantrum", "ipad babysitter", "kid technology memes"], + "sample_captions": [ + "POV: The iPad died and so did your peace.", + "Gen Alpha won’t eat unless it’s served with Cocomelon.", + "Me: Turns off tablet. Kid: *activates demon mode*" + ] + }, + { + "name": "TikTok Brain", + "description": "Short attention span? Check. Meme literacy beyond comprehension? Also check.", + "meme_angles": [ + "Repeating TikTok audio 24/7", + "Learning more from TikTok than school", + "Explaining memes you don’t understand", + "7-year-olds with better editing skills", + "Living life as a reaction video" + ], + "keywords": ["gen alpha tiktok", "tiktok kids", "brainrot memes", "kid influencers", "short attention span"], + "sample_captions": [ + "POV: Your 8-year-old cousin just hit the griddy at a funeral.", + "This generation was raised on TikTok — and it shows.", + "Me: Tries to talk. Kid: *interrupts with TikTok sound*" + ] + }, + { + "name": "Roblox Economics", + "description": "Gen Alpha’s Wall Street — where Robux is the currency and scams run wild.", + "meme_angles": [ + "Begging for Robux", + "Getting scammed in Adopt Me", + "Building empires in Bloxburg", + "Roblox over real life", + "Treating Robux like gold" + ], + "keywords": ["robux memes", "roblox kids", "gaming addiction", "virtual economy", "bloxburg drama"], + "sample_captions": [ + "POV: Your 6-year-old just lost their life savings in Adopt Me.", + "Gen Alpha doesn’t want allowance — they want Robux.", + "Me: ‘What do you want for your birthday?’ Kid: ‘1,000 Robux.’" + ] + }, + { + "name": "Savage Comebacks", + "description": "These tiny humans roast with zero hesitation and permanent psychological damage.", + "meme_angles": [ + "Roasting your outfit", + "Destroying your self-esteem casually", + "Embarrassing you in public", + "Outwitting adults", + "Blunt truths from tiny mouths" + ], + "keywords": ["kid roast memes", "savage children", "kids say wild things", "blunt honesty", "mini trolls"], + "sample_captions": [ + "Kid: ‘You look tired.’ Me: ‘I wasn’t before this.’", + "Me: ‘Do I look okay?’ Kid: *laughs*", + "POV: A 7-year-old just ended your entire personality in 6 words." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/32_influencer_drama.json b/database/seeders/data/json/category/32_influencer_drama.json new file mode 100644 index 0000000..dffe55c --- /dev/null +++ b/database/seeders/data/json/category/32_influencer_drama.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Influencer Drama", + "description": "Where internet fame meets cancel culture, rebrands crash, and 'apology videos' are filmed with fake tears and ring lights.", + "keywords": [ + "influencer memes", + "apology video parody", + "brand drama", + "collab gone wrong", + "rebrand fails", + "cancelled influencer", + "comment section war", + "tiktok drama", + "youtuber scandal", + "dramageddon" + ], + "subcategories": [ + { + "name": "Apology Videos & Fake Tears", + "description": "Ring lights on, crocodile tears ready — the notes app didn’t work, so now it's time to cry on camera.", + "meme_angles": [ + "Crying without smudging makeup", + "Saying ‘I’m not that person anymore’", + "Starting with a heavy sigh", + "Dogs in the background for sympathy", + "‘I was young… it was yesterday’" + ], + "keywords": ["influencer apology", "notes app meme", "cancel culture parody", "youtuber cry", "public meltdown"], + "sample_captions": [ + "POV: They start with ‘I never meant to hurt anyone’ and end with a merch drop.", + "Influencer logic: If I cry in HD, I’m forgiven.", + "Apology video checklist: sigh, dog, soft lighting, zero accountability." + ] + }, + { + "name": "Brand Beef & Sponsorship Shade", + "description": "From sneak-dissing brands to selling products they’ve never used, the hustle is messy.", + "meme_angles": [ + "Pretending to love weird products", + "Getting dropped by brands", + "Shade via vague tweets", + "Sponsorships gone wrong", + "Undisclosed #ads and chaos" + ], + "keywords": ["influencer brand flop", "sponsorship fail", "tiktok brand shade", "fake product love", "influencer marketing memes"], + "sample_captions": [ + "POV: They bashed the brand yesterday, and it’s a sponsored post today.", + "Influencer: ‘I’ve always loved this product.’ Also them: ‘What is it called again?’", + "Nothing says drama like a #sponsored post with disabled comments." + ] + }, + { + "name": "Collab Fallout", + "description": "Besties to blocked — influencer friendships dissolve faster than a lip gloss collab launch.", + "meme_angles": [ + "Unfollowing each other publicly", + "Messy breakup TikToks", + "Subtle shade in new videos", + "Breaking up a content house", + "Turning a collab into a feud" + ], + "keywords": ["influencer feud", "content house drama", "youtube collab fail", "friendship breakup", "tea account memes"], + "sample_captions": [ + "POV: They launched a podcast together and stopped speaking 3 episodes in.", + "Nothing louder than two influencers unfollowing each other silently.", + "Friendship status: Filmed one collab, hated each other forever." + ] + }, + { + "name": "Rebrand Wipeouts", + "description": "From edgy to wholesome overnight — the content whiplash is real, and the followers are confused.", + "meme_angles": [ + "Scrubbing their feed clean", + "Changing aesthetic weekly", + "Sudden pivots to wellness", + "Pretending the past never happened", + "Fans watching in confusion" + ], + "keywords": ["influencer rebrand", "aesthetic shift meme", "clean feed memes", "social media pivot", "brand identity chaos"], + "sample_captions": [ + "Me: *blinks* Influencer: New vibe. New life. New trauma.", + "POV: They posted an apology yesterday and now they’re a crystal healer.", + "From scandal to self-help queen in 3 slides or less." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/33_restaurant_staff.json b/database/seeders/data/json/category/33_restaurant_staff.json new file mode 100644 index 0000000..4f50f2b --- /dev/null +++ b/database/seeders/data/json/category/33_restaurant_staff.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Restaurant Staff", + "description": "Behind the scenes of hospitality hell — where ‘the customer is always right’ is the biggest lie ever told.", + "keywords": [ + "restaurant memes", + "server life", + "waitress humor", + "kitchen chaos", + "hospitality nightmares", + "tip trauma", + "karen encounters", + "front of house memes", + "closing shift pain", + "food service jokes" + ], + "subcategories": [ + { + "name": "Karen Attacks", + "description": "When customers weaponize their entitlement and demand a manager over the ice cube count.", + "meme_angles": [ + "Screaming over mild inconvenience", + "Demanding free meals for no reason", + "Threatening bad Yelp reviews", + "Personal insults during rush hour", + "The haircut of doom" + ], + "keywords": ["karen meme", "customer entitlement", "hospitality karens", "bad customer behavior", "front of house drama"], + "sample_captions": [ + "POV: She wants to speak to the manager because the fries were ‘too hot.’", + "Karen: ‘I know the owner.’ Me: ‘So do I. He hates you.’", + "Nothing ruins a shift faster than a customer with THAT haircut." + ] + }, + { + "name": "Kitchen Meltdowns", + "description": "A pressure cooker of chaos, sarcasm, and yelling — mostly about tickets and missing ranch.", + "meme_angles": [ + "Expediting during a rush", + "Running out of key ingredients", + "Burnt food and blame games", + "Chef rants Gordon Ramsay style", + "Losing sanity over modifications" + ], + "keywords": ["kitchen chaos", "line cook life", "restaurant kitchen memes", "chef meltdown", "back of house drama"], + "sample_captions": [ + "POV: Ticket printer starts screaming and so do you.", + "Chef: ‘No more subs!’ Customer: ‘Can I get it vegan and gluten-free?’", + "Kitchen rule #1: If it’s quiet, something’s very, very wrong." + ] + }, + { + "name": "Tip Trauma", + "description": "Living off tips... but apparently your soul, time, and dignity are only worth 2 bucks and a smiley face.", + "meme_angles": [ + "Getting $1 on a $200 tab", + "Tipped with compliments", + "Large party, no tip", + "Getting stiffed during a double shift", + "Church crowd tips sinfully bad" + ], + "keywords": ["bad tips", "server tip memes", "restaurant tipping culture", "tip trauma", "hospitality underpaid"], + "sample_captions": [ + "POV: They said ‘great service!’ and left you $0.00.", + "You just ran a 14-top solo and they left... coins.", + "Me: Worked a 10-hour shift. Tip: ‘God bless you ❤️’" + ] + }, + { + "name": "Closing Duties", + "description": "When the clock says close, but the door says ‘open until someone ruins your night.’", + "meme_angles": [ + "Last-minute walk-ins", + "Re-cleaning a spotless section", + "Manager adding sidework", + "Clocking out mentally at 8pm", + "Shutting down with rage and regret" + ], + "keywords": ["restaurant closing shift", "server sidework", "last call chaos", "closing pain", "restaurant clean up memes"], + "sample_captions": [ + "Me: Sweeping at 10:59. Door: *opens slowly*", + "POV: They walked in 1 minute before close and ordered the entire menu.", + "Closing duties: Where your will to live gets mopped up too." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/34_commuter_life.json b/database/seeders/data/json/category/34_commuter_life.json new file mode 100644 index 0000000..7c58c1c --- /dev/null +++ b/database/seeders/data/json/category/34_commuter_life.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Commuter Life", + "description": "Welcome to the daily gauntlet of public transportation — where time stops, personal space is a myth, and headphones are sacred.", + "keywords": [ + "commuter memes", + "public transport humor", + "train delay jokes", + "subway etiquette", + "commuting rage", + "headphone survival", + "rush hour chaos", + "bus people memes", + "metro struggles", + "transit life" + ], + "subcategories": [ + { + "name": "Train Delays & Missed Stops", + "description": "Time is a suggestion, and your train is late — again.", + "meme_angles": [ + "Train arrives just as you give up", + "Delays with zero explanation", + "Running for a train that doesn’t wait", + "Getting stuck between stations", + "Missing your stop while zoning out" + ], + "keywords": ["train delay meme", "missed stop joke", "late to work again", "subway glitch", "commuter struggles"], + "sample_captions": [ + "POV: You ran 6 blocks and still watched the train pull away slowly.", + "Transit app: ‘On time.’ Reality: ‘You’re gonna cry.’", + "Zoned out for 30 seconds. Ended up 4 cities away." + ] + }, + { + "name": "Subway Etiquette Nightmares", + "description": "Where personal space, volume control, and basic hygiene go to die.", + "meme_angles": [ + "Feet on seats", + "Playing music out loud", + "Food with questionable smells", + "Staring contests with strangers", + "Loud phone calls in packed cars" + ], + "keywords": ["subway etiquette meme", "train pet peeves", "public transport sins", "bad commuter behavior", "subway culture"], + "sample_captions": [ + "POV: It’s 8AM and someone’s eating tuna next to you.", + "There’s always that one guy… with no headphones and zero shame.", + "Me: Just trying to exist. Stranger: *stares aggressively for 4 stops*" + ] + }, + { + "name": "Public Transport Rage", + "description": "You’ve never felt true anger until your bus driver skips your stop for no reason.", + "meme_angles": [ + "Buses that never show up", + "Packed like sardines", + "Driver skips your stop while making eye contact", + "Screaming kids + broken A/C", + "Arguments over seats" + ], + "keywords": ["bus rage", "train commuter pain", "transport meltdown", "rush hour rage", "transit anger meme"], + "sample_captions": [ + "POV: Your bus was 15 minutes late and still left you behind.", + "Commuting is just rage management in motion.", + "Me: Clinging to a pole. Train: *jerks violently*" + ] + }, + { + "name": "Headphone Survival Mode", + "description": "Noise-canceling? No. Sanity-preserving? Absolutely.", + "meme_angles": [ + "Pretending not to hear anything", + "Avoiding small talk with earbuds in", + "Volume at max to drown chaos", + "AirPods as social armor", + "Forgetting headphones = instant regret" + ], + "keywords": ["headphone commuter meme", "airpod silence", "anti-social travel vibes", "earbud survival", "commuting introvert"], + "sample_captions": [ + "Me: *headphones in* Stranger: ‘Hi can I ask—’ Me: *shakes head violently*", + "If I forgot my headphones, just cancel the day.", + "Noise-canceling headphones: Blocking drama since 2016." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/35_roommate_problems.json b/database/seeders/data/json/category/35_roommate_problems.json new file mode 100644 index 0000000..2471c9b --- /dev/null +++ b/database/seeders/data/json/category/35_roommate_problems.json @@ -0,0 +1,94 @@ +{ + "category": { + "name": "Roommate Problems", + "description": "Living with other people is all fun and games until someone touches the thermostat, leaves one spoon in the sink, or writes a passive-aggressive sticky note.", + "keywords": [ + "roommate memes", + "shared living humor", + "passive aggressive notes", + "dish drama", + "thermostat fights", + "living with roommates", + "fridge politics", + "chores conflict", + "rent sharing stress", + "roomie problems" + ], + "subcategories": [ + { + "name": "Dishes Showdown", + "description": "Sink wars and broken dish truces — no one remembers putting the plate there, but everyone hates it.", + "meme_angles": [ + "Dishes pile up for weeks", + "‘I didn’t use it’ excuse", + "Dish rotation drama", + "One mug in the sink and WWIII starts", + "Avoiding eye contact with the mess" + ], + "keywords": ["dirty dish memes", "roommate chore war", "sink disaster", "kitchen mess humor", "dish passive aggression"], + "sample_captions": [ + "POV: The sink is Mount Everest, but it’s ‘not mine.’", + "Roommate logic: If I pretend not to see it, it doesn’t exist.", + "The only thing more permanent than our lease is this pile of dishes." + ] + }, + { + "name": "Thermostat Wars", + "description": "Hot vs. cold. Hoodie vs. tank top. No middle ground — only temperature-based chaos.", + "meme_angles": [ + "Secretly adjusting the thermostat", + "One person always freezing", + "Sweating indoors in winter", + "Thermostat set to unreasonable extremes", + "Passive fights over the power bill" + ], + "keywords": ["thermostat meme", "room temperature arguments", "roommate heating fight", "cold vs hot house", "indoor climate drama"], + "sample_captions": [ + "POV: It’s 68 degrees and they’re wearing a parka inside.", + "Me: Adjusts thermostat by 1 degree. Roommate: ‘WHY IS IT A SAUNA NOW?’", + "Our thermostat is just a Cold War simulator." + ] + }, + { + "name": "Passive Aggression Olympics", + "description": "Why fight when you can weaponize sticky notes, loud dishwashing, and aggressively silent treatment?", + "meme_angles": [ + "Sticky note wars", + "Pointed texts in the group chat", + "Loud cleaning to make a point", + "Subtle fridge labeling", + "Not-so-subtle door slams" + ], + "keywords": ["passive aggressive roommate", "sticky note meme", "roommate tension", "chore drama", "shared space microaggressions"], + "sample_captions": [ + "Roommate left a note that says ‘Do YOUR dishes ❤️’ on my forehead.", + "Passive aggression level: Turned the WiFi off at 9pm.", + "Our communication style is mostly door slams and dramatic sighs." + ] + }, + { + "name": "Shared Space Drama", + "description": "Living room? More like disputed territory.", + "meme_angles": [ + "Roommate always in the common space", + "Taking calls on speaker", + "Furniture arrangement battles", + "TV volume turf wars", + "Personal stuff all over shared areas" + ], + "keywords": [ + "shared space problems", + "roommate living room meme", + "common area takeover", + "speakerphone rage", + "roomie boundary issues" + ], + "sample_captions": [ + "POV: You walk in and your roommate is napping in your spot. Again.", + "Shared space, but one of us thinks they own it.", + "Their stuff is everywhere but somehow I’m ‘cluttered.’" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/36_startup_culture.json b/database/seeders/data/json/category/36_startup_culture.json new file mode 100644 index 0000000..b01f424 --- /dev/null +++ b/database/seeders/data/json/category/36_startup_culture.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Startup Culture", + "description": "The chaotic world of coffee-fueled ideas, buzzword addiction, and pretending you’re ‘disrupting’ something while barely making rent.", + "keywords": [ + "startup memes", + "founder life", + "VC funding humor", + "hustle culture", + "pitch deck jokes", + "burn rate panic", + "series A struggles", + "tech bro satire", + "founder delusion", + "startup chaos" + ], + "subcategories": [ + { + "name": "Hustle Propaganda", + "description": "The grind never stops... even if your body, mind, and social life do.", + "meme_angles": [ + "Sleep is for the weak", + "Rise and grind LinkedIn posts", + "Working 90-hour weeks for ‘equity’", + "Founders glorifying burnout", + "Romanticizing overwork" + ], + "keywords": ["hustle meme", "grind culture parody", "startup overwork", "toxic productivity", "linkedin hustle satire"], + "sample_captions": [ + "Me: Haven’t slept in 36 hours. Also me: ‘I love the startup grind.’", + "Startups: Where burnout is a badge of honor.", + "POV: You’re hustling... to make your boss rich." + ] + }, + { + "name": "Burn Rate Panic", + "description": "We just raised $10 million and somehow can't afford office snacks.", + "meme_angles": [ + "Spending like a Fortune 500, earning like a lemonade stand", + "Watching runway vanish in real time", + "Panicking over financial dashboards", + "Cutting costs but still throwing launch parties", + "Asking interns to bring their own laptops" + ], + "keywords": ["startup burn rate", "spending panic", "runway anxiety", "startup financial meme", "cost-cutting chaos"], + "sample_captions": [ + "VCs gave us $5M. We spent $4.9M on a neon sign and beanbags.", + "Burn rate check: terrifying but aesthetic.", + "Me: ‘Should we cut expenses?’ CEO: ‘Let’s host a party for morale.’" + ] + }, + { + "name": "Founder's Delusions", + "description": "They think they’re Steve Jobs. They’re actually one bad sprint from collapse.", + "meme_angles": [ + "Thinking your idea is revolutionary (but it’s just a food delivery app)", + "Overconfidence in pitch decks", + "Micromanaging in the name of ‘vision’", + "Ignoring feedback like it’s a sport", + "Spiritual quotes to avoid accountability" + ], + "keywords": ["founder meme", "startup delusion", "ceo ego joke", "pitch deck satire", "tech visionary parody"], + "sample_captions": [ + "CEO: ‘We’re not a company. We’re a movement.’ Reality: It’s a PDF tool.", + "Startup founder energy: ‘We’re building the Uber of socks.’", + "Me: ‘This makes no sense.’ Founder: ‘Exactly. That’s innovation.’" + ] + }, + { + "name": "Slack Wars", + "description": "Where emojis are weapons and notifications never sleep.", + "meme_angles": [ + "Midnight Slack pings", + "Passive-aggressive threads", + "Emoji overload for fake engagement", + "‘Let’s circle back’ = Never again", + "Slack status as emotional armor" + ], + "keywords": ["slack meme", "startup communication chaos", "emoji weaponry", "message overload", "asynchronous warfare"], + "sample_captions": [ + "POV: It’s 11:52pm and your boss just @-ed you on Slack.", + "Slack: Where unread messages = anxiety.", + "He replied with just 👀. I’m spiraling now." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/37_tarot.json b/database/seeders/data/json/category/37_tarot.json new file mode 100644 index 0000000..1708723 --- /dev/null +++ b/database/seeders/data/json/category/37_tarot.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Tarot", + "description": "A chaotic and mystical dive into card pulls, intuitive panic, and spiritual overthinking. For the witches, the curious, and the dramatically delusional.", + "keywords": ["tarot", "oracle", "divination", "card pull", "intuition", "psychic", "witchtok", "spiritual memes"], + "subcategories": [ + { + "name": "Card Pull Regret", + "description": "When the cards tell you something you didn’t want to hear… and now you’re spiraling.", + "meme_angles": [ + "Pulled the tower card and immediately saged my phone", + "Me: I want the truth. Tarot: You're the problem. Me: 😐", + "Why did I pull cards if I wasn’t ready for emotional destruction?" + ], + "keywords": ["tarot", "tower card", "regret", "card panic", "truth hurts"], + "sample_captions": [ + "Asked the cards if I should text my ex. They fell out of my hands. Message received.", + "Pulled one card and got a whole life read. Rude.", + "That moment when the cards roast you harder than your therapist ever could." + ] + }, + { + "name": "Tarot for Exes", + "description": "Dangerous territory. Pulling cards about that one person you definitely shouldn’t be asking about… again.", + "meme_angles": [ + "Did another love spread and got the devil card. Again.", + "Tarot said 'block them' but my heart said 'just one more spread'", + "If I pull one more ‘unfinished business’ card I’m suing the deck" + ], + "keywords": ["exes", "love reading", "toxic cycles", "tarot obsession", "bad decisions"], + "sample_captions": [ + "Me shuffling the deck like the answer will change if I try again", + "Tarot said 'move on' but I pulled 3 clarifiers just to be sure", + "Love reading? More like delusion confirmation spread 💔🔮" + ] + }, + { + "name": "Intuitive Hits", + "description": "When your inner witch mode activates and the reading is scarily accurate.", + "meme_angles": [ + "Pulled the exact card I dreamt about last night 🤯", + "That smug look when your intuition was right all along", + "Me acting surprised like I didn’t already *feel* that energy" + ], + "keywords": ["intuition", "accurate reading", "gut feeling", "synchronicity", "tarot magic"], + "sample_captions": [ + "When the vibes, the cards, and the playlist all align ✨", + "I don’t need closure, the cards gave me prophecy", + "The cards told me what I knew, but prettier" + ] + }, + { + "name": "Misreadings & Panic", + "description": "That moment when you interpret a tarot card completely wrong and send yourself into a spiral for no reason.", + "meme_angles": [ + "Misread the 3 of cups and thought my friends were plotting against me", + "Thought I was cursed for 3 days because I misread a reversed card", + "Looked up the meaning on 4 different sites and still got anxiety" + ], + "keywords": ["misreading", "panic", "confusion", "card chaos", "tarot overthinking"], + "sample_captions": [ + "Google said the card means success. Instagram said heartbreak. Now I’m just confused.", + "Tarot: you’re fine. Me: *internal screaming anyway*", + "That one friend who pulls a death card and thinks they're dying tomorrow" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/38_dating_app_users.json b/database/seeders/data/json/category/38_dating_app_users.json new file mode 100644 index 0000000..583d15a --- /dev/null +++ b/database/seeders/data/json/category/38_dating_app_users.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Dating App Users", + "description": "The chaotic arena of swipes, DMs, bios that scream 🚩, and the ghosting games that leave you wondering if they ever existed at all.", + "keywords": [ + "dating app memes", + "tinder humor", + "bumble cringe", + "hinge disasters", + "swipe fatigue", + "bio red flags", + "ghosting games", + "modern dating satire", + "left swipe jokes", + "dm horror stories" + ], + "subcategories": [ + { + "name": "Left Swipe Burnout", + "description": "You’ve swiped so much you’ve seen the same person three times in different cities.", + "meme_angles": [ + "Swiping as a full-time job", + "Seeing recycled profiles", + "Feeling nothing at 100+ matches", + "Accidental right swipes", + "Endless scrolling with zero connections" + ], + "keywords": ["swipe fatigue", "tinder exhaustion", "hinge humor", "dating app burnout", "modern dating parody"], + "sample_captions": [ + "POV: You’re swiping while watching a movie, eating dinner, and questioning your life choices.", + "Me: Swipes left on 300 people. Also me: ‘Why am I still single?’", + "My thumb has carpal tunnel from dodging red flags." + ] + }, + { + "name": "Ghosting Olympics", + "description": "Gold medal in disappearing acts, no closure necessary.", + "meme_angles": [ + "Great conversation… then nothing", + "Getting ghosted after making plans", + "Vanishing mid-convo", + "People reappearing months later like nothing happened", + "Ghosting pre-date and post-date" + ], + "keywords": ["ghosting meme", "modern dating ghost", "tinder vanish", "no closure joke", "text then disappear"], + "sample_captions": [ + "We were talking for 5 days straight and then he ascended to the cloud.", + "Ghosted so hard I checked if I imagined the convo.", + "Their last message was ‘haha yeah’ and then eternal silence." + ] + }, + { + "name": "Red Flag Bingo", + "description": "From fish pics to 'sapiosexual' — the bios basically write themselves.", + "meme_angles": [ + "All pictures with sunglasses", + "Bio says ‘Fluent in sarcasm’", + "Poses with tigers, fish, or cars", + "‘Looking for something real’ — has 3 photos", + "Self-proclaimed alpha/beta/crypto enthusiast" + ], + "keywords": ["bio red flag", "tinder profile cringe", "dating profile meme", "bumble bio joke", "profile red flag bingo"], + "sample_captions": [ + "His entire profile was one blurry gym mirror selfie and ‘Just ask.’", + "If her bio says ‘no drama’ — she IS the drama.", + "Every dude: Fish pic. Car. Group photo. Mystery." + ] + }, + { + "name": "DM Cringe", + "description": "Because no one needs to open with ‘u up?’ ever again.", + "meme_angles": [ + "Pickup lines from 2009", + "‘Hey’ with nothing else", + "Too much too soon", + "Weirdly aggressive openers", + "Unsolicited poetry or gym advice" + ], + "keywords": ["dm meme", "tinder message fail", "bad pickup lines", "hinge opener cringe", "bumble dm disaster"], + "sample_captions": [ + "His opener was ‘You look like my future wife.’ Sir, please log off.", + "Me: Posts one selfie. DM: ‘You should smile more.’", + "The bar is so low, and they’re still tripping over it." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/39_youtube_twitch_streamers.json b/database/seeders/data/json/category/39_youtube_twitch_streamers.json new file mode 100644 index 0000000..9b676e0 --- /dev/null +++ b/database/seeders/data/json/category/39_youtube_twitch_streamers.json @@ -0,0 +1,100 @@ +{ + "category": { + "name": "YouTube & Twitch Streamers", + "description": "The chaotic world of live chat trolls, over-hyped intros, monetization anxiety, and yelling 'Don't forget to like and subscribe!' while silently dying inside.", + "keywords": [ + "streamer memes", + "twitch jokes", + "youtube burnout", + "donation drama", + "algorithm stress", + "stream setup humor", + "chat chaos", + "simp wars", + "like and subscribe memes", + "content creator life" + ], + "subcategories": [ + { + "name": "Chat Chaos", + "description": "Where 90% of your job is pretending trolls aren’t winning.", + "meme_angles": [ + "Mods asleep, chat in flames", + "Trying to stream while chat asks the same question 78 times", + "Every viewer: ‘Play something else’", + "Ignoring obvious trolls like a pro", + "Stream delay + fast chat = pure confusion" + ], + "keywords": ["twitch chat meme", "stream chaos", "live stream problems", "chat trolls", "streamer frustration"], + "sample_captions": [ + "POV: You're answering the same question for the 14th time.", + "Mods: Gone. Chat: Absolute warzone.", + "Me: Playing a game. Chat: ‘Why aren’t you playing Fortnite?’" + ] + }, + { + "name": "Algorithm Anxiety", + "description": "You upload one video at the wrong time and YouTube buries your entire career.", + "meme_angles": [ + "Refreshing analytics obsessively", + "Videos tanking for no reason", + "Algorithm punishing consistency", + "Chasing trends that make no sense", + "Every title needs to be clickbait to survive" + ], + "keywords": ["youtube algorithm meme", "streamer burnout", "clickbait struggle", "creator stress", "upload time paranoia"], + "sample_captions": [ + "Me: Posts best video ever. YouTube: 3 views. Algorithm: 💀", + "Spend 12 hours editing. Title it wrong. Career over.", + "Algorithm said: ‘Not today, fam.’" + ] + }, + { + "name": "Donation Pressure", + "description": "When saying ‘thanks for the dono’ becomes a full-time job.", + "meme_angles": [ + "Panicking when donations slow down", + "Weird donation messages mid-game", + "Pretending a $1 dono didn’t sting", + "Reacting big to small donos for engagement", + "Juggling shoutouts, chat, and gameplay" + ], + "keywords": [ + "stream donation meme", + "twitch dono joke", + "youtube superchat humor", + "dono message chaos", + "streaming monetization stress" + ], + "sample_captions": [ + "Got a $0.99 donation. Time to fake a full-blown celebration.", + "Mid-fight: ‘Thanks for the $5, BigChungus69!’", + "Me: Gaming. Chat: ‘Why aren’t you thanking donos fast enough?’" + ] + }, + { + "name": "Smash That Like Energy", + "description": "Screaming ‘smash that like’ like your livelihood depends on it—because it kinda does.", + "meme_angles": [ + "Overhyped intros every time", + "Clickbait thumbnails with 😱 face", + "‘Don’t forget to ring that bell’ culture", + "Stretching 8 minutes for ad revenue", + "Liking your own video for the algorithm gods" + ], + "keywords": [ + "like and subscribe meme", + "content creator cringe", + "youtube intro parody", + "clickbait culture", + "smash that like joke" + ], + "sample_captions": [ + "‘Smash that like’ — said for the 10th time in a 6-minute video.", + "If I don’t beg for likes, the algorithm will smite me.", + "Thumbnail: 😱 Title: ‘YOU WON’T BELIEVE THIS’. Reality: mild gameplay." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/3_dating_relationships.json b/database/seeders/data/json/category/3_dating_relationships.json new file mode 100644 index 0000000..7c96f04 --- /dev/null +++ b/database/seeders/data/json/category/3_dating_relationships.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Dating & Relationships", + "description": "Where swipes become stress, green flags are rare, and ghosting is more common than good mornings.", + "keywords": [ + "dating", + "relationships", + "ghosting", + "breakups", + "text anxiety", + "toxic behavior", + "red flags", + "situationships", + "commitment issues", + "modern love" + ], + "subcategories": [ + { + "name": "Ghosting Culture", + "description": "Disappearing without warning — it’s not magic, it’s dating in 2025.", + "meme_angles": [ + "Typing… then vanishing", + "First date → last text", + "Unread for 3 days", + "Online but ignoring", + "When ‘seen’ is the last word" + ], + "keywords": ["ghosting memes", "dating apps", "texting problems", "unmatched", "left on read"], + "sample_captions": [ + "POV: You got ghosted so hard you're checking if they're still alive.", + "He said ‘goodnight’ 4 days ago… and never woke up, I guess.", + "Modern dating: One text away from vanishing forever." + ] + }, + { + "name": "Red Flag Radar", + "description": "You saw the 🚩 and thought it was a carnival. We all did.", + "meme_angles": [ + "Ignoring gut feelings", + "Overlooking bad behavior", + "‘I can fix them’ energy", + "They lovebomb then vanish", + "Toxic patterns disguised as charm" + ], + "keywords": ["red flags", "toxic dating", "bad partner traits", "relationship regrets", "dating mistakes"], + "sample_captions": [ + "POV: You thought his 'do not disturb' was romantic. It wasn’t.", + "Me: notices 6 red flags. Also me: Wow, he’s mysterious.", + "Fell for the bare minimum like it was premium love." + ] + }, + { + "name": "Text Anxiety & Misreads", + "description": "Where every ‘k’ feels like a breakup and every ‘haha’ is overanalyzed.", + "meme_angles": [ + "Reading too much into tone", + "Drafting 5 responses, sending none", + "Waiting for the dots", + "Triple-checking punctuation", + "Screenshotting texts for group analysis" + ], + "keywords": ["text anxiety", "overthinking", "chat decoding", "dry texting", "mixed signals"], + "sample_captions": [ + "Me rereading their ‘ok’ like it’s a breakup letter.", + "POV: You sent ‘hey’ and waited 8 hours to spiral.", + "I saw the message preview, panicked, and never opened it again." + ] + }, + { + "name": "Breakup & Moving On", + "description": "Breakups, rebounds, blocking, unblocking, and pretending to be totally fine.", + "meme_angles": [ + "Checking their story while acting over it", + "Mutual friends being spies", + "Late night text temptation", + "Breakup glow-up phase", + "Crying to playlists" + ], + "keywords": ["breakup memes", "relationship end", "moving on", "emotional healing", "ex drama"], + "sample_captions": [ + "POV: You blocked them, then unblocked just to check their story. Again.", + "Breakup rule #1: Delete the playlist you made together.", + "Me after deleting our chat: Who am I kidding? I have screenshots." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/40_customer_support_agents.json b/database/seeders/data/json/category/40_customer_support_agents.json new file mode 100644 index 0000000..736385d --- /dev/null +++ b/database/seeders/data/json/category/40_customer_support_agents.json @@ -0,0 +1,100 @@ +{ + "category": { + "name": "Customer Support Agents", + "description": "The daily battlefield of irate callers, fake empathy scripts, broken systems, and pretending ‘Have you tried restarting?’ is a real solution.", + "keywords": [ + "customer support memes", + "call center humor", + "tech support parody", + "angry customer jokes", + "scripted responses satire", + "customer service burnout", + "support agent life", + "let me transfer you meme", + "hold music PTSD", + "troubleshooting comedy" + ], + "subcategories": [ + { + "name": "Angry Caller PTSD", + "description": "Because every call could be a rage-fueled therapy session... for them.", + "meme_angles": [ + "Getting yelled at for a company's mistake", + "Instant aggression before you say hello", + "Being blamed for global outages", + "Customer: ‘I pay your salary!’", + "Muting to scream into the void" + ], + "keywords": ["angry caller meme", "customer rage jokes", "support trauma humor", "blame the agent", "call center stress"], + "sample_captions": [ + "Caller: Screaming. Me: ‘I understand your frustration, sir.’", + "I’m just the messenger, not the villain.", + "POV: You picked up and got verbally assaulted instantly." + ] + }, + { + "name": "Scripted Response Hell", + "description": "Saying ‘I do apologize for the inconvenience’ while crying inside.", + "meme_angles": [ + "Repeating scripted empathy phrases", + "When the script doesn’t fit the issue", + "Pretending to escalate while just ‘checking notes’", + "Saying sorry 20 times per call", + "Knowing the script better than your own birthday" + ], + "keywords": [ + "support script meme", + "robotic response humor", + "empathy script parody", + "call center dialogue joke", + "fake helpfulness comedy" + ], + "sample_captions": [ + "‘I do apologize for the inconvenience’ — me, for the 87th time today.", + "Caller: furious. Me: stuck reading from The Sacred Scroll of Customer Service.", + "I’m paid to sound helpful, not be helpful." + ] + }, + { + "name": "‘Let Me Transfer You’ Tactics", + "description": "Because if I can’t fix it, someone else will — or at least they’ll pretend to.", + "meme_angles": [ + "Transferring calls to nowhere", + "Customer bounces between departments", + "Saying ‘Let me connect you’ to get 3 minutes of peace", + "Being transferred back to yourself", + "‘That’s another department’ defense" + ], + "keywords": ["support transfer meme", "wrong department joke", "call loop humor", "transfer culture satire", "support ping-pong"], + "sample_captions": [ + "Transferring them so I don’t cry on the call.", + "Me: Transfers them. Them: Gets me again. Both of us: stunned silence.", + "Every support call is just a round-trip ticket to the wrong department." + ] + }, + { + "name": "Patience Breakdown", + "description": "From calm to crisis in 6 calls or less.", + "meme_angles": [ + "Fake smile slowly fading", + "Day starts with optimism, ends with burnout", + "Losing faith in humanity by lunch", + "Juggling 3 chats and a phone call", + "Smiling through tech failures and customer rage" + ], + "keywords": [ + "call center breakdown meme", + "customer patience humor", + "support job burnout", + "agent meltdown jokes", + "multitasking misery" + ], + "sample_captions": [ + "My headset heard more sighs than words today.", + "Me: smiling on the outside, screaming on hold music inside.", + "POV: The 6th customer today just asked to speak to the CEO." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/41_movie_cinema_buffs.json b/database/seeders/data/json/category/41_movie_cinema_buffs.json new file mode 100644 index 0000000..278a710 --- /dev/null +++ b/database/seeders/data/json/category/41_movie_cinema_buffs.json @@ -0,0 +1,79 @@ +{ + "category": { + "name": "Movies & Cinema Buffs", + "description": "For the people who treat Letterboxd like a journal and have trust issues from movie trailers that showed too much. Cinephile frustrations, popcorn-fueled hot takes, and the eternal battle over which version is canon.", + "keywords": [ + "movies", + "cinema", + "film buffs", + "letterboxd", + "plot holes", + "director’s cuts", + "sequels", + "film criticism", + "overhyped endings" + ], + "subcategories": [ + { + "name": "Plot Holes", + "description": "When the entire storyline collapses because of one missing logic detail that no one else noticed—or everyone did.", + "meme_angles": [ + "Me pausing the movie to rant about that one scene that makes no sense", + "‘It’s just a movie’ — tell that to my overthinking brain", + "One plot hole and I’m rewriting the script in my head" + ], + "keywords": ["logic gap", "story flaws", "movie mistakes", "nitpicking", "cinema sins"], + "sample_captions": [ + "Me spotting a plot hole 3 minutes in: this film is now my enemy", + "They spent $200M and forgot how doors work", + "Plot armor so strong, I felt personally attacked" + ] + }, + { + "name": "Overhyped Endings", + "description": "When the buildup is 10/10 and the ending is aggressively mid.", + "meme_angles": [ + "Waited 2.5 hours for that?", + "Twitter said 'life-changing' — it was not", + "Me explaining why the ending ruined everything" + ], + "keywords": ["movie endings", "disappointment", "hype fatigue", "cinema letdowns"], + "sample_captions": [ + "That ending? Jail.", + "I saw the ending and immediately lowered my rating to 2 stars", + "Plot twist? More like plot trip and fall" + ] + }, + { + "name": "Sequel Fatigue", + "description": "When every story has a part 2, 3, prequel, reboot, and animated spinoff and you're just tired.", + "meme_angles": [ + "The movie ended perfectly. Studio: not if we reboot it 4 times", + "I didn’t need a sequel, I needed closure", + "Hollywood saw success and said 'let’s do it again forever'" + ], + "keywords": ["franchise fatigue", "reboots", "prequels", "cash grabs", "cinematic universes"], + "sample_captions": [ + "Movie: *barely ends* — Studio: Here’s a trilogy no one asked for", + "Sequel to the reboot of the remake of the original spin-off… I’m exhausted", + "Can we normalize letting stories end?" + ] + }, + { + "name": "Director’s Cut Wars", + "description": "Because the original wasn’t enough and now we argue over which version counts as canon.", + "meme_angles": [ + "Watched the 4-hour cut and still confused", + "Studio cut vs director’s cut: battle of vibes and vision", + "Cinema nerds arguing like it's life or death" + ], + "keywords": ["director's cut", "extended versions", "studio interference", "fan edits", "movie nerd drama"], + "sample_captions": [ + "Me pretending I didn’t watch the wrong cut and missed the whole point", + "The director’s cut turned it into a masterpiece… or a mess", + "They released 3 cuts and none explained the ending" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/42_tv_shows_dramas_series.json b/database/seeders/data/json/category/42_tv_shows_dramas_series.json new file mode 100644 index 0000000..ed2ae93 --- /dev/null +++ b/database/seeders/data/json/category/42_tv_shows_dramas_series.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "TV Shows & Drama Series", + "description": "For the binge-watchers, plot theorists, and emotionally damaged fans who never recovered from That Finale. From cliffhangers to character betrayals, this category is peak fandom energy.", + "keywords": ["tv shows", "drama series", "binge watching", "cliffhangers", "shipping wars", "plot twists", "fandom"], + "subcategories": [ + { + "name": "Cliffhangers", + "description": "When a show ends the episode and your soul on the same beat. Bonus points if it’s a season finale with no renewal confirmed.", + "meme_angles": [ + "Netflix: Are you still watching? Me: YES I NEED ANSWERS", + "Season finale ends and now I have trust issues", + "Me refreshing Twitter for leaks like my life depends on it" + ], + "keywords": ["season finales", "suspense", "mid-season cliffhangers", "renewal anxiety"], + "sample_captions": [ + "Show ends on a cliffhanger — me staring at the credits like they owe me rent", + "They really ended it like that and said 'see you next year'", + "This cliffhanger has me emotionally hostage" + ] + }, + { + "name": "Binge Burnout", + "description": "You watched 8 hours straight and now your brain feels like mashed potatoes. Worth it? Debatable.", + "meme_angles": [ + "Just one more episode... now the sun is rising", + "Eyes tired, snacks gone, still hitting 'next episode'", + "Me after finishing an entire season in one day: empty but satisfied" + ], + "keywords": ["binge culture", "tv fatigue", "streaming", "series marathons"], + "sample_captions": [ + "Binged 10 episodes and now I’m emotionally unemployed", + "I finished the whole season and forgot to eat", + "This is not self-care. This is a coping mechanism" + ] + }, + { + "name": "Toxic Characters", + "description": "We love to hate them or hate that we love them. Either way, they live rent-free in our brains.", + "meme_angles": [ + "I would fix him (he killed 3 people and gaslit a nation)", + "Red flag? More like red banner and I still stan", + "The villain had a point and I stand by it" + ], + "keywords": ["anti-heroes", "problematic faves", "villains", "chaotic characters"], + "sample_captions": [ + "He’s the worst person alive and I’d die for him", + "I know she’s toxic but that’s MY girl", + "When the morally gray character finally snaps: 👀" + ] + }, + { + "name": "Shipping Wars", + "description": "Because the only thing more dramatic than the show is the fandom fighting over who's endgame.", + "meme_angles": [ + "They breathed in the same room — I ship it", + "My ship didn’t sail, it crashed and burned", + "Canon means nothing to me. My ship is forever" + ], + "keywords": ["ships", "fan wars", "otp", "non-canon love", "fandom drama"], + "sample_captions": [ + "The writers hate me and my ship. It’s personal", + "I shipped them before the show even aired", + "They made eye contact — that’s chemistry, Your Honor" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/43_science_academia.json b/database/seeders/data/json/category/43_science_academia.json new file mode 100644 index 0000000..948c34e --- /dev/null +++ b/database/seeders/data/json/category/43_science_academia.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Science & Academia", + "description": "For students, researchers, and anyone deep in the academic trenches. From thesis meltdowns and peer review rage to lab disasters and research spirals that lead nowhere fast.", + "keywords": ["academia", "science", "research", "grad school", "PhD life", "peer review", "lab chaos", "thesis stress"], + "subcategories": [ + { + "name": "Research Rabbit Holes", + "description": "You start with one paper and suddenly it’s 4am, 87 tabs open, and you’ve changed your thesis topic three times.", + "meme_angles": [ + "Went looking for one citation… emerged 3 hours later with a crisis", + "Researching like I’m trying to crack the Da Vinci Code", + "The deeper I dig, the less I know. Science." + ], + "keywords": ["literature review", "citation chasing", "information overload", "research burnout"], + "sample_captions": [ + "Accidentally found 12 new subtopics I’m not qualified to write about", + "Started with one PDF, now I’m drowning in 47 browser tabs", + "My thesis is now a conspiracy theory with references" + ] + }, + { + "name": "Peer Review Pain", + "description": "Getting feedback that’s more soul-crushing than constructive. Sometimes it feels personal.", + "meme_angles": [ + "Reviewer 2 woke up and chose violence", + "‘Interesting idea’ — academic for 'you tried'", + "Reading reviewer comments like it’s hate mail" + ], + "keywords": ["peer review", "academic publishing", "journal rejection", "revisions", "reviewer 2"], + "sample_captions": [ + "Reviewer 2 didn’t just critique my paper, they attacked my identity", + "Me pretending I understand their suggestions while crying inside", + "Peer review: the academic version of Fight Club" + ] + }, + { + "name": "Lab Chaos", + "description": "Experiments that don’t cooperate, equipment that breaks at the worst moment, and results that make zero sense.", + "meme_angles": [ + "My pipette is lying to me again", + "Experiment failed but at least the panic is reproducible", + "The only constant in my lab is the chaos" + ], + "keywords": ["lab life", "experiments", "data disasters", "equipment failure", "science struggle"], + "sample_captions": [ + "My experiment failed but my anxiety is thriving", + "Equipment said 'not today'", + "Results: 🔥 Error bars: 🚨 Conclusions: ❓" + ] + }, + { + "name": "Thesis Anxiety", + "description": "The never-ending draft, the looming deadline, and the existential dread of trying to contribute ‘original knowledge’.", + "meme_angles": [ + "Every time I write one sentence, I need a 30-minute break", + "‘Just finish your thesis’ — as if it’s that easy", + "Me explaining my topic: *internal screaming*" + ], + "keywords": ["grad school stress", "PhD life", "dissertation", "academic writing", "procrastination"], + "sample_captions": [ + "My thesis is 99% panic and 1% content", + "If I reread this intro one more time, I’ll lose it", + "Thesis update: still spiraling" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/44_fashion_aesthetics.json b/database/seeders/data/json/category/44_fashion_aesthetics.json new file mode 100644 index 0000000..b56a840 --- /dev/null +++ b/database/seeders/data/json/category/44_fashion_aesthetics.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Fashion & Aesthetics", + "description": "For the chronically overdressed, vibe curators, and victims of trend cycles. From thrifted treasures and fit pics to regrets that live forever on IG. Fashion is pain — and also personality.", + "keywords": ["fashion", "style", "aesthetic", "outfits", "fit check", "trend cycle", "thrifting", "OOTD"], + "subcategories": [ + { + "name": "Fit Checks", + "description": "The mirror selfie that took 45 minutes. Because you didn’t spend all that effort just to wear it in silence.", + "meme_angles": [ + "Spent 2 hours getting ready to go nowhere", + "Fit check: yes I’m overdressed for CVS again", + "The outfit is doing all the emotional labor today" + ], + "keywords": ["ootd", "outfit", "mirror selfie", "style moment", "personal style"], + "sample_captions": [ + "Wearing this to overthink in style", + "Dressed like I have plans (I don’t)", + "My outfit deserves more attention than my personality" + ] + }, + { + "name": "Trend Whiplash", + "description": "The microtrends changed again and now last month’s 'it girl' aesthetic is giving historical artifact.", + "meme_angles": [ + "Just bought this and TikTok said it’s over", + "Keeping up with trends is my cardio", + "Fashion trend: blink and it’s cringe" + ], + "keywords": ["microtrends", "aesthetic shifts", "style pressure", "fashion FOMO"], + "sample_captions": [ + "I committed to a trend and now I’m being bullied for it", + "Fashion moves faster than my bank account", + "Last season’s must-have is today’s red flag" + ] + }, + { + "name": "Thrift Finds", + "description": "That dopamine hit from scoring something iconic for $6. Or finding a cursed item that haunts your dreams.", + "meme_angles": [ + "Thrift store haul: 90% slay, 10% haunted", + "Me digging through racks like it’s an archeological dig", + "Found a $3 blazer and now I have a personality" + ], + "keywords": ["thrifting", "vintage finds", "secondhand style", "budget fashion"], + "sample_captions": [ + "This fit cost less than a latte", + "Thrifted this and now I feel morally superior", + "Me gatekeeping my thrift find like national treasure" + ] + }, + { + "name": "Outfit Regrets", + "description": "You thought you ate. But now the photos live in your phone like ghosts of fashion past.", + "meme_angles": [ + "I was confident until I saw the group photo", + "The outfit looked better in my head", + "My closet is full but nothing is wearable" + ], + "keywords": ["style mistakes", "bad outfits", "fashion regrets", "wardrobe crises"], + "sample_captions": [ + "Wore this once. Still paying for it emotionally", + "The drip was a myth that day", + "Fashion risk? More like fashion emergency" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/45_language_learners.json b/database/seeders/data/json/category/45_language_learners.json new file mode 100644 index 0000000..d482ee8 --- /dev/null +++ b/database/seeders/data/json/category/45_language_learners.json @@ -0,0 +1,78 @@ +{ + "category": { + "name": "Language Learners", + "description": "A global struggle of Duolingo streak stress, pronunciation fails, and grammar spirals—served with a side of cultural confusion.", + "keywords": [ + "language learning", + "Duolingo", + "translations", + "accents", + "grammar", + "bilingual problems", + "foreign language memes", + "polyglot panic" + ], + "subcategories": [ + { + "name": "Duolingo Guilt", + "description": "That crushing feeling when the owl judges your life choices and your 3-day streak vanishes into shame.", + "meme_angles": [ + "Duolingo owl watching me ignore 9 notifications like it’s personal", + "3 days off Duolingo and I’m hiding like it’s tax season", + "The guilt hits different when Duo says 'We miss you.'" + ], + "keywords": ["Duolingo", "language apps", "streak stress", "guilt", "owl menace"], + "sample_captions": [ + "Me ignoring the owl like I didn’t promise to be fluent by summer 😬", + "Duolingo: 'Finish your lesson.' Me: *ghosts like it’s a situationship*", + "Duo didn’t threaten me today… and now I’m concerned" + ] + }, + { + "name": "Weird Translations", + "description": "Those absurd phrases that show up in lessons and make you question reality.", + "meme_angles": [ + "'The duck drinks milk' — WHY THO", + "Learning Spanish and suddenly I’m threatening someone's grandmother?", + "Language apps: 'I am a banana' — me: this can’t be useful" + ], + "keywords": ["translation fails", "weird sentences", "language apps", "nonsense phrases", "language humor"], + "sample_captions": [ + "Duolingo taught me how to say 'the cows wear shoes' but not how to ask for help", + "I wanted fluency. I got cursed sentences.", + "If I hear ‘the monkey writes a letter’ one more time… 🐒✉️" + ] + }, + { + "name": "Accent Anxiety", + "description": "The paralyzing fear of speaking out loud and sounding like a broken NPC.", + "meme_angles": [ + "Me rehearsing 'bonjour' 17 times before ordering a croissant", + "Brain: you know the word. Mouth: betrayal.", + "Said one word wrong and now I can never speak again" + ], + "keywords": ["accent", "pronunciation", "speaking fear", "language shame", "oral anxiety"], + "sample_captions": [ + "Practiced for weeks, panicked at 'hello'", + "Spoke one sentence and the locals switched to English 😩", + "Voice in my head: fluent. Voice IRL: *buffering*" + ] + }, + { + "name": "Grammar Panic", + "description": "The struggle of cases, conjugations, and rules that break themselves.", + "meme_angles": [ + "Spanish verb tenses really said: figure it out", + "Why does German have 4 cases and my brain has none?", + "English: makes no sense. Every other language: still confusing." + ], + "keywords": ["grammar", "syntax", "language rules", "confusion", "grammar memes"], + "sample_captions": [ + "Me: finally learned a rule. Language: here’s 6 exceptions.", + "Conjugation charts activate my fight or flight", + "Grammar said 'it depends' and now I’m spiraling" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/46_millennial_struggles.json b/database/seeders/data/json/category/46_millennial_struggles.json new file mode 100644 index 0000000..820cd47 --- /dev/null +++ b/database/seeders/data/json/category/46_millennial_struggles.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Millennial Struggles", + "description": "A generation caught between economic doom and cartoon nostalgia. From avocado-fueled budgeting crises to student loan trauma and housing market absurdity — it’s not a phase, it’s a survival meme.", + "keywords": ["millennials", "student debt", "nostalgia", "avocado toast", "rent crisis", "burnout", "housing"], + "subcategories": [ + { + "name": "Avocado Budgeting", + "description": "The eternal debate: save for a house or order brunch? Spoiler: neither is happening.", + "meme_angles": [ + "Millennial budgeting: $6 latte daily, but stress about buying socks", + "Cut avocado toast, still can’t afford a house", + "Spending $18 at brunch like I don’t cry over rent" + ], + "keywords": ["budgeting", "spending guilt", "avocado toast", "millennial money"], + "sample_captions": [ + "Me: *buys coffee* Also me: ‘Why am I broke?’", + "Financial planning is just me crying at a spreadsheet", + "This toast cost 3% of my rent" + ] + }, + { + "name": "Nostalgia Spirals", + "description": "Because the only thing we own is our childhood memories.", + "meme_angles": [ + "Rewatching cartoons because adulthood is illegal", + "The smell of crayons healed more than therapy ever could", + "Millennial mood: listening to early 2000s bangers and dissociating" + ], + "keywords": ["90s kids", "early 2000s", "childhood nostalgia", "comfort shows"], + "sample_captions": [ + "This song unlocked a core memory *and* a midlife crisis", + "My personality is 40% childhood shows, 60% debt", + "Buying toys I never got as a kid to heal adult trauma" + ] + }, + { + "name": "Housing Crisis Humor", + "description": "Because boomers still think we just aren't trying hard enough.", + "meme_angles": [ + "Boomer advice: just buy a house! Me: with which organ?", + "Rent is due and so is my mental breakdown", + "House prices be like: sell your soul and maybe" + ], + "keywords": ["real estate", "rent", "landlords", "housing struggle"], + "sample_captions": [ + "Every Zillow search ends in heartbreak", + "Current location: not owning property", + "Landlord raised rent because I breathed too loud" + ] + }, + { + "name": "Student Debt Doom", + "description": "We went to college to chase dreams and graduated with a lifetime payment plan.", + "meme_angles": [ + "Degree: $80,000. Job prospects: ‘entry level, 10 years experience required’", + "Student loan emails are the new horror genre", + "Education is priceless — until you see the interest" + ], + "keywords": ["student loans", "debt", "college regret", "financial burden"], + "sample_captions": [ + "Still paying for a degree I mentally checked out of in year 2", + "My diploma came with a side of generational debt", + "If student loans vanish, I ascend to a higher plane" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/47_wedding_culture.json b/database/seeders/data/json/category/47_wedding_culture.json new file mode 100644 index 0000000..de61e0c --- /dev/null +++ b/database/seeders/data/json/category/47_wedding_culture.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Wedding Culture", + "description": "Weddings used to be about love. Now it’s seating chart diplomacy, budget breakdowns, and emotionally charged group chats. Whether you’re the bride, a guest, or stuck on a group thread from hell — no one escapes wedding chaos.", + "keywords": ["weddings", "bridezilla", "group chat", "seating chart", "budget", "bridesmaids", "event planning", "drama"], + "subcategories": [ + { + "name": "Brideszilla Drama", + "description": "From color-coded meltdowns to sobbing over tablecloths — it’s her day… and your nightmare.", + "meme_angles": [ + "Bride screamed because the napkins were 'eggshell' not 'ivory'", + "The wedding is in 9 months and we’re already on threat level red", + "Bridesmaid group chat = emotional hostage situation" + ], + "keywords": ["bridezilla", "wedding stress", "planning panic", "control freak"], + "sample_captions": [ + "Just got assigned a ‘smiling tone’ for the bride’s vision board", + "When she says ‘no drama’ but assigns seating by zodiac", + "This wedding has a 100-slide PowerPoint. I’m scared" + ] + }, + { + "name": "Seating Chart Nightmares", + "description": "Nothing tests diplomacy like deciding who sits near Aunt Linda or your ex.", + "meme_angles": [ + "Trying to seat divorced relatives without starting WW3", + "Why does the table map look like a crime scene investigation", + "Made one wrong move and now I'm seated with the children" + ], + "keywords": ["seating chart", "family dynamics", "wedding logistics", "awkward tables"], + "sample_captions": [ + "Assigned to the weird cousin table again. Cool cool cool", + "This seating chart required a PhD in peacekeeping", + "Accidentally seated two exes together. Oops?" + ] + }, + { + "name": "Overbudget Meltdown", + "description": "Started with Pinterest dreams, ended with a second mortgage.", + "meme_angles": [ + "Spent $10k so the guests could say ‘nice wedding’ once", + "Budget: $5,000. Actual: national debt", + "Florist quote made me black out" + ], + "keywords": ["wedding budget", "finance stress", "overpriced", "planning regrets"], + "sample_captions": [ + "Me: Let’s keep it small. Also me: Orders custom neon sign", + "Paid $3,500 for centerpieces no one noticed", + "Wedding planning is just crying while on Etsy" + ] + }, + { + "name": "Group Chat Chaos", + "description": "Where friendships go to die and 89 unread messages live.", + "meme_angles": [ + "12 people, 3 time zones, one dress code argument", + "This group chat is now legally binding", + "Left for 5 minutes, came back to a spreadsheet war" + ], + "keywords": ["bridesmaids", "groomsmen", "coordination", "chaotic group chat"], + "sample_captions": [ + "Group chat has more drama than the actual ceremony", + "Someone suggested matching shoes and now it’s civil war", + "Emotionally held hostage in the ‘Wedding Planning Squad’ chat" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/48_finance_budgeting.json b/database/seeders/data/json/category/48_finance_budgeting.json new file mode 100644 index 0000000..f8edf4b --- /dev/null +++ b/database/seeders/data/json/category/48_finance_budgeting.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Finance & Budgeting", + "description": "Welcome to adulthood, where impulse buys ruin your week, crypto keeps you up at night, and your expense tracker silently judges you. From get-rich-quick schemes to budgeting breakdowns — this is financial chaos, meme-ified.", + "keywords": ["money", "budgeting", "crypto", "finance", "scams", "expenses", "broke life", "financial anxiety"], + "subcategories": [ + { + "name": "Impulse Buys", + "description": "Why save when you can feel something for 5 seconds on Amazon?", + "meme_angles": [ + "Me: ‘I’m broke’ Also me: *buys glow-in-the-dark water bottle at 2am*", + "Budget destroyed by one unhinged trip to Target", + "Emotional support purchases > actual support" + ], + "keywords": ["shopping", "spending", "retail therapy", "online orders"], + "sample_captions": [ + "My cart was empty, not my soul", + "This $40 thing will solve all my problems (it won’t)", + "Impulse buying like it’s a coping mechanism (because it is)" + ] + }, + { + "name": "Passive Income Scams", + "description": "If one more guy DMs me about financial freedom...", + "meme_angles": [ + "‘Just buy my course’ bro has zero credentials", + "Woke up to 3 pyramid schemes in my inbox", + "Why does ‘passive income’ feel so aggressive?" + ], + "keywords": ["MLM", "side hustle", "online scams", "financial guru"], + "sample_captions": [ + "‘It’s not a pyramid scheme’ is the new red flag", + "This hustle culture just hustled me", + "Passive income pitch = instant anxiety" + ] + }, + { + "name": "Crypto FOMO", + "description": "Everyone’s a millionaire on paper. Just don’t ask about taxes.", + "meme_angles": [ + "Bought the dip. It dipped more.", + "Crypto bros explaining blockchain like it’s religion", + "Still waiting for the moon, stuck on Earth" + ], + "keywords": ["crypto", "bitcoin", "NFTs", "market crash", "FOMO"], + "sample_captions": [ + "This coin was supposed to change my life. It changed my debt", + "Every graph looks like a crime scene", + "To the moon (but I forgot my parachute)" + ] + }, + { + "name": "Expense Tracker Guilt", + "description": "The spreadsheet knows your sins.", + "meme_angles": [ + "That one coffee shows up 9 different ways", + "Every pie chart is a personal attack", + "Categorizing shame in Excel format" + ], + "keywords": ["budgeting", "spending habits", "money apps", "financial shame"], + "sample_captions": [ + "Opened my finance tracker and immediately closed it", + "Expense report said: ‘you’re the problem’", + "My tracker just sighed when I opened it" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/49_spiritual_life.json b/database/seeders/data/json/category/49_spiritual_life.json new file mode 100644 index 0000000..46c042c --- /dev/null +++ b/database/seeders/data/json/category/49_spiritual_life.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Spiritual Life", + "description": "In the quest for inner peace, we found crystal confusion, yoga-induced back pain, and overpriced retreats that delivered more mosquitoes than mindfulness. From manifestation meltdowns to meditation chaos — welcome to spiritual (dis)awakening.", + "keywords": ["spirituality", "mindfulness", "meditation", "manifestation", "retreat", "crystals", "zen", "chakra", "aura"], + "subcategories": [ + { + "name": "Meditation Failures", + "description": "They said to clear your mind. Your mind said ‘no.’", + "meme_angles": [ + "Tried to meditate, ended up making a grocery list in my head", + "Every time I try to ‘be present’ I remember something cringey from 2009", + "Headspace app vs. my chaotic brain: 0–1" + ], + "keywords": ["meditation", "mindfulness", "overthinking", "mental noise"], + "sample_captions": [ + "Me trying to meditate: *enters existential crisis instead*", + "Meditation was going well until my brain brought up my 5th grade talent show", + "My thoughts during ‘stillness’ could be a Marvel multiverse" + ] + }, + { + "name": "Retreat Regrets", + "description": "Paid $3,000 to cry in a tent and fight a raccoon for my granola bar.", + "meme_angles": [ + "Wanted healing, got bed bugs", + "Silent retreat roommate was a loud breather", + "Why is every retreat 400 miles from plumbing?" + ], + "keywords": ["spiritual retreat", "wellness getaway", "healing trip", "bad experience"], + "sample_captions": [ + "Healing retreat turned into mosquito exposure therapy", + "Paid $3K to journal my trauma in a moldy yurt", + "My inner child is colder than I am in this retreat tent" + ] + }, + { + "name": "Manifestation Confusion", + "description": "If I vision board any harder, I might tear a chakra.", + "meme_angles": [ + "Did the affirmations, lit the candle, still broke", + "Universe said ‘maybe later’ for the 9th time this week", + "Manifested peace, got three new problems instead" + ], + "keywords": ["manifesting", "law of attraction", "vision board", "universe"], + "sample_captions": [ + "Me: I deserve abundance. Universe: You deserve character development", + "Manifestation energy is 100%, results are pending", + "I manifested love, got an old situationship in my DMs instead" + ] + }, + { + "name": "Fake Zen Moments", + "description": "Looking peaceful on the outside, chaos on the inside.", + "meme_angles": [ + "Posted yoga pic, cried 5 minutes later", + "Crystals arranged. Energy? Still in shambles.", + "That wasn’t Zen, that was dissociation with aesthetics" + ], + "keywords": ["fake it till you make it", "wellness aesthetics", "spiritual flexing", "chaos under calm"], + "sample_captions": [ + "Looking calm, internally spiraling — it’s called balance", + "My aura is ✨vibing✨ but my inbox says otherwise", + "Zen mode: activated. Brain: buffering" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/4_family_life.json b/database/seeders/data/json/category/4_family_life.json new file mode 100644 index 0000000..b21c4b1 --- /dev/null +++ b/database/seeders/data/json/category/4_family_life.json @@ -0,0 +1,82 @@ +{ + "category": { + "name": "Family Life", + "description": "Where every conversation turns into a roast, everyone’s in your business, and no one knows how to use the remote but you.", + "keywords": [ + "family dynamics", + "siblings", + "parents", + "family events", + "generational gap", + "childhood trauma (funny)", + "overprotective moms", + "dad jokes", + "family arguments", + "awkward gatherings" + ], + "subcategories": [ + { + "name": "Parent Logic", + "description": "They raised you, judged you, and still call every app 'The Facebook.'", + "meme_angles": [ + "Overreacting to everything", + "Comparing you to other kids", + "Lectures for no reason", + "Tech illiteracy", + "Never wrong, ever" + ], + "keywords": ["parenting humor", "mom logic", "dad behavior", "parents and tech", "overprotective parenting"], + "sample_captions": [ + "POV: You show your mom a meme and now you're explaining Wi-Fi for the 6th time.", + "Me: slightly coughs. Mom: 'It’s because you don’t wear socks!'", + "My dad using Google: 'Why is my screen broken?' *typed into Facebook search bar*" + ] + }, + { + "name": "Sibling Wars", + "description": "Love, rivalry, and petty revenge that lasts a lifetime.", + "meme_angles": ["Snitching moments", "Blaming each other", "Fighting over the TV", "Oldest vs youngest privilege", "Petty sabotage"], + "keywords": ["sibling memes", "older sibling life", "younger sibling drama", "birth order", "family rivalry"], + "sample_captions": [ + "POV: You’re both getting yelled at and blaming each other louder.", + "Older sibling: Did something. Younger sibling: Cried. Me: Grounded.", + "Me watching my sibling get in trouble for something I did: 😌" + ] + }, + { + "name": "Family Gatherings & Events", + "description": "Loud, awkward, chaotic—and somehow you’re still expected to explain what your job is.", + "meme_angles": [ + "Nosy auntie questions", + "Forced to eat more food", + "Unwanted life advice", + "Same stories every year", + "Random karaoke sessions" + ], + "keywords": ["family dinner", "holiday chaos", "awkward reunions", "cousins vs cousins", "relatable family events"], + "sample_captions": [ + "POV: Auntie just asked why you're still single… in front of 23 people.", + "Me: *takes one bite* Grandma: 'You hate my cooking now?'", + "Family gathering math: 6 people + 4 microphones = 9-hour karaoke night." + ] + }, + { + "name": "Cousin Energy", + "description": "The co-conspirators, the chaos creators, the childhood sidekicks.", + "meme_angles": [ + "Childhood secrets", + "Inside jokes from 2004", + "Unspoken competition", + "Becoming strangers as adults", + "Reuniting like nothing changed" + ], + "keywords": ["cousin memes", "childhood chaos", "extended family fun", "family games", "cousin drama"], + "sample_captions": [ + "POV: You and your cousin about to get in trouble—again.", + "My cousin and I reuniting after 5 years like we saw each other yesterday.", + "Every cousin group has one who disappears after 9PM… and it’s always for drama." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/50_cars.json b/database/seeders/data/json/category/50_cars.json new file mode 100644 index 0000000..55268fe --- /dev/null +++ b/database/seeders/data/json/category/50_cars.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Car Life", + "description": "From road rage symphonies to check engine light mysteries, car life is a rollercoaster on wheels. Whether you're battling parallel parking anxiety or driving a car held together by prayer and duct tape, this category is for the forever-in-traffic crew.", + "keywords": ["cars", "driving", "traffic", "road rage", "mechanic", "gas prices", "check engine light", "car troubles"], + "subcategories": [ + { + "name": "Car Problems", + "description": "Your car broke down again? It’s called personality.", + "meme_angles": [ + "Check engine light has been on so long it’s basically a co-pilot", + "Mechanic: ‘That’ll be $1,200’ Me: *cries in used Honda*", + "Every noise while driving is now a horror movie soundtrack" + ], + "keywords": ["breakdown", "check engine", "mechanic", "repair"], + "sample_captions": [ + "The car still runs. It also screams, but it runs.", + "My engine makes jazz noises now", + "Driving with the AC off, radio muted, and 2 prayers just to get home" + ] + }, + { + "name": "Road Rage & Driving Fails", + "description": "You’re calm until someone forgets how to merge.", + "meme_angles": [ + "I become a different person when someone doesn’t use a turn signal", + "The road is full of NPCs in real cars", + "Honking is my love language (but only passive-aggressive)" + ], + "keywords": ["road rage", "bad drivers", "traffic", "horn", "aggression"], + "sample_captions": [ + "Inner peace? Not behind the wheel", + "Merging? Never heard of her", + "One more bad lane change and I’m reporting this to God" + ] + }, + { + "name": "Gas Prices & Adulting", + "description": "Nothing like a $90 fill-up to humble you.", + "meme_angles": [ + "Gas is so expensive I’m about to jog to work", + "Adulting milestone: picking gas station based on price, not snacks", + "I drive by faith, fumes, and financial ruin" + ], + "keywords": ["gas", "fuel", "adulting", "expenses", "car budget"], + "sample_captions": [ + "Gas light’s on — spiritually and literally", + "My bank account flinched when I opened the fuel cap", + "Every fill-up is a financial thriller" + ] + }, + { + "name": "Car Culture & Personality", + "description": "Are you your car? Or is your car a reflection of your chaos?", + "meme_angles": [ + "Clean car people scare me. What do you hide?", + "Backseat full of fast food bags = mobile ecosystem", + "My bumper stickers say more than my therapist notes" + ], + "keywords": ["car interior", "car personality", "stickers", "modded cars"], + "sample_captions": [ + "Yes I talk to my car like it’s a person", + "My trunk is 80% chaos, 20% jumper cables", + "If my car could talk, it would file a noise complaint" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/51_introvert_life.json b/database/seeders/data/json/category/51_introvert_life.json new file mode 100644 index 0000000..730af93 --- /dev/null +++ b/database/seeders/data/json/category/51_introvert_life.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Introvert Life", + "description": "For the homebodies, the ghosters, the ‘seen zone’ champs and party-escape artists. If solitude is your self-care and social battery your arch nemesis, this is your sanctuary.", + "keywords": ["introvert", "social battery", "alone time", "small talk", "group chats", "ghosting", "anxiety", "party avoidance"], + "subcategories": [ + { + "name": "Recharge Rituals", + "description": "The sacred art of turning off your phone, disappearing, and watching Netflix with snacks no one else touches.", + "meme_angles": [ + "Weekend plans: ✨nothing✨", + "Me after one social event: I need a week off", + "Social battery drained after saying ‘hi’ to 3 people" + ], + "keywords": ["alone time", "recharging", "weekend alone", "peace and quiet"], + "sample_captions": [ + "Socializing was fun… for 5 minutes", + "This is my recovery arc (feat. fuzzy socks and silence)", + "Do not disturb: recharging like an old Nokia" + ] + }, + { + "name": "Small Talk Horror", + "description": "Why does ‘So, what do you do?’ feel like a personal attack?", + "meme_angles": [ + "I'd rather wrestle a bear than make small talk at a wedding", + "When someone says ‘tell me about yourself’ and you forget who you are", + "Small talk: the reason I fake phone calls in elevators" + ], + "keywords": ["awkward conversation", "social anxiety", "small talk", "introvert panic"], + "sample_captions": [ + "‘So, what do you do?’ ✨sweats profusely✨", + "Introvert Olympics: surviving small talk without crying", + "Mentally preparing to say ‘good morning’ to coworkers" + ] + }, + { + "name": "Party Dodge Skills", + "description": "Sorry I missed your party… I was home, thriving in silence and comfy clothes.", + "meme_angles": [ + "Every time I RSVP ‘maybe’ just know I meant ‘no’", + "The art of coming up with last-minute excuses: mastered", + "Going out? I already took off my pants" + ], + "keywords": ["party skipping", "RSVP anxiety", "FOMO vs JOMO", "excuses", "comfort zone"], + "sample_captions": [ + "I wasn’t busy, I was just emotionally unavailable", + "Dressed up to go out… to the kitchen", + "No plans tonight and that’s exactly how I planned it" + ] + }, + { + "name": "Group Chat Silence", + "description": "The unread messages grow, but so does your peace.", + "meme_angles": [ + "Me: adds nothing to the group chat but reads everything", + "Left on seen? No, I just didn’t see it. For 6 days", + "Introvert contribution: one emoji, once a month" + ], + "keywords": ["group chat", "seen zone", "ghosting", "digital introvert", "text anxiety"], + "sample_captions": [ + "I’m in 12 group chats and actively participate in none", + "When the group chat starts planning something and you immediately mute it", + "Socially present, spiritually vanished" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/52_perfectionist_struggles.json b/database/seeders/data/json/category/52_perfectionist_struggles.json new file mode 100644 index 0000000..21d510b --- /dev/null +++ b/database/seeders/data/json/category/52_perfectionist_struggles.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Perfectionist Struggles", + "description": "For the spreadsheet obsessives, the 'just one more tweak' artists, and the people who rewrite emails 12 times before sending. If ‘good enough’ gives you hives and you’re always two steps from burnout, this one’s too real.", + "keywords": ["perfectionism", "overthinking", "high standards", "burnout", "procrastination", "creative block", "anxiety"], + "subcategories": [ + { + "name": "Rewriting Emails 10x", + "description": "Nothing says ‘professional’ like deleting ‘Hi’ and rewriting it 8 different ways.", + "meme_angles": [ + "Me: types ‘Hi!’... deletes it. ‘Hello!’... deletes it. ‘Dear–’... spirals.", + "Spent more time writing the email than doing the actual task", + "When you reread your email and suddenly hate everything about it" + ], + "keywords": ["email anxiety", "professional communication", "typing panic", "email draft hell"], + "sample_captions": [ + "Email sent. Now to think about it for 3 days straight", + "How do you say ‘no worries’ professionally without sounding like a pushover?", + "Signed off with ‘Best’ and now I’m questioning my whole vibe" + ] + }, + { + "name": "Over-Planning Life", + "description": "Color-coded calendars, 50 tabs open, and still feeling behind. It’s a lifestyle.", + "meme_angles": [ + "I made a plan to make a plan and now I’m exhausted", + "Nothing is real unless it’s in the planner", + "Planner: full. Mind: chaos." + ], + "keywords": ["calendar chaos", "planning obsession", "organization spiral", "todo overload"], + "sample_captions": [ + "Made a 12-step plan just to go to the grocery store", + "If it’s not on my Notion board, it doesn’t exist", + "I organized my life into overwhelm" + ] + }, + { + "name": "Creative Block", + "description": "You want to make magic, but perfectionism keeps unplugging the inspiration.", + "meme_angles": [ + "Every idea dies the moment I try to make it perfect", + "Staring at a blank page like it personally offended me", + "Me: has 10 creative ideas. Also me: does none of them" + ], + "keywords": ["creative block", "art anxiety", "writer’s block", "perfectionist paralysis"], + "sample_captions": [ + "Too many ideas, not enough emotional stability", + "My brain said ‘create’ but my standards said ‘not good enough’", + "I started... then overthought it to death" + ] + }, + { + "name": "Fear of Mediocrity", + "description": "If it’s not brilliant, it’s worthless — at least according to the voice in your head.", + "meme_angles": [ + "Me: afraid of failing. Also me: afraid of succeeding at the wrong thing", + "Did I do well, or was it just acceptable and now I hate it?", + "If it’s not perfect, I don’t even want to try" + ], + "keywords": ["self-doubt", "imposter syndrome", "comparison trap", "perfectionist mindset"], + "sample_captions": [ + "I’d rather procrastinate than produce something mid", + "Chasing greatness and running from ‘meh’ at the same time", + "Trying to be exceptional is exhausting" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/53_home_improvement_diy.json b/database/seeders/data/json/category/53_home_improvement_diy.json new file mode 100644 index 0000000..eedb34e --- /dev/null +++ b/database/seeders/data/json/category/53_home_improvement_diy.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Home Improvement & DIY", + "description": "It looked easy on YouTube, but now there’s paint on the ceiling and a hole where the shelf should be. Whether you're a weekend warrior or a chaos crafter, this is for every ‘How hard could it be?’ that turned into 12 trips to the hardware store.", + "keywords": ["DIY", "home projects", "renovation", "tools", "Pinterest fails", "home hacks", "power tools", "interior design"], + "subcategories": [ + { + "name": "Pinterest vs. Reality", + "description": "The vision board was perfect. The outcome? A beautiful mess.", + "meme_angles": [ + "Me: *sees one DIY reel* Also me: 'I can totally build a floating bookshelf!'", + "Expectation: cozy minimalist. Reality: chaotic glue gun injuries", + "It was supposed to be ‘boho chic’ but now it’s ‘sad dorm room’" + ], + "keywords": ["expectation vs. reality", "craft fails", "interior aesthetic", "DIY mistakes"], + "sample_captions": [ + "Started a ‘simple DIY’ and now I need a structural engineer", + "Pinterest inspired me to ruin my weekend", + "Minimalist aesthetic? More like maximum regret" + ] + }, + { + "name": "Tool Time Struggles", + "description": "You either know exactly what a stud finder does, or you're winging it with a hammer and hope.", + "meme_angles": [ + "Step 1: Get tools. Step 2: Google how to use them.", + "I now own 6 screwdrivers and none of them fit", + "Thought I was handy. Now my shelf is a weapon" + ], + "keywords": ["tools", "hardware", "construction", "DIY confusion", "handyman fail"], + "sample_captions": [ + "Borrowed a drill. Now the wall vibrates when I sneeze", + "I don’t know what a torque wrench is, but I’m committed", + "Me: *measures twice* Also me: still off by 3 inches" + ] + }, + { + "name": "Renovation Overwhelm", + "description": "One ‘quick update’ turned into three months of dust and regret.", + "meme_angles": [ + "I just wanted a new backsplash. Now I’m in therapy", + "My house is 10% livable, 90% renovation chaos", + "HGTV lied to me and I want compensation" + ], + "keywords": ["home reno", "contractor life", "over budget", "fixer upper fatigue"], + "sample_captions": [ + "One small leak became a full bathroom remodel", + "This ‘weekend project’ has entered its 4th fiscal quarter", + "Demo day was fun. Rebuilding day is eternal suffering" + ] + }, + { + "name": "Decor Decisions & Design Fails", + "description": "Just because it’s trendy doesn’t mean it belongs in your living room.", + "meme_angles": [ + "I painted an accent wall and now I live in a mood swing", + "IKEA said ‘easy assembly’ and then emotionally ghosted me", + "That rug really tied the room together — in chaos" + ], + "keywords": ["decor", "interior design", "style mistakes", "furniture assembly"], + "sample_captions": [ + "Home aesthetic: whatever was on sale and matched vibes", + "My couch is a vibe. That vibe is back pain and regret", + "Bought a lamp that looks great but lights nothing" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/54_salary_life.json b/database/seeders/data/json/category/54_salary_life.json new file mode 100644 index 0000000..ecc6bf4 --- /dev/null +++ b/database/seeders/data/json/category/54_salary_life.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Salary Life", + "description": "You wait all month for it, it disappears in 24 hours. Whether you're living for payday, crying over deductions, or doing mental gymnastics to survive until the 1st, this one’s for the salaried warriors.", + "keywords": ["payday", "salary", "deductions", "monthly cycle", "bills", "cost of living", "direct deposit", "office life"], + "subcategories": [ + { + "name": "Payday High", + "description": "The brief moment of financial delusion when your account is full and you pretend you're rich.", + "meme_angles": [ + "Me on payday: ‘Drinks on me!’ Me two days later: ‘Anyone wanna split fries?’", + "Salary hits different when you forget about rent", + "Payday joy followed by an immediate Spotify, Netflix, and rent jump scare" + ], + "keywords": ["payday", "splurging", "temporary wealth", "celebrating paycheck"], + "sample_captions": [ + "Direct deposit: entered. Me: delusional", + "POV: your bank account saw the paycheck and immediately panicked", + "When your salary hits and you buy things like you're Jeff Bezos" + ] + }, + { + "name": "Vanishing Salary Syndrome", + "description": "From full balance to overdraft real quick. Where did it all go?", + "meme_angles": [ + "That awkward moment when your salary does a magic trick: now you see it, now you don’t", + "Paycheck breakdown: 10% rent, 10% food, 80% I don’t even know", + "Salary came in. Salary left. Nobody said goodbye" + ], + "keywords": ["salary gone", "money drain", "unexpected expenses", "monthly stress"], + "sample_captions": [ + "I blinked and my salary left for greener pastures", + "My salary is just a guest appearance in my account", + "Why is my wallet on ghost mode the second I get paid?" + ] + }, + { + "name": "Deductions Pain", + "description": "You thought you made X amount. Then taxes, insurance, and retirement plans said ‘lol nope.’", + "meme_angles": [ + "Gross salary and net salary are two completely different people", + "Me: I got a raise! Also me: *looks at paycheck* nvm", + "Payslip: You earned this! Also payslip: We took most of it, love ya tho" + ], + "keywords": ["taxes", "salary slip", "hidden deductions", "net vs gross"], + "sample_captions": [ + "Shoutout to my payslip for humbling me monthly", + "When your tax deduction feels like a breakup", + "Health insurance took more than my actual illnesses ever did" + ] + }, + { + "name": "Month-End Struggles", + "description": "That cursed last week before salary hits. Broke, broken, and budgeting with vibes.", + "meme_angles": [ + "Me calculating if I can survive the next 3 days on rice and vibes", + "Bank balance: ₹143. Emotionally? In debt", + "That ‘do I really need dinner?’ moment every 28th" + ], + "keywords": ["month-end", "budget crisis", "last week struggle", "salary countdown"], + "sample_captions": [ + "Currently accepting donations in the form of noodles and therapy", + "Broke but not broken. Okay maybe a little broken", + "My card got declined and I said ‘same’" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/55_debt_loans.json b/database/seeders/data/json/category/55_debt_loans.json new file mode 100644 index 0000000..4eac3a3 --- /dev/null +++ b/database/seeders/data/json/category/55_debt_loans.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Debt & Loan Life", + "description": "Student loans, EMIs, credit cards, and the haunting sound of financial responsibility. Whether you’re drowning in debt or just ignoring your bank's calls, this one’s for every swipe, borrow, and ‘I'll pay it off eventually.’", + "keywords": ["debt", "loan", "student loans", "EMIs", "credit card", "repayment", "interest", "money stress"], + "subcategories": [ + { + "name": "Student Loan Struggles", + "description": "You graduated years ago but your loan still thinks you’re in school — paying tuition to the grave.", + "meme_angles": [ + "Me: degree in hand. Loan: yeah but that’ll be $500/month forever", + "Student loan interest be like: ‘don’t forget me 😘’", + "I finished college but my debt refuses to graduate" + ], + "keywords": ["student loan", "education debt", "monthly payments", "graduate life"], + "sample_captions": [ + "Degree: $80K. Job: $40K. Math: illegal.", + "Still paying for the dorm room I barely slept in", + "Every time I think I’m free, Sallie Mae says ‘not so fast’" + ] + }, + { + "name": "Credit Card Chaos", + "description": "Buy now, cry every billing cycle. The cycle of swiping joy and statement panic.", + "meme_angles": [ + "Me: I’ll just use it for emergencies. Also me: buys concert tickets, again", + "That moment when you check your credit card bill and forget how to breathe", + "My credit card has seen me at my best… and my dumbest" + ], + "keywords": ["credit card", "spending habits", "interest", "minimum payment", "late fee panic"], + "sample_captions": [ + "Swiped with confidence, cried with the statement", + "I don’t rise and grind — I swipe and spiral", + "My credit card deserves an apology and a therapist" + ] + }, + { + "name": "EMI Exhaustion", + "description": "Every gadget, car, or house came with a long-term relationship — with monthly payments.", + "meme_angles": [ + "My EMI schedule has a tighter grip on me than my boss", + "I own this… in 34 more installments", + "It’s not mine. It’s the bank’s. I’m just holding it" + ], + "keywords": ["installments", "monthly payment", "mortgage", "auto loan", "possession illusion"], + "sample_captions": [ + "Bought it 2 years ago. Still paying like it’s brand new", + "Me: owns a car. Reality: the bank owns it and lets me drive", + "When your salary arrives and leaves for EMI duty" + ] + }, + { + "name": "Debt Denial & Coping", + "description": "You're broke, but you're vibing. Kind of. Sort of. Not really.", + "meme_angles": [ + "My debt is just background noise now. A soundtrack to my existence", + "I don’t check my account. If I can’t see it, it’s not real", + "I cope by calling it 'character building'" + ], + "keywords": ["coping", "money denial", "financial humor", "broke vibes", "mental debt math"], + "sample_captions": [ + "Debt? I prefer the term ‘ongoing financial romance’", + "My debt and I are in a long-term toxic relationship", + "Manifesting abundance while ignoring my loan app notifications" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/56_personal_productivity.json b/database/seeders/data/json/category/56_personal_productivity.json new file mode 100644 index 0000000..bcb9fa5 --- /dev/null +++ b/database/seeders/data/json/category/56_personal_productivity.json @@ -0,0 +1,69 @@ +{ + "category": { + "name": "Personal Productivity", + "description": "The chaotic pursuit of getting things done, staying focused, and battling the never-ending to-do list — with a healthy side of procrastination and guilt.", + "keywords": ["productivity", "time management", "to-do list", "focus", "motivation", "procrastination"], + "subcategories": [ + { + "name": "To-Do List Delusions", + "description": "The overly ambitious lists you make every morning… only to complete 1.5 things and rewrite the rest tomorrow.", + "meme_angles": [ + "Adding 'make to-do list' to the to-do list just to check something off", + "The thrill of writing tasks you’ve already done just to feel productive", + "Color-coded procrastination" + ], + "keywords": ["to-do list", "planning", "organization", "task overload"], + "sample_captions": [ + "me writing my to-do list knowing I’m gonna ignore half of it", + "my productivity: 10% doing things, 90% organizing how to do things", + "crossing off one task then taking a 3-hour reward break" + ] + }, + { + "name": "Time Block Breakdown", + "description": "When you plan your day down to the minute… and none of it goes according to schedule.", + "meme_angles": [ + "Blocking off 'deep work time' and using it to scroll", + "Schedule says 'workout' but body says nap", + "Calendar chaos with a side of denial" + ], + "keywords": ["time blocking", "schedule", "calendar chaos", "planning fail"], + "sample_captions": [ + "8:00–9:00: wake up and meditate\n8:30: already doomscrolling", + "my calendar looks organized until reality shows up", + "me time-blocking my day like I’m not gonna ignore it completely" + ] + }, + { + "name": "Procrastination Olympics", + "description": "Mastering the art of doing everything *except* the thing you actually need to do.", + "meme_angles": [ + "Cleaning your entire apartment to avoid one email", + "Starting 5 tasks simultaneously and finishing none", + "Becoming a productivity expert when you’re on a deadline" + ], + "keywords": ["procrastination", "avoidance", "distraction", "delaying tasks"], + "sample_captions": [ + "me watching productivity YouTube instead of being productive", + "why start the task when you can worry about starting the task", + "procrastination level: deeply committed to everything but the deadline" + ] + }, + { + "name": "Focus Struggles", + "description": "Trying to concentrate in a world of pings, snacks, and random thoughts about that embarrassing moment from 7 years ago.", + "meme_angles": [ + "Opening 10 tabs and forgetting why you opened any of them", + "Mind wanders off mid-task and never returns", + "Focus? Never met her" + ], + "keywords": ["focus", "distractions", "mental clutter", "multitasking"], + "sample_captions": [ + "me focusing for 5 minutes: needs a reward break", + "trying to work: *hears a bird outside* — instantly distracted", + "brain during work: what if ducks had jobs" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/5_friendships.json b/database/seeders/data/json/category/5_friendships.json new file mode 100644 index 0000000..e96e893 --- /dev/null +++ b/database/seeders/data/json/category/5_friendships.json @@ -0,0 +1,82 @@ +{ + "category": { + "name": "Friendships", + "description": "Where love, betrayal, chaos, and unmatched meme energy coexist in one group chat.", + "keywords": [ + "friendship memes", + "fake friends", + "besties", + "loyalty", + "friend drama", + "group chat chaos", + "ghosting friends", + "last-minute cancellations", + "emotional support friends", + "ride or die" + ], + "subcategories": [ + { + "name": "Fake Friends & Frenemies", + "description": "They smile in your face and talk behind your back — the seasonal subscriptions of your social life.", + "meme_angles": [ + "Backhanded compliments", + "Support that disappears", + "Shady behavior", + "Friend until you succeed", + "Vibes off, energy fake" + ], + "keywords": ["fake friend energy", "two-faced people", "friendship betrayal", "toxic friendships", "frenemy behavior"], + "sample_captions": [ + "POV: They cheer for you in public and compete in private.", + "That friend who disappears the second life gets good for you.", + "Some friendships come with expiration dates… and spoilers." + ] + }, + { + "name": "Group Chat Chaos", + "description": "250 unread messages, inside jokes, and one friend who never replies but always reads.", + "meme_angles": ["Typing... then nothing", "Planning fails", "Unread memes", "One silent lurker", "Chaos at 3AM"], + "keywords": ["group chat drama", "message overload", "friends online", "group planning chaos", "chat receipts"], + "sample_captions": [ + "Group chat: makes detailed plan. Us: still cancel last minute.", + "POV: You haven’t said anything in the group chat in 2 months but read everything.", + "Every group chat has: the clown, the ghost, the chaos, and the voice of reason." + ] + }, + { + "name": "Last-Minute Cancellers", + "description": "They said 'for sure' but you knew better than to get dressed.", + "meme_angles": [ + "Cancel culture: friendship edition", + "RSVPs that mean nothing", + "Fake hype friends", + "Getting stood up by besties", + "Rain checks every week" + ], + "keywords": ["flaky friends", "cancelled plans", "friendship letdown", "no-show habits", "excuses galore"], + "sample_captions": [ + "POV: Your friend hyped up the plan all week… then ghosted the day of.", + "Them: 'I can’t make it tonight.' Me: Already in pajamas, relieved.", + "Plans were made. Outfits were picked. And then… *canceled with a smiley face.*" + ] + }, + { + "name": "Loyalty & Ride-or-Die Energy", + "description": "Through chaos, heartbreak, and questionable decisions — they’re still standing by you.", + "meme_angles": [ + "The friend who hypes everything", + "Silent support crew", + "Emergency call ready", + "Petty on demand", + "Match your crazy" + ], + "keywords": ["best friend energy", "loyalty", "ride or die", "supportive friendships", "hype squad"], + "sample_captions": [ + "POV: You didn’t even explain. They said, 'Where we going?'", + "The real ones screenshot your texts before you delete them.", + "Bestie logic: I don’t need the full story — I just need to know who we mad at." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/6_pop_culture.json b/database/seeders/data/json/category/6_pop_culture.json new file mode 100644 index 0000000..48b9cd6 --- /dev/null +++ b/database/seeders/data/json/category/6_pop_culture.json @@ -0,0 +1,76 @@ +{ + "category": { + "name": "Pop Culture", + "description": "Where celebrities breathe and Twitter explodes, movie clichés never die, and every viral moment becomes your whole personality for a week.", + "keywords": [ + "pop culture", + "celebrity drama", + "award shows", + "movie tropes", + "viral moments", + "internet culture", + "trending", + "red carpet memes", + "spoiler culture", + "fandom chaos" + ], + "subcategories": [ + { + "name": "Celebrity Chaos", + "description": "When their lives become our drama — unsolicited opinions included.", + "meme_angles": ["Relationship news overload", "Instagram apologies", "PR relationships", "Twitter fights", "Red carpet weirdness"], + "keywords": ["celeb gossip", "celebrity tweets", "tabloid energy", "influencer drama", "celebrity clapbacks"], + "sample_captions": [ + "POV: You have no idea who this celebrity is, but you're still picking a side.", + "Another celebrity breakup just dropped. Guess love is cancelled again.", + "Celebs be like: ‘Respect my privacy’ — then post a 12-minute breakup video." + ] + }, + { + "name": "Movie & TV Tropes", + "description": "If you've seen one teen drama, you've seen them all — and we love it anyway.", + "meme_angles": [ + "Overused plot twists", + "Predictable endings", + "Villain redemption arcs", + "Love triangles that go nowhere", + "High school characters played by 30-year-olds" + ], + "keywords": ["tv clichés", "movie tropes", "streaming binging", "bad writing memes", "film nerd humor"], + "sample_captions": [ + "POV: It’s the same Netflix plot with a slightly different font.", + "Why do all high school shows look like they hired models in their 30s?", + "The villain: *commits crimes for 6 seasons* – Finale: 'But he had a sad childhood.'" + ] + }, + { + "name": "Awards Show Madness", + "description": "Where no one knows who won, but we all saw the outfit and the drama.", + "meme_angles": ["Cringe speeches", "Robbed nominees", "Red carpet fits", "On-stage drama", "Award show snubs"], + "keywords": ["Oscars", "Grammys", "Emmy moments", "red carpet memes", "award season chaos"], + "sample_captions": [ + "POV: You didn’t watch the show, but you’ve seen every meme from it.", + "Award show logic: Give the trophy to the third-best nominee for drama.", + "Celebs at award shows: ‘Thank you so much’ – Meanwhile Twitter: ‘This is rigged.’" + ] + }, + { + "name": "Viral Moments & Internet Reactions", + "description": "One second on TikTok and now it’s the only thing anyone talks about for 72 hours straight.", + "meme_angles": [ + "Blink-and-you-miss-it trends", + "Reposting the same meme 30 times", + "Main character of the week", + "Internet overreaction", + "Trend fatigue" + ], + "keywords": ["viral tiktok", "trending now", "internet drama", "meme of the day", "cancel culture"], + "sample_captions": [ + "POV: You missed Twitter for 2 hours and now the internet’s at war over toast.", + "Every week: new main character, new public meltdown.", + "Me pretending to understand the viral drama while catching up in the comments." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/7_entertainment.json b/database/seeders/data/json/category/7_entertainment.json new file mode 100644 index 0000000..7f1ea6d --- /dev/null +++ b/database/seeders/data/json/category/7_entertainment.json @@ -0,0 +1,88 @@ +{ + "category": { + "name": "Entertainment", + "description": "For the binge-watchers, spoiler dodgers, and fandom warriors who treat fictional characters like family.", + "keywords": [ + "netflix life", + "binge culture", + "spoiler memes", + "fandom drama", + "streaming addiction", + "new season drop", + "rewatch culture", + "cliffhanger pain", + "shipping wars", + "character deaths" + ], + "subcategories": [ + { + "name": "Binge-Watching Problems", + "description": "You said ‘just one episode’ — 8 hours later and it's sunrise.", + "meme_angles": [ + "No self-control with new shows", + "Finishing a season in one night", + "Watching on autoplay like it’s a job", + "Losing sleep for a cliffhanger", + "The 'Next Episode' button wins again" + ], + "keywords": ["netflix binge", "streaming habits", "episode marathon", "series addiction", "sleep-deprived viewer"], + "sample_captions": [ + "POV: Said 'just one episode'… now it's 3AM and you’re emotionally destroyed.", + "Netflix: 'Are you still watching?' Me: Physically yes, spiritually no.", + "The true villain? The ‘Next Episode’ button with no chill." + ] + }, + { + "name": "Spoiler Landmines", + "description": "Every scroll is a risk. Every friend is a liability.", + "meme_angles": [ + "Twitter ruins everything", + "That one friend who can’t shut up", + "Avoiding group chats", + "Spoilers in YouTube thumbnails", + "Spoiling yourself accidentally" + ], + "keywords": ["spoiler rage", "plot twist memes", "spoiler dodging", "social media danger", "trailer reveals too much"], + "sample_captions": [ + "Me dodging spoilers like it's an Olympic sport.", + "Friend: 'I won’t spoil anything.' Also friend: *describes the entire plot arc*", + "Scrolling TikTok after a finale: may as well read the Wikipedia plot summary." + ] + }, + { + "name": "Fandom Chaos", + "description": "Shipping wars, character stans, and online beef over fictional lives.", + "meme_angles": [ + "People fighting over fan theories", + "Protecting your favorite character", + "Rage quitting a show", + "Fandom inside jokes", + "The comments section warzone" + ], + "keywords": ["fandom life", "character obsession", "toxic fandom", "fandom memes", "stan culture"], + "sample_captions": [ + "POV: Your favorite character dies and now you're in a weeklong mourning arc.", + "This fandom? Pure chaos and passive-aggressive edits.", + "I’m not in a cult — I’m just deep in a fandom war over ships that never sailed." + ] + }, + { + "name": "Streaming Service Struggles", + "description": "Too many subscriptions, not enough good shows.", + "meme_angles": [ + "Switching platforms constantly", + "Half-watching everything", + "The subscription pile-up", + "Endless scroll with no decision", + "Watching nothing for hours" + ], + "keywords": ["streaming fatigue", "subscription overload", "decision paralysis", "watchlist anxiety", "streaming platform memes"], + "sample_captions": [ + "POV: You spent 40 minutes picking a show… and watched nothing.", + "Too many platforms, still nothing to watch. Capitalism wins again.", + "Me canceling one streaming service just to subscribe to three more." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/8_money_adulting.json b/database/seeders/data/json/category/8_money_adulting.json new file mode 100644 index 0000000..7f082c6 --- /dev/null +++ b/database/seeders/data/json/category/8_money_adulting.json @@ -0,0 +1,82 @@ +{ + "category": { + "name": "Money & Adulting", + "description": "Where every paycheck is already claimed, budgeting is a coping mechanism, and financial stability is a myth.", + "keywords": [ + "money problems", + "adulting struggle", + "rent due memes", + "broke life", + "budget chaos", + "debt humor", + "bill anxiety", + "living paycheck to paycheck", + "unexpected expenses", + "subscription regrets" + ], + "subcategories": [ + { + "name": "Rent & Bills Struggles", + "description": "They show up on time, every time — unlike your financial confidence.", + "meme_angles": [ + "Bills don’t care about feelings", + "Rent due on broke mode", + "Getting paid just to pay it back", + "Bill collector jump scare", + "Late fee life" + ], + "keywords": ["rent due", "bill cycle", "utility pain", "auto-debit regret", "financial panic"], + "sample_captions": [ + "POV: Just got paid. Also me: Rent, bills, food, and depression.", + "Me opening my bank app knowing full well it's giving ✨ trauma ✨.", + "Rent: due. Bills: stacked. Me: living like it's optional." + ] + }, + { + "name": "Budgeting Gone Wrong", + "description": "You tried to be responsible. The $6 coffee said otherwise.", + "meme_angles": [ + "Impulse buying sabotages everything", + "Spreadsheet optimism vs. real life", + "Budget until payday fails", + "Emotional spending", + "Splurging while broke" + ], + "keywords": ["budget failure", "bad at saving", "overdraft humor", "guilty purchases", "money coping"], + "sample_captions": [ + "Budget: $20/week on extras. Me: Spent $19.75 on boba.", + "Why does 'just one little treat' always cost $47.36?", + "Budgeting is easy — until life happens, and so does DoorDash." + ] + }, + { + "name": "Debt & Loans", + "description": "You don’t own your life — your student loan company does.", + "meme_angles": ["Student loan PTSD", "Credit card regrets", "Interest rate horror", "Minimum payment delusion", "Debt denial mode"], + "keywords": ["loan memes", "student debt", "credit card jokes", "debt humor", "financial ruin culture"], + "sample_captions": [ + "POV: Your student loans outlived your last 3 relationships.", + "Credit card: approved. Brain: denied.", + "Debt collectors really got that ‘don’t forget me’ energy." + ] + }, + { + "name": "Unexpected Expenses", + "description": "Car broke. Laptop died. And somehow the fridge joined in.", + "meme_angles": [ + "Life throws bills for fun", + "Nothing breaks when you're rich", + "Savings wiped in one day", + "Emergency funds who?", + "Surprise! It’s another financial crisis" + ], + "keywords": ["money emergency", "unexpected costs", "financial instability", "broke life realism", "emergency fund humor"], + "sample_captions": [ + "POV: You saved $100 and life said: 'Let me hold that real quick.'", + "Nothing humbles you like your car breaking down on payday.", + "Every time I get ahead, life hits me with an ‘oops’ expense." + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/9_food_eating.json b/database/seeders/data/json/category/9_food_eating.json new file mode 100644 index 0000000..249c670 --- /dev/null +++ b/database/seeders/data/json/category/9_food_eating.json @@ -0,0 +1,77 @@ +{ + "category": { + "name": "Food & Eating", + "description": "Whether it’s 2AM cravings, coffee dependence, or burning toast again — food is chaos, comfort, and comedy.", + "keywords": ["food", "eating", "coffee", "cooking", "delivery", "snacking", "dieting", "junk food", "takeout", "hunger"], + "subcategories": [ + { + "name": "Delivery Addiction", + "description": "Because cooking is a scam and delivery apps are our love language.", + "meme_angles": [ + "Ordering food while surrounded by groceries", + "Same order every time", + "Delivery fees vs willpower", + "Lying to yourself about cooking", + "Tracking your food like it's a race" + ], + "keywords": ["takeout", "delivery", "Uber Eats", "DoorDash", "food app"], + "sample_captions": [ + "POV: I have groceries at home but still order food like a millionaire.", + "Me refreshing the tracking page every 10 seconds like it's the stock market.", + "When the delivery fee costs more than your meal but you do it anyway." + ] + }, + { + "name": "Diets & Cheat Days", + "description": "Balancing kale smoothies with late-night ice cream because life is about compromise.", + "meme_angles": [ + "Starting a diet every Monday", + "Justifying cheat meals", + "Comparing salad to soul food", + "‘Healthy’ snacks that taste like cardboard", + "Lying to fitness apps" + ], + "keywords": ["diet", "cheat day", "healthy eating", "weight loss", "fitness food"], + "sample_captions": [ + "POV: I'm on a diet until someone offers me fries.", + "Me logging one almond as a full meal on my fitness app.", + "Day 1 of eating clean: already hate everything." + ] + }, + { + "name": "Coffee Addiction", + "description": "Running on caffeine, chaos, and pretending you like bitter bean juice.", + "meme_angles": [ + "First sip = instant personality", + "Needing coffee before basic tasks", + "Being dramatic about espresso", + "Judging others' orders", + "Surviving solely on iced coffee" + ], + "keywords": ["coffee", "caffeine", "espresso", "barista", "latte"], + "sample_captions": [ + "POV: I’m not a person until I’ve had coffee.", + "One coffee in and I’m suddenly ready to fix my life.", + "Iced coffee > emotional support." + ] + }, + { + "name": "Cooking Fails", + "description": "Burnt toast, YouTube recipes gone wrong, and trying to ‘wing it’ with zero skills.", + "meme_angles": [ + "Cooking without reading the full recipe", + "Setting off smoke alarms", + "Overcooking everything ‘just in case’", + "Trying to plate like a chef", + "Realizing you forgot an ingredient halfway" + ], + "keywords": ["cooking fail", "kitchen disaster", "burnt food", "home cook", "recipe gone wrong"], + "sample_captions": [ + "POV: You tried a ‘simple recipe’ and now your kitchen is on fire.", + "Cooking is just emotional damage in edible form.", + "Me: I can totally eyeball the measurements. Also me: *makes glue*" + ] + } + ] + } +} diff --git a/database/seeders/data/json/category/st1.schema.json b/database/seeders/data/json/category/st1.schema.json new file mode 100644 index 0000000..02f34a9 --- /dev/null +++ b/database/seeders/data/json/category/st1.schema.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": ["category"], + "properties": { + "category": { + "type": "object", + "required": ["name", "description", "keywords", "subcategories"], + "properties": { + "name": { "type": "string" }, + "description": { "type": "string" }, + "keywords": { + "type": "array", + "items": { "type": "string" } + }, + "subcategories": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "description", "meme_angles", "keywords", "sample_captions"], + "properties": { + "name": { "type": "string" }, + "description": { "type": "string" }, + "meme_angles": { + "type": "array", + "items": { "type": "string" } + }, + "keywords": { + "type": "array", + "items": { "type": "string" } + }, + "sample_captions": { + "type": "array", + "items": { "type": "string" } + } + } + } + } + } + } + } +} diff --git a/database/seeders/data/json/category/st1jsonschema.json.txt b/database/seeders/data/json/category/st1jsonschema.json.txt new file mode 100644 index 0000000..2caf9ee --- /dev/null +++ b/database/seeders/data/json/category/st1jsonschema.json.txt @@ -0,0 +1,68 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ST1JSON Schema", + "type": "object", + "properties": { + "category": { + "type": "object", + "required": ["name", "description", "keywords", "subcategories"], + "properties": { + "name": { + "type": "string", + "description": "The name of the main meme category (e.g. 'Work Life')" + }, + "description": { + "type": "string", + "description": "A short overview of the category's theme or tone" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + }, + "description": "General tags to help filter or search within the category" + }, + "subcategories": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": ["name", "description", "meme_angles", "keywords", "sample_captions"], + "properties": { + "name": { + "type": "string", + "description": "Subcategory title (e.g. 'Corporate')" + }, + "description": { + "type": "string", + "description": "Explains the vibe, setting, or memeable themes of the subcategory" + }, + "meme_angles": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Typical perspectives or scenes for memes in this subcategory" + }, + "keywords": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Search tags or filters specific to the subcategory" + }, + "sample_captions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Sample captions (POV, one-liners, etc.) for seeding meme generation" + } + } + } + } + } + } + }, + "required": ["category"] +} diff --git a/database/seeders/data/json/category/validate-st1.sh b/database/seeders/data/json/category/validate-st1.sh new file mode 100755 index 0000000..1f9518d --- /dev/null +++ b/database/seeders/data/json/category/validate-st1.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +SCHEMA="st1.schema.json" +VALIDATOR=$(command -v ajv) + +if [ -z "$VALIDATOR" ]; then + echo "❌ ajv-cli is not installed. Install it with: npm install -g ajv-cli" + exit 1 +fi + +echo "🔍 Validating ST1 JSON files using $SCHEMA..." +echo + +valid_count=0 +invalid_count=0 +invalid_files=() + +for file in *.json; do + if [ "$file" != "$SCHEMA" ]; then + echo "🧪 Validating $file..." + ajv validate -s "$SCHEMA" -d "$file" --strict=false + if [ $? -eq 0 ]; then + echo "✅ $file is valid." + ((valid_count++)) + else + echo "❌ $file is INVALID." + ((invalid_count++)) + invalid_files+=("$file") + fi + echo "---------------------------" + fi +done + +# Summary +echo "" +echo "📊 Validation Summary:" +echo "✅ Valid files: $valid_count" +echo "❌ Invalid files: $invalid_count" + +if [ $invalid_count -gt 0 ]; then + echo "🚫 Invalid file list:" + for f in "${invalid_files[@]}"; do + echo " - $f" + done +fi diff --git a/routes/test.php b/routes/test.php index 7a6cc43..cc38cc7 100644 --- a/routes/test.php +++ b/routes/test.php @@ -5,3 +5,5 @@ Route::get('/', [TestController::class, 'index']); Route::get('/populateDuration', [TestController::class, 'populateDuration']); + +Route::get('/writeMeme', [TestController::class, 'writeMeme']);