<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Atashi Sato </title>
    <description>The latest articles on Forem by Atashi Sato  (@developers_today).</description>
    <link>https://forem.com/developers_today</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2317839%2Fe0eab548-14fa-470f-b68e-a7fc3c4c9bd0.png</url>
      <title>Forem: Atashi Sato </title>
      <link>https://forem.com/developers_today</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/developers_today"/>
    <language>en</language>
    <item>
      <title>My Real Project: FREE ATS CV and Resume Builder</title>
      <dc:creator>Atashi Sato </dc:creator>
      <pubDate>Thu, 31 Jul 2025 14:54:33 +0000</pubDate>
      <link>https://forem.com/developers_today/my-real-project-free-ats-cv-and-resume-builder-25e6</link>
      <guid>https://forem.com/developers_today/my-real-project-free-ats-cv-and-resume-builder-25e6</guid>
      <description>&lt;p&gt;I'm an enthusiastic web developer. Web development started as a hobby for me, but I stepped away from it for several years. A few years ago, I decided to return to the field to catch up on the latest trends and technologies. Since then, I've immersed myself in various programming languages, libraries, and frameworks.&lt;/p&gt;

&lt;p&gt;I now have a solid understanding of HTML, CSS, JavaScript, Node.js, Next.js, React.js, MySQL, MongoDB, PostgreSQL, MariaDB, Strapi, Contentful, JSON, and many other related concepts and functionalities.&lt;/p&gt;

&lt;p&gt;I'm capable of deploying projects on any hosting platform, integrating various APIs, and, in principle, developing complete full-stack web applications.&lt;/p&gt;

&lt;p&gt;Artificial intelligence has been a significant help in my learning journey and project development. With AI's assistance, I've built several websites, including an AI Blog where I publish AI-generated blog posts.&lt;/p&gt;

&lt;p&gt;Project Overview&lt;/p&gt;

&lt;p&gt;I have already done a &lt;a href="https://mycv.developers.today/" rel="noopener noreferrer"&gt;Free ATS CV and Resume Builder&lt;/a&gt; web application. This platform will enable users to create and manage their CVs and resumes online, offering features like PDF and other format downloads, as well as Google Drive sharing functionality.&lt;/p&gt;

&lt;p&gt;The primary goal of this project is to provide a sophisticated, free platform where individuals can create ATS (Applicant Tracking System)-friendly CVs and resumes.&lt;/p&gt;

&lt;p&gt;Current Development Status&lt;/p&gt;

&lt;p&gt;I've already started working on this website and am making regular updates daily and weekly.&lt;/p&gt;

&lt;p&gt;The Free ATS CV and Resume Builder is currently live. I'm using Next.js for the frontend and MongoDB for the backend to store user data.&lt;/p&gt;

&lt;p&gt;A core objective for me is to ensure the complete security of user personal information and other data. Soon, as the project approaches completion, all user data in MongoDB will be fully encrypted, making it unreadable and undecipherable even by administrators. In the future, I plan to release the codebase on GitHub as an open-source project.&lt;/p&gt;

&lt;p&gt;Implemented Features&lt;/p&gt;

&lt;p&gt;Currently, the website includes the following functionalities:&lt;/p&gt;

&lt;p&gt;Authorization/Registration System: Secure user sign-up and login.&lt;/p&gt;

&lt;p&gt;Profile Editing: Users can manage and update their personal information.&lt;/p&gt;

&lt;p&gt;Dashboard: A personalized area for users to manage their CVs and profiles.&lt;/p&gt;

&lt;p&gt;CV Creation and Saving: Users can create and save multiple CVs.&lt;/p&gt;

&lt;p&gt;PDF Download: Users can download their created CVs in PDF format.&lt;/p&gt;

&lt;p&gt;Upcoming Features and Public Profiles&lt;/p&gt;

