https://github.com/gah-code/gilbertoharosite
This project is a modern web application that demonstrates my front-end design patterns, passion for creative solutions, and a variety of projects, including blogs with code snippets, research notes from my learning journey, and more.
https://github.com/gah-code/gilbertoharosite
content-modelling contentful css gatsby gatsby-theme graphql mdx pwa seo-friendly typescript ui
Last synced: 2 months ago
JSON representation
This project is a modern web application that demonstrates my front-end design patterns, passion for creative solutions, and a variety of projects, including blogs with code snippets, research notes from my learning journey, and more.
- Host: GitHub
- URL: https://github.com/gah-code/gilbertoharosite
- Owner: gah-code
- License: 0bsd
- Created: 2024-11-27T11:36:33.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-11-02T04:53:07.000Z (7 months ago)
- Last Synced: 2025-11-02T06:15:22.349Z (7 months ago)
- Topics: content-modelling, contentful, css, gatsby, gatsby-theme, graphql, mdx, pwa, seo-friendly, typescript, ui
- Language: JavaScript
- Homepage: https://gilbertaharo.com
- Size: 9.37 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# My 2025 Website Update: Contentful-Powered Gatsby Site 1.3.0
>


[](https://app.netlify.com/sites/gilbertaharocode/deploys)
## Project Overview
This repository contains a **Gatsby** website integrated with **Contentful** for content management and a newly introduced **Blog Post** system. By leveraging **GraphQL** queries and Contentfulβs flexible data model, the site can fetch and render content for **Pages**, **Blog Posts**, and modular homepage blocks (e.g., Hero, Feature, CTA, etc.).
## Key Features
- **Blog Post Content Type**: Manage blog articles (title, slug, excerpt, body, image, category, date, etc.) directly from Contentful.
- **Modular Homepage Blocks**: Use a variety of content types (Hero, Feature, CTA, etc.) for flexible, reusable homepage sections.
- **SEO-Friendly**: Includes separate fields for SEO Title and SEO Description in both Page and Blog Post content types, plus a custom `` component for meta tags.
- **Dynamic Routing**: Gatsbyβs `createPages` API in `gatsby-node.js` generates individual blog pages and category-based archives automatically.
- **Responsive, Accessible UI**: Styles built with **Vanilla Extract** for consistent design tokens and fluid responsiveness.
# π Contentful API Integration (Postman)
- Postman allows you to quickly test and prototype Contentful API queries without writing code. You can:
- Validate content structure before frontend integration
- Debug or inspect specific entries and assets
- Preview query filters, sorting, and field selections
IN PROGRESS
## Core Technologies
- **Gatsby**: React-based static site generator for high performance and speed.
- **Contentful**: Headless CMS to store and deliver structured content.
- **GraphQL**: Query language for pulling data from Contentful.
- **Vanilla Extract**: CSS-in-JS approach for theming and design tokens.
- **Netlify**: Hosting and continuous deployment (see `netlify.toml`).
- **Node.js**: For local development scripts and Gatsby build process.
---
## Contentful Model Overview
### 1. **Blog Post**
**Fields**:
- **Slug** *(Short text, required)*
- **Title** *(Short text, required)*
- **Body** *(Rich text)*
- **Excerpt** *(Long text)*
- **Image** *(File)*
- **Date** *(Date & time)*
- **Category** *(Short text)*
- **Author** *(Reference to an Author or text)*
- **SEO Title** *(Short text, < 50 chars)*
- **SEO Description** *(Long text)*
> **Note**: The `slug` is used to generate the page URL (e.g. `/blogs/{slug}`). GraphQL queries in `gatsby-node.js` or `blog-post.js` fetch data for each post.
### 2. **Page**
**Fields**:
- **title** *(Short text)*
- **slug** *(Short text, required)*
- **description** *(Short text)*
- **Image** *(File)*
- **Body** *(Rich text)*
- **SEO Title** *(Short text, <35 chars)*
- **SEO Description** *(Long text)*
> **Note**: Typically used for top-level site pages with custom content.
### 3. **Layout & Homepage Blocks**
These content types (e.g., Homepage Hero, Feature List, CTA, LayoutHeader, LayoutFooter, etc.) are stored in Contentful and retrieved for the homepage and global site layout. They share common fields via GraphQL **interfaces**.
---
## Developer Documentation
1. **Setup**
- Copy `.env.EXAMPLE` β `.env.development` & `.env.production`, fill in **Contentful** credentials:
```env
CONTENTFUL_SPACE_ID=xxxx
CONTENTFUL_ACCESS_TOKEN=xxxx
CONTENTFUL_MANAGEMENT_TOKEN=xxxx
```
- Install dependencies:
```bash
npm install
# or
yarn install
```
2. **Local Development**
- Run `npm run develop` or `yarn develop`.
- Open `http://localhost:8000` to see the site locally.
- Use `gatsby-source-contentful` for fetching data. Check `gatsby-config.mjs` for plugin options.
3. **Creating Blog Post Pages**
- In `gatsby-node.js`, we query all blog post slugs and create individual pages at build time, using the `blog-post.js` template.
- For category listings, `blog-category.js` can filter posts by a `category` field.
4. **SEO & ``**
- Use `src/components/head.js` to inject meta tags on each page or post.
- Pass `title`, `description`, and optional `image` or `url` props.
---
## Full Folder Structure (with Comments)
```bash
βββ gah-code-gilbertoharosite/ # Root of the project
βββ README.md # Project readme (this file)
βββ LICENSE # License info (BSD 0-Clause)
βββ gatsby-browser.js # Gatsby browser-level APIs (fonts, global styles)
βββ gatsby-config.mjs # Main Gatsby config, includes plugins
βββ gatsby-node.js # Gatsby Node APIs for dynamic page creation
βββ netlify.toml # Netlify configuration for deployment
βββ package.json # NPM/Yarn dependencies and scripts
βββ .env.EXAMPLE # Example env variables for Contentful
βββ .nvmrc # Node version specification
βββ .prettierignore # Prettier ignore rules
βββ .prettierrc.json # Prettier configuration
βββ src/ # Source code for the Gatsby site
βββ components/ # Reusable and layout components
β βββ fallback.js # Fallback component for unknown block types
β βββ head.js # SEOHead component for meta tags
β βββ sections.js # Exports homepage sections (Hero, CTA, etc.)
β βββ blog/ # Blog post-specific components
β β βββ Card.js
β β βββ PostCard.jsx
β β βββ PostCardSmall.jsx
β βββ design-system/ # Vanilla Extract theming + base styles
β β βββ 404.css.ts
β β βββ about-hero.css.ts
β β βββ colors.css.ts
β β βββ skill.css.ts
β β βββ styles.css.ts
β β βββ theme.css.ts
β βββ layout/ # Layout and navigation structure
β β βββ footer.js # Global footer
β β βββ hero.js # Hero layout section
β β βββ layout.js # Wraps each page with header/footer
β β βββ header/
β β β βββ header.css.ts
β β β βββ header.js
β β βββ navigation/
β β βββ caret.css.ts
β β βββ caret.js
β β βββ nav-item-group.css.ts
β β βββ nav-item-group.js
β βββ ui/ # Generic UI components (buttons, lists, etc.)
β βββ benefit-list.js
β βββ brand-logo.js
β βββ chevron-right.js
β βββ cta.js
β βββ logo-list.js
β βββ product-list.js
β βββ stat-list.js
β βββ ui.css.ts
β βββ ui.jsx
β βββ certifications/
β β βββ resume-styled-cert-list.css.ts
β β βββ resume-styled-cert-list.jsx
β β βββ resume-styled-item.js
β βββ feature/
β β βββ feature-list.jsx
β β βββ feature.jsx
β βββ skills/
β βββ skill-list-grid.js
β βββ styles.css
βββ data/
β βββ certifications.json # Content data for certifications
βββ pages/ # Gatsby pages mapped to routes
β βββ 404.js # Custom 404 page
β βββ experience.js # Experience page
β βββ index.js # Homepage
β βββ learning.js # Learning page
β βββ {Page.slug}.js # Dynamically created pages from Contentful
βββ templates/ # Templates for dynamic page creation
βββ RichTextRenderer.js # Renders rich text fields from Contentful
βββ blog-category.js # Lists posts under specific categories
βββ blog-index.js # Main blog listing or "index" page
βββ blog-post.css.ts # Styling for single blog posts
βββ blog-post.js # Template for rendering individual blog posts
```
---
## Local Development & Deployment
1. **Clone & Install**
```bash
git clone
cd gah-code-gilbertoharosite
npm install
# or
yarn install
```
2. **Environment Variables**
- Copy `.env.EXAMPLE` β `.env.development` / `.env.production`
- Provide **Contentful** credentials.
3. **Develop**
```bash
npm run develop
```
or
```bash
yarn develop
```
Go to `http://localhost:8000`.
4. **Build & Serve**
```bash
npm run build && npm run serve
```
or
```bash
yarn build && yarn serve
```
5. **Deploy**
- **Netlify**: This project includes `netlify.toml` for config.
- Other hosts: Serve the `public/` folder after `gatsby build`.
---
## License
This project is licensed under **BSD Zero Clause License (0BSD)**. See [LICENSE](./LICENSE) for details.
---