How to add a simple blog?

Note

@portaljs/core is no longer maintained or published from the PortalJS repo. Its last npm release is 1.0.9 (January 2024). The steps below were written for that release. New portals should use the plain Tailwind components that ship with the create-portaljs template.

Setup

The following example uses components imported from the @portaljs/core package. If you want to follow along install it too:

npm i @portaljs/core

Create home page for your blogs

Add the following code to the Next.js page that is going to be your blog home page, e.g. to /pages/blog/index.tsx:

import { BlogsList, SimpleLayout } from '@portaljs/core';

// pass a list of blogs, home page title and home page description, e.g. from `getStaticProps`
export default function BlogIndex({ blogs, title, description }) {
  return (
    <SimpleLayout title={title} description={description}>
      <BlogsList blogs={blogs} />
    </SimpleLayout>
  );
}

BlogsList component has the following API:

interface BlogsListProps {
  blogs: Blog;
}

interface Blog {
  title: string;
  date: string;
  urlPath: string;
  description?: string;
  authors?: Array<string>;
  tags?: Array<string>;
}

Create blog post pages

Add the following code to your blog pages, e.g. to /pages/blog/[...slug].tsx:

import { BlogLayout } from "@portaljs/core";

export default BlogPost({ content, title, date, authors }) {
	return (
		<BlogLayout title={title} date={date} authors={authors}
			{content}
		</BlogLayout>
	)
}

BlogLayout component has the following API:

interface BlogLayoutProps {
  title?: string;
  date?: string;
  authors?: Array<Author>;
}

interface Author {
  name: string;
  avatar: string; // avatar image path
  urlPath?: string; // author page
}