Hashnode Changelog

See what's new with Hashnode

New

Hashnode AI is now free for all!

Posted by Fazle Rahman

Last week we announced that Hashnode AI is now free for all users. This makes Hashnode the only large scale blogging platform to have AI features free for all.

We are making use of the gpt3.5-turbo model for all our AI operations. PRO users will continue to have access to gpt-4, including gpt-4 vision for generating image alt text blog covers.

Here's everything you can do with Hashnode AI:

Rephrase articles

Hashnode AI can be used to write better and faster, you can ask it to:

  • Rewrite - Enhance your writing, fix grammar and spelling, simplify the text, switch to US English, or shorten it to a sentence or paragraph.
  • Modify - Make your text shorter, summarize, lengthen, or make it clearer.

  • Change tone - Make your writing casual, friendly, professional, or other styles.

  • Transform the structure - Change your text into a bullet list or numbered list.

Start a new draft and begin writing to try out Hashnode AI!

Generating SEO titles and description

Hashnode's AI can help you with SEO by creating titles and descriptions that are search engine-friendly, helping you reach more readers.

Go to the Publish button in the upper right-hand corner of your article draft, scroll down to the SEO title and SEO description fields, and then click on the Generate with Hashnode AI button to let Hashnode AI write a title and description for you.

Access to Hashnode AI chatbot

Our contextual AI chatbot can help you with an outline, creative ideas, or detailed explanations on complex topics. It understands the context of your content, making it great for research and collaborative writing.

Access the chatbot from our editor by clicking the Hashnode AI Chatbot icon next to Saved at the beginning of the page or use the shortcut Cmd/Ctrl + Shift + K.

The chatbot comes with some pre-populated fields. You can either select one of these or type in your query.

Use Hashnode AI directly from the editor

You can also access Hashnode AI from the editor using our slash commands, just type /ai to access the tools. It can help you generate an outline, summarize an article and generate code.

Generating blog covers and ALT text for images

If you are a Hashnode PRO user, you have exclusive access to gpt 4 and gpt 4 vision models, which can help you create blog cover images and add ALT text to images.

Here's how you can do it:

  • To generate a cover image, go to the Add Cover option at the beginning of your article, select AI(early preview), enter your prompt, and click Generate. Hashnode AI will then create a cover image based on your prompt.

  • To add ALT text to images, select the image to which you want to add ALT text, click on the Add ALT text button, then click Generate with Hashnode AI. Watch as Hashnode AI analyzes the image and generates an ALT text for it.


We hope this new addition will improve your writing experience on Hashnode. Create a new draft today to try Hashnode AI.

24 Apr 2024

New

Advanced analytics, better blog dashboard, inline commenting, real-time collaborative editing, and a new API mutation.

Posted by Fazle Rahman

Last week, we made a bunch of updates and added some new features at Hashnode. These changes aim to simplify collaboration on the Hashnode Enterprise Plan and offer authors more detailed information and greater functionality with our GraphQL API.

API Updates

We consistently enhance our API to provide more ways to engage with Hashnode. This week, we introduced new mutations for managing Series CRUD operations.

A "Series" allows you to group related articles on Hashnode, enabling your readers to view them in chronological order. You could already create a series using the Hashnode editor, and now you can do it with our GraphQL API.

  • createSeries: This mutation lets you create a new series on your blog. To do so, you need to provide the series name, slug, and publicationId. After that, you can start adding articles to your series.

Here is an example to try on our API playground:

mutation CreateSeries($input: CreateSeriesInput!) {
  createSeries(input: $input) {
    series {
      id
      name
      createdAt
      description {
        html
        markdown
      }
      slug
    }
  }
}
  • updateSeries: This mutation lets you change the details of an existing series. You can update the series name, slug, description, cover image, and sorting order. Here's how you might implement it:
mutation UpdateSeries($updateSeriesInput: UpdateSeriesInput!) {
  updateSeries(input: $updateSeriesInput) {
    series {
      id
      name
      createdAt
      description {
        html
        markdown
      }
    }
  }
}
  • removeSeries: If you need to delete a series, this mutation lets you do that. You only need to pass the ID of the series you want to remove. Here's an example:
