Skip to main content

Command Palette

Search for a command to run...

From Zero to Deployment: How I Created a Scalable Portfolio Website on AWS with Hostinger Domain

Updated
8 min read
From Zero to Deployment: How I Created a Scalable Portfolio Website on AWS with Hostinger Domain

In today’s tech-driven world, having a standout portfolio website isn't just a bonus—it’s essential. With the rise of AI tools and competition in every field, I realized it was time for me to build something that would reflect my skills, personality, and projects. So I started my journey, and now, I have my very own portfolio website—hosted with a custom domain and powered by modern web technologies.

In this blog, I’ll guide you step-by-step on:

  • What tools and technologies I used

  • How I deployed it on AWS

  • Folder structure & configuration

  • How YOU can clone or replicate it with zero prior experience


🌐 My Portfolio:

I purchased the domain from Hostinger and deployed the project using AWS services. Here's everything I used and how I used it.

Link : https://cloudkinshuk.in


An Overview :

If you're not very familiar with programming and don't want to create a separate project from scratch using React and TypeScript, you can directly jump to the “Cloning the Project” section using the navigation menu. This will simplify the setup process and allow you to easily customize the UI, code, and data to fit your needs.


🧠 Tech Stack & Tools

⚙️ Development Environment

  • IDE: VS Code

  • Package Manager: npm (primary), bun/yarn/pnpm (optional)

📦 Core Technologies

ToolVersion
React19.0.0
TypeScript5.7.2
React Router DOM7.3.0
Tailwind CSS4.0.14
Framer Motion12.5.0
React Icons5.5.0
Lucide React0.482.0

🎨 Fonts

  • Poppins from Google Fonts

☁️ Deployment & Cloud Setup

🧭 Cloud & Hosting

  • Frontend Hosting: AWS Amplify (Serverless, scalable, easy CI/CD)

  • DNS & SSL: AWS Route 53

  • Domain Provider: Hostinger (.in domain for ₹1000 / 2 years)

  • Version Control: Git & GitHub

🔗 GitHub Repo: kinshukjainn/kinshukkportfolio


Flow Diagram of Architecture :

Beginner-Friendly Alternatives for Deployment

If you’re new to cloud deployments, these platforms are perfect starting points:

  • Vercel

  • Netlify

  • Railway

  • Heroku

For Intermediate/Advanced Users:

  • Google Cloud Platform (GCP) — great if you like Google’s ecosystem

  • Microsoft Azure — ideal for Microsoft fans


Building Process (From Scratch)

💡 Tip: Only use one package manager — npm or bun or yarn or pnpm. Using more than one can cause conflicts during deployment.

Step 1: Create Your React App

npm create vite@latest my-project-name

Using bun:

run this command in your terminal before running bun create vite in your project directory in vscode :

bun install

bun create vite

Using yarn: ( if you know yarn installation well then only use it )

yarn create vite my-project-name

✅ Step 2: Install Project Dependencies

Navigate to your project directory:

cd kinshukkportfolio # your project directory can be different

Then install packages:

npm install

If using yarn or bun:

yarn install
# OR
bun install

📁 Folder Structure

Here’s what my folder structure looks like:

REACTPORTFOLIO/
├── kinshukportfolio/
├── node_modules/
├── public/
├── src/
│   ├── assets/
│   ├── components/
│   ├── socialmedia/
│   ├── App.tsx
│   ├── index.css
│   ├── main.tsx
│   └── vite-env.d.ts
├── .gitignore
├── package.json
├── tailwind.config.js
├── vite.config.ts
├── tsconfig.json
└── README.md

🎨 Tailwind CSS Setup

Install Tailwind CSS:

npm install tailwindcss @tailwindcss/vite

Configure vite.config.ts:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'

export default defineConfig({
  plugins: [react(), tailwindcss()],
})

Add Tailwind Imports in index.css:

@import "tailwindcss";

🔌 Other Dependencies Setup

React Icons

npm install react-icons

Framer Motion

npm install framer-motion

Lucide React (Icon Library)

npm install lucide-react

▶️ Running the App Locally

After everything is set up, run:

npm run dev

You should see your site running at localhost:5173 (or similar).


📜 My package.json (For Reference)

{
  "name": "portweb",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc -b && vite build",
    "lint": "eslint .",
    "preview": "vite preview"
  },
  "dependencies": {
    "@headlessui/react": "^2.2.0",
    "@mui/icons-material": "^6.4.7",
    "@mui/material": "^6.4.7",
    "@tailwindcss/vite": "^4.0.14",
    "framer-motion": "^12.5.0",
    "lucide-react": "^0.482.0",
    "react": "^19.0.0",
    "react-dom": "^19.0.0",
    "react-icons": "^5.5.0",
    "react-router-dom": "^7.3.0",
    "react-syntax-highlighter": "^15.6.1",
    "tailwindcss": "^4.0.14",
    "uuid": "^11.1.0"
  },
  "devDependencies": {
    "@eslint/js": "^9.21.0",
    "@types/react": "^19.0.12",
    "@types/react-dom": "^19.0.4",
    "@vitejs/plugin-react": "^4.3.4",
    "eslint": "^9.21.0",
    "eslint-plugin-react-hooks": "^5.1.0",
    "eslint-plugin-react-refresh": "^0.4.19",
    "globals": "^15.15.0",
    "typescript": "~5.7.2",
    "typescript-eslint": "^8.24.1",
    "vite": "^6.2.0"
  }
}

