This is a professional portfolio website for Musa Touray, a Data Engineer, Analytics Engineer, and Microsoft Certified Fabric and Power BI specialist. The site showcases data analytics projects, technical skills, and professional certifications.
Live URL: https://musatouray.github.io Repository: https://github.com/musatouray/musatouray.github.io Tech Stack: Jekyll, Minimal Mistakes theme, GitHub Pages
main).
├── _config.yml # Main configuration file (CRITICAL)
├── _data/
│ └── navigation.yml # Site navigation menu
├── _pages/ # Static pages
│ ├── contact.md
│ ├── privacy-policy.md
│ ├── categories.md
│ ├── tags.md
│ ├── portfolio.md # Projects listing page
│ ├── musings.md # Musings/blog listing page
│ └── resume.md
├── _posts/ # Blog posts (YYYY-MM-DD-title.md)
│ ├── 2021-12-04-real-time-live-tv-presidential-elections-report.md
│ ├── 2022-04-10-the-gambia-national-assembly-parliamentary-elections-live-dashbard.md
│ ├── 2024-03-24-senegal-presidential-elections-analysis.md
│ └── 2025-10-08-dynamic-column-headers-power-bi-matrix.md
├── _portfolio/ # Portfolio collection items
├── .github/
│ └── workflows/
│ └── jekyll.yml # GitHub Actions workflow (user-managed)
├── assets/
│ ├── css/
│ │ └── main.scss # All custom styling (do not split)
│ └── images/ # All images, badges, logos
├── index.md # Home page (custom hero + project/musings grids)
├── Gemfile # Ruby dependencies
└── README.md # Documentation
The home page (index.md) uses a fully custom layout — not the standard MM overlay hero or sidebar.
Front matter:
---
layout: single
title: "Musa Touray"
classes: wide home-page
author_profile: false
---
Page structure:
<section class="home-hero"> — full-bleed profile card
.home-hero__inner — centred column (name, avatar, bio, tagline, divider, location, social links).home-hero__nav — pill-style nav bar at the bottom border of the hero## Featured Projects — .projects-grid home-projects-grid (3-col, portfolio items)## Latest Musings — .projects-grid home-musings-grid (3-col, 3 most recent posts)Key CSS behaviour (.home-page body class):
.home-page .masthead { display: none !important }width: 100%; float: none; margin: 0; padding: 0overflow-x: clip (NOT hidden) to prevent horizontal scroll without creating scroll container.page__content > *:not(.home-hero) { padding-left: 2rem; padding-right: 2rem }.home-projects-grid, .home-musings-grid { grid-template-columns: repeat(3, 1fr) }assets/css/main.scss)$primary-color: #FF6634; // set before @import "minimal-mistakes"
$link-color: #FF6634;
:root {
--color-primary: #FF6634;
--color-nav-bg: #f0f4f8;
--color-text: #0F1729;
--color-muted: #6B7280;
--color-border: #e2e8f0;
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
}
h1–h6 locked to 18px via !important to prevent MM’s responsive root scaling--font-sans.visible-links a::before { display: none !important }font-size: 0) but logo image still shows.site-subtitle { display: none !important }atom_feed: hide: true in _config.ymlauthor.links and footer.links in _config.yml.project-card — used for portfolio page AND home page Featured Projects and Latest Musings.musing-card — used on the Musings listing page only.load-more-btn requires color: #fff !important (MM cascade overrides btn–primary color)DO NOT MODIFY these without testing:
remote_theme: Must stay mmistakes/minimal-mistakes@4.24.0permalink: Must stay /:title/ (SEO — existing URLs depend on this)url: Must be https://musatouray.github.ioCurrent important settings:
atom_feed:
hide: true # removes FEED link from footer
# Google Analytics
analytics:
provider: "google-gtag"
google:
tracking_id: "UA-113961478-1"
Social links: Only LinkedIn and GitHub are active. Twitter has been removed from author.links and footer.links.
gem "github-pages", group: :jekyll_plugins
# Do NOT add jekyll-include-cache separately — it's bundled inside github-pages
Current nav items: Home (/), Musings (/musings/), Projects (/projects/), Resume (/resume/)
| File | Teaser Image |
|---|---|
2021-12-04-real-time-live-tv-presidential-elections-report.md |
gambia-presidential-elections.png |
2022-04-10-...-parliamentary-elections-live-dashbard.md |
gambia-parliamentary-elections.jpg |
2024-03-24-senegal-presidential-elections-analysis.md |
senegal_elections_analysis.png |
2025-10-08-dynamic-column-headers-power-bi-matrix.md |
matrix_table_with_dynamic_column_headers.png |
Note: Election post images are intentionally .png (except parliamentary which is .jpg). Do not change extensions without checking.
_posts/ with format: YYYY-MM-DD-title.md---
layout: single
title: "Your Post Title"
excerpt: "Brief 1-2 sentence description for previews"
date: YYYY-MM-DD
permalink: /musings/your-post-slug/
header:
teaser: /assets/images/your-image.png
overlay_image: /assets/images/your-image.png
overlay_filter: 0.65
categories:
- Musings
- Power BI
tags:
- Power BI
- DAX
author_profile: true
share: true
related: true
---
Post content here...
<p>
<iframe style="width:100%;" height="383"
src="YOUR_POWERBI_EMBED_URL"
frameborder="0" allowFullScreen="true">
</iframe>
</p>
Create file in _portfolio/ directory:
---
layout: single
title: "Project Name"
excerpt: "Project description"
header:
teaser: /assets/images/project-image.png
overlay_image: /assets/images/project-image.png
overlay_filter: 0.5
tags:
- Power BI
- Azure
---
Full project description and details...
Configured in _config.yml under defaults → posts → sidebar. Current badges (all .png):
bundle install
bundle exec jekyll serve --watch
# Preview at http://localhost:4000
Branch strategy:
main — Production (live site, GitHub Pages serves from here)dev — Development/stagingStandard workflow:
# Work on dev
git checkout dev
# ... make changes ...
git add <files>
git commit -m "Description"
git push origin dev
# Merge to main (always use --no-ff)
git checkout main
git merge --no-ff dev -m "Merge dev: description of changes"
git push origin main
# Sync dev back to avoid "X commits behind" warning
git checkout dev
git merge --no-ff main -m "Sync dev with main merge commits"
git push origin dev
git checkout main
Force a rebuild without content changes:
git commit --allow-empty -m "Trigger GitHub Pages rebuild"
git push origin main
Important: Always use git merge --no-ff (not fast-forward) when merging dev → main.
Settings → Pages:
main / / (root)Do NOT use GitHub Actions deployment — the branch-based builder is simpler and works correctly with the github-pages gem. A jekyll.yml Actions workflow exists in .github/workflows/ but deployment is handled by the branch-based builder, not Actions.
Ctrl+Shift+RAlways use absolute paths in front matter and content:
# Correct:
teaser: /assets/images/photo.png
# Wrong:
teaser: assets/images/photo.png
Never reference GitHub user-attachments URLs (e.g. https://github.com/user-attachments/assets/...) — these are private/temporary and return 404 when embedded. Always save images to assets/images/ and commit them.
Never change permalink: /:title/ in _config.yml — search engines have indexed existing URLs.
Site uses a single author defined in _config.yml under author:. Do not add author: to individual post front matter — it causes issues. All posts automatically use the site-wide author.
This site does not use Bootstrap. Minimal Mistakes has its own CSS framework. Do not add Bootstrap classes.
/assets/images/file.pnggit status to check for untracked files)If you see “The github-pages gem can’t satisfy your Gemfile’s dependencies” — ensure jekyll-include-cache is not listed separately in the Gemfile; it’s bundled inside github-pages.
https://Last Updated: 2026-03-01 Theme Version: Minimal Mistakes 4.24.0 Jekyll Version: Via GitHub Pages gem