A Next.js project bootstrapped with create-next-app.
- Clone the engineering blog repository to your machine:
$ git clone git@github.com:statelyai/eng-blog.git - Navigate into the engineering blog folder:
$ cd eng-blog - Install yarn package manager globally if you don’t already have yarn installed on your machine:
$ npm install -g yarn - Install the dependencies for this project:
$ yarn - You’re ready to run the engineering blog
- Run the development server to spawn a local server on port 3000:
$ yarn dev - Visit http://localhost:3000/ to find your server running.
Blog posts are stored inside content/posts.
- Create and checkout a new Git branch for your blog post:
$ git checkout -b my-blog-post-branch-name - Use
yarn post:createto create a blog post following the CLI (command-line interface) prompts:
$ yarn post:create - Find your new blog post inside content/posts and write your blog post content using markdown format.
- Save your file to live refresh the local server and preview your post at http://localhost:3000/. If your changes aren”t visible, you may need to stop and restart the local server to trigger a rebuild:
$ ^C
$ yarn dev - Commit and push your Git branch to the eng-blog repository:
$ git commit -am "Add new blog post"
$ git push origin my-blog-post-branch-name - Create a pull request on GitHub for your Git branch to the eng-blog repository to request that the post is published to the live site.
Use yarn post:edit to update an existing blog post’s updatedAt frontmatter field. Follow the CLI prompts to choose an existing blog post from the list.
| property | description |
|---|---|
| title | post title |
| description | post description that shows on blog list view |
| tags | tags relevant to the blog post |
| author | post author |
| publishedAt | date the post was first published |
| updatedAt | date the post was last updated |
| originalURL | original post URL if post has been copied from another platform |
| ogImage | absolute URL for the post’s open graph image |
By default, a post will use the blog’s default open graph image (/public/og-image.png) for the social media meta elements.
Images must be in .png file format. Use the open graph templates in Canva, or ask @laurakalbag to create an image for you.
To override the default image with a new image:
- Save your image in the
/publicfolder with the same filename as its corresponding blog post. Note: the corresponding filename is not necessary for the functioning of the open graph images, but improves the maintainability of the public folder. - Add the
ogImagefield to the frontmatter of the blog post using the absolute URL:
ogImage: "https://stately.ai/blog/2019-11-13-no-disabling-a-button-is-not-app-logic.png"
- Run the development server to spawn a local server on port 3000:
$ yarn dev - In another terminal tab, run
yarn test:metato spawn an instance of localtunnel listening to the same port as the development server:
$ yarn test:meta - The localtunnel process will show a URL in the terminal for a temporary deployment of the development server:
your url is: https://exampleurl.com - Use this URL with the social media platforms (or any other platform using Open Graph) below to test how they’d preview the home page or any post page meta information:
- Twitter card validator
- LinkedIn post inspector
- Facebook Sharing Debugger (requires Facebook login)
There are a few shortcodes you can use to embed content in markdown.
Use the tweet id for the id attribute. For example, in https://twitter.com/statelyai/status/1461727317429043201, 1461727317429043201 is the ID.
<Tweet id="1461727317429043201" />
Use the YouTube ID for the id attribute. For example in https://www.youtube.com/watch?v=y6aGu0N8z9Q, y6aGu0N8z9Q is the ID.
<Youtube id="y6aGu0N8z9Q" />
Use the Visualizer ID for the id attribute. For example in https://stately.ai/viz/5c325385-a0f4-4eaa-b215-712424369cc2, 5c325385-a0f4-4eaa-b215-712424369cc2 is the ID.
A title is also required to describe your visualization for accessibility and testing purposes:
<Viz id="7c0ec648-09d6-46fe-a912-fc0e46da5094" title="Data fetching modeled as a statechart." />
Configure how the visualization embed displays by passing the options below.
1 is show, 0 is hide:
| Option | Default value | Available values |
|---|---|---|
| mode | "viz" | "viz", "full", "panels" |
| panel | "code" | "code", "state", "events", "actors" |
| showOriginalLink | 1 | 1, 0 |
| readOnly | 1 | 1, 0 |
| pan | 0 | 1, 0 |
| zoom | 0 | 1, 0 |
| controls | 1 | 1, 0 |
// Display in visualization mode
<Viz id="5c325385-a0f4-4eaa-b215-712424369cc2" title="Data fetching modeled as a statechart." />
// Display in panels mode showing the state panel without the link to the visualizer
<Viz id="7c0ec648-09d6-46fe-a912-fc0e46da5094" title="Data fetching modeled as a statechart." mode="panels" panels="state" showOriginalLink="0" />
// Display in visualization mode without any controls
<Viz id="5c325385-a0f4-4eaa-b215-712424369cc2" title="Data fetching modeled as a statechart." controls="0" />