Add (tint)
@@ -8,164 +8,162 @@ class ImageGen
|
|||||||
{
|
{
|
||||||
public static function getMainImage($url, $width, $height)
|
public static function getMainImage($url, $width, $height)
|
||||||
{
|
{
|
||||||
$canvas = self::getBaseImage($url, 2.0, $width, $height);
|
$canvas = self::getBaseImage($url, 2.0, $width, $height);
|
||||||
|
|
||||||
$canvas = self::setImageTint($canvas, $width, $height);
|
$canvas = self::setImageTint($canvas, $width, $height);
|
||||||
|
|
||||||
return $canvas;
|
return $canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getOpenGraphImage($url, $width, $height, $title = 'Title', $description = 'Description', $website = 'WWW.FUTUREWALKER.CO')
|
public static function getOpenGraphImage($url, $width, $height, $title = 'Title', $description = 'Description', $website = 'WWW.FUTUREWALKER.CO')
|
||||||
{
|
{
|
||||||
$canvas = self::getBaseImage($url, 2.0, $width, $height);
|
$canvas = self::getBaseImage($url, 2.0, $width, $height);
|
||||||
|
|
||||||
$canvas = self::setImageTint($canvas, $width, $height);
|
$canvas = self::setImageTint($canvas, $width, $height);
|
||||||
|
|
||||||
$canvas = self::setOgTint($canvas, $width, $height);
|
$canvas = self::setOgTint($canvas, $width, $height);
|
||||||
|
|
||||||
$canvas = self::setOgText($canvas, $title, $description, $website);
|
$canvas = self::setOgText($canvas, $title, $description, $website);
|
||||||
|
|
||||||
return $canvas;
|
return $canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function setOgText($canvas, $title, $description, $website)
|
private static function setOgText($canvas, $title, $description, $website)
|
||||||
{
|
{
|
||||||
$bold_font = resource_path('fonts/RobotoCondensed/RobotoCondensed-Bold.ttf');
|
$bold_font = resource_path('fonts/RobotoCondensed/RobotoCondensed-Bold.ttf');
|
||||||
$font_color = '#ffffff'; // White color for the text
|
$font_color = '#ffffff'; // White color for the text
|
||||||
|
|
||||||
// Define font sizes
|
// Define font sizes
|
||||||
$font_size_title = 65; // Size of the title text
|
$font_size_title = 65; // Size of the title text
|
||||||
$font_size_description = 28; // Size of the description text
|
$font_size_description = 28; // Size of the description text
|
||||||
$font_size_website = 28; // Size of the website text
|
$font_size_website = 28; // Size of the website text
|
||||||
|
|
||||||
// Define positions
|
// Define positions
|
||||||
$title_position_y = $canvas->height() - 145; // Position for the title at one-third the height
|
$title_position_y = $canvas->height() - 145; // Position for the title at one-third the height
|
||||||
$description_position_y = $canvas->height() - 30;
|
$description_position_y = $canvas->height() - 30;
|
||||||
$website_position_y = $canvas->height() - 30;
|
$website_position_y = $canvas->height() - 30;
|
||||||
|
|
||||||
// Title - wrapped to 2 lines if necessary, with ellipsis if there is excess text
|
// Title - wrapped to 2 lines if necessary, with ellipsis if there is excess text
|
||||||
$wrappedTitle = wordwrap($title, 35, "\n", true); // Wrap the title
|
$wrappedTitle = wordwrap($title, 35, "\n", true); // Wrap the title
|
||||||
$lines = explode("\n", $wrappedTitle); // Split the title into lines
|
$lines = explode("\n", $wrappedTitle); // Split the title into lines
|
||||||
|
|
||||||
// Adjust these variables as needed
|
// Adjust these variables as needed
|
||||||
$lineHeight = 65; // The height of a line of text, adjust as needed for line spacing
|
$lineHeight = 65; // The height of a line of text, adjust as needed for line spacing
|
||||||
$titleStartPositionY = $title_position_y; // Starting Y position for the title, adjust if needed
|
$titleStartPositionY = $title_position_y; // Starting Y position for the title, adjust if needed
|
||||||
|
|
||||||
// Check if there are more than 2 lines after wrapping
|
// Check if there are more than 2 lines after wrapping
|
||||||
if (count($lines) > 2) {
|
if (count($lines) > 2) {
|
||||||
$lines = array_slice($lines, 0, 2); // Keep only the first two lines
|
$lines = array_slice($lines, 0, 2); // Keep only the first two lines
|
||||||
$secondLine = &$lines[1]; // Reference to the second line
|
$secondLine = &$lines[1]; // Reference to the second line
|
||||||
// Check if the second line can fit an ellipsis; if not, trim the text
|
// Check if the second line can fit an ellipsis; if not, trim the text
|
||||||
if (strlen($secondLine) > 32) {
|
if (strlen($secondLine) > 32) {
|
||||||
$secondLine = substr($secondLine, 0, 32) . '...'; // Trim and add ellipsis
|
$secondLine = substr($secondLine, 0, 32).'...'; // Trim and add ellipsis
|
||||||
} else {
|
} else {
|
||||||
// Add ellipsis directly if there's enough space
|
// Add ellipsis directly if there's enough space
|
||||||
$secondLine .= '...';
|
$secondLine .= '...';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now, render each line individually with adjusted line spacing
|
||||||
|
foreach ($lines as $index => $line) {
|
||||||
|
$currentLineY = $titleStartPositionY + ($index * $lineHeight);
|
||||||
|
$canvas->text($line, 30, $currentLineY, function ($font) use ($bold_font, $font_color, $font_size_title) {
|
||||||
|
$font->file($bold_font);
|
||||||
|
$font->size($font_size_title);
|
||||||
|
$font->color($font_color);
|
||||||
|
$font->align('left'); // Align text to the left
|
||||||
|
$font->valign('bottom'); // Align text to the top of the current line position
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Description - justified to the left, below the title
|
||||||
|
$canvas->text($description, 30, $description_position_y, function ($font) use ($bold_font, $font_color, $font_size_description) {
|
||||||
|
$font->file($bold_font);
|
||||||
|
$font->size($font_size_description);
|
||||||
|
$font->color($font_color);
|
||||||
|
$font->align('left'); // Align text to the left
|
||||||
|
$font->valign('bottom'); // Align text to the top (as it is below the title)
|
||||||
|
});
|
||||||
|
|
||||||
|
// Website - justified to the right, at the bottom of the image
|
||||||
|
$canvas->text($website, $canvas->width() - 30, $website_position_y, function ($font) use ($bold_font, $font_color, $font_size_website) {
|
||||||
|
$font->file($bold_font);
|
||||||
|
$font->size($font_size_website);
|
||||||
|
$font->color($font_color);
|
||||||
|
$font->align('right'); // Align text to the right
|
||||||
|
$font->valign('bottom'); // Align text to the bottom
|
||||||
|
});
|
||||||
|
|
||||||
|
return $canvas;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Now, render each line individually with adjusted line spacing
|
|
||||||
foreach ($lines as $index => $line) {
|
|
||||||
$currentLineY = $titleStartPositionY + ($index * $lineHeight);
|
|
||||||
$canvas->text($line, 30, $currentLineY, function($font) use ($bold_font, $font_color, $font_size_title) {
|
|
||||||
$font->file($bold_font);
|
|
||||||
$font->size($font_size_title);
|
|
||||||
$font->color($font_color);
|
|
||||||
$font->align('left'); // Align text to the left
|
|
||||||
$font->valign('bottom'); // Align text to the top of the current line position
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Description - justified to the left, below the title
|
|
||||||
$canvas->text($description, 30, $description_position_y, function($font) use ($bold_font, $font_color, $font_size_description) {
|
|
||||||
$font->file($bold_font);
|
|
||||||
$font->size($font_size_description);
|
|
||||||
$font->color($font_color);
|
|
||||||
$font->align('left'); // Align text to the left
|
|
||||||
$font->valign('bottom'); // Align text to the top (as it is below the title)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Website - justified to the right, at the bottom of the image
|
|
||||||
$canvas->text($website, $canvas->width() - 30, $website_position_y, function($font) use ($bold_font, $font_color, $font_size_website) {
|
|
||||||
$font->file($bold_font);
|
|
||||||
$font->size($font_size_website);
|
|
||||||
$font->color($font_color);
|
|
||||||
$font->align('right'); // Align text to the right
|
|
||||||
$font->valign('bottom'); // Align text to the bottom
|
|
||||||
});
|
|
||||||
|
|
||||||
return $canvas;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static function setOgTint($canvas, $width, $height)
|
private static function setOgTint($canvas, $width, $height)
|
||||||
{
|
{
|
||||||
|
|
||||||
$og_tint = Image::make(resource_path("images/tints/caption-bg.png"));
|
$og_tint = Image::make(resource_path('images/tints/caption-bg.png'));
|
||||||
|
|
||||||
// Stretch the image to the given width and height
|
// Stretch the image to the given width and height
|
||||||
$og_tint->resize($width, $height);
|
$og_tint->resize($width, $height);
|
||||||
|
|
||||||
$canvas->insert($og_tint, 'top-left', 0, 0);
|
$canvas->insert($og_tint, 'top-left', 0, 0);
|
||||||
|
|
||||||
return $canvas;
|
return $canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function setImageTint($canvas, $width, $height)
|
private static function setImageTint($canvas, $width, $height)
|
||||||
{
|
{
|
||||||
/// ADD TINT
|
/// ADD TINT
|
||||||
// Define the directory path
|
// Define the directory path
|
||||||
$directoryPath = resource_path('images/tints');
|
$directoryPath = resource_path('images/tints');
|
||||||
|
|
||||||
// Search for files starting with 'tint-' and count them
|
// Search for files starting with 'tint-' and count them
|
||||||
$tintFilesCount = count(glob($directoryPath . '/tint-*'));
|
$tintFilesCount = count(glob($directoryPath.'/tint-*'));
|
||||||
|
|
||||||
$tint_image = Image::make(resource_path("images/tints/tint-" . rand(1, $tintFilesCount) . ".png"));
|
$tint_image = Image::make(resource_path('images/tints/tint-'.rand(1, $tintFilesCount).'.png'));
|
||||||
|
|
||||||
// Stretch the image to the given width and height
|
// Stretch the image to the given width and height
|
||||||
$tint_image->resize($width, $height);
|
$tint_image->resize($width, $height);
|
||||||
|
|
||||||
$canvas->insert($tint_image, 'top-left', 0, 0);
|
$canvas->insert($tint_image, 'top-left', 0, 0);
|
||||||
|
|
||||||
return $canvas;
|
return $canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function getBaseImage($url, $scale = 1.8, $width = 1007, $height = 567)
|
private static function getBaseImage($url, $scale = 1.8, $width = 1007, $height = 567)
|
||||||
{
|
{
|
||||||
$original_image = Image::make($url);
|
$original_image = Image::make($url);
|
||||||
|
|
||||||
// Determine which dimension (width or height) is larger
|
// Determine which dimension (width or height) is larger
|
||||||
if ($original_image->width() > $original_image->height()) {
|
if ($original_image->width() > $original_image->height()) {
|
||||||
// Width is larger, resize by width
|
// Width is larger, resize by width
|
||||||
$original_image->resize($width, null, function ($constraint) {
|
$original_image->resize($width, null, function ($constraint) {
|
||||||
$constraint->aspectRatio();
|
$constraint->aspectRatio();
|
||||||
$constraint->upsize(); // Prevent upscaling
|
$constraint->upsize(); // Prevent upscaling
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// Height is larger or equal, resize by height
|
// Height is larger or equal, resize by height
|
||||||
$original_image->resize(null, $height, function ($constraint) {
|
$original_image->resize(null, $height, function ($constraint) {
|
||||||
$constraint->aspectRatio();
|
$constraint->aspectRatio();
|
||||||
$constraint->upsize(); // Prevent upscaling
|
$constraint->upsize(); // Prevent upscaling
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scale the image by 1.5x
|
// Scale the image by 1.5x
|
||||||
$scaled_width = $original_image->width() * $scale;
|
$scaled_width = $original_image->width() * $scale;
|
||||||
$scaled_height = $original_image->height() * $scale;
|
$scaled_height = $original_image->height() * $scale;
|
||||||
$original_image->resize($scaled_width, $scaled_height);
|
$original_image->resize($scaled_width, $scaled_height);
|
||||||
|
|
||||||
// Create an empty canvas
|
// Create an empty canvas
|
||||||
$canvas = Image::canvas($width, $height);
|
$canvas = Image::canvas($width, $height);
|
||||||
|
|
||||||
// Calculate the position to center the scaled image
|
// Calculate the position to center the scaled image
|
||||||
$x = ($canvas->width() - $scaled_width) / 2;
|
$x = ($canvas->width() - $scaled_width) / 2;
|
||||||
$y = ($canvas->height() - $scaled_height) / 2;
|
$y = ($canvas->height() - $scaled_height) / 2;
|
||||||
|
|
||||||
// Paste the scaled image onto the canvas at the center position
|
// Paste the scaled image onto the canvas at the center position
|
||||||
|
|
||||||
$canvas->insert($original_image, 'top-left', (int) $x, (int) $y);
|
$canvas->insert($original_image, 'top-left', (int) $x, (int) $y);
|
||||||
|
|
||||||
return $canvas;
|
return $canvas;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,13 +34,12 @@ public function search(Request $request)
|
|||||||
|
|
||||||
// Use full-text search capabilities of your database
|
// Use full-text search capabilities of your database
|
||||||
// For example, using MySQL's full-text search with MATCH...AGAINST
|
// For example, using MySQL's full-text search with MATCH...AGAINST
|
||||||
$posts = Post::with('category')
|
$posts = Post::with('category')
|
||||||
->where('status', 'publish')
|
->where('status', 'publish')
|
||||||
->whereRaw("to_tsvector('english', title || ' ' || bites) @@ to_tsquery('english', ?)", [str_replace(' ', ' & ', $query)])
|
->whereRaw("to_tsvector('english', title || ' ' || bites) @@ to_tsquery('english', ?)", [str_replace(' ', ' & ', $query)])
|
||||||
->where('published_at', '<=', now())
|
->where('published_at', '<=', now())
|
||||||
->orderBy('published_at', 'desc')
|
->orderBy('published_at', 'desc')
|
||||||
->cursorPaginate(10);
|
->cursorPaginate(10);
|
||||||
|
|
||||||
|
|
||||||
// breadcrumb json ld
|
// breadcrumb json ld
|
||||||
$listItems = [];
|
$listItems = [];
|
||||||
|
|||||||
@@ -2,23 +2,22 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers\Tests;
|
namespace App\Http\Controllers\Tests;
|
||||||
|
|
||||||
|
use App\Helpers\FirstParty\ImageGen\ImageGen;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use LaravelFreelancerNL\LaravelIndexNow\Facades\IndexNow;
|
use LaravelFreelancerNL\LaravelIndexNow\Facades\IndexNow;
|
||||||
use LaravelGoogleIndexing;
|
use LaravelGoogleIndexing;
|
||||||
use App\Helpers\FirstParty\ImageGen\ImageGen;
|
|
||||||
|
|
||||||
|
|
||||||
class TestController extends Controller
|
class TestController extends Controller
|
||||||
{
|
{
|
||||||
public function imageGen(Request $request)
|
public function imageGen(Request $request)
|
||||||
{
|
{
|
||||||
$image_url = 'https://cdn.futurewalker.co/post_images_2/whats-next-for-openai-after-ceo-sam-altmans-ouster-1700439234754.jpg';
|
$image_url = 'https://cdn.futurewalker.co/post_images_2/whats-next-for-openai-after-ceo-sam-altmans-ouster-1700439234754.jpg';
|
||||||
|
|
||||||
$canvas = ImageGen::getOpenGraphImage($image_url, 'What’s Next for OpenAI After CEO Sam Altman’s Ouster What’s Next for OpenAI After CEO Sam Altman’s Ouster', '20 NOV • OPENAI • SAM ALTMAN • 3 min read ');
|
$canvas = ImageGen::getOpenGraphImage($image_url, 'What’s Next for OpenAI After CEO Sam Altman’s Ouster What’s Next for OpenAI After CEO Sam Altman’s Ouster', '20 NOV • OPENAI • SAM ALTMAN • 3 min read ');
|
||||||
|
|
||||||
return response($canvas->encode('jpeg'))
|
return response($canvas->encode('jpeg'))
|
||||||
->header('Content-Type', 'image/jpeg');
|
->header('Content-Type', 'image/jpeg');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function indexing(Request $request)
|
public function indexing(Request $request)
|
||||||
|
|||||||
@@ -185,7 +185,6 @@ private static function setPostImage($post)
|
|||||||
|
|
||||||
$image_content = $image_response->body();
|
$image_content = $image_response->body();
|
||||||
|
|
||||||
|
|
||||||
// Get the size of the image content in KB
|
// Get the size of the image content in KB
|
||||||
$imageSizeInKb = strlen($image_response->body()) / 1024;
|
$imageSizeInKb = strlen($image_response->body()) / 1024;
|
||||||
|
|
||||||
@@ -194,12 +193,11 @@ private static function setPostImage($post)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$post_description = strtoupper(now()->format('j M')) . " • " . $post->main_keyword . " • " . markdown_min_read($post->body);
|
$post_description = strtoupper(now()->format('j M')).' • '.$post->main_keyword.' • '.markdown_min_read($post->body);
|
||||||
|
|
||||||
$image = ImageGen::getMainImage($image_content, 1007, 567);
|
$image = ImageGen::getMainImage($image_content, 1007, 567);
|
||||||
$og_image = ImageGen::getOpenGraphImage($image_content, 1007, 567, $post->title, $post_description);
|
$og_image = ImageGen::getOpenGraphImage($image_content, 1007, 567, $post->title, $post_description);
|
||||||
|
|
||||||
|
|
||||||
$epoch_now_timestamp = epoch_now_timestamp();
|
$epoch_now_timestamp = epoch_now_timestamp();
|
||||||
$filename = $post->slug.'-'.$epoch_now_timestamp.'.jpg';
|
$filename = $post->slug.'-'.$epoch_now_timestamp.'.jpg';
|
||||||
$og_filename = $post->slug.'-'.$epoch_now_timestamp.'_og.jpg';
|
$og_filename = $post->slug.'-'.$epoch_now_timestamp.'_og.jpg';
|
||||||
|
|||||||
@@ -51,9 +51,8 @@ public static function handle(NewsSerpResult $news_serp_result, $serp_counts = 1
|
|||||||
|
|
||||||
// check timestamp
|
// check timestamp
|
||||||
$serp_timestamp = Carbon::parse($serp_item->timestamp);
|
$serp_timestamp = Carbon::parse($serp_item->timestamp);
|
||||||
if(!$serp_timestamp->isBetween(now()->subHours(6), now()))
|
if (! $serp_timestamp->isBetween(now()->subHours(6), now())) {
|
||||||
{
|
continue;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/////
|
/////
|
||||||
@@ -64,9 +63,6 @@ public static function handle(NewsSerpResult $news_serp_result, $serp_counts = 1
|
|||||||
|
|
||||||
$skipItem = false;
|
$skipItem = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach ($blacklist_domains as $domain) {
|
foreach ($blacklist_domains as $domain) {
|
||||||
if (str_contains($serp_item->domain, $domain)) {
|
if (str_contains($serp_item->domain, $domain)) {
|
||||||
$skipItem = true;
|
$skipItem = true;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public function boot(): void
|
|||||||
$this->routes(function () {
|
$this->routes(function () {
|
||||||
Route::middleware('web')
|
Route::middleware('web')
|
||||||
->prefix('tests')
|
->prefix('tests')
|
||||||
->group(base_path('routes/tests.php'));
|
->group(base_path('routes/tests.php'));
|
||||||
Route::middleware('api')
|
Route::middleware('api')
|
||||||
->prefix('api')
|
->prefix('api')
|
||||||
->group(base_path('routes/api.php'));
|
->group(base_path('routes/api.php'));
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
'launched_epoch' => '1695513600', // 24-09-2023 00:00:00 GMT +0
|
'launched_epoch' => '1695513600', // 24-09-2023 00:00:00 GMT +0
|
||||||
|
|
||||||
'blacklist_domains_serp' => [
|
'blacklist_domains_serp' => [
|
||||||
'https://u.today'
|
'https://u.today',
|
||||||
],
|
],
|
||||||
|
|
||||||
'blacklist_keywords_serp' => [
|
'blacklist_keywords_serp' => [
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::table('posts', function (Blueprint $table) {
|
Schema::table('posts', function (Blueprint $table) {
|
||||||
$table->string('image_ref_url')->nullable();
|
$table->string('image_ref_url')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ public function up(): void
|
|||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::table('posts', function (Blueprint $table) {
|
Schema::table('posts', function (Blueprint $table) {
|
||||||
$table->dropColumn(('image_ref_url'));
|
$table->dropColumn(('image_ref_url'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
BIN
public/build/assets/RobotoCondensed-Black-dafd7d4b.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-BlackItalic-8434d290.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-Bold-9bc003d6.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-BoldItalic-23e81357.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-ExtraBold-240f98d5.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-ExtraBoldItalic-fbe0f4a4.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-ExtraLight-ac6c600a.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-Italic-b92ae4ae.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-Light-13c2f480.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-LightItalic-82266bab.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-Medium-271c76f9.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-MediumItalic-3e1145ca.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-Regular-2af71369.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-SemiBold-c64d96f3.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-SemiBoldItalic-3d0de867.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-Thin-6ad48510.ttf
Normal file
BIN
public/build/assets/RobotoCondensed-ThinItalic-5ab37aa6.ttf
Normal file
BIN
public/build/assets/caption-bg-49b89c07.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
public/build/assets/tint-1-01439484.png
Normal file
|
After Width: | Height: | Size: 758 KiB |
BIN
public/build/assets/tint-10-e35a8e01.png
Normal file
|
After Width: | Height: | Size: 772 KiB |
BIN
public/build/assets/tint-11-c306849c.png
Normal file
|
After Width: | Height: | Size: 636 KiB |
BIN
public/build/assets/tint-12-f07c9a6a.png
Normal file
|
After Width: | Height: | Size: 357 KiB |
BIN
public/build/assets/tint-2-b2c805d8.png
Normal file
|
After Width: | Height: | Size: 599 KiB |
BIN
public/build/assets/tint-3-e68780ba.png
Normal file
|
After Width: | Height: | Size: 570 KiB |
BIN
public/build/assets/tint-4-a132efdf.png
Normal file
|
After Width: | Height: | Size: 951 KiB |
BIN
public/build/assets/tint-5-176263cd.png
Normal file
|
After Width: | Height: | Size: 1022 KiB |
BIN
public/build/assets/tint-6-98168110.png
Normal file
|
After Width: | Height: | Size: 939 KiB |
BIN
public/build/assets/tint-7-29525050.png
Normal file
|
After Width: | Height: | Size: 611 KiB |
BIN
public/build/assets/tint-8-341db431.png
Normal file
|
After Width: | Height: | Size: 958 KiB |
BIN
public/build/assets/tint-9-a29ba2de.png
Normal file
|
After Width: | Height: | Size: 563 KiB |
@@ -49,6 +49,130 @@
|
|||||||
"file": "assets/Inter-Thin-b778a52b.ttf",
|
"file": "assets/Inter-Thin-b778a52b.ttf",
|
||||||
"src": "resources/fonts/Inter/Inter-Thin.ttf"
|
"src": "resources/fonts/Inter/Inter-Thin.ttf"
|
||||||
},
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-Black.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-Black-dafd7d4b.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-Black.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-BlackItalic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-BlackItalic-8434d290.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-BlackItalic.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-Bold.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-Bold-9bc003d6.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-Bold.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-BoldItalic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-BoldItalic-23e81357.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-BoldItalic.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-ExtraBold.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-ExtraBold-240f98d5.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-ExtraBold.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-ExtraBoldItalic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-ExtraBoldItalic-fbe0f4a4.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-ExtraBoldItalic.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-ExtraLight.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-ExtraLight-ac6c600a.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-ExtraLight.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-ExtraLightItalic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-ExtraLightItalic-7ce72f91.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-ExtraLightItalic.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-Italic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-Italic-b92ae4ae.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-Italic.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-Light.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-Light-13c2f480.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-Light.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-LightItalic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-LightItalic-82266bab.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-LightItalic.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-Medium.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-Medium-271c76f9.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-Medium.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-MediumItalic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-MediumItalic-3e1145ca.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-MediumItalic.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-Regular.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-Regular-2af71369.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-Regular.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-SemiBold.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-SemiBold-c64d96f3.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-SemiBold.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-SemiBoldItalic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-SemiBoldItalic-3d0de867.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-SemiBoldItalic.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-Thin.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-Thin-6ad48510.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-Thin.ttf"
|
||||||
|
},
|
||||||
|
"resources/fonts/RobotoCondensed/RobotoCondensed-ThinItalic.ttf": {
|
||||||
|
"file": "assets/RobotoCondensed-ThinItalic-5ab37aa6.ttf",
|
||||||
|
"src": "resources/fonts/RobotoCondensed/RobotoCondensed-ThinItalic.ttf"
|
||||||
|
},
|
||||||
|
"resources/images/tints/caption-bg.png": {
|
||||||
|
"file": "assets/caption-bg-49b89c07.png",
|
||||||
|
"src": "resources/images/tints/caption-bg.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-1.png": {
|
||||||
|
"file": "assets/tint-1-01439484.png",
|
||||||
|
"src": "resources/images/tints/tint-1.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-10.png": {
|
||||||
|
"file": "assets/tint-10-e35a8e01.png",
|
||||||
|
"src": "resources/images/tints/tint-10.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-11.png": {
|
||||||
|
"file": "assets/tint-11-c306849c.png",
|
||||||
|
"src": "resources/images/tints/tint-11.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-12.png": {
|
||||||
|
"file": "assets/tint-12-f07c9a6a.png",
|
||||||
|
"src": "resources/images/tints/tint-12.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-2.png": {
|
||||||
|
"file": "assets/tint-2-b2c805d8.png",
|
||||||
|
"src": "resources/images/tints/tint-2.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-3.png": {
|
||||||
|
"file": "assets/tint-3-e68780ba.png",
|
||||||
|
"src": "resources/images/tints/tint-3.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-4.png": {
|
||||||
|
"file": "assets/tint-4-a132efdf.png",
|
||||||
|
"src": "resources/images/tints/tint-4.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-5.png": {
|
||||||
|
"file": "assets/tint-5-176263cd.png",
|
||||||
|
"src": "resources/images/tints/tint-5.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-6.png": {
|
||||||
|
"file": "assets/tint-6-98168110.png",
|
||||||
|
"src": "resources/images/tints/tint-6.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-7.png": {
|
||||||
|
"file": "assets/tint-7-29525050.png",
|
||||||
|
"src": "resources/images/tints/tint-7.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-8.png": {
|
||||||
|
"file": "assets/tint-8-341db431.png",
|
||||||
|
"src": "resources/images/tints/tint-8.png"
|
||||||
|
},
|
||||||
|
"resources/images/tints/tint-9.png": {
|
||||||
|
"file": "assets/tint-9-a29ba2de.png",
|
||||||
|
"src": "resources/images/tints/tint-9.png"
|
||||||
|
},
|
||||||
"resources/js/app-auth.js": {
|
"resources/js/app-auth.js": {
|
||||||
"file": "assets/app-auth-fabb569c.js",
|
"file": "assets/app-auth-fabb569c.js",
|
||||||
"imports": [
|
"imports": [
|
||||||
|
|||||||
@@ -11,7 +11,8 @@
|
|||||||
optional—it's critical for your future success. Stay updated with daily news from
|
optional—it's critical for your future success. Stay updated with daily news from
|
||||||
<strong>FutureWalker</strong>.
|
<strong>FutureWalker</strong>.
|
||||||
</h1>
|
</h1>
|
||||||
<a href="#latest-news" class="btn btn-primary px-4 rounded-pill text-decoration-none">Start reading now</a>
|
<a href="#latest-news" class="btn btn-primary px-4 rounded-pill text-decoration-none">Start reading
|
||||||
|
now</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -36,7 +36,6 @@
|
|||||||
|
|
||||||
Route::get('/image_gen', [App\Http\Controllers\Tests\TestController::class, 'imageGen']);
|
Route::get('/image_gen', [App\Http\Controllers\Tests\TestController::class, 'imageGen']);
|
||||||
|
|
||||||
|
|
||||||
Route::get('/incomplete/post', function (Request $request) {
|
Route::get('/incomplete/post', function (Request $request) {
|
||||||
|
|
||||||
$post = Post::find(1);
|
$post = Post::find(1);
|
||||||
|
|||||||