Skip to content

Creating a static photo gallery using next.js

Friendly chat

In 2018, I wrote a .net framework 4.5, ASP.NET MVC 5.2.3 photo gallery app that showcases my brother's work in photography. It's main feature was a carousel that displayed the photos and it was built using blueimp-gallery. It used Razor View Engine to render the HTML pages, bootstrap as the frontend toolkit and it also had sendgrid and Application Insights integration.

In terms of functionality, the photo gallery app allowed anonymous views, didn't use any cookies and didn't require any login. It had the ability to display all my brother's photography projects, options of getting in touch via email, terms & conditions and `about us` information.

The photo gallery app was deployed in Azure App Services through Azure DevOps, used Azure CDN to host the images and had a custom domain and it was SSL/TLS enabled. It had the ability to deploy using deployment slots and, the app being a .net framework 4.5 app, it used a Basic Windows App Service Plan. The costs of running this site varied from £30/month up to £80/months under heavier loads.

In an attempt to reduce the costs of running, I figured out that I needed to change the current app service plan from a Windows based one to a Linux based one. The easiest way of doing this was to upgrade the photo gallery app from .net framework 4.5 to 4.8 and then to .net core.

Sadly, the latter part didn't succeed, I couldn't upgrade automatically without having to rewrite the entire site. So I took the opportunity to investigate other technologies in which I could rewrite the photo gallery app as a static website that I could host for minimum costs. I ended up using:

As most of the accompanying infrastructure is still hosted in Azure ( like the Azure CDN), I decided to reuse Azure as the hosting provider and choose Azure Static Web Apps using it's Free tier to host the new version of the app. I've reduced the costs of hosting by 95% and the app runs smoother than the previous version.

The experience of rewriting the app in react was fun and highly engaging and it took only 10 hours to complete.

The biggest advantage of now having a static web app is the flexibility to deploy in the least costly options out there and if the current Free tier will not suffice, the idea of investigating the next best option is exhilarating.

If you want to get in touch and hear more about this topic, feel free to contact me on or via .

© 2026 Andrei Bodea

Privacy policy

Privacy Policy

Last Updated: 2026-08-11

Thank you for visiting Compiled Thoughts (the “Blog”). We value your privacy and want to clarify how we handle any information you may provide or that may be collected when you visit this Blog. By accessing or using the Blog, you agree to the terms of this Privacy Policy.

1. Information We Do Not Collect

  • No Analytics or Tracking — We do not run analytics software, tracking pixels, session recording, or any other tool intended to profile visitors or follow them across sites.

  • No Advertisements — Our Blog does not display third-party advertisements and, therefore, does not collect data for advertising or marketing purposes.

  • No Reader Accounts or Subscriptions — Readers cannot create an account or subscribe, so we do not collect or store reader account data. Sign-in exists only for the Blog’s own author, in order to publish content.

  • No Cookies Set By Us — We do not set cookies of our own for any purpose. Please see Section 2 for the third-party services your browser contacts when you visit.

2. Third-Party Services and Automatic Data Collection

The Blog is a static site with no database of readers. However, displaying a page does require your browser to make requests to the services listed below. Those services necessarily receive your IP address, your browser’s user agent, and the address of the page you requested. This happens automatically when you visit, and we ask that you take it into account when reading Section 1.

  • Web Hosting, Netlify — The Blog is hosted by Netlify, which serves every page and may retain standard server logs, including IP addresses, for operational and security purposes.

  • Typefaces, Google Fonts — Every page loads fonts from fonts.googleapis.com and fonts.gstatic.com. As a result, Google receives your IP address and user agent when you visit. We do not use Google Analytics or any other Google advertising or measurement product.

  • Netlify Identity — The home page loads a login widget from identity.netlify.com. It exists solely so the author can sign in to publish, it offers nothing to ordinary readers, and it is not used to identify you. Your browser requests it regardless, and the widget may use your browser’s local storage to hold a sign-in session.

We do not control what these providers log or how long they retain it. Please consult their own privacy policies if that matters to you.

3. Voluntary Information

If you choose to contact us directly (for example, through an email link or contact form, if provided), we may receive personal information such as your name or email address. In such cases:

  • We will use this information solely to respond to your inquiry.

4. No Third-Party Data Sharing

Beyond the automatic requests described in Section 2, we do not share, sell, rent, or otherwise disclose personal information to third parties, because we do not collect or store any personal information about readers. In the event you voluntarily submit personal data (e.g., via direct email), we do not disclose that to any external entity.

5. Children’s Privacy

Our Blog does not target or direct content specifically to children under the age of 13. We do not knowingly collect or maintain personal information from children under 13. If you believe we may have inadvertently received personal information from a child under 13, please contact us immediately so we can delete such information.

6. External Links

Our Blog may contain links to external websites about programming, interviewing, music, books, psychology, or other related content. We are not responsible for the content, privacy policies, or practices of any third-party sites. We encourage you to review the privacy policies of those websites before interacting with them or providing any personal information.

7. Security

Although we do not collect or store personal data on our servers, we still endeavor to use reasonable security measures to protect the Blog’s integrity. However, no data transmission or storage system can be guaranteed to be 100% secure. Your use of the Blog indicates you understand and accept any inherent risks.

8. Changes to This Privacy Policy

We may update or modify this Privacy Policy from time to time to reflect changes in our practices or for other operational, legal, or regulatory reasons. If we make any material changes, we will update the “Last Updated” date at the top of this document. Your continued use of the Blog after any changes signifies your acceptance of the revised Privacy Policy.

9. Contact Us

If you have any questions or concerns about this Privacy Policy, please reach out using the email address in the header of the page.

By using Compiled Thoughts, you acknowledge that you have read, understood, and agree to this Privacy Policy.