From c7656ff920713639050571c9bac6334b5e2d9248 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Sat, 13 Jan 2024 09:06:43 +0100 Subject: [PATCH] Add author to articles --- components/article.tsx | 43 ++++++++++-------- components/author.tsx | 25 ++++++++++ constants/authors.ts | 3 ++ ...i-endpoints-filtering-improved-security.md | 1 + content/blog/celebrating-4000-github-stars.md | 1 + .../contributor-spotlight-harry-martland.md | 1 + content/blog/december-2023-news.md | 1 + .../blog/file-monitoring-mock-api-samples.md | 1 + content/blog/five-years-2022-retrospective.md | 1 + content/blog/github-accelerator.md | 1 + ...roducing-mockoon-ai-assistant-pro-plans.md | 1 + content/blog/mockoon-cli-now-available.md | 1 + content/blog/mockoon-new-api-playground.md | 1 + .../new-storage-system-git-data-sharing.md | 1 + content/blog/new-unified-versioning.md | 1 + content/blog/september-2023-news.md | 1 + ...equential-responses-custom-status-codes.md | 1 + content/blog/ui-redesign-custom-tls-cert.md | 1 + .../windows-portable-gzip-rules-reordering.md | 1 + models/common.model.ts | 2 + pages/blog/[slug].tsx | 1 + public/images/blog/authors/guillaume.jpg | Bin 0 -> 16684 bytes 22 files changed, 72 insertions(+), 18 deletions(-) create mode 100644 components/author.tsx create mode 100644 constants/authors.ts create mode 100644 public/images/blog/authors/guillaume.jpg diff --git a/components/article.tsx b/components/article.tsx index 6e565eea..ad50f012 100644 --- a/components/article.tsx +++ b/components/article.tsx @@ -1,5 +1,7 @@ import { Fragment, FunctionComponent } from 'react'; +import { authors } from '../constants/authors'; import { ArticleData } from '../models/common.model'; +import Author from './author'; import Markdown from './markdown'; import Tags from './tags'; @@ -8,7 +10,8 @@ const Article: FunctionComponent<{ path: string; articleData: ArticleData; articleBody: string; - tags: string[]; + tags?: string[]; + author?: keyof typeof authors; }> = function (props) { return ( @@ -80,7 +83,7 @@ const Article: FunctionComponent<{
-
+

{props.articleData.title}

@@ -89,24 +92,28 @@ const Article: FunctionComponent<{ {props.articleData.excerpt}

-
-
- {props.articleData.date && ( - - )} -
+
+ {props.author && } + {props.articleData.date && ( +
+
+ |{' '} + +
+
+ )}
{props.tags?.length > 0 && ( -
+
)} diff --git a/components/author.tsx b/components/author.tsx new file mode 100644 index 00000000..17da7a1d --- /dev/null +++ b/components/author.tsx @@ -0,0 +1,25 @@ +import { FunctionComponent } from 'react'; +import { authors } from '../constants/authors'; + +const Author: FunctionComponent<{ author: keyof typeof authors }> = function ({ + author +}) { + return ( +
+
+ {authors[author]} +
+
+ Posted by {authors[author]} +
+
+ ); +}; + +export default Author; diff --git a/constants/authors.ts b/constants/authors.ts new file mode 100644 index 00000000..7a1ed2c9 --- /dev/null +++ b/constants/authors.ts @@ -0,0 +1,3 @@ +export const authors = { + guillaume: 'Guillaume, Founder' +}; diff --git a/content/blog/api-endpoints-filtering-improved-security.md b/content/blog/api-endpoints-filtering-improved-security.md index 939c1c04..72912afc 100644 --- a/content/blog/api-endpoints-filtering-improved-security.md +++ b/content/blog/api-endpoints-filtering-improved-security.md @@ -8,6 +8,7 @@ imageWidth: 1200 imageHeight: 400 tags: - releases +author: guillaume meta: title: New release with endpoints filtering and improved security description: Discover Mockoon's new v1.13.0 release with endpoints filtering, improved security and a revamped templating documentation diff --git a/content/blog/celebrating-4000-github-stars.md b/content/blog/celebrating-4000-github-stars.md index 54a78e99..97897e7e 100644 --- a/content/blog/celebrating-4000-github-stars.md +++ b/content/blog/celebrating-4000-github-stars.md @@ -10,6 +10,7 @@ tags: - open-source - news - releases +author: guillaume meta: title: Celebrating 4000 GitHub stars 🎉 description: Let's celebrates this milestone by doing a recap of Mockoon's past year's news, announcements, new features and sponsors diff --git a/content/blog/contributor-spotlight-harry-martland.md b/content/blog/contributor-spotlight-harry-martland.md index c64935b8..1f48357e 100644 --- a/content/blog/contributor-spotlight-harry-martland.md +++ b/content/blog/contributor-spotlight-harry-martland.md @@ -9,6 +9,7 @@ imageHeight: 400 tags: - open-source - contributors +author: guillaume meta: title: Contributor spotlight with Harry Martland description: This is the first in a series of interviews with Mockoon's open-source contributors. Today we are talking with Harry Martland, Principal Engineer at Booking.com. diff --git a/content/blog/december-2023-news.md b/content/blog/december-2023-news.md index 52f55865..4a0c364f 100644 --- a/content/blog/december-2023-news.md +++ b/content/blog/december-2023-news.md @@ -9,6 +9,7 @@ imageHeight: 400 tags: - news - releases +author: guillaume meta: title: December 2023 news description: 'Mockoon quarterly news for December 2023: new releases, callbacks, global variables, API playground, and more.' diff --git a/content/blog/file-monitoring-mock-api-samples.md b/content/blog/file-monitoring-mock-api-samples.md index 72d9dfea..f1dfe3d8 100644 --- a/content/blog/file-monitoring-mock-api-samples.md +++ b/content/blog/file-monitoring-mock-api-samples.md @@ -8,6 +8,7 @@ imageWidth: 1200 imageHeight: 400 tags: - releases +author: guillaume meta: title: File monitoring and 2000+ new mock samples description: Discover this update's mock files monitoring, thousands of new mock samples, import/export deprecation, Google Analytics removal diff --git a/content/blog/five-years-2022-retrospective.md b/content/blog/five-years-2022-retrospective.md index c5c87d7b..08840c32 100644 --- a/content/blog/five-years-2022-retrospective.md +++ b/content/blog/five-years-2022-retrospective.md @@ -8,6 +8,7 @@ imageWidth: 1200 imageHeight: 400 tags: - news +author: guillaume meta: title: 2022 retrospective and Mockoon 5th anniversary description: Let's celebrate the new year by putting some light on recent new features (folders, data buckets, etc.) and five years of Mockooning diff --git a/content/blog/github-accelerator.md b/content/blog/github-accelerator.md index cd16f98a..691e3d40 100644 --- a/content/blog/github-accelerator.md +++ b/content/blog/github-accelerator.md @@ -9,6 +9,7 @@ imageHeight: 400 tags: - news - funding +author: guillaume meta: title: Mockoon is part of the first GitHub Accelerator cohort 🚀 description: Mockoon has been accepted to be part of the first-ever GitHub Accelerator cohort among 20 other open-source projects. diff --git a/content/blog/introducing-mockoon-ai-assistant-pro-plans.md b/content/blog/introducing-mockoon-ai-assistant-pro-plans.md index ffbac2e3..ce615e7c 100644 --- a/content/blog/introducing-mockoon-ai-assistant-pro-plans.md +++ b/content/blog/introducing-mockoon-ai-assistant-pro-plans.md @@ -9,6 +9,7 @@ imageHeight: 400 tags: - releases - product +author: guillaume meta: title: Introducing AI assistant and Pro plans description: With Mockoon Pro plan AI assistant, unleash the power of API mocking for all your prototyping and API teaching needs. Learn more! diff --git a/content/blog/mockoon-cli-now-available.md b/content/blog/mockoon-cli-now-available.md index 22d1ac6a..dca2b449 100644 --- a/content/blog/mockoon-cli-now-available.md +++ b/content/blog/mockoon-cli-now-available.md @@ -9,6 +9,7 @@ imageHeight: 400 tags: - news - releases +author: guillaume meta: title: Mockoon CLI is now available! description: 'Take your mock APIs in all your headless and automated environments with the new CLI: servers, CI, GitHub Action, WSL, etc.' diff --git a/content/blog/mockoon-new-api-playground.md b/content/blog/mockoon-new-api-playground.md index 0c13b31a..8b36837a 100644 --- a/content/blog/mockoon-new-api-playground.md +++ b/content/blog/mockoon-new-api-playground.md @@ -9,6 +9,7 @@ imageHeight: 400 tags: - dev blog - product +author: guillaume meta: title: Mockoon new API playground description: 'Discover Mockoon new API playground, a ready-to-use mock API for all your prototyping needs: fake JSON data, JSON placeholders, realistic CRUD API mock, etc.' diff --git a/content/blog/new-storage-system-git-data-sharing.md b/content/blog/new-storage-system-git-data-sharing.md index f91280ef..982de930 100644 --- a/content/blog/new-storage-system-git-data-sharing.md +++ b/content/blog/new-storage-system-git-data-sharing.md @@ -8,6 +8,7 @@ imageWidth: 1200 imageHeight: 400 tags: - releases +author: guillaume meta: title: New storage system and improved data sharing description: Share your mock API data more easily with the new storage system and start working in no time with our ready-to-use API mock samples diff --git a/content/blog/new-unified-versioning.md b/content/blog/new-unified-versioning.md index 254587af..f413b902 100644 --- a/content/blog/new-unified-versioning.md +++ b/content/blog/new-unified-versioning.md @@ -8,6 +8,7 @@ imageWidth: 1200 imageHeight: 400 tags: - releases +author: guillaume meta: title: New unified versioning v3.0.0 description: Mockoon is now using unified versioning across all its packages, starting with release v3.0.0. Learn more! diff --git a/content/blog/september-2023-news.md b/content/blog/september-2023-news.md index b666207f..5fb0bde2 100644 --- a/content/blog/september-2023-news.md +++ b/content/blog/september-2023-news.md @@ -9,6 +9,7 @@ imageHeight: 400 tags: - news - releases +author: guillaume meta: title: September 2023 news description: 'Mockoon quarterly news for September 2023: new releases, global rules, GitHub Action, and more.' diff --git a/content/blog/sequential-responses-custom-status-codes.md b/content/blog/sequential-responses-custom-status-codes.md index dce2845c..ca47a094 100644 --- a/content/blog/sequential-responses-custom-status-codes.md +++ b/content/blog/sequential-responses-custom-status-codes.md @@ -8,6 +8,7 @@ imageWidth: 1200 imageHeight: 400 tags: - releases +author: guillaume meta: title: Sequential responses, custom codes, and out-of beta CLI! description: Discover Mockoon's new v1.14.0 release with sequential responses, custom status codes, new rules and more diff --git a/content/blog/ui-redesign-custom-tls-cert.md b/content/blog/ui-redesign-custom-tls-cert.md index 485b92c4..61328b17 100644 --- a/content/blog/ui-redesign-custom-tls-cert.md +++ b/content/blog/ui-redesign-custom-tls-cert.md @@ -8,6 +8,7 @@ imageWidth: 1200 imageHeight: 400 tags: - releases +author: guillaume meta: title: UI redesign and custom TLS certificates description: Discover this update's new UI header redesign and interface polish, custom TLS certificate support, and cookie rules diff --git a/content/blog/windows-portable-gzip-rules-reordering.md b/content/blog/windows-portable-gzip-rules-reordering.md index 631737a9..b807123f 100644 --- a/content/blog/windows-portable-gzip-rules-reordering.md +++ b/content/blog/windows-portable-gzip-rules-reordering.md @@ -8,6 +8,7 @@ imageWidth: 1200 imageHeight: 400 tags: - releases +author: guillaume meta: title: New Windows portable version and more in v1.15.0 description: Discover Mockoon's new v1.15.0 release with Windows portable version, rules reordering, gzip decoding and more diff --git a/models/common.model.ts b/models/common.model.ts index e124cca3..a75ab6d0 100644 --- a/models/common.model.ts +++ b/models/common.model.ts @@ -1,4 +1,5 @@ import { ReactElement } from 'react'; +import { authors } from '../constants/authors'; export type AccordionData = { title?: string; @@ -68,6 +69,7 @@ export type ArticleData = { imageWidth?: number; imageHeight?: number; tags: string[]; + author?: keyof typeof authors; // used to build a custom header header?: { image: string; diff --git a/pages/blog/[slug].tsx b/pages/blog/[slug].tsx index b2ee1055..abdb1517 100644 --- a/pages/blog/[slug].tsx +++ b/pages/blog/[slug].tsx @@ -64,6 +64,7 @@ export default function BlogArticle(props: { articleBody={props.articleBody} articleData={props.articleData} tags={props.articleData.tags} + author={props.articleData.author} />
diff --git a/public/images/blog/authors/guillaume.jpg b/public/images/blog/authors/guillaume.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0693280f3bc8671bda23423d09bb46c9f892d2f9 GIT binary patch literal 16684 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