', $html);
$html = preg_replace('/]*)>/', '', $html);
-
+
return $html;
}
-}
\ No newline at end of file
+}
diff --git a/app/Http/Controllers/SocialAuthController.php b/app/Http/Controllers/SocialAuthController.php
index 1953636..b7dad7e 100644
--- a/app/Http/Controllers/SocialAuthController.php
+++ b/app/Http/Controllers/SocialAuthController.php
@@ -92,7 +92,7 @@ private function getMockGoogleUser()
// Create a mock user object that mimics Socialite's user structure
return new class
{
- public $email = 'memeaigen.com@gmail.com';
+ public $email = 'memefa.st@gmail.com';
public $id = 'xxx';
diff --git a/app/Http/Controllers/UserAIController.php b/app/Http/Controllers/UserAIController.php
index acb9b0c..2b92854 100644
--- a/app/Http/Controllers/UserAIController.php
+++ b/app/Http/Controllers/UserAIController.php
@@ -4,10 +4,10 @@
use App\Helpers\FirstParty\Credits\CreditsService;
use App\Jobs\GenerateMemeJob;
-use App\Models\UserMemeGeneration;
-use Illuminate\Http\Request;
use App\Models\Category;
+use App\Models\UserMemeGeneration;
use Auth;
+use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
@@ -24,7 +24,7 @@ public function generateMeme(Request $request)
->where('user_id', $user->id)
->whereIn('status', ['pending', 'processing'])
->first();
-
+
if ($activeGeneration) {
return response()->json([
'error' => [
@@ -34,7 +34,7 @@ public function generateMeme(Request $request)
}
}
- if (!CreditsService::canSpend($user->id, 2)) {
+ if (! CreditsService::canSpend($user->id, 2)) {
return response()->json([
'error' => [
'message' => 'You do not have enough credits to generate a meme. Please purchase credits from the Store.',
@@ -45,7 +45,7 @@ public function generateMeme(Request $request)
CreditsService::spend($user->id, 2);
$jobId = Str::uuid()->toString();
-
+
// Create database record
$generation = UserMemeGeneration::create([
'user_id' => $user->id,
@@ -55,11 +55,11 @@ public function generateMeme(Request $request)
'credits_to_be_charged' => 2,
'credits_are_processed' => false,
]);
-
+
// Set active job in cache
Cache::put("user_active_job_{$user->id}", $jobId, 300);
Cache::put("meme_job_status_{$jobId}", 'pending', 300);
-
+
$job = new GenerateMemeJob($user->id, $request->prompt, $jobId);
dispatch($job);
@@ -76,8 +76,8 @@ public function generateMeme(Request $request)
public function checkMemeJobStatus(Request $request)
{
$jobId = $request->job_id;
-
- if (!$jobId) {
+
+ if (! $jobId) {
return response()->json([
'error' => [
'message' => 'Job ID is required.',
@@ -86,8 +86,8 @@ public function checkMemeJobStatus(Request $request)
}
$status = Cache::get("meme_job_status_{$jobId}");
-
- if (!$status) {
+
+ if (! $status) {
return response()->json([
'error' => [
'message' => 'Job not found or expired.',
@@ -122,10 +122,10 @@ public function checkMemeJobStatus(Request $request)
public function getActiveJob()
{
$user = Auth::user();
-
+
$activeJobId = Cache::get("user_active_job_{$user->id}");
-
- if (!$activeJobId) {
+
+ if (! $activeJobId) {
return response()->json([
'success' => [
'data' => null,
@@ -138,9 +138,10 @@ public function getActiveJob()
->with('meme.meme_media', 'meme.background_media')
->first();
- if (!$generation) {
+ if (! $generation) {
// Clean up stale cache
Cache::forget("user_active_job_{$user->id}");
+
return response()->json([
'success' => [
'data' => null,
@@ -163,7 +164,7 @@ public function getActiveJob()
if ($generation->status === 'completed' && $generation->meme) {
$meme = $generation->meme;
$meme_media = $generation->meme->meme_media;
-
+
$response['success']['data']['result'] = [
'generate' => [
'info' => $meme,
@@ -180,7 +181,7 @@ public function getActiveJob()
public function getMemeHistory()
{
$user = Auth::user();
-
+
$generations = UserMemeGeneration::where('user_id', $user->id)
->with('meme.meme_media', 'meme.background_media')
->orderBy('created_at', 'desc')
@@ -228,9 +229,9 @@ public function aiHints()
return response()->json([
'success' => [
'data' => [
- 'keywords' => []
- ]
- ]
+ 'keywords' => [],
+ ],
+ ],
]);
}
@@ -241,9 +242,9 @@ public function aiHints()
return response()->json([
'success' => [
'data' => [
- 'keywords' => $keywords
- ]
- ]
+ 'keywords' => $keywords,
+ ],
+ ],
]);
}
}
diff --git a/app/Jobs/GenerateMemeJob.php b/app/Jobs/GenerateMemeJob.php
index b6674bf..a1c67a6 100644
--- a/app/Jobs/GenerateMemeJob.php
+++ b/app/Jobs/GenerateMemeJob.php
@@ -4,7 +4,6 @@
use App\Helpers\FirstParty\Credits\CreditsService;
use App\Helpers\FirstParty\Meme\MemeGenerator;
-use App\Models\User;
use App\Models\UserMemeGeneration;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
@@ -19,10 +18,13 @@ class GenerateMemeJob implements ShouldQueue
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $timeout = 30;
+
public $tries = 1;
protected $userId;
+
protected $prompt;
+
protected $jobId;
public function __construct(int $userId, string $prompt, ?string $jobId)
@@ -37,7 +39,7 @@ public function handle(): void
{
$userGeneration = UserMemeGeneration::where('job_id', $this->jobId)->first();
- if (!$userGeneration) {
+ if (! $userGeneration) {
throw new \Exception("User generation record not found for job {$this->jobId}");
}
@@ -72,7 +74,7 @@ public function handle(): void
Cache::forget("user_active_job_{$this->userId}");
} catch (\Exception $e) {
// Handle failure with credit refund
- if (!$userGeneration->credits_are_processed) {
+ if (! $userGeneration->credits_are_processed) {
if ($userGeneration->credits_to_be_charged > 0) {
CreditsService::depositAlacarte(
$userGeneration->user_id,
@@ -101,7 +103,7 @@ public function failed(\Throwable $exception): void
{
$userGeneration = UserMemeGeneration::where('job_id', $this->jobId)->first();
- if ($userGeneration && !$userGeneration->credits_are_processed) {
+ if ($userGeneration && ! $userGeneration->credits_are_processed) {
if ($userGeneration->credits_to_be_charged > 0) {
CreditsService::depositAlacarte(
$userGeneration->user_id,
diff --git a/app/Models/UserMemeGeneration.php b/app/Models/UserMemeGeneration.php
index eaa7016..0b0f0eb 100644
--- a/app/Models/UserMemeGeneration.php
+++ b/app/Models/UserMemeGeneration.php
@@ -31,4 +31,4 @@ public function meme(): BelongsTo
{
return $this->belongsTo(Meme::class);
}
-}
\ No newline at end of file
+}
diff --git a/config/horizon.php b/config/horizon.php
index 486f03f..2691d37 100644
--- a/config/horizon.php
+++ b/config/horizon.php
@@ -56,7 +56,7 @@
'prefix' => env(
'HORIZON_PREFIX',
- Str::slug(env('APP_NAME', 'laravel'), '_') . '_horizon:'
+ Str::slug(env('APP_NAME', 'laravel'), '_').'_horizon:'
),
/*
diff --git a/database/migrations/2025_07_04_054813_create_user_meme_generations_table.php b/database/migrations/2025_07_04_054813_create_user_meme_generations_table.php
index f7eb5d4..0869087 100644
--- a/database/migrations/2025_07_04_054813_create_user_meme_generations_table.php
+++ b/database/migrations/2025_07_04_054813_create_user_meme_generations_table.php
@@ -34,4 +34,4 @@ public function down(): void
{
Schema::dropIfExists('user_meme_generations');
}
-};
\ No newline at end of file
+};
diff --git a/database/seeders/MemeMediaSeeder.php b/database/seeders/MemeMediaSeeder.php
index 5fda720..58f3972 100644
--- a/database/seeders/MemeMediaSeeder.php
+++ b/database/seeders/MemeMediaSeeder.php
@@ -29,7 +29,7 @@
class MemeMediaSeeder extends Seeder
{
- private const CDN_BASE_URL = 'https://cdn.memeaigen.com/g1';
+ private const CDN_BASE_URL = 'https://cdn.memefa.st/g1';
private const FORMATS = [
'webm' => ['ext' => 'webm', 'mime' => 'video/webm'],
diff --git a/package-lock.json b/package-lock.json
index e5d443e..4d201bc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "memeaigen",
+ "name": "memefast",
"lockfileVersion": 3,
"requires": true,
"packages": {
diff --git a/prod.sh b/prod.sh
index 460a949..fd591bf 100755
--- a/prod.sh
+++ b/prod.sh
@@ -1,7 +1,7 @@
#!/bin/bash
# Set default APP_URL
-DEFAULT_APP_URL="https://memeaigen.com"
+DEFAULT_APP_URL="https://memefa.st"
# Check if app_url parameter is provided
if [ $# -eq 0 ]; then
diff --git a/resources/js/modules/editor/editor.jsx b/resources/js/modules/editor/editor.jsx
index 4561a01..a071cd5 100644
--- a/resources/js/modules/editor/editor.jsx
+++ b/resources/js/modules/editor/editor.jsx
@@ -174,7 +174,7 @@ const Editor = () => {
return (
<>
-
+
@@ -192,7 +192,7 @@ const Editor = () => {
-

+
diff --git a/resources/js/modules/editor/fonts.jsx b/resources/js/modules/editor/fonts.jsx
index 957f6b3..05da2d9 100644
--- a/resources/js/modules/editor/fonts.jsx
+++ b/resources/js/modules/editor/fonts.jsx
@@ -41,7 +41,7 @@ const FONTS = {
weights: [400],
styles: ['normal'],
description: 'Decorative display font',
- preview: 'MEMEAIGEN.COM',
+ preview: 'memefa.st',
},
arial: {
name: 'Arial',
diff --git a/resources/js/modules/editor/partials/canvas/sample-timeline-data.jsx b/resources/js/modules/editor/partials/canvas/sample-timeline-data.jsx
index 2df8b0b..123422d 100644
--- a/resources/js/modules/editor/partials/canvas/sample-timeline-data.jsx
+++ b/resources/js/modules/editor/partials/canvas/sample-timeline-data.jsx
@@ -2,9 +2,9 @@ const sampleTimelineElements = [
{
id: '1',
type: 'video',
- source_webm: 'https://cdn.memeaigen.com/g1/webm/they-not-like-us-oiia-cat-version.webm',
- source_mov: 'https://cdn.memeaigen.com/g1/mov/they-not-like-us-oiia-cat-version.mov',
- poster: 'https://cdn.memeaigen.com/g1/webp/they-not-like-us-oiia-cat-version.webp',
+ source_webm: 'https://cdn.memefa.st/g1/webm/they-not-like-us-oiia-cat-version.webm',
+ source_mov: 'https://cdn.memefa.st/g1/mov/they-not-like-us-oiia-cat-version.mov',
+ poster: 'https://cdn.memefa.st/g1/webp/they-not-like-us-oiia-cat-version.webp',
name: 'They not like us cat',
startTime: 0,
layer: 0,
@@ -19,9 +19,9 @@ const sampleTimelineElements = [
{
id: '2',
type: 'video',
- source_webm: 'https://cdn.memeaigen.com/g1/webm/sad-cat.webm',
- source_mov: 'https://cdn.memeaigen.com/g1/mov/sad-cat.mov',
- poster: 'https://cdn.memeaigen.com/g1/webp/sad-cat.webp',
+ source_webm: 'https://cdn.memefa.st/g1/webm/sad-cat.webm',
+ source_mov: 'https://cdn.memefa.st/g1/mov/sad-cat.mov',
+ poster: 'https://cdn.memefa.st/g1/webp/sad-cat.webp',
name: 'Sad cat meme',
startTime: 6,
layer: 0,
@@ -36,9 +36,9 @@ const sampleTimelineElements = [
{
id: '3',
type: 'video',
- source_webm: 'https://cdn.memeaigen.com/g1/webm/este-cat-dance.webm',
- source_mov: 'https://cdn.memeaigen.com/g1/mov/este-cat-dance.mov',
- poster: 'https://cdn.memeaigen.com/g1/webp/este-cat-dance.webp',
+ source_webm: 'https://cdn.memefa.st/g1/webm/este-cat-dance.webm',
+ source_mov: 'https://cdn.memefa.st/g1/mov/este-cat-dance.mov',
+ poster: 'https://cdn.memefa.st/g1/webp/este-cat-dance.webp',
name: 'Este cat dance',
startTime: 2,
layer: 1,
@@ -95,7 +95,7 @@ const sampleTimelineElements = [
{
id: '6',
type: 'image',
- source: 'https://cdn.memeaigen.com/g1/webp/este-cat-dance.webp',
+ source: 'https://cdn.memefa.st/g1/webp/este-cat-dance.webp',
name: 'Este cat dance',
startTime: 0,
layer: 5,
diff --git a/resources/js/modules/editor/partials/canvas/video-export.jsx b/resources/js/modules/editor/partials/canvas/video-export.jsx
index 0744c15..f25bbf0 100644
--- a/resources/js/modules/editor/partials/canvas/video-export.jsx
+++ b/resources/js/modules/editor/partials/canvas/video-export.jsx
@@ -213,7 +213,7 @@ const useVideoExport = ({ timelineElements, dimensions, totalDuration, watermark
stage.add(layer);
const watermarkText = new Konva.Text({
- text: 'MEMEAIGEN.COM',
+ text: 'memefa.st',
x: dimensions.width / 2,
y: dimensions.height / 2 + dimensions.height * 0.2,
fontSize: WATERMARK_CONFIG.fontSize,
@@ -692,7 +692,7 @@ const useVideoExport = ({ timelineElements, dimensions, totalDuration, watermark
const blob = new Blob([data.buffer], { type: 'video/mp4' });
const epochTimestamp = Date.now();
- const fileName = `memeaigen-${epochTimestamp}.mp4`;
+ const fileName = `memefast-${epochTimestamp}.mp4`;
// Store the blob and filename in state instead of auto-downloading
setVideoBlob(blob);
diff --git a/resources/js/modules/editor/partials/canvas/video-preview.jsx b/resources/js/modules/editor/partials/canvas/video-preview.jsx
index c3f41b6..2cf6630 100644
--- a/resources/js/modules/editor/partials/canvas/video-preview.jsx
+++ b/resources/js/modules/editor/partials/canvas/video-preview.jsx
@@ -277,8 +277,9 @@ const VideoPreview = ({
}}
>