{"id":18090815,"url":"https://github.com/elementary/blog-template","last_synced_at":"2025-10-12T23:06:56.536Z","repository":{"id":35417526,"uuid":"209161839","full_name":"elementary/blog-template","owner":"elementary","description":"Template for the Jekyll-powered elementary blog","archived":false,"fork":false,"pushed_at":"2024-12-18T14:29:00.000Z","size":1235,"stargazers_count":33,"open_issues_count":18,"forks_count":18,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-10-09T13:58:34.292Z","etag":null,"topics":["blog","elementary","hacktoberfest","jekyll","medium","rss","static-site","template"],"latest_commit_sha":null,"homepage":"https://blog.elementary.io","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elementary.png","metadata":{"funding":{"github":"elementary","patreon":"elementary","liberapay":"elementary","custom":"https://elementary.io/get-involved#funding"},"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,"governance":null,"roadmap":null,"authors":"authors.md","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-17T21:42:58.000Z","updated_at":"2025-04-04T04:03:31.000Z","dependencies_parsed_at":"2025-02-03T23:37:41.972Z","dependency_job_id":null,"html_url":"https://github.com/elementary/blog-template","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/elementary/blog-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elementary%2Fblog-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elementary%2Fblog-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elementary%2Fblog-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elementary%2Fblog-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elementary","download_url":"https://codeload.github.com/elementary/blog-template/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elementary%2Fblog-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279013456,"owners_count":26085274,"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","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","elementary","hacktoberfest","jekyll","medium","rss","static-site","template"],"created_at":"2024-10-31T18:07:44.963Z","updated_at":"2025-10-12T23:06:56.518Z","avatar_url":"https://github.com/elementary.png","language":"HTML","readme":"# blog\n\nA static, privacy-respecting blog. In ways inspired by both Medium and the popular Medium-look-alike [mediumish-theme-jekyll](https://github.com/wowthemesnet/mediumish-theme-jekyll).\n\n## Goals\n\nRemember, we moved away from other platforms for very specific reasons.\n\n1. **Completely frictionless** for readers.\n2. **As few external resources as possible**—it slows things down and introduces potential privacy issues.\n3. **Little-to-no JavaScript**—it’s a blog, not a web app. Currently, we only use progressively-enhancing JS for improving the image zoom experience.\n\n## Modern Niceties\n\nJust because it's static and privacy-respecting doesn't mean it's not modern and featureful.\n\n1. **RSS feed support** for all the cross-posting you could desire.\n2. **Completely responsive** design from the start.\n3. **Dark style** support for everything from day zero.\n\n## Editing workflow\n\nUse the GitHub workflow!\n\n1. **Use PRs to propose** and work. That means draft PRs for things that aren't ready to publish, too.\n2. **All PRs should be reviewed** and approved before publishing.\n3. **Use reviews and inline comments**/suggestions to collaboratively edit.\n\n### Handling Images\n\nIdeally, images are put into the `images/` directory with a folder name matching the post slug. Since the normal maximum width of articles is 800 pixels, image sizes should be as follows:\n\n- Up to 800px wide for normal width loDPI\n- Up to 1600px for normal-width HiDPI\n- Up to 800px for half- or third-width images on loDPI\n- Up to 1600px for half- or third-width images on HiDPI\n- 2560px wide for full-bleed (higher than this, even for HiDPI, gets really heavy)\n\nWhen scaling down, use a high quality interpolator like Sinc (Lanczos3) or NoHalo in GIMP to avoid too much blur/fuzziness.\n\nName your sized images something sane like `image-name_800.jpg` for the loDPI version, and `image-name_1600.jpg` for the HiDPI version. When writing the markdown, use this format:\n\n```markdown\n![Alt Text]({{ site.baseurl }}/images/post-name/image-name_800.jpg){: srcset=\"{{ site.baseurl }}/images/post-name/image-name_1600.jpg 2x\"}\n```\n\nThis is a bit verbose, but ensures:\n\n- Images stay valid even if we ever move the blog\n- We only load the largest version necessary on loDPI or HiDPI\n- Both loDPI and HiDPI images are loaded at the correct physical size\n\nOptimize images with the lowest JPG percent that looks good (i.e. manually in GIMP), and use something like [Image Optimizer](https://appcenter.elementary.io/com.github.gijsgoudzwaard.image-optimizer) for PNGs.\n\nAlso consider JPGs instead of PNGs when the majority of the image is photographic or a gradient (i.e. not solid colors), as that will compress way better than a PNG.\n\n## Repos\n\nThe blog is actually split into two repos:\n\n1. [@elementary/blog-template](https://github.com/elementary/blog-template), and\n2. [@elementary/blog](https://github.com/elementary/blog) (private)\n\nThe template is the source for the design and layout. The private repo holds a copy of the template plus the actual posts themselves, and is set up with GitHub Pages. Layout and design work should always be done against the template repo.\n\nThe reason for this separation is to be able to stage future/private blog posts while still letting people benefit from the template work. Ideally we'd have another solution that let us keep the contents of the blog itself public as well, without exposing future posts—or adding significantly to the complexity of maintaining the blog.\n\n## Building \u0026 Running Locally\n\nThe blog is a simple Jekyll-powered site hosted by GitHub Pages. To run it locally, see [the GitHub docs](https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/).\n\n### Dependencies\n\nThis guide assumes you're on elementary OS or a similar Ubuntu-based environment.\n\n#### Packages\n\n- `ruby-full` (should include `ruby` and `ruby-dev`)\n- `build-essential`\n- `zlib1g-dev`\n\n#### Ruby Stuff\n\n- `jekyll` and `bundler`\n\nWe recommend installing gems to a (hidden) directory in your home folder:\n\n```shell\necho '' \u003e\u003e ~/.bashrc\necho '# Install Ruby Gems to ~/.gems' \u003e\u003e ~/.bashrc\necho 'export GEM_HOME=\"$HOME/.gems\"' \u003e\u003e ~/.bashrc\necho 'export PATH=\"$HOME/.gems/bin:$PATH\"' \u003e\u003e ~/.bashrc\necho '' \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\nInstall jekyll and bundler:\n\n```shell\ngem install jekyll bundler\n```\n\nInstall gems:\n\n```shell\nbundle install\n```\n\n(Adapted from https://jekyllrb.com/docs/installation/)\n\n### Serve\n\n```shell\nbundle exec jekyll serve --host 0.0.0.0\n```\n\nThe site should now be available at http://0.0.0.0:4000/ on your local machine, and your local machine's IP address on your network—great for testing on mobile OSes.\n\n#### Drafts \u0026 Future Posts\n\nAppend `--drafts` to the serve command, and drafts in the `_drafts` folder will show up based on their last-edited time. Similarly, append `--future` to the serve command to show future posts.\n","funding_links":["https://github.com/sponsors/elementary","https://patreon.com/elementary","https://liberapay.com/elementary","https://elementary.io/get-involved#funding"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felementary%2Fblog-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felementary%2Fblog-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felementary%2Fblog-template/lists"}