Skip to content

Latest commit

Β 

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Emmanuel Oguntoke β€” Full-Stack Web Developer Portfolio πŸš€

A modern full-stack developer portfolio built to showcase my approach to designing and building fast, responsive, conversion-focused websites and web applications.

The portfolio combines a polished React frontend with a custom backend API, database integration, contact automation, bot protection, and production deployment configuration.

Rather than functioning as a simple collection of projects, the portfolio is designed to demonstrate how I approach real-world web development β€” from user experience and responsive interfaces to backend architecture, data handling, security, and deployment.


🎯 What This Portfolio Represents

I build websites and web applications with a focus on three things:

  • Conversion β€” turning visitors into customers, leads, or users
  • Performance β€” building fast and responsive experiences
  • Scalability β€” creating foundations that can grow with the business

My goal is to combine clean user interfaces with reliable engineering so that a website is not only visually appealing, but also useful to the business behind it.


✨ Key Features

Modern Frontend Experience

  • Responsive React interface
  • Vite-powered development and production builds
  • Tailwind CSS styling
  • Reusable component architecture
  • Responsive layouts across desktop, tablet, and mobile
  • Optimized image formats including WebP and AVIF
  • Clear calls-to-action throughout the user journey

Project Showcase

The portfolio presents selected projects with an emphasis on:

  • The problem being solved
  • The solution implemented
  • Technologies used
  • Real-world functionality
  • Business and user value

Full-Stack Contact System

The contact section is connected to a custom backend API rather than relying solely on a frontend form.

The system handles:

  • Contact form submissions
  • Input validation
  • Email notifications
  • Inquiry processing
  • Database-backed data handling

Security & Bot Protection

The contact API includes multiple layers of protection:

  • Google reCAPTCHA verification
  • Email validation
  • Rate limiting
  • Server-side request validation
  • Protected backend endpoints

Database Integration

The backend uses Prisma ORM with PostgreSQL for structured and reliable data storage.

The database layer provides a foundation for storing and managing portfolio contact inquiries.

Full-Stack Architecture

The project combines a React frontend with a Node.js/Express backend and PostgreSQL database.

The architecture is organized so that frontend presentation, backend logic, and data management remain clearly separated.

Deployment

The application is configured for deployment through Vercel using a unified project structure.


πŸ› οΈ Tech Stack

Frontend

  • React
  • Vite
  • JavaScript (ES6+)
  • Tailwind CSS

Backend

  • Node.js
  • Express.js

Database

  • PostgreSQL
  • Prisma ORM

Security & Validation

  • Google reCAPTCHA
  • Express Rate Limit
  • Server-side validation

Email

  • Nodemailer

Deployment

  • Vercel

πŸ—οΈ Architecture

The portfolio follows a full-stack architecture with separate responsibilities for the frontend, backend, and database.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            React Frontend           β”‚
β”‚                                     β”‚
β”‚  Hero β€’ Services β€’ Projects         β”‚
β”‚  Process β€’ Contact β€’ CTA            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚
                  β”‚ REST API
                  β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Node.js / Express          β”‚
β”‚                                     β”‚
β”‚  Contact API                        β”‚
β”‚  Validation                         β”‚
β”‚  Rate Limiting                      β”‚
β”‚  reCAPTCHA Verification             β”‚
β”‚  Email Notifications                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚
                  β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            PostgreSQL               β”‚
β”‚                                     β”‚
β”‚       Contact / Inquiry Data        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‚ Project Structure

Emmanuel-portfolio/
β”‚
β”œβ”€β”€ api/
β”‚   β”œβ”€β”€ prisma/
β”‚   β”‚   β”œβ”€β”€ migrations/
β”‚   β”‚   └── schema.prisma
β”‚   β”‚
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ config/
β”‚   β”‚   β”‚   └── mail.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ controllers/
β”‚   β”‚   β”‚   └── ContactController.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ middleware/
β”‚   β”‚   β”‚   β”œβ”€β”€ rateLimiter.js
β”‚   β”‚   β”‚   └── validateEmail.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ routes/
β”‚   β”‚   β”‚   └── contactRoutes.js
β”‚   β”‚   β”‚
β”‚   β”‚   └── utils/
β”‚   β”‚       └── verifyRecaptcha.js
β”‚   β”‚
β”‚   β”œβ”€β”€ index.js
β”‚   └── prisma.config.ts
β”‚
β”œβ”€β”€ my-portfolio/
β”‚   β”œβ”€β”€ public/
β”‚   β”‚   β”œβ”€β”€ robots.txt
β”‚   β”‚   └── sitemap.xml
β”‚   β”‚
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ pages/
β”‚   β”‚   β”‚   └── Home.jsx
β”‚   β”‚   └── index.css
β”‚   β”‚
β”‚   β”œβ”€β”€ tailwind.config.js
β”‚   └── vite.config.js
β”‚
β”œβ”€β”€ vercel.json
└── README.md

