Profile picture

Portfolio Website

A professional Website Created Using Flask, Jinja and SQLAlchemy

Posted on January 23, 2026

project image

Overview

This is a fully interactive portfolio website built with Flask to showcase my skills, projects, and professional profile. It is designed for recruiters and collaborators. It’s mobile-friendly, dynamic, and fully deployed live on Render and designed to grow with my career. I started by making a rough sketch of how I wanted the homepage to be, outlined the required functionalities and features, created action plans, and then started building. (This planning phase helped guide the overall structure, routing, and database design).

Why a Professional Portfolio (Motivation)

I wanted a space (a professional space) and not a static GitHub READMEs. That is a place where I could host project descriptions, a resume, a contact form, and future posts that recruiters and collaborators could interact with.

Tools

  • Flask for routing and backend logic

  • Jinja for dynamic HTML rendering

  • WTForms for form handling & validation

  • SQLAlchemy (ORM) data persistence

  • Bootstrap + custom CSS for layout & custom/read-made styling

  • Render for production hosting

  • Supabase (PostgreSQL) for hosting of production database

This stack allowed modular, maintainable, and dynamic content flows from the database to the front-end.

Key Features and Highlights

  • Dynamic routing & templates - responsive Homepage, About, Projects, Resume, Post, and Contact pages, which are visible to the public.

  • Admin features and authentication - register, login and create post pages which are restricted to admin access.  

  • Project database - store posts and renders dynamically from the database. It contains 2 tables, one to store the admin details and the other to store the project posts.

  • Responsive design - views that adjust across phones & desktop screens.

  • Resume integration — embedded Google Docs with a download option.

  • Custom UI – started from a Bootstrap template but rewrote approximately 80% to suit my design needs.

Challenges & Learnings

  • Designing a clean UI and consistent layout across pages took lots of experimentation and iteration.

  • Embedding my resume for both view & download was a bit tough but rewarding.

  • Creating responsive designs for multiple screen sizes was very challenging.

  • Implementing admin authentication, access control and database flows.

  • Writing unique CSS while keeping styles consistent across pages stretched my design skills.

Easiest Part

  • Building reusable header and footer components with Jinja.

  • Creating and validating the contact form with WTForms.

  • Hashing the admin password for security purposes.

  • Using environment variables to keep sensitive data for improved security.

  • Successful deployment on Render (free tier).

  • Route creation and security validation for each route

Outcome

This portfolio is now my main developer platform, fully live with user interaction, feedback, and admin control.

Website Link & Code

🔗 Website Link:  https://portfolio-website-i0zw.onrender.com

🔗 Code on Github: https://github.com/John-Temitope/Portfolio-Website

 

Below are screenshots for some of the pages:

1. About me page 

About Me Page

 

 

 

 

 

 

 

 

 

 

 

 

2. Contact Form Page

Contact Form Page

 

3. Embedded resume page 

Embedded Resume Page

 

4. Mobile view

Mobile View