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
+30
View File
@@ -0,0 +1,30 @@
<x-layouts.app title="Blog" description="Writing on things I'm learning and building.">
<section class="mx-auto max-w-3xl px-6 pt-16 pb-8">
<p class="font-mono text-sm tracking-widest text-accent uppercase">Writing</p>
<h1 class="mt-3 font-display text-5xl font-semibold text-paper">Blog</h1>
</section>
<section class="mx-auto max-w-3xl px-6 pb-16">
@if ($posts->isEmpty())
<p class="text-paper-dim">No posts yet — check back soon.</p>
@else
<div class="divide-y divide-white/10">
@foreach ($posts as $post)
<a href="{{ route('posts.show', $post) }}" class="group flex flex-col gap-1 py-6 sm:flex-row sm:items-baseline sm:gap-6">
<span class="font-mono text-xs tracking-wide text-paper-dim uppercase">{{ $post->published_at->format('M j, Y') }}</span>
<span class="flex-1">
<span class="font-display text-lg text-paper transition group-hover:text-accent">{{ $post->title }}</span>
@if ($post->excerpt)
<span class="mt-1 block text-sm text-paper-dim">{{ $post->excerpt }}</span>
@endif
</span>
</a>
@endforeach
</div>
<div class="mt-10">
{{ $posts->links() }}
</div>
@endif
</section>
</x-layouts.app>
+26
View File
@@ -0,0 +1,26 @@
<x-layouts.app :title="$post->title" :description="$post->excerpt">
<article class="mx-auto max-w-3xl px-6 pt-16 pb-24">
<a href="{{ route('posts.index') }}" class="text-sm text-paper-dim transition hover:text-accent">&larr; All posts</a>
<p class="mt-6 font-mono text-xs tracking-wide text-paper-dim uppercase">{{ $post->published_at->format('F j, Y') }}</p>
<h1 class="mt-2 font-display text-4xl font-semibold text-paper sm:text-5xl">{{ $post->title }}</h1>
@if (!empty($post->tags))
<div class="mt-4 flex flex-wrap gap-2">
@foreach ($post->tags as $tag)
<span class="rounded-full bg-accent-soft px-3 py-1 text-xs text-accent">{{ $tag }}</span>
@endforeach
</div>
@endif
@if ($post->cover_image_url)
<img src="{{ $post->cover_image_url }}" alt="{{ $post->title }}" class="mt-10 w-full rounded-2xl border border-white/10">
@endif
@if ($post->body)
<div class="prose prose-invert mt-10 max-w-none text-paper-dim prose-headings:font-display prose-headings:text-paper prose-a:text-accent">
{!! $post->body !!}
</div>
@endif
</article>
</x-layouts.app>