&lt;p&gt;At present, only one CV template is available. However, I am actively working on adding 10 new templates within the next week.&lt;/p&gt;

&lt;p&gt;Additionally, registered users can control the visibility of their profiles from their dashboard, choosing between public or private status. By default, all profiles are private and must be explicitly made public by the user. If a user makes their profile public, they'll receive a unique shareable link. Private profiles remain inaccessible to others.&lt;/p&gt;

&lt;p&gt;The purpose of the public profile page is to provide a visually appealing, resume-like online presence that users can directly share with potential employers.&lt;/p&gt;

&lt;p&gt;For optimal search engine optimization (SEO), the public pages of the website are equipped with Open Graph tags and essential meta-information.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What is Offshore Hosting and Why it need</title>
      <dc:creator>Atashi Sato </dc:creator>
      <pubDate>Tue, 11 Mar 2025 21:39:26 +0000</pubDate>
      <link>https://forem.com/developers_today/what-is-offshore-hosting-and-why-it-need-410c</link>
      <guid>https://forem.com/developers_today/what-is-offshore-hosting-and-why-it-need-410c</guid>
      <description>&lt;p&gt;The role of the state in people’s daily lives is expanding more and more as time goes on. With the introduction of new regulations and laws, governments are attempting to increasingly restrict speech of freedom. The online world is no exception.&lt;/p&gt;

&lt;p&gt;Any information spread on the internet—be it texts, photos, videos, or anything else—is inevitably stored somewhere. You might think you’re protecting yourself or that your information is securely stored on a reliable hosting service or server, but in reality, that’s not entirely true.&lt;/p&gt;

&lt;p&gt;Ultimately, the state can “track down” any information by approaching the company where you store it, such as on various servers. In fact, any government can contact a hosting provider—sometimes with a court order, officially—and retrieve your data.&lt;/p&gt;

&lt;p&gt;If you want to protect your information, you need to use several methods together.&lt;/p&gt;

&lt;p&gt;For example, there are so-called offshore hosting services (in this blog post - &lt;a href="https://www.ai-blog.best/blog/offshore-hosting-2025-protection-of-sensitive-data-and-freedom-of-speech" rel="noopener noreferrer"&gt;Offshore Hosting 2025: Protection of Sensitive Data and Freedom of Speech&lt;/a&gt;, I’ve written about various offshore hosting options and their services, which might be useful to you).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7vr2xe6r9vod7oiapaw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7vr2xe6r9vod7oiapaw.jpeg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does offshore hosting mean?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the traditional sense, offshore hosting means that the hosting service you use is located in a different country from yours—one with a legal framework different from your own country’s regulations.&lt;br&gt;
For instance, if you’re in the U.S., it implies that the hosting should be in another country, like the Netherlands.&lt;/p&gt;

&lt;p&gt;You can research your country’s legislation to see how well it protects personal information and how reliable its legal system is, because in any case, if they need to, they can obtain any information.&lt;/p&gt;

&lt;p&gt;Additionally, when choosing an offshore hosting service, you should select a country with a relatively better legal system that effectively protects personal data. Some hosting providers even offer registration without requiring personal information.&lt;/p&gt;

&lt;p&gt;Personal information is considered relatively well-protected in places like the Netherlands, Iceland, and Sweden.&lt;/p&gt;

&lt;p&gt;It’s important to consider the physical location of the server where you plan to store your information.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Fetch and Display Blog Articles from Contentful in a Next.js Application</title>
      <dc:creator>Atashi Sato </dc:creator>
      <pubDate>Wed, 22 Jan 2025 23:07:00 +0000</pubDate>
      <link>https://forem.com/developers_today/how-to-fetch-and-display-blog-articles-from-contentful-in-a-nextjs-application-lo2</link>
      <guid>https://forem.com/developers_today/how-to-fetch-and-display-blog-articles-from-contentful-in-a-nextjs-application-lo2</guid>
      <description>&lt;p&gt;In my &lt;a href="https://dev.to/developers_today/how-to-connect-nextjs-app-to-contenful-cms-2025-1103"&gt;previous blog post&lt;/a&gt;, I explained how to connect your Next.js application to Contentful CMS, where you can store and manage your blog articles.&lt;/p&gt;

