Portfolio
A portfolio built as a backend system, not just a website.
Github Repository
This portfolio serves two purposes. First, it showcases my work, experience, projects, and technical interests. Second, and more importantly, it serves as an active, ever-evolving demonstration of my backend development skills. Rather than building a standard static portfolio site, I decided to approach this project much like many frontend developers approach their own portfolios: a direct representation of my technical abilities. To accomplish this, I designed this project around a PostgreSQL database, a FastAPI-powered REST API, and a collection of production-oriented development tools. The site itself functions as a backend project, allowing me to demonstrate concepts such as API development, relational database design, testing, migrations, and maintainability. I plan to continually develop this website, adding new backend technologies as I learn them, making it an evolving representation of my growth as a software developer.
Architecture Highlights
- Designed around a relational PostgreSQL database rather than static content files
- Built a REST API using FastAPI to separate application logic from presentation
- Implemented database versioning through Alembic migrations
- Implemented automated testing with Pytest to improve reliability
- Integrated structured logging, SQL admin panel, and other administrative tooling to support maintainability
Key Features
- Dynamic resume page content, served by PostgreSQL database
- Administrative interface for database testing
- Automated testing suite for core backend functionality
- Responsive frontend built with JavaScript (vanilla) and Pico (lightweight css framework)
Tech Stack
Backend
- Python
- FastAPI
- PostgreSQL
- SQLAlchemy
- Alembic
- Pytest
Frontend
- HTML
- Javascript (vanilla)
- Pico (lightweight CSS framework)
Tooling
- Loguru
- Poetry
- SQLAdmin
- Bruno
Technical Challenges & Lessons Learned
- Balancing development speed, learning, and production-oriented development
- This project required me to learn several new technologies (including SQLAlchemy, Alembic, logging, API testing tools, and database design concepts), all while simultaneously building a functional application. Maintaining development speed while still understanding what I was developing, quickly became one of the project's largest challenges. I addressed this in two key ways. First, I intentionally selected mature, production-grade technologies with straightforward developer experiences. Second, I leveraged AI as both a learning and productivity tool. Rather than blindly generating code, I used the AI to generate boilerplate code, analyzed the code line-by-line, and then modified and the code to fit the project's requirements. This approach allowed me to maintain development momentum while continuing to build a strong foundational understanding of the technologies powering the application.