A modern content site and blog where editors create and manage articles through a headless CMS, readers browse posts by category, and each author has a dedicated profile page. The finished product includes full SEO metadata, a newsletter signup form, site-wide search, analytics tracking, and one-click deployment to Netlify.By the end of this recipe you will have a production-ready blog that you can customize, rebrand, and launch as your own publication.
Tech stack
You do not need to understand these technologies. Rocket handles them automatically. This table is for reference.
Architecture overview
Here is how the pieces connect:- An editor creates a new article in Strapi, assigning a category, author, featured image, and SEO metadata.
- When the article is published, the Next.js frontend fetches the content from the Strapi API and renders it as a static page.
- Readers can browse by category or use the search bar to find articles by title or keyword.
- Each article page includes an author card that links to the author’s profile, showing their bio and all published posts.
- Readers can subscribe to the newsletter via a signup form powered by Supabase. Subscriber data is stored securely for future email campaigns.
- Google Analytics tracks page views, popular articles, and reader engagement across the site.
- The entire site is deployed to Netlify with automatic rebuilds triggered by CMS content changes.
How long does it take?
Step-by-step build
1
Start a new project
Open rocket.new and create a new project. Give Rocket a detailed description of the blog so it scaffolds the right pages, layout, and navigation from the start.
2
Connect Strapi as your CMS
Go to Integrations in your Rocket project and connect your Strapi instance. Then ask Rocket to set up the content types and connect them to the frontend.
Rocket handles the Strapi connection through the integrations panel. Your API URL and tokens are encrypted and stored securely, so you never need to copy them manually.
3
Build article pages
Now create the individual article pages with rich content rendering, author attribution, and SEO metadata.
4
Add categories and author pages
Build the category filter system and dedicated author profile pages so readers can explore content by topic or writer.
5
Add search functionality
Let readers find articles quickly with a site-wide search feature.
6
Add newsletter signup
Add a newsletter subscription form so readers can sign up for updates. Store subscribers in Supabase for future email campaigns.
You can later connect a service like Mailchimp, Brevo, or Resend to send automated email campaigns to your subscriber list.
7
Set up analytics
Connect Google Analytics to track page views, popular articles, and reader behavior.
8
Deploy to Netlify
Go to Integrations and connect Netlify, then deploy your blog to the web.Use the Launch button in your Rocket project to deploy to the web. Rocket handles the Netlify build configuration automatically. Make sure all required environment variables are set in your project’s integration settings before launching.
Customization ideas
Once the base blog is running, here are ways to extend it.Add a comment system
Add a comment system
Let readers leave comments on articles. Use Supabase to store comments with moderation support so you can approve or remove comments before they appear.
Add dark mode
Add dark mode
Give readers the option to switch between light and dark themes. Persist the preference in localStorage so it carries across visits.
Add an RSS feed
Add an RSS feed
Generate an RSS feed so readers can subscribe using their favorite feed reader and get notified about new articles automatically.
Troubleshooting
Articles are not showing up on the site
Articles are not showing up on the site
If the blog loads but articles are missing, the Strapi connection may need attention. First, make sure your articles are set to Published (not Draft) in Strapi. Then ask Rocket to debug:
Images loading slowly or not displaying
Images loading slowly or not displaying
If featured images are broken or slow, ask Rocket to optimize the image handling:

