/Bear-Blog-Engine

Modern blog engine made with Go and the Next.js framework

Primary LanguageJavaScriptMIT LicenseMIT

Work-In-Progress

Go Report Card Docker Cloud Build Status (API) CI status prettier

Bear Blog Engine / Bear Post

A Modern Blog Engine. Backend server required, not JAMStack.

Uses Go (mux) for the backend and React (Next) for the frontend. Databases used are PostgreSQL and Redis (auth & caching).

All you need to use Bear-Post is a server to host the backend API. The frontend CDN and SSL certs can be handled by Vercel with your own domain for free!

Features

  • SEO and performance optimized
  • Backend uses Go for fast performance coupled with Redis for authentication and caching PostgreSQL requests
  • WYSIWYG online markdown-based editor that also supports embeds
    • Same base editor used in Outline
    • Added custom ability to restore unsaved changes in the editor
    • Added custom embeds
    • Added raw markdown edit mode for compatibility with spell-checkers (like Grammarly)
  • Support for multiple admin and editor users
  • Support for hidden/draft posts
  • Progressive Web Application (service-worker, offline cache, etc.)
  • Support for permalinks
  • Uses metadata for rich content in applications (such as Discord links)
  • Keyset pagination to support infinite scrolling
  • Redux to save fetched posts during navigation and thus reduce API requests
  • Login protected with reCaptcha
  • Automatic creation of a webp copy of uploaded feature-images
  • Easy startup with docker-compose and Vercel

For images of the admin dashboard, go to this pull request

Lighthouse stats of index page:

Lighthouse stats of a post page:

Using Bear-Post

Find the start up information in the templates/backend-only directory. It will guide you through starting the API and deploying the frontend to Vercel.

Q: Why not a static blog (Gatsby, Hugo, etc.)?

A: A dynamic, non-JAMStack, blog gives me the opportunity to learn working with databases and React. This is my first large project working with databases, React, Go, Docker, and such much more! So while a static blog has lots of advantages, a dynamic blog gives lots of opportunities to learn more.

What I cannot create, I do not understand - Richard Feynman

Mockups