mutation UpdateSeries($input: RemoveSeriesInput!) {
  removeSeries(input: $input) {
    series {
      id
      name
      createdAt
      description {
        markdown
        html
      }
    }
  }
}

New Inline Commenting and Real-Time Collaborative Editing

Now, you can add comments directly to your Hashnode article drafts and collaborate with other authors in real-time. This new feature is similar to what you might find in Google Docs, providing smoother editing.

  • You can collaborate with multiple authors on a draft simultaneously.

  • Editors can select text and attach inline comments, similar to Google Docs or Notion. To try this, open a draft in the editor (if you are on the enterprise plan), and select a piece of text. A comment icon will appear, allowing you to leave comments.

  • You can resolve and delete comment threads.

  • Comments appear in real-time as they are added.

Upcoming features will include mentions within inline comments and notifications for comments via email.

Currently, this feature is in an invite-only beta. To access it, sign up for the Hashnode Enterprise plan.

New Advanced analytics

Hashnode's advanced analytics is now powered by Amazon Timestream, providing a more robust data analysis solution.

Here are some updates:

  • Previously, advanced analytics were available only to users with Umami activated. Now, they are open to all Hashnode users.

  • The analytics data is now integrated into our GraphQL API, allowing you to customize your UI as you like.

  • The new system offers more accurate analytics, allowing you to filter by individual posts, series, or page IDs.

  • Enhanced grouping options let you sort by factors like country, device, host, and region.

New Blog Dashboard Additions

We have updated our blog dashboard with a new Imports page. Now, you can easily import articles from other platforms like Medium or Substack directly to Hashnode using our revamped UI.

Miscellaneous Bug Fixes

  • We fixed a bug that prevented users from inserting links with underscores.

  • The bug preventing team members from creating posts from GitHub using the publishAs command has been resolved.

  • Your comments and replies are now viewable in the activity feed on your profile page.

  • We also fixed a bug where a post's SEO title and description didn't properly appear in the headline and description fields of the post page schema.

Conclusion

We are always working to make your experience at Hashnode better. We believe these updates will improve your overall experience. If you have any feedback or suggestions, reach out to us on Discord.

24 Apr 2024

New

New blog dashboard: improved user experience

Posted by Fazle Rahman

Hello, Hashnoders!

We're thrilled to share with you all the changes we've made in the last quarter! Our team has been diligently working to enhance your experience with Hashnode.

Here are the latest additions:

🌟 Revamping our dashboard

Hashnode is enhancing your writing experience with the launch of a new dashboard. In addition to its fresh appearance, we have primarily focused on improving user experience and accessibility.

Old dashboard:

New dashboard:

You can try the new dashboard here.

Before we go into what has changed, let's see what the community has to say about itπŸ‘‡

πŸ“Š Analytics

Found accessing analytics time-consuming? We've simplified that process in the new dashboard by placing analytics on the Overview tab, making it the first thing you see.

Additionally, you now can search for articles and view their analytics.

πŸ—‘οΈ Purging Cache

Have you ever needed to remove the cache from your blog? Now, you can do it manually directly from the dashboard with just one click.

✍️ Editor-like feel on pages

To enhance your experience when creating a new page, we've added our editor features. This means you can use the / command, and also convert content from WYSIWYG to markdown and vice versa.

πŸ› οΈ Drag and drop

We wanted our writers to have complete control over the appearance of their blogs. With the introduction of the new drag-and-drop feature in the Navbar, writers can now arrange tabs as they see fit.

πŸ” Search feature

We all agree that the ability to search articles is helpful, don't we? Keeping user convenience and experience in mind we have introduced a search function in both the Articles and Analytics sections of the dashboard.

And that's a wrap! Try the new dashboard and let us know what you think about it.

08 Apr 2024

Improvement

Added new pagination query and mutations to Hashnode API

Posted by Fazle Rahman

Our public API has undergone significant changes recently. In addition to introducing new features, we have been actively listening to user feedback and making improvements to existing queries. We have added new queries and mutations, that will help you perform pagination on popular articles, and CRUD operations on comment and reply.

Here's what has changed:

