Github Repo: https://github.com/JREricson/jrericson_v2_rebuild
Live website: https://www.jrericson.com/
This site is a portfolio for code samples and projects I’ve worked on. The technology choices are explained in the sections below.

Primary goal — Create a functional portfolio following good coding practices.
Secondary goal — Gain more experience with the technology used (Django, Docker, Linode, PostgreSQL, etc.).
Python, Django, Markdown, Nginx, Docker, Docker Compose, Linode, Bash, Bootstrap, Linux, SSH, Rsync.

HTTPS through Let's Encrypt certificate authority

S3 storage for database backups

Docker container-based deployment and development

Email-based contact form re-routing to my inbox(deprecated)
Most of this code was written before I introduced agentic AI into my coding practices. I have used AI in later versions, primarily for styling.
Projects are stored with a variety of attributes, such as ranking (used for ordering), a GitHub link, a sample image, and a description of the project.

Project descriptions are written in Markdown.
- Converted to HTML using the markdownify library
- Convenience
- Easy to write
- Easy to transfer info from READMEs in GitHub repos
- New projects are added through the admin console

Projects are displayed and paginated through a Django ListView. Project descriptions are displayed using a Django DetailView.

HTTPS: Using Let's Encrypt certificate authority.
Other standard practices: Including sanitization, .env files, and .gitignore files.
Done with a manual checkpointing method
django-dbbackup, which provides a wrapper over Postgres's pg_dump.Design decision
Docker has been chosen to run the site for the following reasons.
Separate Docker/Docker Compose files are provided for the production and local development environments.
Nginx is used to serve static content and act as a reverse proxy for the site.
send_mail() send emails to my primary address. However, Google is discontinuing password-based logins.I use branching similar to the Git Flow method. There is a production branch and a development branch for features that get merged into it.
An aliases.sh Bash script is loaded to create shortcuts for common project-specific commands that I do not want to include in my personal .bash_aliases file.
- I have moved to Makefiles in more recent projects
The structure and design choices for the site were heavily based on the following sources. Much of the code from those tutorials was used as boilerplate.