chore: add lw7 links in blog post

This commit is contained in:
Francesco Sansalvadore committed 2023-04-05 22:57:13 +02:00
1 parent 00d694c66a
commit 08c596048b
10 files changed
+321 -120

No files matched your search

@@ -0,0 +1,136 @@
import Image from 'next/image'
import React from 'react'
import days from '~/components/LaunchWeek/lw7_days'
const BlogLinks = () => {
const SectionButtons = ({
blog,
docs,
video,
}: {
blog: string
docs?: string
video?: string
}) => {
return (
<div className="flex gap-2 z-10">
<a href={blog} target="_blank" rel="noopener">
<div className="flex items-center border border-slate-400 bg-gradient-to-r from-[#fcfcfc] to-[#f2f2f2] hover:to-[#d5d5d5] text-black dark:text-white dark:from-[#191919] dark:to-[#464444] dark:hover:to-[#4e4e4e] rounded-full text-sm py-2 pl-3 pr-2">
Blog post
<div className="bg-[#eeeeee] dark:bg-[#313131] rounded-full inline-block p-1 ml-2">
<PencilSvg />
</div>
</div>
</a>
{docs && (
<a href={docs} target="_blank" rel="noopener">
<div className="flex items-center border border-slate-400 bg-gradient-to-r from-[#fcfcfc] to-[#f2f2f2] hover:to-[#d5d5d5] text-black dark:text-white dark:from-[#191919] dark:to-[#464444] dark:hover:to-[#4e4e4e] rounded-full text-sm py-2 pl-3 pr-2">
Docs
<div className="bg-[#eeeeee] dark:bg-[#313131] rounded-full inline-block p-1 ml-2">
<DocsSvg />
</div>
</div>
</a>
)}
{video && (
<a href={video} target="_blank" rel="noopener">
<div className="flex items-center border border-slate-400 bg-gradient-to-r from-[#fcfcfc] to-[#f2f2f2] hover:to-[#d5d5d5] text-black dark:text-white dark:from-[#191919] dark:to-[#464444] dark:hover:to-[#4e4e4e] rounded-full text-sm py-2 pl-3 pr-2">
Video
<div className="bg-[#eeeeee] dark:bg-[#313131] rounded-full inline-block p-1 ml-2">
<PlaySvg />
</div>
</div>
</a>
)}
</div>
)
}
const activeDays = days.filter((day) => Date.parse(day.publishedAt) <= Date.now())
if (!activeDays.length) return null
return (
<div className="flex flex-col items-center gap-4 lg:gap-6">
<h3 className="text-white text-xl">More Launch Week 7</h3>
{activeDays.map((day) => (
<div
className={`h-[150px] w-full flex flex-col lg:flex-row group/day${day.d} relative overflow-hidden`}
>
<div
className={`
flex flex-col flex-1 gap-3 items-start justify-center border rounded-xl h-full relative overflow-hidden
px-6 lg:px-10 py-4 text-2xl
before:absolute before:w-full before:h-full before:top-52 before:right-0 before:bottom-0 before:left-0
before:border-[#1f3536] before:-z-10
`}
>
<div className="flex items-center lg: justify-between flex-col-reverse lg:flex-row lg:justify-start gap-2 text-black dark:text-white">
<div>{day.title}</div>
</div>
<SectionButtons
docs={day.steps[0].docs}
blog={day.steps[0].blog}
video={'https://www.youtube.com/watch?v=Q1Amk6iDlF8&ab_channel=Supabase'}
/>
</div>
{day.steps[0].thumb && (
<Image
src={day.steps[0].thumb}
className={`
absolute group-hover/day${day.d}:scale-105 opacity-90
group-hover/day${day.d}:opacity-100
w-full h-full -z-10 transition-all duration-300
`}
layout="fill"
objectPosition="100% 50%"
objectFit="contain"
/>
)}
<div
className={`absolute group-hover/day${day.d}:scale-105 opacity-10 group-hover/day${day.d}:opacity-100 w-full h-full -z-10 transition-all duration-300`}
style={{
background: `radial-gradient(650px 150px at 50% 100%, #4635A730, transparent)`,
}}
/>
</div>
))}
</div>
)
}
const PencilSvg = () => (
<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M3.21792 11.2469L11.8015 2.66333L14.0953 4.95709L5.51167 13.5407M3.21792 11.2469L2.34219 14.4164L5.51167 13.5407M3.21792 11.2469L5.51167 13.5407"
// stroke="#6453C5"
stroke="#A69DC9"
strokeMiterlimit="10"
strokeLinejoin="bevel"
/>
</svg>
)
const DocsSvg = () => (
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M4.96289 9.48618H10.9629M4.96289 7.48618H10.9629M4.96289 11.4862H8.96289M3 2.00034V13.9998H12.9996V5.60113L9.38156 2.00034H3ZM12.9644 5.58432L9.38004 2L9.38004 5.58432L12.9644 5.58432Z"
// stroke="#6453C5"
stroke="#A69DC9"
strokeMiterlimit="10"
stroke-linejoin="bevel"
/>
</svg>
)
const PlaySvg = () => (
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M13.4287 8L8.74762 10.7026L4.06653 13.4053L4.06653 8L4.06653 2.59474L8.74762 5.29737L13.4287 8Z"
// stroke="#6453C5"
stroke="#A69DC9"
strokeMiterlimit="10"
strokeLinejoin="bevel"
/>
</svg>
)
export default BlogLinks
@@ -1,114 +0,0 @@
[
{
"title": "Docs Updated",
"shipped": true,
"date": "12 Dec 2022",
"description": "Supabase Docs",
"d": 1,
"dd": "Monday",
"youtube_id": "OpPOaJI_Z28",
"blogpost": "https://supabase.com/blog/new-supabase-docs-built-with-nextjs",
"docs": "https://supabase.com/docs",
"steps": [
{
"title": "Supabase Docs",
"blog": "/blog/new-supabase-docs-built-with-nextjs",
"docs": "/docs",
"isNew": true,
"description": ""
}
]
},
{
"title": "Image Processing: Resize V2 + CDN",
"shipped": true,
"date": "13 Dec 2022",
"description": "Image Transformations",
"d": 2,
"dd": "Tuesday",
"youtube_id": "iqZlPtl_b-I",
"blogpost": "https://supabase.com/blog",
"docs": "https://supabase.com/docs",
"steps": [
{
"title": "Image Transformations",
"blog": "/blog/storage-image-resizing-smart-cdn",
"docs": "/docs/guides/storage/image-transformations",
"isNew": true,
"description": ""
},
{
"title": "Smart CDN",
"description": "Faster asset delivery, now even faster.",
"blog": "/blog/storage-image-resizing-smart-cdn",
"docs": "/docs/guides/storage/cdn",
"isNew": true
}
]
},
{
"title": "Multi-factor Authentication",
"shipped": true,
"date": "14 Dec 2022",
"description": "Multi-factor Authentication",
"d": 3,
"dd": "Wednesday",
"youtube_id": "CGZr5tybW18",
"blogpost": "https://supabase.com/blog",
"docs": "https://supabase.com/docs",
"steps": [
{
"title": "Multi-factor Authentication",
"blog": "/blog/mfa-auth-via-rls",
"docs": "/docs/guides/auth/auth-mfa",
"isNew": false,
"description": ""
}
]
},
{
"title": "Supabase Wrappers - FDW Framework",
"shipped": true,
"date": "15 Dec 2022",
"description": "Supabase Wrappers",
"d": 4,
"dd": "Thursday",
"youtube_id": "QA2qC5F-4OU",
"blogpost": "/blog/postgres-foreign-data-wrappers-rust",
"docs": "https://supabase.com/docs",
"steps": [
{
"title": "Supabase Wrappers",
"blog": "/blog/postgres-foreign-data-wrappers-rust",
"docs": "https://supabase.github.io/wrappers/",
"isNew": true,
"description": "Connect Postgres to external systems with Postgres Foreign Data Wrappers"
}
]
},
{
"title": "Supabase Vault Release",
"shipped": true,
"date": "16 Dec 2022",
"description": "Vault Release",
"d": 5,
"dd": "Friday",
"youtube_id": "6bGQotxisoY",
"blogpost": "https://supabase.com/blog",
"docs": "https://supabase.com/docs",
"steps": [
{
"title": "Vault Release",
"blog": "/blog/vault-now-in-beta",
"isNew": true,
"description": ""
},
{
"title": "Transparent Column Encryption",
"description": "Faster asset delivery, now even faster.",
"blog": "/blog/transparent-column-encryption-with-postgres",
"isNew": true
}
]
}
]
+176
View File
@@ -0,0 +1,176 @@
export interface WeekDayProps {
title: string
shipped: boolean
date: string
publishedAt: string
description: string
d: number
dd: string
youtube_id: string
blogpost: string
docs: string
steps: {
title: string
blog: string
docs?: string
isNew: boolean
description: string
thumb?: string
}[]
}
const days: WeekDayProps[] = [
{
title: 'AI generated OG images',
shipped: true,
date: '',
publishedAt: '2023-04-07T07:00:00.000-07:00',
description: 'AI generated OG images',
d: 0,
dd: 'Pre-release',
youtube_id: '',
blogpost: 'https://supabase.com/blog/new-supabase-docs-built-with-nextjs',
docs: 'https://supabase.com/docs',
steps: [
{
title: 'AI generated OG images',
blog: '/blog/',
docs: '/docs',
isNew: false,
description: '',
thumb: '/images/launchweek/seven/day0/ai-images-thumb.png',
},
{
title: 'Supavisor',
blog: '/blog/',
docs: '/docs',
isNew: true,
description: '',
},
],
},
{
title: 'Self-hosted Logs & observability',
shipped: false,
date: '10 Apr 2023',
publishedAt: '2023-04-10T07:00:00.000-07:00',
description: 'Supabase Docs',
d: 1,
dd: 'Monday',
youtube_id: 'OpPOaJI_Z28',
blogpost: 'https://supabase.com/blog/new-supabase-docs-built-with-nextjs',
docs: 'https://supabase.com/docs',
steps: [
{
title: 'Supabase Docs',
blog: '/blog/new-supabase-docs-built-with-nextjs',
docs: '/docs',
isNew: true,
description: '',
thumb: '/images/launchweek/seven/day1/self-hosted-logs-thumb.png',
},
],
},
{
title: 'Self-hosted Edge Functions',
shipped: false,
date: '11 Apr 2023',
publishedAt: '2023-04-11T07:00:00.000-07:00',
description: 'Image Transformations',
d: 2,
dd: 'Tuesday',
youtube_id: 'iqZlPtl_b-I',
blogpost: 'https://supabase.com/blog',
docs: 'https://supabase.com/docs',
steps: [
{
title: 'Image Transformations',
blog: '',
docs: '',
isNew: true,
description: '',
thumb: '/images/launchweek/seven/day2/self-hosted-edge-functions-thumb.png',
},
{
title: 'Smart CDN',
description: 'Faster asset delivery, now even faster.',
blog: '/blog/storage-image-resizing-smart-cdn',
docs: '/docs/guides/storage/cdn',
isNew: true,
},
],
},
{
title: 'Storage v3 Multipart upload',
shipped: false,
date: '12 Apr 2023',
publishedAt: '2023-04-12T07:00:00.000-07:00',
description: 'Storage v3 Multipart upload',
d: 3,
dd: 'Wednesday',
youtube_id: 'CGZr5tybW18',
blogpost: 'https://supabase.com/blog',
docs: 'https://supabase.com/docs',
steps: [
{
title: 'Storage v3 Multipart upload',
blog: '/blog/mfa-auth-via-rls',
docs: '/docs/guides/auth/auth-mfa',
isNew: false,
description: '',
thumb: '/images/launchweek/seven/day3/storage-v3-thumb.png',
},
],
},
{
title: 'SSO Support for Projects',
shipped: false,
date: '13 Apr 2023',
publishedAt: '2023-04-13T07:00:00.000-07:00',
description: 'Supabase Wrappers',
d: 4,
dd: 'Thursday',
youtube_id: 'QA2qC5F-4OU',
blogpost: '/blog/postgres-foreign-data-wrappers-rust',
docs: 'https://supabase.com/docs',
steps: [
{
title: 'Supabase Wrappers',
blog: '/blog/postgres-foreign-data-wrappers-rust',
docs: 'https://supabase.github.io/wrappers/',
isNew: true,
description: '',
thumb: '/images/launchweek/seven/day4/SSO-support-thumb.png',
},
],
},
{
title: 'Community Highlight',
shipped: false,
date: '14 Apr 2023',
publishedAt: '2023-04-14T07:00:00.000-07:00',
description: 'Vault Release',
d: 5,
dd: 'Friday',
youtube_id: '6bGQotxisoY',
blogpost: 'https://supabase.com/blog',
docs: 'https://supabase.com/docs',
steps: [
{
title: 'Vault Release',
blog: '/blog/vault-now-in-beta',
isNew: true,
description: '',
thumb: '/images/launchweek/seven/day0/ai-images-thumb.png',
},
{
title: 'Transparent Column Encryption',
description: '',
blog: '/blog/transparent-column-encryption-with-postgres',
isNew: true,
},
],
},
]
export default days
+3
View File
@@ -13,6 +13,7 @@ import { generateReadingTime } from '~/lib/helpers'
import mdxComponents from '~/lib/mdx/mdxComponents'
import { mdxSerialize } from '~/lib/mdx/mdxSerialize'
import { getAllPostSlugs, getPostdata, getSortedPosts } from '~/lib/posts'
import BlogLinks from '~/components/LaunchWeek/BlogLinks'
// table of contents extractor
const toc = require('markdown-toc')
@@ -64,6 +65,7 @@ export async function getStaticProps({ params }: any) {
function BlogPostPage(props: any) {
const content = props.blog.content
const authorArray = props.blog.author.split(',')
const isLaunchWeek7 = props.blog.launchWeek7
const author = []
for (let i = 0; i < authorArray.length; i++) {
@@ -307,6 +309,7 @@ function BlogPostPage(props: any) {
</Link>
</div>
</div>
{isLaunchWeek7 && <BlogLinks />}
<div className="grid gap-8 py-8 lg:grid-cols-1">
<div>
{props.prevPost && <NextCard post={props.prevPost} label="Last post" />}
Binary file not shown.

After

Width:  |  Height:  |  Size: 578 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 KiB

+6 -6
View File
@@ -5,14 +5,14 @@
<link>https://supabase.com</link>
<description>Latest news from Supabase</description>
<language>en</language>
<lastBuildDate>Thu, 06 Apr 2023 22:10:00 +0000</lastBuildDate>
<lastBuildDate>Mon, 03 Apr 2023 22:10:00 +0000</lastBuildDate>
<atom:link href="https://supabase.com/rss.xml" rel="self" type="application/rss+xml"/>
<item>
<guid>https://supabase.com/blog/infinite-scroll-with-supabase</guid>
<title>Infinite scroll with NextJs, Supabase and Framer Motion</title>
<link>https://supabase.com/blog/infinite-scroll-with-supabase</link>
<description>Lazy load and paginate data on scroll with supabase-js and a sprinkle of Framer Motion magic ✨</description>
<pubDate>Thu, 06 Apr 2023 22:10:00 +0000</pubDate>
<guid>https://supabase.com/blog/infinite-scroll-with-nextjs-framer-motion</guid>
<title>Infinite scroll with Next.js, Framer Motion, and Supabase</title>
<link>https://supabase.com/blog/infinite-scroll-with-nextjs-framer-motion</link>
<description>Lazy load and paginate data on scroll with Next.js and a sprinkle of Framer Motion magic ✨</description>
<pubDate>Mon, 03 Apr 2023 22:10:00 +0000</pubDate>
</item>
<item>
<guid>https://supabase.com/blog/supaclub</guid>