<?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>DEV Community: Kirill Zhirnov</title>
    <description>The latest articles on DEV Community by Kirill Zhirnov (@kirillzhirnov).</description>
    <link>https://dev.to/kirillzhirnov</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%2F952207%2Ff6544335-77ae-4d5b-924d-ca39a18e3274.jpeg</url>
      <title>DEV Community: Kirill Zhirnov</title>
      <link>https://dev.to/kirillzhirnov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kirillzhirnov"/>
    <language>en</language>
    <item>
      <title>S3 Image resizer - an alternative way to handle thumbnails</title>
      <dc:creator>Kirill Zhirnov</dc:creator>
      <pubDate>Mon, 20 Mar 2023 17:46:08 +0000</pubDate>
      <link>https://dev.to/kirillzhirnov/s3-image-resizer-an-alternative-way-to-handle-thumbnails-5dnk</link>
      <guid>https://dev.to/kirillzhirnov/s3-image-resizer-an-alternative-way-to-handle-thumbnails-5dnk</guid>
      <description>&lt;p&gt;It is a very common approach to store images on S3 - it is cheaper and helps you to forget about the pain of continuously adding space on your server. However, there is no solution out of the box to convert, crop, resize, and optimize images. If you try to search for a solution - you could probably find a "Lambda function" approach, mostly for AWS and some paid services.&lt;/p&gt;

&lt;p&gt;Let me introduce an alternative way - a free, open-source solution to resize and optimize images on the fly from any S3 provider (not just AWS): &lt;a href="https://github.com/kirill-zhirnov/s3-image-resizer"&gt;github.com/kirill-zhirnov/s3-image-resizer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is a web service, which resizes images by query params, e.g.:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://localhost:3000/thumb/&amp;lt;local path on the S3&amp;gt;?mode=scale&amp;amp;max-size=500&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Generates a scaled thumbnail with 500px size. The service is based on Node.js (Express/Typescript) and Imagick. All available query parameters could be found on the GitHub page.&lt;/p&gt;

&lt;p&gt;On a request, the service fetches an image from S3 and generates a thumbnail with Imagick (executes CLI). The resulting image can be stored for caching purposes.&lt;/p&gt;

&lt;p&gt;This approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Handle correctly images with Exif orientation (e.g. a photo saved in the landscape, but portrait should be used)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can resize images of any size (even a big one, without memory limit issue)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Works fast&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can be easily extended&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Works with any S3-based hostings&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The service can be launched with Docker - it already has all the configs - just create a .env file and run.&lt;/p&gt;

&lt;p&gt;The project was created as a part of boundless-commerce.com project. If you like the idea - please support us with a start on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kirill-zhirnov/boundless-nextjs-ecommerce-template"&gt;NextJS Ecommerce Template&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Next.js E-commerce StarterKit (2022)</title>
      <dc:creator>Kirill Zhirnov</dc:creator>
      <pubDate>Sat, 22 Oct 2022 15:59:58 +0000</pubDate>
      <link>https://dev.to/kirillzhirnov/nextjs-e-commerce-starterkit-2022-6ha</link>
      <guid>https://dev.to/kirillzhirnov/nextjs-e-commerce-starterkit-2022-6ha</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Creating an e-commerce website might look like a simple task, but in fact, it is a pretty complicated one: you need to find a Backend, an API, organize product listings on the Frontend, a catalog with hierarchy, filters, and search, a cart and a checkout. And don't forget about image resize. And all these parts should be done in a modern way, e.g. with Next.js and SSG.&lt;/p&gt;

&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;Ready to use Next.JS E-Commerce Starter kit!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kirill-zhirnov/boundless-nextjs-sample"&gt;https://github.com/kirill-zhirnov/boundless-nextjs-sample&lt;/a&gt;&lt;br&gt;
Demo: &lt;a href="https://blank.demos.my-boundless.app/"&gt;https://blank.demos.my-boundless.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are 2 ready to use themes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kirill-zhirnov/boundless-marsfull-theme/"&gt;https://github.com/kirill-zhirnov/boundless-marsfull-theme/&lt;/a&gt;&lt;br&gt;
Demo: &lt;a href="https://mars.demos.my-boundless.app/"&gt;https://mars.demos.my-boundless.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kirill-zhirnov/boundless-moon-theme"&gt;https://github.com/kirill-zhirnov/boundless-moon-theme&lt;/a&gt;&lt;br&gt;
Demo: &lt;a href="https://moon.demos.my-boundless.app"&gt;https://moon.demos.my-boundless.app&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The checkout is a standalone component, which can me easily customized: &lt;a href="https://github.com/kirill-zhirnov/boundless-checkout-react"&gt;https://github.com/kirill-zhirnov/boundless-checkout-react&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Themes use BoundlessCommerce (&lt;a href="https://boundless-commerce.com"&gt;https://boundless-commerce.com&lt;/a&gt;) as a backend. There is an absolutely free tariff plan which covers small business needs.&lt;/p&gt;

&lt;p&gt;These Next.JS sites can be easily deployed to Vercel or Netlify. If you want a longread about creating NextJS Ecommerce website - please visit our blog (I don't want to do a copy/paste :)): &lt;a href="https://boundless-commerce.com/blog/how-to-create-a-nextjs-e-commerce-website"&gt;https://boundless-commerce.com/blog/how-to-create-a-nextjs-e-commerce-website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if any question - please contact us - we are happy to help!&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>nextjs</category>
      <category>starterkit</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