πŸ’‘ Development Approach

The portfolio was built around the same principles I apply when developing client projects.

1. Start With the User

The interface is structured around what visitors need to understand quickly:

What I do What I can build What I have built How I approach projects How to get in touch

2. Build for Conversion

Important actions are intentionally supported with clear calls-to-action and straightforward navigation.

The goal is not simply to make the website look good, but to guide visitors toward taking action.

3. Keep the Interface Responsive

The experience is designed to remain usable across different screen sizes and devices.

4. Separate Frontend and Backend Responsibilities

The frontend focuses on presentation and user interaction while the backend handles server-side processing, validation, email delivery, and database operations.

5. Add Security at the API Layer

Client-side validation alone is not treated as sufficient.

Requests reaching the backend are independently validated and protected against common abuse patterns such as automated spam and excessive requests.

⚑ Local Development

Prerequisites

Make sure you have installed:

-Node.js -npm -Git -PostgreSQL

1. Clone the Repository

git clone <your-github-repository-url>
cd Emmanuel-portfolio

2. Install Backend Dependencies

cd api npm install

### 3. Install Frontend Dependencies
```bash
cd ../my-portfolio
npm install

#πŸ” Environment Variables

Create a .env file inside the api/ directory.

Example:

DATABASE_URL="postgresql://user:password@localhost:5432/portfolio_db"
RECAPTCHA_SECRET_KEY="your-recaptcha-secret-key"

SMTP_HOST="smtp.gmail.com"
SMTP_PORT=587
SMTP_USER="your-email@gmail.com"
SMTP_PASS="your-app-password"

Never commit .env files or private credentials to GitHub.

πŸ—„οΈ Database Setup

From the backend directory:

cd api
npx prisma migrate dev

This applies the Prisma database migrations to your local PostgreSQL database..

▢️ Run the Application

Backend

From the api directory:

npm run dev

Frontend

Open another terminal:

cd my-portfolio
npm run dev

The frontend development server will then be available through the Vite development URL.

πŸš€ Production Build

To create a production build of the frontend:

cd my-portfolio
npm run build

The generated build can then be deployed through the configured hosting platform.

πŸ“ˆ What This Project Demonstrates

This portfolio demonstrates practical experience with:

  • React application development
  • Responsive UI development
  • Tailwind CSS
  • REST API integration
  • Node.js and Express
  • PostgreSQL
  • Prisma ORM
  • Form handling
  • Server-side validation
  • Email automation
  • reCAPTCHA integration
  • Rate limiting
  • API architecture
  • Database-backed applications
  • Vite production builds
  • Vercel deployment

More importantly, it demonstrates the ability to connect these technologies into a complete user-facing product rather than using them in isolation.

πŸ”— Featured Projects

The portfolio showcases projects covering different types of real-world web solutions, including:

  • Digital purchasing and manual distribution systems
  • Booking and service-based platforms
  • Business websites
  • Landing pages
  • Web applications with dashboards and backend functionality

Each project is selected to demonstrate a different aspect of my development capabilities.

πŸ‘¨πŸ½β€πŸ’» About Me

I'm Emmanuel Oguntoke, a Full-Stack Web Developer focused on building practical web solutions that help businesses attract customers, improve their online presence, and streamline their operations.

My current stack includes:

JavaScript β€’ React β€’ Tailwind CSS β€’ Node.js β€’ Express β€’ PostgreSQL

I enjoy taking an idea from concept to a functional product β€” designing the interface, building the frontend, connecting the backend, integrating third-party services, and preparing the application for deployment.

🀝 Let's Work Together

I'm open to:

  • Freelance web development projects
  • Business websites
  • High-converting landing pages
  • Booking and appointment systems
  • Custom web applications
  • Admin dashboards
  • Full-stack development
  • Collaboration and development opportunities

If you have a project that needs to move from an idea to a working web solution, feel free to get in touch.

🌐 Connect With Me

About

Full-stack developer portfolio showcasing conversion-focused websites and scalable web applications built with React, Node.js, and PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages