update case-studies to customers everywhere

This commit is contained in:
Francesco Sansalvadore committed 2023-03-30 13:55:01 +02:00
1 parent 727ed208d9
commit 04e8a7e886
14 files changed
+110 -63

No files matched your search

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+12 -18
View File
@@ -1,11 +1,12 @@
import React from 'react'
import SolutionsData from 'data/Solutions.json'
import CaseStudiesData from 'data/CaseStudies.json'
import CustomerStoriesData from 'data/CustomerStories.json'
import { useRouter } from 'next/router'
import ProductIcon from '../ProductIcon'
import { Badge, Button, IconArrowRight } from 'ui'
import { Badge } from 'ui'
import Image from 'next/image'
import Link from 'next/link'
import TextLink from '../TextLink'
const Product = () => {
const { basePath } = useRouter()
@@ -47,9 +48,9 @@ const Product = () => {
</nav>
<div className="col-span-6">
<div className="m-3 mx-6 flex flex-col items-start">
<p className="p">Latest case studies</p>
<p className="p">Latest customer stories</p>
<ul className="mt-6 space-y-3">
{CaseStudiesData.map((caseStudy: any, idx: number) => {
{CustomerStoriesData.map((caseStudy: any, idx: number) => {
if (idx > 1) {
return null
}
@@ -57,19 +58,20 @@ const Product = () => {
<li className="flow-root" key={`flyout_case_${idx}`}>
<Link href={caseStudy.url}>
<a className="dark:hover:bg-dark-700 flex items-center rounded-lg border p-3 transition duration-150 ease-in-out hover:bg-gray-100">
<div className="relative hidden h-20 w-32 flex-shrink-0 overflow-auto rounded-md sm:block">
<div className="relative hidden mx-2 h-12 w-32 flex-shrink-0 overflow-auto rounded-md sm:block">
<Image
src={`${basePath}/${caseStudy.imgUrl}`}
alt="caseStudyThumb"
layout="fill"
objectFit="cover"
objectFit="contain"
className="dark:brightness-200 dark:contrast-0 dark:filter"
/>
</div>
<div className="min-w-0 flex-1 sm:ml-4">
<h4 className="text-scale-1200 text-normal mb-0 text-base">
{caseStudy.title}
</h4>
<p className="p text-sm">{caseStudy.description}</p>
<p className="p text-sm !mb-0">{caseStudy.description}</p>
</div>
</a>
</Link>
@@ -77,17 +79,9 @@ const Product = () => {
)
})}
</ul>
<Link href="/case-studies" passHref>
<Button
as="a"
size="tiny"
type="default"
iconRight={<IconArrowRight />}
className="mt-6"
>
Explore more
</Button>
</Link>
<div className="mt-6">
<TextLink url="/customers" label="Explore more" />
</div>
</div>
</div>
</div>
+29 -29
View File
@@ -1,53 +1,53 @@
[
{
"type": "Customer Story",
"title": "A web crawler handling millions of API requests.",
"description": "See how Monitoro built and automated a scraping platform using Supabase.",
"imgUrl": "images/case-study-monitoro.jpg",
"logoUrl": "images/logos/monitoro.png",
"organization": "Monitoro",
"url": "/blog/case-study-monitoro",
"path": "/blog/case-study-monitoro",
"title": "HappyTeams unlocks better performance and reduces cost with Supabase.",
"description": "How a bootstrapped startup migrated from Heroku to Supabase in 30 minutes and never looked back.",
"imgUrl": "images/case-studies/logos/happyteams.png",
"logoUrl": "images/case-studies/logos/happyteams.png",
"organization": "HappyTeams",
"url": "/customers/happyteams",
"path": "/customers/happyteams",
"postMeta": {
"name": "Paul Copplestone",
"avatarUrl": "https://avatars0.githubusercontent.com/u/10214025?v=4",
"publishDate": "Mar 16, 2020",
"publishDate": "Feb 16, 2023",
"readLength": 6
},
"ctaText": "View case study"
"ctaText": "View story"
},
{
"type": "Customer Story",
"title": "Counter-fraud watchlists for the fintech industry.",
"description": "See how Xendit use Supabase to build a full-text search engine.",
"imgUrl": "images/case-study-xendit.jpg",
"logoUrl": "images/logos/xendit.png",
"organization": "Llama Lab",
"url": "/blog/case-study-xendit",
"path": "/blog/case-study-xendit",
"title": "Xendit use Supabase and create a full solution shipped to production in less than one week.",
"description": "As a payment processor, Xendit are responsible for verifying that all transactions are legal.",
"imgUrl": "images/case-studies/logos/xendit.png",
"logoUrl": "images/case-studies/logos/xendit.png",
"organization": "Xendit",
"url": "/customers/xendit",
"path": "/customers/xendit",
"postMeta": {
"name": "Paul Copplestone",
"avatarUrl": "https://avatars0.githubusercontent.com/u/10214025?v=4",
"publishDate": "Mar 20, 2020",
"readLength": 10
"publishDate": "Feb 14, 2023",
"readLength": 6
},
"ctaText": "View case study"
"ctaText": "View story"
},
{
"type": "Customer Story",
"title": "A no-code website builder, deployed in seven days.",
"description": "See how Tayfa went from idea to paying customer in less than 30 days.",
"imgUrl": "images/case-study-tayfab.jpg",
"logoUrl": "images/logos/monitoro.png",
"organization": "Tayfab",
"url": "/blog/case-study-tayfa",
"path": "/blog/case-study-tayfa",
"title": "Replenysh uses Supabase to implement OTP in less than 24 hours.",
"description": "With Supabase, Replenysh gets a slick auth experience, reduces DevOps overhead, and continues to scale with Postgres.",
"imgUrl": "images/case-studies/logos/replenysh.png",
"logoUrl": "images/case-studies/logos/replenysh.png",
"organization": "Replenysh",
"url": "/customers/replenysh",
"path": "/customers/replenysh",
"postMeta": {
"name": "Paul Copplestone",
"avatarUrl": "https://avatars0.githubusercontent.com/u/10214025?v=4",
"publishDate": "Mar 27, 2020",
"readLength": 5
"publishDate": "Feb 14, 2023",
"readLength": 6
},
"ctaText": "View case study"
"ctaText": "View story"
}
]
+2 -2
View File
@@ -106,8 +106,8 @@
"url": "/blog"
},
{
"text": "Case Studies",
"url": "/case-studies"
"text": "Customer Stories",
"url": "/customers"
},
{
"text": "Careers",
+4
View File
@@ -16,6 +16,7 @@ async function generate() {
'data/**/*.mdx',
'_blog/*.mdx',
'_case-studies/*.mdx',
'_customers/*.mdx',
'_alternatives/*.mdx',
'!pages/index.tsx',
'!data/*.mdx',
@@ -27,6 +28,7 @@ async function generate() {
const blogUrl = 'blog'
const caseStudiesUrl = 'case-studies'
const customerStoriesUrl = 'customers'
const sitemap = `
<?xml version="1.0" encoding="UTF-8"?>
@@ -39,6 +41,7 @@ async function generate() {
// add a `/` for blog posts
.replace('_blog', `/${blogUrl}`)
.replace('_case-studies', `/${caseStudiesUrl}`)
.replace('_customers', `/${customerStoriesUrl}`)
.replace('_alternatives', '/alternatives')
.replace('.tsx', '')
.replace('.mdx', '')
@@ -55,6 +58,7 @@ async function generate() {
if (route === '/alternatives/[slug]') return null
if (route === '/partners/[slug]') return null
if (route === '/case-studies/[slug]') return null
if (route === '/customers/[slug]') return null
if (route === '/launch-week/ticket-image') return null
/**
+1 -1
View File
@@ -3,7 +3,7 @@ import path from 'path'
import matter from 'gray-matter'
import { generateReadingTime } from './helpers'
type Directories = '_blog' | '_case-studies' | '_alternatives'
type Directories = '_blog' | '_case-studies' | '_customers' | '_alternatives'
// substring amount for file names
// based on YYYY-MM-DD format
+9 -7
View File
@@ -17,7 +17,7 @@ import { getAllPostSlugs, getPostdata, getSortedPosts } from '~/lib/posts'
const toc = require('markdown-toc')
export async function getStaticPaths() {
const paths = getAllPostSlugs('_case-studies')
const paths = getAllPostSlugs('_customers')
return {
paths,
fallback: false,
@@ -26,13 +26,13 @@ export async function getStaticPaths() {
export async function getStaticProps({ params }: any) {
const filePath = `${params.slug}`
const postContent = await getPostdata(filePath, '_case-studies')
const postContent = await getPostdata(filePath, '_customers')
const { data, content } = matter(postContent)
const mdxSource: any = await mdxSerialize(content)
const relatedPosts = getSortedPosts('_case-studies', 5, mdxSource.scope.tags)
const relatedPosts = getSortedPosts('_customers', 5, mdxSource.scope.tags)
const allPosts = getSortedPosts('_case-studies')
const allPosts = getSortedPosts('_customers')
const currentIndex = allPosts
.map(function (e) {
return e.slug
@@ -125,7 +125,7 @@ function CaseStudyPage(props: any) {
{/* Back button */}
<p>
<a
href={'/case-studies'}
href={'/customers'}
className="text-scale-900 hover:text-scale-1200 flex cursor-pointer items-center text-sm transition"
>
<IconChevronLeft style={{ padding: 0 }} />
@@ -142,8 +142,10 @@ function CaseStudyPage(props: any) {
<div className="">
<article className="flex flex-col gap-8">
<div className="flex flex-col gap-8 max-w-xxl">
<Link passHref href="/case-studies">
<a className="text-brand-900 hover:text-brand-1000 mb-2 mt-0">Case Studies</a>
<Link passHref href="/customers">
<a className="text-brand-900 hover:text-brand-1000 mb-2 mt-0">
Customer Stories
</a>
</Link>
<h1 className="text-scale-1200 text-4xl font-semibold xl:text-5xl">
{props.blog.title}
+5 -5
View File
@@ -16,13 +16,13 @@ import Link from 'next/link'
import { GlassPanel } from 'ui'
export async function getStaticProps() {
const allPostsData = getSortedPosts('_case-studies')
const categories = getAllCategories('_case-studies')
const allPostsData = getSortedPosts('_customers')
const categories = getAllCategories('_customers')
const rss = generateRss(allPostsData)
// create a rss feed in public directory
// rss feed is added via <Head> component in render return
fs.writeFileSync('./public/case-studies-rss.xml', rss)
fs.writeFileSync('./public/customers-rss.xml', rss)
return {
props: {
@@ -64,8 +64,8 @@ function CustomerStoriesPage(props: any) {
<link
rel="alternate"
type="application/rss+xml"
title="RSS feed for case studies"
href={`${basePath}/case-studies-rss.xml`}
title="RSS feed for customer stories"
href={`${basePath}/customers-rss.xml`}
/>
</Head>
<NextSeo
+1 -1
View File
@@ -37,7 +37,7 @@ const Index = ({ customerStories }: Props) => {
}
export async function getStaticProps() {
const customerStories = getSortedPosts('_case-studies', 3)
const customerStories = getSortedPosts('_customers', 3)
return {
props: {
+47
View File
@@ -0,0 +1,47 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Blog - Supabase</title>
<link>https://supabase.com</link>
<description>Latest news from Supabase</description>
<language>en</language>
<lastBuildDate>Wed, 15 Feb 2023 23:11:00 +0000</lastBuildDate>
<atom:link href="https://supabase.com/rss.xml" rel="self" type="application/rss+xml"/>
<item>
<guid>https://supabase.com/customers/happyteams</guid>
<title>HappyTeams unlocks better performance and reduces cost with Supabase.</title>
<link>https://supabase.com/customers/happyteams</link>
<description>How a bootstrapped startup migrated from Heroku to Supabase in 30 minutes and never looked back.</description>
<pubDate>Wed, 15 Feb 2023 23:11:00 +0000</pubDate>
</item>
<item>
<guid>https://supabase.com/customers/xendit</guid>
<title>Xendit use Supabase and create a full solution shipped to production in less than one week.</title>
<link>https://supabase.com/customers/xendit</link>
<description>As a payment processor, Xendit are responsible for verifying that all transactions are legal.</description>
<pubDate>Mon, 13 Feb 2023 23:11:00 +0000</pubDate>
</item>
<item>
<guid>https://supabase.com/customers/replenysh</guid>
<title>Replenysh uses Supabase to implement OTP in less than 24 hours.</title>
<link>https://supabase.com/customers/replenysh</link>
<description>With Supabase, Replenysh gets a slick auth experience, reduces DevOps overhead, and continues to scale with Postgres.</description>
<pubDate>Mon, 13 Feb 2023 23:11:00 +0000</pubDate>
</item>
<item>
<guid>https://supabase.com/customers/mobbin</guid>
<title>How Mobbin migrated 200,000 users from Firebase for a better authentication experience.</title>
<link>https://supabase.com/customers/mobbin</link>
<description>Mobbin helps over 200,000 creators globally search and view the latest design patterns from well-known apps.</description>
<pubDate>Mon, 13 Feb 2023 23:11:00 +0000</pubDate>
</item>
<item>
<guid>https://supabase.com/customers/epsilon3</guid>
<title>Epsilon3 digitize paper-based procedures in the space industry using telemetry data, simplifying testing and operations.</title>
<link>https://supabase.com/customers/epsilon3</link>
<description>Epsilon3 uses Supabase to help teams execute secure and reliable operations in an industry where project spend runs into the billions.</description>
<pubDate>Mon, 13 Feb 2023 23:11:00 +0000</pubDate>
</item>
</channel>
</rss>