Previously when querying for popular tags, you did not have the pagination option. With PopularTagEdge you can find a tag and a cursor for pagination.

Here's an example query for you to try:

query PopularTags($first: Int!) {
  popularTags(first: $first) {
    edges {
      cursor
      node {
        id
        name
        logo
        postsCount
        slug
      }
    }
  }
}

Run it in our API playground to see how it works.

Return deleted posts

Want to query deleted posts? It is now possible with our latest deletedOnly filter.

Using posts resolver you can get the list of posts in a publication. The query returns active posts by default, you need to set the deletedOnly filter to true to return deleted posts.

An example would look like this πŸ‘‡

New mutations

In this release, we have also added two new mutations for Comment and Reply. You can add, update, delete, like any comment or reply now.

Here's how the new mutations work:

Comment Mutation

  • addComment - Helps you add comments to a post.

    Example query:

      mutation AddComment($input: AddCommentInput!) {
        addComment(input: $input) {
          comment {
            id
            content {
              ...ContentFragment
            }
            author {
              ...UserFragment
            }
            replies {
              ...CommentReplyConnectionFragment
            }
            dateAdded
            stamp
            totalReactions
            myTotalReactions
          }
        }
      }
    
  • likeComment - This lets you add comments to a post.

    An example query would look like this:

      mutation LikeComment($input: LikeCommentInput!) {
        likeComment(input: $input) {
          comment {
            id
            content {
              ...ContentFragment
            }
            author {
              ...UserFragment
            }
            replies {
              ...CommentReplyConnectionFragment
            }
            dateAdded
            stamp
            totalReactions
            myTotalReactions
          }
        }
      }
    
  • removeComment - Using removeComment you can remove comments from a post.

    Example query:

      mutation RemoveComment($input: RemoveCommentInput!) {
        removeComment(input: $input) {
          comment {
            id
            content {
              ...ContentFragment
            }
            author {
              ...UserFragment
            }
            replies {
              ...CommentReplyConnectionFragment
            }
            dateAdded
            stamp
            totalReactions
            myTotalReactions
          }
        }
      }
    
  • updateComment - Use updateComment to update a comment on a post.

    The query would look like this:

      mutation UpdateComment($input: UpdateCommentInput!) {
        updateComment(input: $input) {
          comment {
            id
            content {
              ...ContentFragment
            }
            author {
              ...UserFragment
            }
            replies {
              ...CommentReplyConnectionFragment
            }
            dateAdded
            stamp
            totalReactions
            myTotalReactions
          }
        }
      }
    

Reply mutation

Similar to Comment, you can add, remove, update or like any reply. The newly added mutations are addReply, removeReply, updateReply and likeReply.

Here's an explanation of what each of these mutations does along with examples:

  • addReply - Helps you add a reply to a comment.

    Example query:

      mutation AddReply($input: AddReplyInput!) {
        addReply(input: $input) {
          reply {
            id
            content {
              ...ContentFragment
            }
            author {
              ...UserFragment
            }
            dateAdded
            stamp
            totalReactions
            myTotalReactions
          }
        }
      }
    
  • removeReply - Need to remove a reply? You can get it done with removeReply.

    Here's how:

      mutation RemoveReply($input: RemoveReplyInput!) {
        removeReply(input: $input) {
          reply {
            id
            content {
              ...ContentFragment
            }
            author {
              ...UserFragment
            }
            dateAdded
            stamp
            totalReactions
            myTotalReactions
          }
        }
      }
    
  • updateReply - With updateReply you can easily update a reply.

An example query for you to try:

    mutation UpdateReply($input: UpdateReplyInput!) {
      updateReply(input: $input) {
        reply {
          id
          content {
            ...ContentFragment
          }
          author {
            ...UserFragment
          }
          dateAdded
          stamp
          totalReactions
          myTotalReactions
        }
      }
    }
  • likeReply - You can like a reply using likeReply and an example would be:

      mutation LikeReply($input: LikeReplyInput!) {
        likeReply(input: $input) {
          reply {
            id
            content {
              ...ContentFragment
            }
            author {
              ...UserFragment
            }
            dateAdded
            stamp
            totalReactions
            myTotalReactions
          }
        }
      }
    

08 Apr 2024