{"id":19703539,"url":"https://github.com/lukencode/ghostsolo","last_synced_at":"2025-06-12T02:06:43.361Z","repository":{"id":44228273,"uuid":"275575297","full_name":"lukencode/GhostSolo","owner":"lukencode","description":"A Ghost theme for solo bloggers.","archived":false,"fork":false,"pushed_at":"2022-12-06T16:38:36.000Z","size":3281,"stargazers_count":27,"open_issues_count":3,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-29T14:34:46.435Z","etag":null,"topics":["blog","ghost","theme"],"latest_commit_sha":null,"homepage":"https://lukelowrey.com/ghostsolo/","language":"Handlebars","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukencode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-06-28T11:58:03.000Z","updated_at":"2025-03-22T07:41:19.000Z","dependencies_parsed_at":"2023-01-24T04:46:10.020Z","dependency_job_id":null,"html_url":"https://github.com/lukencode/GhostSolo","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/lukencode/GhostSolo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukencode%2FGhostSolo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukencode%2FGhostSolo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukencode%2FGhostSolo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukencode%2FGhostSolo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukencode","download_url":"https://codeload.github.com/lukencode/GhostSolo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukencode%2FGhostSolo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259382299,"owners_count":22848836,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","ghost","theme"],"created_at":"2024-11-11T21:18:10.749Z","updated_at":"2025-06-12T02:06:43.334Z","avatar_url":"https://github.com/lukencode.png","language":"Handlebars","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GhostSolo Theme\r\n\r\nA Ghost theme for solo bloggers. See it in action: **[lukelowrey.com](https://lukelowrey.com)**\r\n\r\n![Example](screenshots/full-screen.png)\r\n\r\n\u0026nbsp;\r\n\r\n# Features\r\n\r\n### #pinned Posts on the homepage\r\nThe homepage will render any posts with the internal tag \"#pinned\" as cards. Tip: add a \"Pinned\" tag filter to your Ghost dashboard.\r\n![Ghost pinned](screenshots/ghost-pinned.png)\r\n\r\n### Membership support\r\n\r\nGhostSolo recommends you use the [Portal](https://ghost.org/changelog/portal/) functionality to handle membership. If membership is enabled the home page and footer will render a sign up form.\r\n\r\nYou can also update routes.yaml and use the (legacy) ghost solo membership pages.GhostSolo currently supports free membership. You must **upload the routes.yaml fille\"** which will be used when people click the subscribe button in the header.\r\n\r\n\r\n### Menus\r\nThe standard ghost navigation will render in the nav bar at the top of the page. Secondary navigation will render in the footer.\r\n\r\n### Twitter / Facebook\r\nThe site twitter and facebook (soon) links will render as buttons in the homepage header.\r\n\r\n### Author profile\r\nThe author profile bio and twitter will render at the end of each post.\r\n\r\n### Inline post content tag template\r\nGhostSolo supports an inline content version of the tag template \"tag-inline-content\". It will enabled a view where posts for a tag content displays in the list. I use it for short snippets on luklowrey.com but it could be useful for changelogs an other things. To enabled it you need to change th routes.yaml of your blog (see below).\r\n\r\n### Table of contents post template\r\nTo enabled a table of contents us the Table of Contents template when writing your post. The contents will update based on headings.\r\n\r\n# Upload routes.yaml\r\nTo enable the membership functionality you will need to upload the routes.yaml file located in GhostSolo.zip to your Ghost site (Settings \u003e Labs \u003e Routes).\r\n\r\n```yaml\r\ncollections:\r\n  /:\r\n    permalink: /{slug}/\r\n    template: index\r\n\r\n#example of using the 'tag-inline-content' template for posts tagged \"note\" but none other\r\n  /:\r\n    permalink: /{slug}/\r\n    template: index\r\n    filter: 'tag:-note'    \r\n  /notes/:\r\n    permalink: /{slug}/\r\n    template: tag-inline-content\r\n    filter: 'tag:note'  \r\n    data: tag.note\r\n\r\ntaxonomies:\r\n  tag: /tag/{slug}/\r\n  author: /author/{slug}/\r\n\r\n\r\n#not recommended, use ghost Portal functionality\r\nroutes:\r\n  /signup/: members\\signup\r\n  /signin/: members\\signin\r\n  /account/: members\\account\r\n\r\n```\r\n\r\n# Customise\r\n\r\n### Theme\r\nGhostSolo uses CSS variables for overriding the theme and dark/light modes.\r\n\r\nThe default theme can be found in [assets/css/vars.css](https://github.com/lukencode/GhostSolo/blob/master/assets/css/vars.css). This can be easily overridden with a style tag in your ghost code injection settings.\r\n\r\n```css\r\nhtml:root {\r\n    --accent-color: #543fd7;\r\n    --bs-font-sans-serif: \"Inter\", system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\r\n    --bs-font-serif: Georgia, serif;\r\n    --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\r\n}\r\n\r\nhtml[data-theme='light'] {\r\n    --background-color: #fff;\r\n    --alternate-background-colour: #f7f7f9;\r\n    --text-color: #121416d8;\r\n    --text-color-light: #777676bb;\r\n    --link-color: var(--accent-color);\r\n    --masthead-color: var(--accent-color);\r\n    --masthead-text: #fff;\r\n    --button-color: #263238;\r\n    --button-text: #fff;\r\n}\r\n\r\nhtml[data-theme='dark'] {\r\n    --background-color: #212a2e;\r\n    --alternate-background-colour: #263238;\r\n    --text-color: #F7F8F8;\r\n    --text-color-light: #8A8F98;\r\n    --link-color: #828fff;\r\n    --masthead-color: #212a2e;\r\n    --masthead-text: #fff;\r\n    --button-color: var(--accent-color);\r\n    --button-text: #fff;\r\n}\r\n```\r\n\r\n### Dark mode\r\nGhostSolo includes a simple toggle for enabling the dark/light modes. The toggle adds data-theme='dark/light' to the html element. It will automatically detect a user's preferred dark mode setting. When customising the theme be use to include both data-theme='dark' and data-theme='light' entries.\r\n\r\n![Theme toggle](screenshots/theme-toggle.gif)\r\n\r\n### Include Inter (or other) font\r\nThe base css theme uses the 'Inter' font. To include this in your blog add the following the your site header:\r\n```html\r\n\u003clink href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700\u0026display=swap\" rel=\"stylesheet\"\u003e\r\n```\r\nIf you override the base font be sure to include it in the header.\r\n\r\n### Include Prism Syntax Highlighting\r\n\r\nInclude Prism syntax highlighting by adding the following to your Ghost blog code injection:\r\n\r\n```html\r\nIn site header:\r\n\u003clink rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism-twilight.min.css\" integrity=\"sha256-rAcsWTglHtCcQgu1Lat/fUZqB+uBsYR+4dHZJUQ5Fug=\" crossorigin=\"anonymous\" /\u003e\r\n\r\nIn site footer\r\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/components/prism-core.min.js\" integrity=\"sha256-9h14mWYYiQGkeAKg2JtijbqApb56kgw57WN6sI6dwH0=\" crossorigin=\"anonymous\"\u003e\u003c/script\u003e\r\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/plugins/autoloader/prism-autoloader.min.js\" integrity=\"sha256-3S2PESHNt0YNL65z57WuHPHIv12fibpBDXepyCGHftw=\" crossorigin=\"anonymous\"\u003e\u003c/script\u003e\r\n```\r\n\r\n# Development\r\n\r\nGhostSolo uses Bootstrap 5 for its base CSS. Styles are compiled using gulp, sass and PostCSS.\r\nYou'll need [Node](https://nodejs.org/)and [Gulp](https://gulpjs.com) installed globally. After that, from the theme's root directory:\r\n\r\n```bash\r\n# Install\r\nnpm run install\r\n\r\n# Run build \u0026 watch for changes\r\nnpm run dev\r\n```\r\n\r\nNow you can edit `/assets/css/` files, which will be compiled to `/assets/built/` automatically.\r\n\r\nThe `zip` Gulp task packages the theme files into `dist/ghostsolo.zip`, which you can then upload to your site.\r\n\r\n```bash\r\nnpm run zip\r\n```\r\n\r\n\u0026nbsp;","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukencode%2Fghostsolo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukencode%2Fghostsolo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukencode%2Fghostsolo/lists"}