-
Notifications
You must be signed in to change notification settings - Fork 61
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(saas): fetch blogs from content/blog folder dynamicly
- Loading branch information
1 parent
2c435fa
commit 009d354
Showing
9 changed files
with
239 additions
and
57 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
import { WebPageWrapper } from "@/app/(web)/_components/general-components"; | ||
|
||
type BlogSlugPageProps = { | ||
params: { | ||
slug: string[]; | ||
}; | ||
}; | ||
|
||
export default function BlogSlugPage({ params }: BlogSlugPageProps) { | ||
return ( | ||
<WebPageWrapper> | ||
<div className="w-full"> | ||
<h1>Blog Slug Page</h1> | ||
{JSON.stringify(params)} | ||
</div> | ||
</WebPageWrapper> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
103 changes: 103 additions & 0 deletions
103
starterkits/saas/src/content/blog/create-saas-in-1-day.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
--- | ||
title: Create a SaaS in 1 day | ||
slug: create-saas-in-1-day | ||
publishedAt: 2022-01-01 | ||
updatedAt: 2022-01-01 | ||
readTime: 5 min | ||
tags: ["saas", "introduction"] | ||
description: This is the introduction | ||
tumbnail: https://fakeimg.pl/700x400/d1d1d1/6b6b6b | ||
--- | ||
|
||
# Create a SaaS in 1 day | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
|
||
## Heading 2 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
|
||
<Tabs> | ||
|
||
<Tab> | ||
|
||
```tsx | ||
import { useState } from "react"; | ||
|
||
function Counter() { | ||
const [count, setCount] = useState(0); | ||
|
||
return ( | ||
<div> | ||
<p>You clicked {count} times</p> | ||
<button onClick={() => setCount(count + 1)}> | ||
Click me | ||
</button> | ||
</div> | ||
); | ||
} | ||
``` | ||
|
||
</Tab> | ||
|
||
<Tab> | ||
|
||
```tsx | ||
import { useState } from "react"; | ||
|
||
function Counter() { | ||
const [count, setCount] = useState(0); | ||
|
||
return ( | ||
<div> | ||
<p>You clicked {count} times</p> | ||
<button onClick={() => setCount(count + 1)}> | ||
Click me | ||
</button> | ||
</div> | ||
); | ||
} | ||
|
||
export default Counter; | ||
``` | ||
|
||
</Tab> | ||
|
||
</Tabs> | ||
|
||
|
||
### Heading 3 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
|
||
#### Heading 4 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
|
||
##### Heading 5 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
###### Heading 6 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
<Steps> | ||
|
||
<Step> | ||
|
||
This is the first step | ||
|
||
</Step> | ||
|
||
<Step> | ||
|
||
This is the second step | ||
|
||
</Step> | ||
|
||
</Steps> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
--- | ||
title: Introduction | ||
slug: introduction | ||
publishedAt: 2022-01-01 | ||
updatedAt: 2022-01-01 | ||
readTime: 5 min | ||
tags: ["introduction", "saas"] | ||
description: This is the introduction | ||
tumbnail: https://fakeimg.pl/700x400/d1d1d1/6b6b6b | ||
--- | ||
|
||
# Introduction | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
|
||
## Heading 2 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
|
||
### Heading 3 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
|
||
#### Heading 4 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
|
||
##### Heading 5 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
###### Heading 6 | ||
|
||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. | ||
|
||
<Steps> | ||
|
||
<Step> | ||
|
||
This is the first step | ||
|
||
</Step> | ||
|
||
<Step> | ||
|
||
This is the second step | ||
|
||
</Step> | ||
|
||
</Steps> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import "server-only"; | ||
|
||
import { getMDXData } from "@/lib/mdx"; | ||
import type { BlogMetaData } from "@/validations/mdx"; | ||
|
||
export async function getBlogs() { | ||
const dir = "src/content/blog"; | ||
return await getMDXData<BlogMetaData>(dir); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import "server-only"; | ||
|
||
import { getMDXData } from "@/lib/mdx"; | ||
import type { DocsMetaData } from "@/validations/mdx"; | ||
|
||
export async function getDocs() { | ||
const dir = "src/content/docs"; | ||
return await getMDXData<DocsMetaData>(dir); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,26 @@ | ||
import { z } from "zod"; | ||
|
||
export const mdxMetaSchema = z.object({ | ||
export const docsMetaSchema = z.object({ | ||
title: z.string(), | ||
slug: z.string(), | ||
publishedAt: z.string().optional(), | ||
tags: z.array(z.string()).optional(), | ||
description: z.string().optional(), | ||
image: z.string().optional(), | ||
isDraft: z.boolean().optional(), | ||
}); | ||
|
||
export type DocsMetaData = z.infer<typeof docsMetaSchema>; | ||
|
||
export const blogMetaSchema = z.object({ | ||
title: z.string(), | ||
slug: z.string(), | ||
publishedAt: z.string().datetime(), | ||
updatedAt: z.string().datetime(), | ||
readTime: z.string(), | ||
tags: z.array(z.string()).optional(), | ||
description: z.string(), | ||
tumbnail: z.string().url(), | ||
featured: z.boolean().optional(), | ||
isDraft: z.boolean().optional(), | ||
}); | ||
|
||
export type MDXMetaData = z.infer<typeof mdxMetaSchema>; | ||
export type BlogMetaData = z.infer<typeof blogMetaSchema>; |