Add Filament admin panel and creative public portfolio site

Adds a Filament admin (Profile settings page plus CRUD resources for
Education, Experience, Projects, and Posts) backing a public-facing
personal site: hero/about/timeline home page, project showcase, and
blog, styled with a dark editorial theme (Fraunces + Instrument Sans).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
m105
2026-07-30 21:10:43 +03:00
co-authored by Claude Sonnet 5
parent ac61c77608
commit 8d97dcbd0f
62 changed files with 5933 additions and 237 deletions
@@ -0,0 +1,19 @@
@php
$profile = \App\Models\Profile::query()->first();
$socials = collect($profile?->social_links ?? []);
@endphp
<footer class="mt-24 border-t border-white/5">
<div class="mx-auto flex max-w-5xl flex-col items-center gap-4 px-6 py-10 text-sm text-paper-dim sm:flex-row sm:justify-between">
<p>&copy; {{ now()->year }} {{ $profile?->name ?? config('app.name') }}. All rights reserved.</p>
@if ($socials->isNotEmpty())
<div class="flex items-center gap-5">
@foreach ($socials as $platform => $url)
<a href="{{ $url }}" target="_blank" rel="noopener noreferrer" class="capitalize transition hover:text-accent">
{{ $platform }}
</a>
@endforeach
</div>
@endif
</div>
</footer>
@@ -0,0 +1,16 @@
@php
$profile = \App\Models\Profile::query()->first();
@endphp
<header class="sticky top-0 z-40 border-b border-white/5 bg-ink/80 backdrop-blur-md">
<nav class="mx-auto flex max-w-5xl items-center justify-between px-6 py-4">
<a href="{{ route('home') }}" class="font-display text-lg font-semibold tracking-tight text-paper">
{{ $profile?->name ?? config('app.name') }}<span class="text-accent">.</span>
</a>
<div class="flex items-center gap-6 text-sm text-paper-dim">
<a href="{{ route('home') }}#about" class="transition hover:text-paper">About</a>
<a href="{{ route('projects.index') }}" class="transition hover:text-paper {{ request()->routeIs('projects.*') ? 'text-paper' : '' }}">Projects</a>
<a href="{{ route('posts.index') }}" class="transition hover:text-paper {{ request()->routeIs('posts.*') ? 'text-paper' : '' }}">Blog</a>
</div>
</nav>
</header>