DEV Community

Cover image for How I Built My Technical Writing Portfolio Website Using GitHub Pages
SandraMeshack
SandraMeshack

Posted on

1

How I Built My Technical Writing Portfolio Website Using GitHub Pages

How I Built My Technical Writing Portfolio Website Using GitHub Pages

As a technical writer and software engineer, I wanted a portfolio site that showcased my skills, articles, and publications in a way that felt modern and personal. I built it with HTML + CSS, hosted it on GitHub Pages, and added extra features like animations, Google Search Console, Analytics, and a sitemap.

Here’s exactly how I built it, step-by-step — no frameworks, no CMS, just code and care.


🛠️ Tools I Used

  • HTML + CSS — fully custom, no frameworks
  • GitHub Pages — free, fast hosting
  • Google Search Console — to help get discovered on Google
  • Google Analytics (GA4) — to track visitors
  • VS Code — for writing code
  • A simple animated avatar PNG — for personality ✨

🧱 Step 1: Create a GitHub Pages Repo

  1. Go to https://github.com
  2. Create a new repo named:yourusername.github.io
    Make sure it’s public.

  3. You can either:

  4. Clone it locally (git clone)

  5. Or drag-and-drop files directly into GitHub’s interface


💻 Step 2: Create index.html

This is the homepage. Here's the full code I used (copy it to a file called index.html):

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Your Name | Technical Writer</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">

<!-- Google Analytics (replace with your ID) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
 window.dataLayer = window.dataLayer || [];
 function gtag(){dataLayer.push(arguments);}
 gtag('js', new Date());
 gtag('config', 'G-XXXXXXXXXX');
</script>

<!-- Google Search Console verification -->
<meta name="google-site-verification" content="your-verification-code" />

<!-- Smooth scroll, link animation, fade effect -->
<style>
 html {
   scroll-behavior: smooth;
 }
 @keyframes fadeSlideUp {
   from { opacity: 0; transform: translateY(20px); }
   to { opacity: 1; transform: translateY(0); }
 }
 #work-section {
   animation: fadeSlideUp 1.5s ease-in-out both;
 }
 h2 {
   position: relative;
   animation: slideIn 0.9s ease forwards;
   opacity: 0;
 }
 @keyframes slideIn {
   from { opacity: 0; transform: translateX(-20px); }
   to { opacity: 1; transform: translateX(0); }
 }
 a {
   color: #4dd0e1;
   text-decoration: none;
   position: relative;
   transition: color 0.3s ease;
 }
 a:hover {
   color: #ffffff;
 }
 a::after {
   content: "";
   position: absolute;
   width: 0%;
   height: 2px;
   left: 0;
   bottom: -4px;
   background: linear-gradient(to right, #4dd0e1, #f97316);
   transition: width 0.4s ease;
 }
 a:hover::after {
   width: 100%;
 }
 .emoji-bg {
   position: absolute;
   top: 120px;
   right: 30px;
   font-size: 3rem;
   opacity: 0.05;
   z-index: 0;
   pointer-events: none;
   animation: float 6s ease-in-out infinite;
 }
 @keyframes float {
   0% { transform: translateY(0px); }
   50% { transform: translateY(-15px); }
   100% { transform: translateY(0px); }
 }
</style>
</head>

<body>
<div class="emoji-bg">🧠</div>

<nav>
 <div class="logo-container">
   <img src="avatar.png" alt="Logo" style="width: 60px; height: 60px; border-radius: 50%;">
   <strong>Your Name</strong>
 </div>
 <div>
   <a href="index.html">Home</a>
   <a href="contact.html">Contact</a>
   <a href="https://github.com/yourusername" target="_blank">GitHub</a>
 </div>
</nav>

<main>
 <h1>Hello, I'm [Your Name]</h1>
 <p>
   I’m a software engineer and technical writer with a focus on backend architecture and developer experience.
   I build scalable systems and write structured documentation to make complex tools easier to use.
 </p>

 <h2>What I Do</h2>
 <ul>
   <li><strong>Technical Writing:</strong> API docs, onboarding guides, tutorials</li>
   <li><strong>Software Engineering:</strong> Python, JavaScript, and backend systems</li>
   <li><strong>Dev Tools:</strong> Markdown, LaTeX, Confluence, GitHub Actions</li>
 </ul>

 <h2>Featured Articles</h2>
 <ul>
   <li><a href="https://dev.to/yourusername/article-title">How I Built This Portfolio</a></li>
   <li><a href="https://dev.to/yourusername/api-doc-template">API Documentation Template</a></li>
 </ul>

 <h2>Publication</h2>
 <p>
   <a href="https://example.com/publication-link">The Influence of Micro-expressions on Deception Detection</a>
 </p>

 <h2>Why I Do This</h2>
 <p>
   I’m driven by a passion for making technology accessible. My goal is to bridge the gap between complex systems and the people who use them — whether they're developers or stakeholders.
 </p>

 <section id="work-section">
   <h2>Let's Work Together</h2>
   <p>
     I’m available for freelance and contract-based technical writing. Email me at  
     <a href="mailto:youremail@example.com">youremail@example.com</a> or check out  
     <a href="https://github.com/yourusername" target="_blank">my GitHub</a>.
   </p>
 </section>
</main>

<footer>&copy; 2025 Your Name</footer>
</body>
</html>

Enter fullscreen mode Exit fullscreen mode

🎨 Step 3: Add Styling in style.css

copy this to a file called style.css

body {
  background-color: #121212;
  color: #f5f5f5;
  font-family: 'Inter', sans-serif;
  margin: 0;
  padding: 0;
}

nav {
  background: linear-gradient(to right, #6a11cb, #2575fc);
  padding: 1rem 2rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
Enter fullscreen mode Exit fullscreen mode

📬 Step 4: Add a Contact Page

Create a contact.html file and mirror the design — just include your email address and links.

🌍 Step 5: Add Your Sitemap

Create a file called sitemap.xml:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://yourusername.github.io/</loc>
  </url>
  <url>
    <loc>https://yourusername.github.io/contact.html</loc>
  </url>
</urlset>
Enter fullscreen mode Exit fullscreen mode

Upload it to your GitHub repo root.

📈 Step 6: Submit to Google

  • Go to Google Search Console

  • Add your site as a URL prefix

  • Choose HTML tag → Paste into

  • Go to “Sitemaps” → Add sitemap.xml

  • Done!!!.

Let me know if you want to build something similar! I’d love to help others make docs look as great as the code they explain.

For Clarity, you can go to my GitHub repo https://github.com/SandraMeshack/sandrameshack.github.io

Tiugo image

Modular, Fast, and Built for Developers

CKEditor 5 gives you full control over your editing experience. A modular architecture means you get high performance, fewer re-renders and a setup that scales with your needs.

Start now

Top comments (0)

Tiger Data image

🐯 🚀 Timescale is now TigerData: Building the Modern PostgreSQL for the Analytical and Agentic Era

We’ve quietly evolved from a time-series database into the modern PostgreSQL for today’s and tomorrow’s computing, built for performance, scale, and the agentic future.

So we’re changing our name: from Timescale to TigerData. Not to change who we are, but to reflect who we’ve become. TigerData is bold, fast, and built to power the next era of software.

Read more

👋 Kindness is contagious

Explore this compelling article, highly praised by the collaborative DEV Community. All developers, whether just starting out or already experienced, are invited to share insights and grow our collective expertise.

A quick “thank you” can lift someone’s spirits—drop your kudos in the comments!

On DEV, sharing experiences sparks innovation and strengthens our connections. If this post resonated with you, a brief note of appreciation goes a long way.

Get Started