|
1 | 1 | import { useParams, Link, useNavigate } from "react-router-dom"; |
2 | | -import { ArrowLeft, Globe, Github, Calendar } from "lucide-react"; |
| 2 | +import { ArrowLeft, Globe, Github, Calendar, Play, CheckCircle2 } from "lucide-react"; |
3 | 3 | import Header from "../components/Header"; |
4 | 4 | import Footer from "../components/Footer"; |
5 | 5 | import { getProjectById, Project } from "../data/projects"; |
@@ -126,6 +126,76 @@ const Project = () => { |
126 | 126 | {project.longDescription} |
127 | 127 | </p> |
128 | 128 |
|
| 129 | + {/* YouTube Video */} |
| 130 | + {project.youtubeUrl && ( |
| 131 | + <div className="mb-16"> |
| 132 | + {/* Header with icon and title */} |
| 133 | + <div className="flex items-center gap-3 mb-6"> |
| 134 | + <div className="p-2 bg-blue-100 dark:bg-blue-900/30 rounded-lg"> |
| 135 | + <Play className="h-6 w-6 text-blue-600 dark:text-blue-400" /> |
| 136 | + </div> |
| 137 | + <h2 className="text-3xl font-bold text-gray-900 dark:text-white"> |
| 138 | + How to Customize Emails in Supabase Self-Hosted |
| 139 | + </h2> |
| 140 | + </div> |
| 141 | + |
| 142 | + {/* Video Player */} |
| 143 | + <div className="mb-8"> |
| 144 | + <div className="bg-gray-900 rounded-xl overflow-hidden shadow-2xl border border-gray-800"> |
| 145 | + <div className="relative w-full" style={{ paddingBottom: "56.25%" }}> |
| 146 | + <iframe |
| 147 | + className="absolute top-0 left-0 w-full h-full" |
| 148 | + src={project.youtubeUrl.replace("watch?v=", "embed/").split("&")[0]} |
| 149 | + title="How to Customize Emails in Supabase Self-Hosted" |
| 150 | + allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" |
| 151 | + allowFullScreen |
| 152 | + loading="lazy" |
| 153 | + /> |
| 154 | + </div> |
| 155 | + </div> |
| 156 | + </div> |
| 157 | + |
| 158 | + {/* Description and Learning Points */} |
| 159 | + <div className="bg-gradient-to-br from-blue-50 to-indigo-50 dark:from-gray-800 dark:to-gray-900 rounded-xl p-6 border border-blue-100 dark:border-gray-700 shadow-sm"> |
| 160 | + <p className="text-gray-700 dark:text-gray-300 mb-6 leading-relaxed"> |
| 161 | + In this video, you'll learn how to fully customize the transactional emails sent by a self-hosted Supabase instance. We'll walk through how to configure your email provider, update email templates, and make sure every message your users receive matches your brand and application flow. |
| 162 | + </p> |
| 163 | + |
| 164 | + <div className="space-y-3"> |
| 165 | + <p className="text-sm font-semibold text-gray-800 dark:text-gray-200 uppercase tracking-wide"> |
| 166 | + What you'll learn: |
| 167 | + </p> |
| 168 | + <div className="grid grid-cols-2 gap-3"> |
| 169 | + <div className="flex items-start gap-2"> |
| 170 | + <CheckCircle2 className="h-4 w-4 text-green-600 dark:text-green-400 flex-shrink-0 mt-0.5" /> |
| 171 | + <span className="text-sm text-gray-700 dark:text-gray-300"> |
| 172 | + Configure SMTP in Supabase |
| 173 | + </span> |
| 174 | + </div> |
| 175 | + <div className="flex items-start gap-2"> |
| 176 | + <CheckCircle2 className="h-4 w-4 text-green-600 dark:text-green-400 flex-shrink-0 mt-0.5" /> |
| 177 | + <span className="text-sm text-gray-700 dark:text-gray-300"> |
| 178 | + Customize email templates |
| 179 | + </span> |
| 180 | + </div> |
| 181 | + <div className="flex items-start gap-2"> |
| 182 | + <CheckCircle2 className="h-4 w-4 text-green-600 dark:text-green-400 flex-shrink-0 mt-0.5" /> |
| 183 | + <span className="text-sm text-gray-700 dark:text-gray-300"> |
| 184 | + Authentication emails handling |
| 185 | + </span> |
| 186 | + </div> |
| 187 | + <div className="flex items-start gap-2"> |
| 188 | + <CheckCircle2 className="h-4 w-4 text-green-600 dark:text-green-400 flex-shrink-0 mt-0.5" /> |
| 189 | + <span className="text-sm text-gray-700 dark:text-gray-300"> |
| 190 | + Test and validate setup |
| 191 | + </span> |
| 192 | + </div> |
| 193 | + </div> |
| 194 | + </div> |
| 195 | + </div> |
| 196 | + </div> |
| 197 | + )} |
| 198 | + |
129 | 199 | <div className="flex flex-col sm:flex-row gap-4 mt-8"> |
130 | 200 | {project.liveUrl && ( |
131 | 201 | <a |
|
0 commit comments