From e378245554e9bb714c6f6a4e419a86eb2aaffe93 Mon Sep 17 00:00:00 2001 From: ct Date: Tue, 17 Jun 2025 12:01:49 +0800 Subject: [PATCH] Update --- app/Helpers/FirstParty/AI/OpenAI.php | 111 ++++++++++++++++++ app/Http/Controllers/TestController.php | 11 ++ database/seeders/data/json/.DS_Store | Bin 0 -> 6148 bytes database/seeders/data/json/category/.DS_Store | Bin 0 -> 6148 bytes .../data/json/category/10_social_media.json | 77 ++++++++++++ .../data/json/category/11_fitness_life.json | 77 ++++++++++++ .../data/json/category/12_mental_health.json | 77 ++++++++++++ .../data/json/category/13_weekend_life.json | 88 ++++++++++++++ .../data/json/category/14_travel_life.json | 88 ++++++++++++++ .../data/json/category/15_retail_jobs.json | 88 ++++++++++++++ .../data/json/category/16_tech_life.json | 82 +++++++++++++ .../json/category/17_freelance_creative.json | 88 ++++++++++++++ .../data/json/category/18_housing_life.json | 88 ++++++++++++++ .../json/category/19_holidays_seasons.json | 88 ++++++++++++++ .../data/json/category/1_work_life.json | 76 ++++++++++++ .../data/json/category/20_pet_ownership.json | 88 ++++++++++++++ .../data/json/category/21_genz_humor.json | 88 ++++++++++++++ .../json/category/22_developers_coders.json | 88 ++++++++++++++ .../json/category/23_designers_creatives.json | 88 ++++++++++++++ .../json/category/24_crypto_finance_bros.json | 88 ++++++++++++++ .../seeders/data/json/category/25_gamers.json | 82 +++++++++++++ .../json/category/26_healthcare_workers.json | 88 ++++++++++++++ .../json/category/27_teachers_educators.json | 88 ++++++++++++++ .../json/category/28_parents_new_moms.json | 88 ++++++++++++++ .../data/json/category/29_astrology.json | 69 +++++++++++ .../data/json/category/2_school_college.json | 70 +++++++++++ .../data/json/category/30_boomer_logic.json | 88 ++++++++++++++ .../data/json/category/31_gen_alpha_kids.json | 88 ++++++++++++++ .../json/category/32_influencer_drama.json | 88 ++++++++++++++ .../json/category/33_restaurant_staff.json | 88 ++++++++++++++ .../data/json/category/34_commuter_life.json | 88 ++++++++++++++ .../json/category/35_roommate_problems.json | 94 +++++++++++++++ .../json/category/36_startup_culture.json | 88 ++++++++++++++ .../seeders/data/json/category/37_tarot.json | 69 +++++++++++ .../json/category/38_dating_app_users.json | 88 ++++++++++++++ .../category/39_youtube_twitch_streamers.json | 100 ++++++++++++++++ .../json/category/3_dating_relationships.json | 88 ++++++++++++++ .../category/40_customer_support_agents.json | 100 ++++++++++++++++ .../json/category/41_movie_cinema_buffs.json | 79 +++++++++++++ .../category/42_tv_shows_dramas_series.json | 69 +++++++++++ .../json/category/43_science_academia.json | 69 +++++++++++ .../json/category/44_fashion_aesthetics.json | 69 +++++++++++ .../json/category/45_language_learners.json | 78 ++++++++++++ .../category/46_millennial_struggles.json | 69 +++++++++++ .../json/category/47_wedding_culture.json | 69 +++++++++++ .../json/category/48_finance_budgeting.json | 69 +++++++++++ .../data/json/category/49_spiritual_life.json | 69 +++++++++++ .../data/json/category/4_family_life.json | 82 +++++++++++++ .../seeders/data/json/category/50_cars.json | 69 +++++++++++ .../data/json/category/51_introvert_life.json | 69 +++++++++++ .../category/52_perfectionist_struggles.json | 69 +++++++++++ .../category/53_home_improvement_diy.json | 69 +++++++++++ .../data/json/category/54_salary_life.json | 69 +++++++++++ .../data/json/category/55_debt_loans.json | 69 +++++++++++ .../category/56_personal_productivity.json | 69 +++++++++++ .../data/json/category/5_friendships.json | 82 +++++++++++++ .../data/json/category/6_pop_culture.json | 76 ++++++++++++ .../data/json/category/7_entertainment.json | 88 ++++++++++++++ .../data/json/category/8_money_adulting.json | 82 +++++++++++++ .../data/json/category/9_food_eating.json | 77 ++++++++++++ .../data/json/category/st1.schema.json | 42 +++++++ .../data/json/category/st1jsonschema.json.txt | 68 +++++++++++ .../data/json/category/validate-st1.sh | 45 +++++++ routes/test.php | 2 + 64 files changed, 4798 insertions(+) create mode 100644 app/Helpers/FirstParty/AI/OpenAI.php create mode 100644 database/seeders/data/json/.DS_Store create mode 100644 database/seeders/data/json/category/.DS_Store create mode 100644 database/seeders/data/json/category/10_social_media.json create mode 100644 database/seeders/data/json/category/11_fitness_life.json create mode 100644 database/seeders/data/json/category/12_mental_health.json create mode 100644 database/seeders/data/json/category/13_weekend_life.json create mode 100644 database/seeders/data/json/category/14_travel_life.json create mode 100644 database/seeders/data/json/category/15_retail_jobs.json create mode 100644 database/seeders/data/json/category/16_tech_life.json create mode 100644 database/seeders/data/json/category/17_freelance_creative.json create mode 100644 database/seeders/data/json/category/18_housing_life.json create mode 100644 database/seeders/data/json/category/19_holidays_seasons.json create mode 100644 database/seeders/data/json/category/1_work_life.json create mode 100644 database/seeders/data/json/category/20_pet_ownership.json create mode 100644 database/seeders/data/json/category/21_genz_humor.json create mode 100644 database/seeders/data/json/category/22_developers_coders.json create mode 100644 database/seeders/data/json/category/23_designers_creatives.json create mode 100644 database/seeders/data/json/category/24_crypto_finance_bros.json create mode 100644 database/seeders/data/json/category/25_gamers.json create mode 100644 database/seeders/data/json/category/26_healthcare_workers.json create mode 100644 database/seeders/data/json/category/27_teachers_educators.json create mode 100644 database/seeders/data/json/category/28_parents_new_moms.json create mode 100644 database/seeders/data/json/category/29_astrology.json create mode 100644 database/seeders/data/json/category/2_school_college.json create mode 100644 database/seeders/data/json/category/30_boomer_logic.json create mode 100644 database/seeders/data/json/category/31_gen_alpha_kids.json create mode 100644 database/seeders/data/json/category/32_influencer_drama.json create mode 100644 database/seeders/data/json/category/33_restaurant_staff.json create mode 100644 database/seeders/data/json/category/34_commuter_life.json create mode 100644 database/seeders/data/json/category/35_roommate_problems.json create mode 100644 database/seeders/data/json/category/36_startup_culture.json create mode 100644 database/seeders/data/json/category/37_tarot.json create mode 100644 database/seeders/data/json/category/38_dating_app_users.json create mode 100644 database/seeders/data/json/category/39_youtube_twitch_streamers.json create mode 100644 database/seeders/data/json/category/3_dating_relationships.json create mode 100644 database/seeders/data/json/category/40_customer_support_agents.json create mode 100644 database/seeders/data/json/category/41_movie_cinema_buffs.json create mode 100644 database/seeders/data/json/category/42_tv_shows_dramas_series.json create mode 100644 database/seeders/data/json/category/43_science_academia.json create mode 100644 database/seeders/data/json/category/44_fashion_aesthetics.json create mode 100644 database/seeders/data/json/category/45_language_learners.json create mode 100644 database/seeders/data/json/category/46_millennial_struggles.json create mode 100644 database/seeders/data/json/category/47_wedding_culture.json create mode 100644 database/seeders/data/json/category/48_finance_budgeting.json create mode 100644 database/seeders/data/json/category/49_spiritual_life.json create mode 100644 database/seeders/data/json/category/4_family_life.json create mode 100644 database/seeders/data/json/category/50_cars.json create mode 100644 database/seeders/data/json/category/51_introvert_life.json create mode 100644 database/seeders/data/json/category/52_perfectionist_struggles.json create mode 100644 database/seeders/data/json/category/53_home_improvement_diy.json create mode 100644 database/seeders/data/json/category/54_salary_life.json create mode 100644 database/seeders/data/json/category/55_debt_loans.json create mode 100644 database/seeders/data/json/category/56_personal_productivity.json create mode 100644 database/seeders/data/json/category/5_friendships.json create mode 100644 database/seeders/data/json/category/6_pop_culture.json create mode 100644 database/seeders/data/json/category/7_entertainment.json create mode 100644 database/seeders/data/json/category/8_money_adulting.json create mode 100644 database/seeders/data/json/category/9_food_eating.json create mode 100644 database/seeders/data/json/category/st1.schema.json create mode 100644 database/seeders/data/json/category/st1jsonschema.json.txt create mode 100755 database/seeders/data/json/category/validate-st1.sh 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 0000000000000000000000000000000000000000..70f36e5232445a15fb46d281821c00c891935cea GIT binary patch literal 6148 zcmeHK%}T>S5T0$T-BN@e6!aGGTCj~GikDF93mDOZN=;C*c+XNTCOx-d`B25M!_5AdW_9qwyvR#nQ@ZS(as0Ui)_{^V1+5k6OX- zl4fU0#o^2j!tRtaNHylZop# z8+FG$aHn-=a_FMHx4S=`R^-O^&e3V-K7L5lvtd)by1Iz$3utW^lBT!bCXwSS=W`G&^83S}aIH-i4#oVAiI&h%hM~asSNzkUd1fgTm zvzQyi2#PSJh^AE7D~2%T=yz_N z&9p}S|K$7o|9lb8m;q+sUojv`ZNJ^ZE!p0>usQ0r4(bgm3FYMmKT6Qhtr&Bu6>p+y ZLBB%=qGvHTh#nOF5zsX7zzqB<1MkqOO2~NasYl}1V|>9l91XR*XGR+QY?e$D9{^e_j$)N zyYg3fb^w&sdv^mg0G1r4_^@ei_TI+KF4ALKe2+Ig;0`Cw{Ve)>hvhanV2c+#;XMBp z9rrn6z`i?d`^RDEdC2dYKm7kWKrABJW7NbNu{Was-)G;*DQT$}? zlP8z#P>P>UfAw&bHdM0+h`^MZO 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']);