mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 01:45:10 +03:00
update case-studies to customers everywhere
This commit is contained in:
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.
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
@@ -106,8 +106,8 @@
|
||||
"url": "/blog"
|
||||
},
|
||||
{
|
||||
"text": "Case Studies",
|
||||
"url": "/case-studies"
|
||||
"text": "Customer Stories",
|
||||
"url": "/customers"
|
||||
},
|
||||
{
|
||||
"text": "Careers",
|
||||
|
||||
@@ -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
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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>
|
||||
Reference in new issue
Block a user