Hey everyone! I recently wrapped up my project — FindDonuts.com, a comprehensive directory of US donut shops (about 20k entries). In this post, I’d like to share some of the technical details and lessons learned while building and self-hosting this project.
The Tech Stack
For this project, I decided to keep things lean and efficient. Here’s what I used:
Next.js with SSR: I chose Next.js for its server-side rendering (SSR) capabilities. This not only improved performance but also helped with SEO — a key factor for a directory website.
PostgreSQL Database: My database holds around 150MB of data, storing details of 20k donut shops. PostgreSQL was an obvious choice for its robustness and ease of integration with Next.js.
-
Self-Hosted on a Single VM: I opted to self-host everything on one VM. The stack includes:
- Debian as the operating system.
- QEMU for virtualization.
- Nginx as the reverse proxy.
- PM2 for process management (ensuring the Next.js app runs reliably).
Why This Setup?
- Cost-Effective and Scalable - Running everything on a single VM allows me to keep hosting costs low while still maintaining adequate performance. With a modest configuration (2 vCPUs, 4GB RAM, 40GB SSD), I’ve managed to handle the load without issues. Of course, as traffic grows, scaling up is an option.
- Improved SEO & Performance - Next.js with SSR is a game changer. By rendering pages on the server, I ensure fast load times and a better user experience—which is critical for SEO. The setup with Nginx as a reverse proxy further optimizes performance and security.
- Simplified Management - Using PM2 to manage the Node processes means that I can monitor and restart the app automatically in case of failures. This reliability is crucial for keeping a directory site live 24/7.
Summarizing Google Maps Reviews
Another key feature of FindDonuts.com is how we handle reviews. For each donut shop, we aggregate data from Google Maps reviews and distill it into a concise summary. This means that instead of sifting through hundreds of individual comments, users get a quick snapshot of each shop’s pros and cons—making it easier to decide where to go. This process not only saves time but also helps highlight recurring themes in customer feedback, ensuring that the most relevant insights are front and center.
Challenges and Future Plans
While the current setup works well, there are a few challenges and future enhancements on my roadmap:
Feature Expansion:
I’m planning to add user ratings, comments, and eventually even shop menus. However, integrating and keeping menus updated is a tougher nut to crack due to the dynamic nature of the data.
Data Enrichment:
As I gather more user feedback, I’m exploring ways to enrich the existing data and provide even more value—like personalized recommendations based on user preferences.
Final Thoughts
Building FindDonuts.com has been an exciting journey—from a simple idea fueled by my passion for donuts to a fully functional directory serving thousands of users. I’m continuously learning and iterating on the project, and I’d love to hear your feedback or suggestions on how to further enhance the experience.
Thanks for reading, and happy coding (and donut hunting)!
Top comments (0)