🧪 Cloning the Project (For Beginners)

Want to replicate this exact setup? Here’s how:

  1. Create a GitHub account (if you don’t already have one)

  2. Visit my repo: github.com/kinshukjainn/kinshukkportfolio

  3. Click "Fork"

  4. Clone your forked version:

     git clone https://github.com/yourusername/reponame.git
     cd kinshukkportfolio
     npm install
     npm run dev
    

Here is a video of how to clone a forked repo :

Customize the content, styles, and animations to make it your own!

If you have proceed till here you are very near to deploy your own portfolio website on the cloud and also would be able to host it :

Alright Kinshuk! Here's a step-by-step beginner-friendly guide to help you:

Buy a Domain on Hostinger & Connect It to AWS (Amplify + Route 53)


Part 1: Buying a Domain from Hostinger

  1. Go to Hostinger

    • Create an account if you don’t have one.

    • Login to your dashboard.

  2. Buy a Domain

    • Click on "Domains" in the top navbar.

    • Search for your desired domain (e.g., cloudkinshuk.dev).

    • Click Buy Now and proceed with the payment.

  3. Access Domain Settings

    • After purchase, go to “Domains” → “Manage”.

    • You’ll see options like DNS, Nameservers, WHOIS, etc.


Part 2: Set Up an AWS Account

  1. Go to AWS Console

    • Click "Create an AWS account".

    • Fill in your name, email, and password.

    • Add billing info (₹2 might be deducted for card verification).

  2. Sign In to AWS Console

    • Go to the AWS Console, sign in as a root user (with your email).

Part 3: Create Route 53 Hosted Zone

  1. Search for “Route 53” in the AWS Console.

  2. On the left panel, go to "Hosted Zones"Create Hosted Zone

    • Domain Name: your domain (e.g., cloudkinshuk.dev)

    • Type: Public Hosted Zone

    • Click Create

  3. Note Down the NS Records (Nameservers)

    • AWS will generate 4 NS records (like ns-123.awsdns-xyz.com).

Part 4: Update Nameservers in Hostinger

  1. Go back to Hostinger > Domains > Manage

  2. Scroll to "Nameservers"

  3. Choose "Use custom nameservers"

Paste the 4 NS records you got from Route 53

ns-1962.awsdns-53.co.uk  
ns-897.awsdns-47.net  
ns-1136.awsdns-14.org  
ns-200.awsdns-25.com

Note: These are just examples and won’t work for your domain. You must use the exact NS records that AWS gives you after creating a hosted zone in Route 53. Always copy-paste from your actual AWS dashboard.

  1. Save the changes
    ⏳ It might take 5 minutes to a few hours to reflect.

Part 5: Deploy Your Project with AWS Amplify

  1. Go to AWS Console → Search for “Amplify”

  2. Click on “Get Started” under Host a web app

  3. Connect your GitHub Repository

    • Authorize GitHub → Select your repo (e.g., portfolio or blog)
  4. Choose branch (e.g., main)

  5. Click Next, then Deploy

🔄 Amplify will now:

  • Build

  • Deploy

  • Host your site at a temporary domain like: main.abcd123.amplifyapp.com


Part 6: Connect Custom Domain (from Hostinger)

  1. In Amplify → Click on your deployed app → Go to “Domain Management”

  2. Click “Add Domain”

    • Enter your domain name (e.g., cloudkinshuk.dev)
  3. Choose subdomains:

    • www.cloudkinshuk.dev

    • cloudkinshuk.dev

  4. Click Save
    Amplify will show you CNAME and A records to be added in Route 53.


Part 7: Add Domain Records in Route 53 →

  1. Go back to Route 53 → Hosted Zones → Select your domain

  2. Click “Create Record”

    • Choose type A – IPv4 address

    • Select Alias = Yes → Choose Alias Target = Amplify target (will be shown)

    • Click Create

  3. For www:

    • Create a CNAME record

    • Name = www

    • Value = Amplify's www.cloudkinshuk.dev target


Part 8: Enable Redirection from www → non-www

  1. In Amplify > Domain Management

  2. Click on "Edit" for domain settings

  3. Check the box for Redirect www to root domain (www.cloudkinshuk.devcloudkinshuk.dev)


Done!

Now visiting your domain like https://cloudkinshuk.dev will open your Amplify-hosted project.


Pro Tips →

  • DNS changes may take 5–60 minutes to propagate globally.

  • Make sure your project has a proper build script in package.json (like next build or vite build).

  • You can also enable HTTPS (SSL) from Amplify automatically.


Final Thoughts →

Creating this portfolio site helped me improve my React and cloud skills while giving me a central place to showcase my projects and resume. Whether you're a beginner or an experienced dev, building your own portfolio is the best investment in your career.

If you liked this guide or found it helpful, give the repo a ⭐ on GitHub and feel free to connect!


Connect With Me :

My social Links : →

More from this blog

K

kinshuk Jain Blogs || Cloud , Web development

13 posts

My thoughts, opinion, take, and some guides on cloud, building scalable infrastructure, deploying apps, web development, and many other technical and non-technical fields