&lt;p&gt;In this post, I’ll show you how to fetch those articles, retrieve specific data like the title and publication date, and display them on your Next.js app using &lt;code&gt;server-side rendering&lt;/code&gt; (SSR).&lt;/p&gt;

&lt;p&gt;Overview&lt;/p&gt;

&lt;p&gt;Before diving into the details, let me quickly summarize what you’ve done so far and explain the workflow.&lt;/p&gt;

&lt;p&gt;What You’ve Accomplished&lt;/p&gt;

&lt;p&gt;In the previous blog post, you:&lt;/p&gt;

&lt;p&gt;Set up Contentful CMS to host your blog articles.&lt;/p&gt;

&lt;p&gt;Created a Content Type with fields like title and description to store article-specific data.&lt;/p&gt;

&lt;p&gt;Built a Next.js application that serves as the front end to display these articles to your audience.&lt;/p&gt;

&lt;p&gt;Now, it’s time to fetch the articles you’ve added to your &lt;code&gt;CMS&lt;/code&gt; and display them on your application’s page, making them accessible to readers.&lt;/p&gt;

&lt;p&gt;The Goal&lt;/p&gt;

&lt;p&gt;For this example, let’s create a page at &lt;code&gt;/pages/articles/index.js&lt;/code&gt; where you’ll display a list of articles with the titleand publication date.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Display Articles
&lt;/h2&gt;

&lt;p&gt;Your Contentful Content Type automatically provides an endpoint that contains your articles. To display these articles in your application, you need to fetch the data from this endpoint and render it on your page.&lt;/p&gt;

&lt;p&gt;There are two main ways to fetch data in a &lt;code&gt;Next.js&lt;/code&gt; application:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Client-Side Rendering (CSR)&lt;/li&gt;
&lt;li&gt;Server-Side Rendering (SSR)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why SSR is the Better Choice&lt;/p&gt;

&lt;p&gt;If you fetch data using &lt;code&gt;Client-Side Rendering&lt;/code&gt; (CSR), all the data will be loaded directly into the client’s browser. This includes every single article stored in your Contentful CMS, not just the one currently being viewed.&lt;/p&gt;

&lt;p&gt;For example, if a user is reading an article titled "How to Create a Next.js App", their browser will load not only this article but all other articles as well. This approach has several drawbacks:&lt;/p&gt;

&lt;p&gt;Security Concerns: The endpoint where your articles are stored will be exposed in the browser, making it accessible to anyone.&lt;/p&gt;

