2025-08-26 14:13:09 -06:00
|
|
|
{{ define "content" }}
|
2025-08-28 17:09:23 -06:00
|
|
|
<div class="flex-1 flex flex-col overflow-hidden">
|
|
|
|
|
<!-- Top Navigation -->
|
|
|
|
|
<div class="bg-white border-b border-gray-200 px-4 sm:px-6 py-3">
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<div class="flex items-center gap-4">
|
|
|
|
|
<div class="flex items-center gap-2">
|
|
|
|
|
<i class="fas fa-tachometer-alt text-green-600"></i>
|
|
|
|
|
<span class="text-sm font-medium">Volunteer Dashboard</span>
|
2025-08-26 14:13:09 -06:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-08-28 17:09:23 -06:00
|
|
|
<div class="text-sm text-gray-600 hidden sm:block">
|
|
|
|
|
Welcome back, {{ .UserName }}!
|
2025-08-26 14:13:09 -06:00
|
|
|
</div>
|
2025-08-28 17:09:23 -06:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-08-26 14:13:09 -06:00
|
|
|
|
2025-08-28 17:09:23 -06:00
|
|
|
<!-- Main Content -->
|
|
|
|
|
<div class="flex-1 overflow-hidden bg-gray-50">
|
|
|
|
|
<div class="h-full flex flex-col lg:flex-row gap-6 p-4 sm:p-6">
|
|
|
|
|
<!-- Left Column - Posts -->
|
|
|
|
|
<div class="flex-1 lg:flex-none lg:w-2/3 space-y-0">
|
|
|
|
|
{{ if .Posts }}{{range .Posts}}
|
|
|
|
|
<article class="bg-white border-b border-gray-200">
|
|
|
|
|
<!-- Post Header -->
|
|
|
|
|
<div class="flex items-center px-4 sm:px-6 py-4">
|
|
|
|
|
<div class="flex-shrink-0">
|
|
|
|
|
<div
|
|
|
|
|
class="w-10 h-10 bg-blue-500 flex items-center justify-center text-white font-semibold rounded-full"
|
|
|
|
|
>
|
|
|
|
|
{{slice .AuthorName 0 1}}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ml-4">
|
|
|
|
|
<p class="text-sm font-semibold text-gray-900">{{.AuthorName}}</p>
|
|
|
|
|
<p class="text-xs text-gray-500">
|
|
|
|
|
{{.CreatedAt.Format "Jan 2, 2006"}}
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Post Image -->
|
|
|
|
|
{{if .ImageURL}}
|
|
|
|
|
<div class="w-full">
|
|
|
|
|
<img
|
|
|
|
|
src="{{.ImageURL}}"
|
|
|
|
|
alt="Post image"
|
|
|
|
|
class="w-full max-h-96 object-cover"
|
|
|
|
|
onerror="this.parentElement.style.display='none'"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
{{end}}
|
|
|
|
|
|
|
|
|
|
<!-- Post Content -->
|
|
|
|
|
{{if .Content}}
|
|
|
|
|
<div class="px-4 sm:px-6 pt-2 pb-4">
|
|
|
|
|
<p class="text-gray-900 leading-relaxed">
|
|
|
|
|
<span class="font-semibold">{{.AuthorName}}</span> {{.Content}}
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
{{end}}
|
|
|
|
|
</article>
|
|
|
|
|
{{else}}
|
|
|
|
|
<div class="bg-white p-8 sm:p-12 text-center border-b border-gray-200">
|
|
|
|
|
<div class="max-w-sm mx-auto">
|
2025-08-26 14:13:09 -06:00
|
|
|
<svg
|
2025-08-28 17:09:23 -06:00
|
|
|
class="w-16 h-16 mx-auto text-gray-300 mb-4"
|
2025-08-26 14:13:09 -06:00
|
|
|
fill="none"
|
|
|
|
|
stroke="currentColor"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
>
|
|
|
|
|
<path
|
|
|
|
|
stroke-linecap="round"
|
|
|
|
|
stroke-linejoin="round"
|
|
|
|
|
stroke-width="2"
|
2025-08-28 17:09:23 -06:00
|
|
|
d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"
|
2025-08-26 14:13:09 -06:00
|
|
|
></path>
|
|
|
|
|
</svg>
|
2025-08-28 17:09:23 -06:00
|
|
|
<h3 class="text-lg font-medium text-gray-900 mb-2">No posts yet</h3>
|
|
|
|
|
<p class="text-gray-500">
|
|
|
|
|
Be the first to share something with the community!
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{{ end }} {{ else }}
|
|
|
|
|
<div class="bg-white border-b border-gray-200 p-8 sm:p-12 text-center">
|
|
|
|
|
<div class="max-w-sm mx-auto">
|
|
|
|
|
<div
|
|
|
|
|
class="w-16 h-16 bg-gray-100 rounded-full flex items-center justify-center mx-auto mb-4"
|
2025-08-26 14:13:09 -06:00
|
|
|
>
|
2025-08-28 17:09:23 -06:00
|
|
|
<i class="fas fa-inbox text-2xl text-gray-400"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<p class="text-gray-600 font-medium mb-2">No posts yet</p>
|
|
|
|
|
<p class="text-sm text-gray-500">
|
|
|
|
|
Check back later for updates from your team
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
2025-08-26 14:13:09 -06:00
|
|
|
</div>
|
2025-08-28 17:09:23 -06:00
|
|
|
{{ end }}
|
2025-08-26 14:13:09 -06:00
|
|
|
</div>
|
|
|
|
|
|
2025-08-28 17:09:23 -06:00
|
|
|
<!-- Right Column - Statistics -->
|
|
|
|
|
<div class="w-full lg:w-1/3 flex flex-col gap-4 sm:gap-6">
|
|
|
|
|
<!-- Today's Overview -->
|
|
|
|
|
<div class="bg-white border-b border-gray-200">
|
|
|
|
|
<div class="px-4 sm:px-6 py-4">
|
|
|
|
|
<h3 class="text-sm font-semibold text-gray-900 mb-4">
|
|
|
|
|
Today's Overview
|
|
|
|
|
</h3>
|
|
|
|
|
<div class="space-y-4">
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-calendar-day text-gray-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">Appointments Today</span>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-lg font-semibold text-gray-900">
|
|
|
|
|
{{ .Statistics.AppointmentsToday }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-calendar-week text-gray-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">This Week</span>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-lg font-semibold text-gray-900">
|
|
|
|
|
{{ .Statistics.AppointmentsThisWeek }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Polling Progress -->
|
|
|
|
|
<div class="bg-white border-b border-gray-200">
|
|
|
|
|
<div class="px-4 sm:px-6 py-4">
|
|
|
|
|
<h3 class="text-sm font-semibold text-gray-900 mb-4">
|
|
|
|
|
Polling Progress
|
|
|
|
|
</h3>
|
|
|
|
|
<div class="space-y-4">
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-check-circle text-green-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">Polls Completed</span>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-lg font-semibold text-green-600">
|
|
|
|
|
{{ .Statistics.PollsCompleted }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-clock text-orange-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">Polls Remaining</span>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-lg font-semibold text-orange-600">
|
|
|
|
|
{{ .Statistics.PollsRemaining }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Progress Bar -->
|
|
|
|
|
{{ if gt .Statistics.TotalAppointments 0 }}
|
|
|
|
|
<div class="mt-4">
|
|
|
|
|
<div class="flex justify-between text-xs text-gray-600 mb-2">
|
|
|
|
|
<span>Progress</span>
|
|
|
|
|
<span
|
|
|
|
|
>{{ .Statistics.PollsCompleted }}/{{
|
|
|
|
|
.Statistics.TotalAppointments }}</span
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="w-full bg-gray-200 rounded-full h-2">
|
|
|
|
|
<div
|
|
|
|
|
class="bg-gray-600 h-2 rounded-full transition-all duration-300"
|
|
|
|
|
style="width: {{ .Statistics.PollCompletionPercent }}%"
|
|
|
|
|
></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{{ end }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Signs Summary -->
|
|
|
|
|
<div class="bg-white border-b border-gray-200">
|
|
|
|
|
<div class="px-4 sm:px-6 py-4">
|
|
|
|
|
<h3 class="text-sm font-semibold text-gray-900 mb-4">
|
|
|
|
|
Signs Requested
|
|
|
|
|
</h3>
|
|
|
|
|
<div class="space-y-4">
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-sign text-gray-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">Lawn Signs</span>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-lg font-semibold text-gray-900">
|
|
|
|
|
{{ .Statistics.LawnSignsRequested }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between">
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-flag text-gray-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">Banner Signs</span>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-lg font-semibold text-gray-900">
|
|
|
|
|
{{ .Statistics.BannerSignsRequested }}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- Quick Actions -->
|
|
|
|
|
<div class="bg-white border-b border-gray-200">
|
|
|
|
|
<div class="px-4 sm:px-6 py-4">
|
|
|
|
|
<h3 class="text-sm font-semibold text-gray-900 mb-4">
|
|
|
|
|
Quick Actions
|
|
|
|
|
</h3>
|
|
|
|
|
<div class="space-y-2">
|
|
|
|
|
<a
|
|
|
|
|
href="/volunteer/Addresses"
|
|
|
|
|
class="w-full flex items-center gap-3 p-3 hover:bg-gray-50 rounded transition-all duration-200"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-calendar-alt text-gray-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">View Appointments</span>
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
|
|
<a
|
|
|
|
|
href="/schedual"
|
|
|
|
|
class="w-full flex items-center gap-3 p-3 hover:bg-gray-50 rounded transition-all duration-200"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-clock text-gray-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">My Schedule</span>
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
|
|
<a
|
|
|
|
|
href="/profile"
|
|
|
|
|
class="w-full flex items-center gap-3 p-3 hover:bg-gray-50 rounded transition-all duration-200"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<i class="fas fa-user text-gray-600 text-xs"></i>
|
|
|
|
|
</div>
|
|
|
|
|
<span class="text-sm text-gray-700">Profile Settings</span>
|
|
|
|
|
</a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-08-26 14:13:09 -06:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{{ end }}
|