Project: My Blog

About the project

The project at hand was developed with the intention of learning Django, a popular web framework that offers a range of powerful tools for building robust web applications. Throughout the course of the project, I have sought to familiarize myself with Django's various features and capabilities, experimenting with different techniques and approaches to develop a deeper understanding of the framework.
As part of this process, I have also taken the opportunity to explore other tools and technologies that can enhance the overall development process. One such tool is Angular, a frontend development platform that offers a range of advanced signal features. While Django templates can be used for building websites, I have chosen to develop the frontend using Angular in order to gain more experience with these features and to gain a deeper understanding of how to use them effectively.
Of course, in addition to the frontend, the backend API is a crucial aspect of any web application. This is where Django truly shines, providing developers with a robust and reliable set of tools for building APIs that can handle a range of different use cases. In this project, I have focused exclusively on using Django for the backend API, leveraging its extensive capabilities to create an API that can efficiently and effectively communicate with the frontend.
Finally, the project also includes a range of different hosting and storage solutions to ensure that the website is reliable and efficient. AWS Elastic Beanstalk is used for server hosting, while AWS RDS is used for database hosting. Website hosting is handled through Netlify, a popular hosting platform, while cloud storage is provided by Cloudinary, a well-respected cloud storage provider.
Overall, this project has been an excellent learning opportunity, providing me with the chance to gain hands-on experience with a range of different technologies and tools. By exploring Django, Angular, and other tools, I have been able to develop a deeper understanding of web development and to hone my skills as a developer, ultimately helping me to become a more effective and well-rounded professional.

Technologies

iconAngulariconTailwind CSSiconDjangoiconCloudinaryiconVerceliconCoachroachDB

Project details

Main PageAll blogsBlog detailsProfile Page
View image
carouselImage

Frontend development

During my frontend development phase, I undertook the task of building a blog website using Django. Faced with two options, either using Django templates or exploring a different frontend framework, I decided to choose Angular for several reasons. Firstly, I wanted to leverage the opportunity to test the latest features and enhancements of Angular, specifically the new Angular signals. By working with Angular, I aimed to stay up-to-date with the framework's advancements and expand my skill set.
Additionally, opting for Angular aligned with my professional goals of continuous learning and improvement. By choosing a different frontend framework, I was able to challenge myself and enhance my expertise in frontend development. Angular provided a comprehensive and well-structured environment, allowing me to efficiently build and maintain the blog website. Furthermore, the decision to use Angular allowed me to practice, review, and update my knowledge in frontend development, ensuring that my skills remain relevant and adaptable in an ever-evolving industry.

Backend and API developement

In my backend development journey, I primarily focused on utilizing Django and Python to build robust and scalable web applications. Django, being a high-level Python web framework, provided me with a solid foundation for backend development. Its batteries-included approach allowed me to quickly set up a project, handle authentication and authorization, manage databases, and handle URL routing effortlessly.
Python, as the programming language of choice, played a crucial role in my backend development endeavors. Its simplicity, readability, and vast ecosystem of libraries and frameworks made it an ideal choice for building complex web applications. With Python, I was able to leverage its extensive collection of modules and packages to handle various tasks, such as data manipulation, file operations, and API integrations.
Using Django and Python together, I was able to implement key backend functionalities, including database management with Django ORM, handling user authentication and permissions, creating RESTful APIs, and deploying the application to production servers. The versatility and ease of use offered by Django and Python allowed me to focus on writing clean and maintainable code while ensuring the security and performance of the web applications I developed.

Database and storage development

During the development phase, I opted to use SQLite3 as the database for its simplicity and convenience. SQLite3 is a lightweight and file-based database that seamlessly integrates with Django. It allowed me to quickly set up and prototype the application without the need for complex database configuration.
However, when transitioning to the production environment, I chose to use CockroachDB as the database solution. CockroachDB offers several advantages, including its serverless nature and a free tier option. Its serverless architecture allowed me to scale the application effortlessly without worrying about managing the infrastructure. Additionally, the availability of a free tier helped minimize costs while ensuring reliability and performance.
For storage purposes, I integrated Cloudinary into my Django project. Cloudinary is a cloud-based media management platform that simplifies the process of storing, manipulating, and delivering images and other media assets. Its seamless integration with Django provided me with a streamlined workflow for handling image uploads, transformations, and optimizations. Cloudinary's extensive set of features, including automatic image resizing and responsive delivery, greatly enhanced the user experience of the blog website while reducing the burden of managing media assets on the server.

Hosting options

During the hosting phase, I explored multiple deployment options for both the backend and frontend components of my blog website.
For the backend, I experimented with three deployment options. The first option involved utilizing AWS Elastic Beanstalk to host an EC2 instance that ran the project. I also utilized AWS Route 53 to efficiently route incoming requests to this instance. This option provided me with flexibility and scalability, as well as seamless integration with other AWS services. However, it required additional configuration and maintenance efforts.
The second option I explored was using Heroku to host the backend. Heroku provided a user-friendly deployment process and ease of use, but I found it to be less cost-efficient for my specific needs. Heroku's pricing model, based on dyno hours and add-ons, could become expensive, especially for applications with higher resource demands or increased traffic.
Ultimately, I decided to host the backend on Vercel's static service, which provided the most cost-effective solution. By leveraging Vercel, I could take advantage of their serverless architecture and pay only for the resources utilized during deployment. This option proved to be a cost-efficient and scalable solution for hosting the backend.
On the frontend side, I initially hosted the website on Netlify. Netlify offered convenient deployment features and integration with popular frontend frameworks. However, later on, I also decided to host the frontend on Vercel to take advantage of its easier setup for managing cookie sessions. This decision streamlined the implementation of session management and improved the overall user experience.
In summary, I explored multiple hosting options for both the backend and frontend of the blog website. For the backend, I found that hosting on Vercel's static service provided a cost-effective solution, while for the frontend, I initially used Netlify and later added Vercel for improved session management. These choices allowed me to optimize the hosting setup for both components of the website.