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:
@@ -0,0 +1,30 @@
|
||||
@props(['title' => null, 'description' => null])
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="scroll-smooth">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ $title ? "{$title} · " . config('app.name') : config('app.name') }}</title>
|
||||
@if ($description)
|
||||
<meta name="description" content="{{ $description }}">
|
||||
@endif
|
||||
|
||||
@fonts
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
</head>
|
||||
<body class="min-h-screen bg-ink font-sans text-paper antialiased">
|
||||
<div class="pointer-events-none fixed inset-0 -z-10 overflow-hidden">
|
||||
<div class="absolute -top-48 -left-32 h-[34rem] w-[34rem] rounded-full bg-accent/20 blur-[130px]"></div>
|
||||
<div class="absolute top-1/2 -right-40 h-[28rem] w-[28rem] rounded-full bg-accent/10 blur-[150px]"></div>
|
||||
<div class="absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,rgba(245,243,238,0.06)_1px,transparent_0)] bg-[length:28px_28px]"></div>
|
||||
</div>
|
||||
|
||||
<x-site.nav />
|
||||
|
||||
<main>
|
||||
{{ $slot }}
|
||||
</main>
|
||||
|
||||
<x-site.footer />
|
||||
</body>
|
||||
</html>
|
||||
@@ -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>© {{ 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>
|
||||
Reference in New Issue
Block a user