2025-09-13 17:39:17 +03:00
<! DOCTYPE html >
< html lang = "{{ str_replace('_', '-', app()->getLocale()) }}" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
2025-09-20 16:47:41 +03:00
<!-- Google tag ( gtag . js ) -->
< script async src = "https://www.googletagmanager.com/gtag/js?id=G-D5Z2BTSK43" ></ script >
< script >
window . dataLayer = window . dataLayer || [];
function gtag (){ dataLayer . push ( arguments );}
gtag ( 'js' , new Date ());
gtag ( 'config' , 'G-D5Z2BTSK43' );
</ script >
2025-09-13 17:39:17 +03:00
< title > {{ config ( 'app.name' , 'Open Text Summaries' ) }} </ title >
2025-09-27 16:33:31 +03:00
< meta name = "description" content = "OpenTextSummaries offers free, concise book summaries and key insights to help you learn faster and discover great books." >
2025-09-13 17:39:17 +03:00
<!-- Fonts -->
< link rel = "preconnect" href = "https://fonts.bunny.net" >
< link href = "https://fonts.bunny.net/css?family=instrument-sans:400,500,600|playfair-display:700" rel = "stylesheet" />
2025-09-20 16:47:41 +03:00
<!-- Tailwind CSS ( CDN ) to ensure styling even without a build ) -->
< script src = "https://cdn.tailwindcss.com" ></ script >
2025-09-13 17:39:17 +03:00
<!-- Styles / Scripts -->
@ if ( file_exists ( public_path ( 'build/manifest.json' )) || file_exists ( public_path ( 'hot' )))
@ vite ([ 'resources/css/app.css' , 'resources/js/app.js' ])
@ else
< style >
/*! tailwindcss v4.0.7 | MIT License | https://tailwindcss.com */ @ layer theme { : root , : host { -- font - sans : 'Instrument Sans' , ui - sans - serif , system - ui , sans - serif , "Apple Color Emoji" , "Segoe UI Emoji" , "Segoe UI Symbol" , "Noto Color Emoji" ; -- font - serif : ui - serif , Georgia , Cambria , "Times New Roman" , Times , serif ; -- font - mono : ui - monospace , SFMono - Regular , Menlo , Monaco , Consolas , "Liberation Mono" , "Courier New" , monospace ; -- color - red - 50 : oklch ( . 971 . 013 17.38 ); -- color - red - 100 : oklch ( . 936 . 032 17.717 ); -- color - red - 200 : oklch ( . 885 . 062 18.334 ); -- color - red - 300 : oklch ( . 808 . 114 19.571 ); -- color - red - 400 : oklch ( . 704 . 191 22.216 ); -- color - red - 500 : oklch ( . 637 . 237 25.331 ); -- color - red - 600 : oklch ( . 577 . 245 27.325 ); -- color - red - 700 : oklch ( . 505 . 213 27.518 ); -- color - red - 800 : oklch ( . 444 . 177 26.899 ); -- color - red - 900 : oklch ( . 396 . 141 25.723 ); -- color - red - 950 : oklch ( . 258 . 092 26.042 ); -- color - orange - 50 : oklch ( . 98 . 016 73.684 ); -- color - orange - 100 : oklch ( . 954 . 03 8 75.164 ); -- color - orange - 200 : oklch ( . 901 . 076 70.697 ); -- color - orange - 300 : oklch ( . 837 . 128 66.29 ); -- color - orange - 400 : oklch ( . 75 . 183 55.934 ); -- color - orange - 500 : oklch ( . 705 . 213 47.604 ); -- color - orange - 600 : oklch ( . 646 . 222 41.116 ); -- color - orange - 700 : oklch ( . 553 . 195 38.402 ); -- color - orange - 800 : oklch ( . 47 . 157 37.304 ); -- color - orange - 900 : oklch ( . 408 . 123 38.172 ); -- color - orange - 950 : oklch ( . 266 . 07 9 36.259 ); -- color - amber - 50 : oklch ( . 987 . 022 95.277 ); -- color - amber - 100 : oklch ( . 962 . 05 9 95.617 ); -- color - amber - 200 : oklch ( . 924 . 12 95.746 ); -- color - amber - 300 : oklch ( . 879 . 169 91.605 ); -- color - amber - 400 : oklch ( . 828 . 189 84.429 ); -- color - amber - 500 : oklch ( . 769 . 188 70.08 ); -- color - amber - 600 : oklch ( . 666 . 179 58.318 ); -- color - amber - 700 : oklch ( . 555 . 163 48.998 ); -- color - amber - 800 : oklch ( . 473 . 137 46.201 ); -- color - amber - 900 : oklch ( . 414 . 112 45.904 ); -- color - amber - 950 : oklch ( . 279 . 077 45.635 ); -- color - yellow - 50 : oklch ( . 987 . 026 102.212 ); -- color - yellow - 100 : oklch ( . 973 . 071 103.193 ); -- color - yellow - 200 : oklch ( . 945 . 129 101.54 ); -- color - yellow - 300 : oklch ( . 905 . 182 98.111 ); -- color - yellow - 400 : oklch ( . 852 . 199 91.936 ); -- color - yellow - 500 : oklch ( . 795 . 184 86.047 ); -- color - yellow - 600 : oklch ( . 681 . 162 75.834 ); -- color - yellow - 700 : oklch ( . 554 . 135 66.442 ); -- color - yellow - 800 : oklch ( . 476 . 114 61.907 ); -- color - yellow - 900 : oklch ( . 421 . 095 57.708 ); -- color - yellow - 950 : oklch ( . 286 . 066 53.813 ); -- color - lime - 50 : oklch ( . 986 . 031 120.757 ); -- color - lime - 100 : oklch ( . 967 . 067 122.328 ); -- color - lime - 200 : oklch ( . 938 . 127 124.321 ); -- color - lime - 300 : oklch ( . 897 . 196 126.665 ); -- color - lime - 400 : oklch ( . 841 . 238 128.85 ); -- color - lime - 500 : oklch ( . 768 . 233 130.85 ); -- color - lime - 600 : oklch ( . 648 . 2 131.684 ); -- color - lime - 700 : oklch ( . 532 . 157 131.589 ); -- color - lime - 800 : oklch ( . 453 . 124 130.933 ); -- color - lime - 900 : oklch ( . 405 . 101 131.063 ); -- color - lime - 950 : oklch ( . 274 . 072 132.109 ); -- color - green - 50 : oklch ( . 982 . 01 8 155.826 ); -- color - green - 100 : oklch ( . 962 . 044 156.743 ); -- color - green - 200 : oklch ( . 925 . 084 155.995 ); -- color - green - 300 : oklch ( . 871 . 15 154.449 ); -- color - green - 400 : oklch ( . 792 . 209 151.711 ); -- color - green - 500 : oklch ( . 723 . 219 149.579 ); -- color - green - 600 : oklch ( . 627 . 194 149.214 ); -- color - green - 700 : oklch ( . 527 . 154 150.069 ); -- color - green - 800 : oklch ( . 448 . 119 151.328 ); -- color - green - 900 : oklch ( . 393 . 095 152.535 ); -- color - green - 950 : oklch ( . 266 . 065 152.934 ); -- color - emerald - 50 : oklch ( . 979 . 021 166.113 ); -- color - emerald - 100 : oklch ( . 95 . 052 163.051 ); -- color - emerald - 200 : oklch ( . 905 . 093 164.15 ); -- color - emerald - 300 : oklch ( . 845 . 143 164.978 ); -- color - emerald - 400 : oklch ( . 765 . 177 163.223 ); -- color - emerald - 500 : oklch ( . 696 . 17 162.48 ); -- color - emerald - 600 : oklch ( . 596 . 145 163.225 ); -- color - emerald - 700 : oklch ( . 508 . 118 165.612 ); -- color - emerald - 800 : oklch ( . 432 . 095 166.913 ); -- color - emerald - 900 : oklch ( . 378 . 077 168.94 ); -- color - emerald - 950 : oklch ( . 262 . 051 172.552 ); -- color - teal - 50 : oklch ( . 984 . 014 180.72 ); -- color - teal - 100 : oklch ( . 953 . 051 180.801 ); -- color - teal - 200 : oklch ( . 91 . 096 180.426 ); -- color - teal - 300 : oklch ( . 855 . 138 181.071 ); -- color - teal - 400 : oklch ( . 777 . 152 181.912 ); -- color - teal - 500 : oklch ( . 704 . 14 182.503 ); -- color - teal - 600 : oklch ( . 6 . 118 184.704 ); -- color - teal - 700 : oklch ( . 511 . 096 186.391 ); -- color - teal - 800 : oklch ( . 437 . 07 8 188.216 ); -- color - teal - 900 : oklch ( . 386 . 063 188.416 ); -- color -
</ style >
@ endif
</ head >
< body class = "bg-gradient-to-br from-blue-50 to-indigo-50 dark:from-gray-900 dark:to-indigo-950 text-gray-800 dark:text-gray-200 min-h-screen" >
< header class = "container mx-auto px-4 py-6" >
< div class = "flex justify-between items-center" >
< div class = "flex items-center" >
< svg class = "w-10 h-10 text-indigo-600 dark:text-indigo-400" viewBox = "0 0 24 24" fill = "none" xmlns = "http://www.w3.org/2000/svg" >
< path d = "M12 6.25278V19.2528M12 6.25278C10.8321 5.47686 9.24649 5 7.5 5C5.75351 5 4.16789 5.47686 3 6.25278V19.2528C4.16789 18.4769 5.75351 18 7.5 18C9.24649 18 10.8321 18.4769 12 19.2528M12 6.25278C13.1679 5.47686 14.7535 5 16.5 5C18.2465 5 19.8321 5.47686 21 6.25278V19.2528C19.8321 18.4769 18.2465 18 16.5 18C14.7535 18 13.1679 18.4769 12 19.2528" stroke = "currentColor" stroke - width = "2" stroke - linecap = "round" stroke - linejoin = "round" />
</ svg >
< h1 class = "ml-3 text-2xl font-bold text-indigo-700 dark:text-indigo-300" > OpenTextSummaries </ h1 >
</ div >
@ if ( Route :: has ( 'login' ))
< nav class = "flex items-center gap-4" >
@ auth
< a
href = "{{ url('/dashboard') }}"
class = "px-5 py-2 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg transition-colors duration-200 shadow-sm"
>
Dashboard
</ a >
@ else
< a
href = "{{ route('login') }}"
class = "px-5 py-2 text-indigo-600 dark:text-indigo-400 hover:text-indigo-800 dark:hover:text-indigo-300 transition-colors duration-200"
>
Log in
</ a >
@ if ( Route :: has ( 'register' ))
< a
href = "{{ route('register') }}"
class = "px-5 py-2 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg transition-colors duration-200 shadow-sm" >
Register
</ a >
@ endif
@ endauth
</ nav >
@ endif
</ div >
</ header >
< main class = "container mx-auto px-4 py-12" >
< section class = "max-w-5xl mx-auto text-center mb-16" >
< h2 class = "text-5xl font-bold font-serif text-indigo-800 dark:text-indigo-300 mb-6" > Expand Your Knowledge with Book Summaries </ h2 >
< p class = "text-xl text-gray-600 dark:text-gray-300 mb-8" > Discover the key insights from the world 's best books in just minutes.</p>
<div class="flex justify-center gap-4">
<a href="#featured" class="px-6 py-3 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg transition-colors duration-200 shadow-md">
Explore Summaries
</a>
<a href="#how-it-works" class="px-6 py-3 bg-white dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700 text-indigo-600 dark:text-indigo-400 rounded-lg transition-colors duration-200 shadow-md">
How It Works
</a>
</div>
</section>
<section id="featured" class="max-w-6xl mx-auto mb-20">
2025-09-20 16:47:41 +03:00
<div class="flex items-center justify-between mb-6">
<h3 class="text-3xl font-bold text-indigo-700 dark:text-indigo-400">Latest Books</h3>
<a href="{{ route(' books . index ') }}" class="text-indigo-600 dark:text-indigo-400 hover:underline">View all →</a>
2025-09-13 17:39:17 +03:00
</div>
2025-09-20 16:47:41 +03:00
@if(isset($latestBooks) && $latestBooks->count())
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
@foreach($latestBooks as $book)
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-md overflow-hidden transition-transform duration-300 hover:shadow-lg hover:-translate-y-1">
@if($book->cover_image)
<img src="{{ $book->cover_image }}" alt="{{ $book->title }} cover" class="w-full h-48 object-cover" />
@else
<div class="h-48 bg-indigo-100 dark:bg-indigo-900 flex items-center justify-center">
<svg class="w-24 h-24 text-indigo-500 dark:text-indigo-400" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 6.25278V19.2528M12 6.25278C10.8321 5.47686 9.24649 5 7.5 5C5.75351 5 4.16789 5.47686 3 6.25278V19.2528C4.16789 18.4769 5.75351 18 7.5 18C9.24649 18 10.8321 18.4769 12 19.2528M12 6.25278C13.1679 5.47686 14.7535 5 16.5 5C18.2465 5 19.8321 5.47686 21 6.25278V19.2528C19.8321 18.4769 18.2465 18 16.5 18C14.7535 18 13.1679 18.4769 12 19.2528" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
@endif
<div class="p-6">
<h4 class="text-xl font-bold text-gray-800 dark:text-white mb-2">
<a href="{{ route(' books . show ', $book) }}" class="hover:underline">{{ $book->title }}</a>
</h4>
<p class="text-sm text-gray-600 dark:text-gray-300 mb-3">
@if($book->authors && $book->authors->count())
{{ $book->authors->pluck(' name ')->join(' , ') }}
@elseif($book->author)
{{ $book->author }}
@endif
</p>
@if($book->summary)
<p class="text-gray-600 dark:text-gray-400 mb-4">{{ Str::limit(strip_tags($book->summary->content), 120) }}</p>
@else
<p class="text-gray-600 dark:text-gray-400 mb-4">No summary available yet.</p>
@endif
<a href="{{ route(' books . show ', $book) }}" class="text-indigo-600 dark:text-indigo-400 hover:text-indigo-800 dark:hover:text-indigo-300 font-medium">Read Summary →</a>
</div>
</div>
@endforeach
</div>
@else
<p class="text-center text-gray-600 dark:text-gray-300">No books available yet. Ingest some via the API!</p>
@endif
2025-09-13 17:39:17 +03:00
</section>
<section id="how-it-works" class="max-w-4xl mx-auto mb-20">
<h3 class="text-3xl font-bold text-center text-indigo-700 dark:text-indigo-400 mb-10">How It Works</h3>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="text-center">
<div class="w-16 h-16 bg-indigo-100 dark:bg-indigo-900 rounded-full flex items-center justify-center mx-auto mb-4">
<span class="text-2xl font-bold text-indigo-600 dark:text-indigo-400">1</span>
</div>
<h4 class="text-xl font-bold text-gray-800 dark:text-white mb-2">Browse</h4>
<p class="text-gray-600 dark:text-gray-400">Explore our extensive library of book summaries across various categories.</p>
</div>
<div class="text-center">
<div class="w-16 h-16 bg-indigo-100 dark:bg-indigo-900 rounded-full flex items-center justify-center mx-auto mb-4">
<span class="text-2xl font-bold text-indigo-600 dark:text-indigo-400">2</span>
</div>
<h4 class="text-xl font-bold text-gray-800 dark:text-white mb-2">Read</h4>
<p class="text-gray-600 dark:text-gray-400">Get the key insights from books in just 15 minutes of reading time.</p>
</div>
<div class="text-center">
<div class="w-16 h-16 bg-indigo-100 dark:bg-indigo-900 rounded-full flex items-center justify-center mx-auto mb-4">
<span class="text-2xl font-bold text-indigo-600 dark:text-indigo-400">3</span>
</div>
<h4 class="text-xl font-bold text-gray-800 dark:text-white mb-2">Apply</h4>
<p class="text-gray-600 dark:text-gray-400">Implement the knowledge and insights in your daily life.</p>
</div>
</div>
</section>
<section class="max-w-5xl mx-auto bg-indigo-600 dark:bg-indigo-800 text-white rounded-2xl overflow-hidden shadow-xl">
<div class="p-10 md:p-16">
<h3 class="text-3xl font-bold mb-6">Ready to expand your knowledge?</h3>
<p class="text-indigo-100 mb-8 text-lg">Join thousands of readers who are learning from the world' s best books in just minutes a day .</ p >
< a href = "{{ Route::has('register') ? route('register') : '#' }}" class = "inline-block px-8 py-4 bg-white text-indigo-600 hover:bg-indigo-50 rounded-lg font-bold transition-colors duration-200 shadow-md" >
Get Started for Free
</ a >
</ div >
</ section >
</ main >
< footer class = "bg-white dark:bg-gray-900 py-12 mt-20" >
< div class = "container mx-auto px-4" >
< div class = "flex flex-col md:flex-row justify-between items-center" >
< div class = "flex items-center mb-6 md:mb-0" >
< svg class = "w-8 h-8 text-indigo-600 dark:text-indigo-400" viewBox = "0 0 24 24" fill = "none" xmlns = "http://www.w3.org/2000/svg" >
< path d = "M12 6.25278V19.2528M12 6.25278C10.8321 5.47686 9.24649 5 7.5 5C5.75351 5 4.16789 5.47686 3 6.25278V19.2528C4.16789 18.4769 5.75351 18 7.5 18C9.24649 18 10.8321 18.4769 12 19.2528M12 6.25278C13.1679 5.47686 14.7535 5 16.5 5C18.2465 5 19.8321 5.47686 21 6.25278V19.2528C19.8321 18.4769 18.2465 18 16.5 18C14.7535 18 13.1679 18.4769 12 19.2528" stroke = "currentColor" stroke - width = "2" stroke - linecap = "round" stroke - linejoin = "round" />
</ svg >
< span class = "ml-2 text-lg font-bold text-gray-800 dark:text-white" > OpenTextSummaries </ span >
</ div >
< div class = "flex gap-6" >
2025-09-20 16:47:41 +03:00
< a href = "{{ route('about') }}" class = "text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400" > About </ a >
< a href = "{{ route('contact.show') }}" class = "text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400" > Contact </ a >
< a href = "{{ route('privacy') }}" class = "text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400" > Privacy </ a >
< a href = "{{ route('terms') }}" class = "text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400" > Terms </ a >
2025-09-13 17:39:17 +03:00
</ div >
</ div >
< div class = "mt-8 pt-8 border-t border-gray-200 dark:border-gray-800 text-center text-gray-500 dark:text-gray-400" >
< p >& copy ; {{ date ( 'Y' ) }} OpenTextSummaries . All rights reserved .</ p >
</ div >
</ div >
</ footer >
</ body >
</ html >