HTMLPortfolio

me-ghost — HTML Portfolio Template

By wustep

me-ghost is a Ghost theme developed by wustep for the personal site wustep.me, using HTML and Handlebars templates to organize four types of content: homepage, articles, projects, and notes.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-11View source

What stands out

A quick read of the recorded project description.

01

Organizes content by three tag categories: Articles, Projects, and Notes, each with independent routes and reverse-chronological lists

02

The homepage reads the page with URL home and displays the latest two items from each category with a Read More button

03

The navigation bar automatically groups left and right based on Ghost Navigation settings, with a dropdown menu on mobile and icons for social links

04

Supports Commento comments and Applause likes, which can be disabled per post via Code Injection variables

05

Provides custom syntax such as [#Tag] and [!Button], converted into Bulma tag and button styles

06

Uses gulp for SCSS compilation, code linting, minification, and deployment packaging; gulp deploy calls gscan for validation

Template Details

me-ghost is the personal Ghost theme used by the author on wustep.me, with the repository publicly available under the MIT license. It divides site content into three categories: Articles, Projects, and Notes, each displayed in reverse chronological order and routed to /articles/{slug}, /projects/{slug}, and /notes/{slug}; posts without these three primary tags fall back to the root path. The homepage reads the content of the page with URL home and lists the latest two entries from each category. The navigation bar is generated based on Ghost's Navigation settings, with Home, Projects, Articles, and Notes aligned to the left, other links to the right, a dropdown on mobile, and icons displayed for Facebook, Twitter, GitHub, and LinkedIn.

The theme relies on several modifications to Ghost's core code: adding a label attribute to tag checks in has.js to support left/right navigation grouping; replacing the default routes with the repository's routes.yaml, changing tag/projects etc. to projects etc.; adding use-commento and use-applause switches to the theme configuration; and commenting out the RSS output in ghost_head.js because the author states that RSS was not populating correctly at the time. These changes mean it is not a standard out-of-the-box theme and requires modifying Ghost server files during installation.

Functionally, it also includes: article pages styled to match the editor, supporting headings, links, quotes, code blocks, images and galleries, and video embeds; author bylines with icon, name, bio, and personal website link; article card lists showing title, excerpt, and tags, without featured images, prioritizing featured content, with pagination controlled by posts-per-page in package.json; a custom 404 page; comments via Commento and likes via Applause, both of which can be disabled by setting window.disableCommento or window.disableApplause in Code Injection; additional scripts that bring in jQuery, Highlight.js syntax highlighting, open external links in new tabs, and convert [#Tag] and [!Button] syntax into Bulma tags and buttons. The build uses gulp, handling SCSS compilation, JSHint and Sass-lint checks, CSS/JS minification with source maps, and gulp deploy packages a zip and validates with gscan.

The author lists several unfinished or deprioritized items: the subscription popup only has the form and structure set up, without form action or error handling; multi-author bylines, a complete RSS feed, and extracting the theme into a generic Bulma + Ghost theme have not been done. The automatic excerpt algorithm is also considered ineffective, and the author suggests changing it to only take the first paragraph.

HTMLPortfolio

Is it right for your project?

Use Cases

  • Building a Ghost blog for a personal site categorized into articles, projects, and notes
  • Scenarios requiring a homepage that displays a personal profile page and summarizes the latest content from each category
  • Wanting to use Commento comments and Applause likes on article pages with per-post disabling
  • Writing workflows that need to convert markers like [#Tag] and [!Button] into Bulma component styles

Suitable For

  • Users using Ghost who are willing to modify core files to match the theme's routing and configuration
  • Personal site authors focusing on three content types: articles, projects, and notes
  • Developers familiar with Handlebars, SCSS, and gulp build processes who can adjust templates themselves

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Install Ghost first, then modify core files as per the README: add label checks in has.js, replace routes.yaml, add use-commento and use-applause to the theme configuration, and comment out the RSS output in ghost_head.js

  2. 2

    Clone the repository into /content/themes, run npm install, then develop with gulp, or use gulp deploy to generate a zip and upload it in Settings -> Design

  3. 3

    In Settings -> Navigation, add Home -> /, Articles -> /articles/, Projects -> /projects/, Notes -> /notes/, and optionally add social links

  4. 4

    Create a page with URL /home as the homepage content, and tag posts with Projects, Articles, or Notes

  5. 5

    Comments require registering a Commento account; likes and comments can also use a self-hosted server

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version of the public repository under the MIT license; the free scope is the code of this version and does not imply that external services or third-party assets are free.

Must comply with when using

  • Free use, modification, commercial use, and distribution of this version's code are permitted.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional fees.
  • The comment feature depends on the Commento service; you must register a Commento account and configure it before use.
  • Likes and comments can use a self-hosted server, meaning by default they rely on external services, and self-hosting requires deploying your own server.
  • The theme loads jQuery v3.4 via CDN, so runtime depends on external CDN resources.
  • The contact button requires a third-party form service like Typeform; it is not a built-in theme feature.
  • The subscription button functionality is incomplete and currently can only be replaced by an external form such as Typeform.
  • The RSS feed currently does not populate correctly, and the author recommends commenting out Ghost's default RSS output.
  • The automatic excerpt performs poorly, concatenating multiple lines without proper spacing, and requires modifying the excerpt algorithm yourself.
  • The theme requires synchronized modifications to Ghost core code (has.js, routes.yaml, theme configuration, ghost_head.js) to work properly; it is not out-of-the-box.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

Set up [Commento](https://commento.io/) account for comments.

Original README

You can choose to [host your own server of Applause](https://github.com/ColinEberhardt/applause-button-server) and [Commento](https://docs.commento.io/getting-started/self-hosting/).

Original README

Add [jQuery v3.4](https://jquery.com/) via CDN

Original README

Use a service like Typeform to add a "Contact" button to the `home` page.

Original README

(This isn't completed yet! In the meantime, you can use Typeform forms.)

Original README

At the moment, RSS feeds are not populated properly.

Original README

TODO: Automatic excerpts, by default, tend to be a poor result and concatenate multiple lines together without proper spacing.

Original README

Some minor mods were made to the Ghost code, particularly:

Original README
https://github.com/wustep/me-ghost/blob/master/LICENSEhttps://github.com/wustep/me-ghost/blob/master/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-11. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
Partly documented · 68 / 100
Technologies
HTML
Website type
Portfolio
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2022-12-09
Screenshot last checked
2026-10-11

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies HTML as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Review declaration: [email protected] · 2026-10-13

Inspect the recorded source material

SHA-256: 1ca3c966b3e1bf8b3e376fdc0cbd2cd4088a4d215f647d83bad90acdf796956c

2026-10-11T19:01:49.126Z

Source file / repository
# Me

👻 This is my personal [Ghost](https://ghost.org) theme used on [wustep.me](https://wustep.me).

## Features

- ✔️ Home page
  - ✔️ Content card from page with URL `home`
  - ✔️ Add 2 most recent Articles, Projects, and Notes
  - ✔️ "Read More" buttons linking to pages
- ✔️ Articles
  - ✔️ These should be posts tagged `Articles` first
  - ✔️ Articles will be loaded by creation date desc
  - ✔️ Articles are routed to `/articles/{slug}`
- ✔️ Projects
  - ✔️ These should be posts tagged `Projects` first
  - ✔️ Set `/projects` to route to `/tags/projects`
  - ✔️ Projects will be loaded by creation date desc
  - ✔️ Projects are routed to `/projects/{slug}`
  - ✔️ Hide day for datetime published
- ✔️ Notes
  - ✔️ These should be posts tagged `Notes` first
  - ✔️ Set `/notes` to route to `/tags/notes`
  - ✔️ Notes will be loaded by creation date desc
  - ✔️ Notes are routed to `/notes/{slug}`
  - ✔️ Hide day for datetime published
- ✔️ Posts that are not primarily tagged `Articles` or `Projects` or `Notes` will be routed to `/`
- ✔️ Dynamic navigation bar
  - ✔️ Based on the items in Settings > Navigation:
  - ✔️ "Home", "Projects", "Articles", and "Notes" will be on the left side
  - ✔️ Any other link will be on the right side
  - ✔️ Mobile-friendly dropdown
  - ✔️ Facebook, Twitter, GitHub, and LinkedIn will add icons
- ✔️ Tags category pages: `/tag/[tag]` and author page: `/author/[author]`
- ✔️ Dedicated post webpages
  - ✔️ Proper formatting--match editor styles
    - ✔️ Headings, links, paragraphs, bold, italics, blockquotes, bullets, code blocks, images, galleries
    - Videos / embeds
  - ✔️ Author byline with icon, name, and bio
    - ✔️ Links to author's website
- ✔️ Post Cards (loop)
  - ✔️ with title, excerpt, tags
  - ✔️ (These will not have feature images)
  - Loads `featured` first
  - Use package.json property `posts-per-page` with pagination
    - ([Ran into some issues with pagination related to #get](https://github.com/TryGhost/Ghost/issues/9011))
- ✔️ Custom 404 page with 404-porcupine
- ✔️ Commenting with [Commento](https://commento.io/)
  - ✔️ Disable on any post by setting `window.disableCommento` to `true` in Code Injection
  - Restyle to be more Bulma-like
  - Add syntax highlighting?
- ✔️ Claps with [Applause](https://applause-button.com/)
  - Disable on any page by setting `window.disableApplause` to `true`
- ✔️ Additional scripts:
  - ✔️ Add [jQuery v3.4](https://jquery.com/) via CDN
  - ✔️ [Syntax highlighting](https://github.com/highlightjs/highlight.js/blob/master/README.md) for programming code blocks with Highlight.js
  - ✔️ Convert external links to open in new tab
  - ✔️ Tagify [#Tags] and [!Buttons] with Bulma tags and buttons
    - ✔️ `[##TagName]` will be turned into dark tags of #TagName with `.is-primary-label`
    - ✔️ `[##!TagName]` will get the same treatment but with anchor link
    - ✔️ `[#TagName]` will be turned into grey tags of #TagName with `.is-secondary-label`
    - ✔️ Lines that start and end in `[#Tags]` will be given `.label-collection`
    - ✔️ `[!<a href...>Button Text</a>]` will be given `a.button.is-primary`
    - ✔️ `[!(classes)<a href...>Button Text</a>]` will be given `a.button` with space-separated `classes`
- ✔️ Build tools:
  - ✔️ `gulp` for development and `gulp deploy` for deployment
  - ✔️ Compile SCSS to CSS
  - ✔️ JSHint (error-checking) and Sass-lint (style-checking)
  - ✔️ Minify CSS and JavaScript with source maps

**De-prioritized:**

- Subscribe modal
  - ✔️ Set up modal and form
  - Set up form action and errors
- Multi-author byline support
- Proper RSS feeds
- Fork into generic Bulma + Ghost theme

## Development

- With [npm](https://www.npmjs.com/get-npm) installed, install `gulp` globally with `npm install -g gulp`.

- `gulp`: compiles with Sass, Autoprefixer, Sass-lint, JSHint, Minify, watching for changes.

  - Ghost reloads `.hbs` changes by default, but new partials will require a `ghost restart`.

- `gulp deploy`: recompile everything, create `.zip` for production and uses `gscan` to validate.

- To run Ghost: `ghost start`, `ghost restart`, or `ghost run [session-name] --development` for logs

## Setup

0. [Install Ghost](https://docs.ghost.org/setup/) and complete modifications noted below.

1. Clone this repo to `/content/themes`, then (`npm install`) and (use `gulp`) or (`gulp deploy` and upload zip file to **Settings -> Design**).

1. Under **Settings -> Navigation**: add:

```javascript
Home -> /
Articles -> /articles/
Projects -> /projects/
Notes -> /notes/
(optional)
LinkedIn, Twitter, GitHub, Facebook
```

3. Create a **page** with URL `/home`. This will be shown on the home page.

4. Write **posts** that are tagged `Projects`, `Articles`, or `Notes`!

5. Set up [Commento](https://commento.io/) account for comments.

### Modifications to Ghost

Some minor mods were made to the Ghost code, particularly:

#### 1. \#has tag for labels

This is used for the navigation bar, to have `Home`, `Projects`, and `Articles` be on the left-aligned and any other link to be right-aligned.

- In ghost folder: `core/server/helpers/has.js`, add `label` to `validAttrs` and add to `checks` object (line 140ish):

```javascript
label: function() {
  return (
    (attrs.label && evaluateTagList(attrs.label, [self.label], true)) ||
    false
  );
},
```

#### 2. Routes

Routes were modified to change `tag/projects` -> `projects`, `tag/articles` -> `articles`, and `tag/notes` -> `notes` and have the user-created page `/home` -> `/`.

- Replace your `content/settings/routes.yaml` with the `routes.yaml` in this repository, modifying as desired.

#### 3. Add `use-commento` and `use-applause` config properties.

We added two config properties to let users enable or disable [commento](https://commento.io/) / [applause](https://applause-button.com/). Edit `package.json` if you want these enabled or disabled.

- In ghost folder: `core/server/services/themes/config/index.js`.

Add `use-commento` and `use-applause` to `allowedKeys`.

- In ghost folder: `core/server/services/themes/middleware.js`

Add `use-commento` and `use-applause` to `updateGlobalTemplateOptions` in same format:

```javascript
const themeData = {
  posts_per_page: activeTheme.get().config("posts_per_page"),
  image_sizes: activeTheme.get().config("image_sizes"),
  use_commento: activeTheme.get().config("use_commento"),
  use_applause: activeTheme.get().config("use_applause")
};
```

#### 4. Hide RSS feed.

At the moment, RSS feeds are not populated properly. By default, Ghost adds a feed to the `<head>` tag.

To remove it, go to `core/server/helpers/ghost_head.js` and comment out the lines:

```javascript
head.push(
  '<link rel="alternate" type="application/rss+xml" title="' +
    escapeExpression(metaData.blog.title) +
    '" href="' +
    escapeExpression(metaData.rssUrl) +
    '" />'
);
```

#### 5. (Optional) Change excerpt algorithm

TODO: Automatic excerpts, by default, tend to be a poor result and concatenate multiple lines together without proper spacing. Optionally, revise the `excerpt` code to catch only the first `<p>` block instead of carrying on.

### Other Optional Changes

#### 1. Add more internal pages

By default, only "Home", "Projects", "Articles", and "Ideas" are in the left side of the nav. To add more internal pages to the nav bar, edit `partials/navigation.hbs` and make sure the new label is listed in the `#has` and `^has` statements.

#### 2. Contact button

Use a service like Typeform to add a "Contact" button to the `home` page.

Edit the button to use Bulma, with class `button` and `is-success` (or [another color](https://bulma.io/documentation/overview/colors/))!

Example:

```html
<a class="typeform-share button is-success" ...>Contact Me</a>
```

#### 3. Subscribe button

(This isn't completed yet! In the meantime, you can use Typeform forms.)
Add a subscribe button somewhere with classes `subscribe-button button is-primary`:

```html
<a
  class="button subscribe-button is-primary"
  data-target="subscribe-modal"
  href="#subscribe"
>
  Subscribe
</a>
```

#### 4. Syntax highlighting changes

I added syntax highlighting through `highlight.js` for a limited number of languages that I felt I might use (including `[JavaScript, Python, Java, SQL, JSON, Markdown, HTTP, CSS, SCSS, ...]`).

I excluded many common ones, like `[C#, C++, Ruby, Makefiles, Apache]`, and there's tons more that can be added.

If you'd like to replace this library, [build your own package at highlightjs.org](https://highlightjs.org/download/) and replace `assets/lib/highlight.pack.js`.

To change the theme, follow the instructions in `assets/css/highlight.scss`.

#### 5. Host Applause or Commento

You can choose to [host your own server of Applause](https://github.com/ColinEberhardt/applause-button-server) and [Commento](https://docs.commento.io/getting-started/self-hosting/).

#### 6. Hide Commento

To hide comments on any post, use `window.disableCommento` via Code Injection to `{{ghost_foot}}` in the Ghost panel:

```html
<script>
  window.disableCommento = true;
</script>
```

## Resources

#### Documentation

- [Ghost Themes API](https://docs.ghost.org/api/handlebars-themes/)
- [Bulma](https://bulma.io/)
- [SCSS](https://sass-lang.com/guide)
- [Handlebars](https://handlebarsjs.com/)
- [Gulp](https://gulpjs.com/)
- [Highlight.js](https://highlightjs.org)
- [Applause Button](https://applause-button.com/)
- [Commento](https://commento.io/)

#### Templates

- [Ghost-Theme-Template](https://github.com/thoughtbot/ghost-theme-template): Starting templates
- [Gulma](https://github.com/simply-fiete/Gulma): Ghost + Bulma theme
- [Casper](https://github.com/TryGhost/Casper): Default Ghost theme
- [Blog](https://github.com/TryGhost/Blog): Official Ghost blog theme
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.

simplefolio

simplefolio

Simplefolio is a minimal single-page portfolio template for developers, built with HTML, Bootstrap, SCSS, and Parcel under the MIT license. It includes Hero, About, Projects, Contact, and Footer sections, with content edited in /src/index.html and theme colors controlled by two SCSS variables.

HTML · Portfolio

Freelancer

Freelancer

A bright, single-page Bootstrap portfolio template for freelancers, designers, and small studios. It includes a responsive portfolio grid with modal detail windows and an SB Forms contact form that requires an API token.

HTML · Portfolio

Resume

Resume

A single-page resume and CV template from Start Bootstrap, built on Bootstrap with a fixed sidebar and content sections.

HTML · Portfolio

Creative

Creative

A single-page marketing template by Start Bootstrap for creative agencies and product services, built on Bootstrap with SCSS, featuring a portfolio grid and call-to-action sections. It includes pre-set SB Forms markers for form integration and npm build scripts for source customization.

HTML · Corporate Website

Grayscale

Grayscale

A dark single-page Bootstrap template from Start Bootstrap for photography, events and brand storytelling, with a large hero and clearly separated sections.

HTML · Corporate Website

startbootstrap-stylish-portfolio

startbootstrap-stylish-portfolio

A one-page Bootstrap portfolio theme from Start Bootstrap with multiple content sections and an off-canvas navigation menu. Basic use means editing HTML/CSS under dist and opening index.html; advanced use relies on npm with Pug and SCSS build scripts.

HTML · Portfolio