&lt;p&gt;Poor SEO: Search engines cannot effectively crawl your content if it is fetched on the client side (More about SEO read: T&lt;a href="https://www.ai-blog.best/blog/the-ultimate-guide-to-seo-optimization-in-next-js-for-beginners" rel="noopener noreferrer"&gt;he Ultimate Guide to SEO Optimization in Next.js for Beginners&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;To demonstrate this, you can inspect the network requests in your browser (e.g., Chrome &amp;gt; Inspect &amp;gt; Network). You’ll notice that every article is downloaded to the client’s browser, even though the user only sees one article on the page.&lt;/p&gt;

&lt;p&gt;For these reasons, Server-Side Rendering (SSR) is the recommended approach. With SSR, the data fetching happens on the server, and only the requested data is sent to the client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fetching Articles with SSR
&lt;/h2&gt;

&lt;p&gt;Below is an example of how to fetch and display articles using SSR in a Next.js application. The following code will render the titles and publication dates of your blog articles on the /pages/articles/index.js page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Import the Contentful client
import { client } from "@/lib/contentful";

// Fetch data from Contentful during SSR
export async function getServerSideProps() {
  const response = await client.getEntries({
    content_type: 'myblogs', // Replace with your Content Model ID
    select: 'fields.title,fields.date', // Only fetch title and date fields
  });

  const articles = response.items.map((item) =&amp;gt; {
    const rawDate = new Date(item.fields.date);
    const formattedDate = `${rawDate.getDate().toString().padStart(2, '0')}/${(rawDate.getMonth() + 1)
      .toString()
      .padStart(2, '0')}/${rawDate.getFullYear()}`;

    return {
      title: item.fields.title,
      date: formattedDate,
    };
  });

  return {
    props: { articles },
  };
}

// Render the articles on the page
export default function ArticlesPage({ articles }) {
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;Blog Articles&amp;lt;/h1&amp;gt;
      &amp;lt;ul&amp;gt;
        {articles.map((article, index) =&amp;gt; (
          &amp;lt;li key={index}&amp;gt;
            &amp;lt;h2&amp;gt;{article.title}&amp;lt;/h2&amp;gt;
            &amp;lt;p&amp;gt;Published Date: {article.date}&amp;lt;/p&amp;gt;
          &amp;lt;/li&amp;gt;
        ))}
      &amp;lt;/ul&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explanation of the Code&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fetching Data on the Server&lt;/strong&gt;
The getServerSideProps function is used to fetch articles from Contentful during server-side rendering. Only the title and date fields are fetched to minimize the amount of data sent to the client.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2.&lt;strong&gt;Formatting Dates&lt;/strong&gt;&lt;br&gt;
The raw date retrieved from Contentful is formatted into the &lt;code&gt;DD/MM/YYYY&lt;/code&gt; format on the server side. This ensures that the client receives properly formatted dates, preventing any hydration errors or mismatched content between the server and client.&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;Displaying Data&lt;/strong&gt;&lt;br&gt;
The ArticlesPage component renders the fetched articles as a list. Each list item includes the article’s &lt;code&gt;title&lt;/code&gt; and publication &lt;code&gt;date&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Once your articles are displayed on the &lt;code&gt;/pages/articles/index.js&lt;/code&gt; page, the next step is to create dynamic pages for individual articles.&lt;/p&gt;

&lt;p&gt;For example, clicking on an article’s title could take the user to &lt;code&gt;/pages/articles/how-to-create-nextjs-app&lt;/code&gt;, where they can read the full article. To achieve this, you’ll need to set up dynamic routes in Next.js and use the slug field from your Contentful Content Type.&lt;br&gt;
I’ll cover how to create dynamic routes and generate individual article pages in my next blog post.&lt;/p&gt;

&lt;p&gt;If you found this guide helpful, be sure to follow my blog for more content.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>contetful</category>
      <category>learning</category>
      <category>api</category>
    </item>
    <item>
      <title>How to connect nextjs app to contenful cms - 2025</title>
      <dc:creator>Atashi Sato </dc:creator>
      <pubDate>Tue, 21 Jan 2025 08:54:01 +0000</pubDate>
      <link>https://forem.com/developers_today/how-to-connect-nextjs-app-to-contenful-cms-2025-1103</link>
      <guid>https://forem.com/developers_today/how-to-connect-nextjs-app-to-contenful-cms-2025-1103</guid>
      <description>&lt;p&gt;Hello, I am an amateur web developer, or more precisely, self-taught. I’ve learned several programming languages to a certain extent, and I’m capable of solving fairly complex tasks and challenges. It started as a hobby, but recently, I’ve delved deeper into it.&lt;/p&gt;

&lt;p&gt;Now I’m building my own &lt;a href="https://ai-blog.best/" rel="noopener noreferrer"&gt;AI Blog&lt;/a&gt;. I’ve decided to share my knowledge with you, showing how things are done and providing everything with code examples.&lt;/p&gt;

&lt;p&gt;After following this guide, you’ll have half the work done for your own blog. I’ll share the continuation in the next article, enabling you to fully set up your blog.&lt;/p&gt;

&lt;p&gt;This is a very simple and detailed guide on how to connect a Next.js app to Contentful’s CMS, allowing you to create a news website or your own blog.&lt;/p&gt;

&lt;p&gt;This guide is truly practical, as it’s written and tested using the most up-to-date methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Register on Contentful&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, you need to register on the &lt;a href="https://contentful.com/" rel="noopener noreferrer"&gt;Contentful&lt;/a&gt; website and create an account.&lt;/p&gt;

&lt;p&gt;Once you’re logged in, go to Content Model and create a new Content Type (name it in lowercase, e.g., myblogs).&lt;/p&gt;

&lt;p&gt;Since this guide is focused on creating a blog, let’s proceed with that example.&lt;/p&gt;

&lt;p&gt;What does a blog need? At minimum, a title, description, publication date, and slug. It may require additional fields, but let’s stick with these for now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3wesc5wrkusso6efgpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3wesc5wrkusso6efgpt.png" alt=" " width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above on image example is from my blogs contenteful account, I have some extra fields.&lt;/p&gt;

&lt;p&gt;Accordingly, you need to create fields in the Content Type for these properties. As you try adding fields, you’ll figure out which types of fields you need. Don’t rush—experiment, modify, and play around. There’s no problem if you make a mistake. Just remember to add the fields you’ll need and ensure they are relevant.&lt;/p&gt;

&lt;p&gt;Once you’re done adding the fields, go to Content, create a few entries (articles) to test with, and publish them.&lt;/p&gt;

&lt;p&gt;At this point, Step 1 is complete. You’ve created the minimal infrastructure necessary for a blog. Now, it’s time to connect it to your Next.js app so it becomes accessible and visually readable to others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create an API Token&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next step is to create an API token, so your front-end application can access the blog API and fetch the articles.&lt;/p&gt;

&lt;p&gt;Connecting Contentful to a Next.js App&lt;br&gt;
To display the articles you’ve added to Contentful in your Next.js web app, you need to connect your project’s endpoints to the Next.js application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Create a Next.js App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, create a new Next.js app by running:&lt;br&gt;
&lt;code&gt;npx create-next-app@latest my-blog&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;2. Then install Contentful in your Next.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install contentful&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;3. Set Up Contentful Integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, create the following file:&lt;br&gt;
/lib/contentful.js&lt;/p&gt;

&lt;p&gt;Add the following code to the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// lib/contentful.js
import { createClient } from "contentful";

export const client = createClient({
  space: process.env.CONTENTFUL_SPACE_ID,
  accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Configure Environment Variables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a &lt;strong&gt;.env.local&lt;/strong&gt; file in the root of your project. This file will store your &lt;strong&gt;Space ID&lt;/strong&gt; and &lt;strong&gt;Access Token&lt;/strong&gt; securely. It should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zcdx4kiqvyolck1zwpe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zcdx4kiqvyolck1zwpe.png" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the &lt;strong&gt;Open code sample&lt;/strong&gt; and the you see your &lt;strong&gt;Space ID&lt;/strong&gt; and &lt;strong&gt;Access Token&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`CONTENTFUL_SPACE_ID=your-space-id
CONTENTFUL_ACCESS_TOKEN=your-access-token`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace your-space-ID and your-access-token with the corresponding values from your Contentful account.&lt;/p&gt;

&lt;p&gt;By following these steps, you’ll have the foundation ready for displaying your Contentful articles in your Next.js application. Stay tuned for the next article, where I’ll explain how to fully structure your blog and enhance it further.&lt;/p&gt;

&lt;p&gt;In the next post I explain you how to fetch and display articles from your contentful API endpoint.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>contentful</category>
      <category>api</category>
    </item>
  </channel>
</rss>
