{"id":24527475,"url":"https://github.com/diogenesanalytics/blog_template","last_synced_at":"2025-08-15T20:40:46.288Z","repository":{"id":272336538,"uuid":"851314870","full_name":"DiogenesAnalytics/blog_template","owner":"DiogenesAnalytics","description":"A Complete Jekyll/Jupyter Template for any Blogging Application.","archived":false,"fork":false,"pushed_at":"2025-05-20T14:24:08.000Z","size":520,"stargazers_count":0,"open_issues_count":4,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-20T14:44:51.692Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DiogenesAnalytics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-09-02T21:27:42.000Z","updated_at":"2025-05-20T14:26:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"9af2a87a-93fc-4dba-b382-fdc55e886197","html_url":"https://github.com/DiogenesAnalytics/blog_template","commit_stats":null,"previous_names":["diogenesanalytics/blog_template"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/DiogenesAnalytics/blog_template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiogenesAnalytics%2Fblog_template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiogenesAnalytics%2Fblog_template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiogenesAnalytics%2Fblog_template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiogenesAnalytics%2Fblog_template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DiogenesAnalytics","download_url":"https://codeload.github.com/DiogenesAnalytics/blog_template/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DiogenesAnalytics%2Fblog_template/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260497273,"owners_count":23018237,"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":[],"created_at":"2025-01-22T06:19:03.980Z","updated_at":"2025-06-18T05:38:22.432Z","avatar_url":"https://github.com/DiogenesAnalytics.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![docker](https://github.com/DiogenesAnalytics/blog_template/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/DiogenesAnalytics/blog_template/actions/workflows/docker-publish.yml)\n[![tests](https://github.com/DiogenesAnalytics/blog_template/actions/workflows/tests.yml/badge.svg)](https://github.com/DiogenesAnalytics/blog_template/actions/workflows/tests.yml)\n\n# Jekyll-Jupyter Blog Template\nA template for building a blog, written in Jupyter Notebooks, and using Jekyll.\n\n## Project Organization\n```\n├── _includes            \u003c- Where page-specific CSS files are stored.\n├── _jupyter\n│   ├── notebooks        \u003c- Jupyter notebooks for conversion are stored here.\n│   └── templates        \u003c- Where nbconvert templates are stored.\n│\n├── _layouts\n│   ├── article.html     \u003c- Jekyll template defining articles.\n│   └── default.html     \u003c- Jekyll \"base\" template used in all other templates.\n│\n├── _posts               \u003c- Where Jekyll markdown posts are stored.\n├── assets\n│   ├── css              \u003c- Where the \"base\" CSS file is stored.\n│   └── images           \u003c- Where image files are stored.\n│\n├── favicon              \u003c- Where favicon files are stored.\n├── pages\n│   └── blog.html        \u003c- Jekyll template defining the blog page.\n|\n├── tests\n|   └── requirements.txt \u003c- Dependencies for running tests.\n|\n├── .dockerignore        \u003c- Ignore list for building Docker image.\n├── .gitignore           \u003c- Ignore list for Git repo.\n├── _config.yml          \u003c- The config file for Jekyll.\n├── Dockerfile           \u003c- Builds the Docker image used in the Makefile.\n├── index.html           \u003c- Jekyll template defining the home/index page.\n├── Makefile             \u003c- Makefile with commands like `make build-site`.\n└── README.md            \u003c- The top-level README for this project.\n```\n\n## Configuration\nHere we will discuss how to *customize* the template for your use case.\n\n### Background Image\nThere are only two keys of the Jekyll `_config.yml` file that you need to consider:\n```yml\nhigh_res_image: \"/assets/images/YOUR_HIGH_RES_IMAGE\"\nlow_res_image: \"/assets/images/YOUR_LOW_RES_IMAGE\"\n```\n\nThese two *keys* represent the *\"high resolution\"* and *\"low resolution\"* versions\nof your *background image* (respectively).\n\n### Social Links\nYou can enable the display of your *social media* links by adding the following to the\n`_config.yml` file:\n```yml\nsocial:\n  x-twitter: \"https://twitter.com/yourprofile\"\n  instagram: \"https://instagram.com/yourprofile\"\n  youtube: \"https://youtube.com/yourprofile\"\n```\n\nThis will toggle **on** the display of the social media icons in the header.\n\n### Link Preview\nIn order for the *link preview* feature to work correctly, you must set the\nfollowing keys in your `_config.yml` file:\n```yml\ndefault_image: \"/assets/images/diogenes_preview.q75.webp\"\nurl: \"https://yourwebsite.com\"\n```\nThe `default_image` key is the **default image** (for the whole *site*).\n\nThe `url` key defines the *domain name* and the *protocol* used (i.e. **https**).\nIt is important that you use both your website domain name *and* the protocol\nas shown below:\n```yml\nurl: \"https://yourwebsite.com\"\n```\n\nOptionally, you can set a *custom* **preview image** and **preview excerpt**.\nYou can set a *custom preview image* in the *Jekyll* syntax in the front of\nan article or *Jupyter Notebook*:\n```yml\n---\ntitle: \"My Jekyll Post\"\nimage: \"/path/to/custom/preview/image\"\n---\n```\nWhen the **image** key is set in the *Jekyll YAML front matter* then it will\noverride the `default_image` set in the `_config.yml`.\n\nFor the **excerpt** (which is automatically generated by\ndefault). This can be set *manually* in the *Jekyll YAML front matter*\n(just like the preview image):\n```yml\n---\ntitle: \"My Jekyll Post\"\nimage: \"/path/to/custom/preview/image\"\nexcerpt: \"My custom excerpt that previews what the article is about\"\n---\n```\n*NOTE*: if the *excerpt* does not render correct automatically, you can always\nset it manually in the *Jekyll YAML front matter*.\n\n### Contact URL Configuration\nThe Jekyll template allows you to configure multiple **contact** links that will\nbe displayed on the `/pages/contact.html` page. To enable and customize these\nlinks, you will need to modify the `contacts` section of the `_config.yml` file\nlike so:\n```yml\ncontacts:\n  business: \"/business-contact/\"\n  personal: \"/personal-contact/\"\n```\n\nEach key in the `contacts` dictionary represents the name of the contact, and\nthe corresponding value is the URL (can be *relative URL*) where the contact\nform can be reached. If only **one link** is used then that link will be used\nas the reference in the *\"Contact\"* link in the header of the website:\n```yml\ncontacts:\n  basic_contact: \"/contact/\"\n```\n\nIn other words, no *additional contact* page will be referenced and when users\nclick the *\"Contact\"* link in the header of the website, that link will\nreference the single URL (relative or absolute) listed in the `_config.yml`\nfile.\n\n## Make\nHere we will document the different `make` commands defined in the `Makefile`.\nAll *commands* (excluding the `all` command which is simply executed by\nrunning `make`) are executed by the following format: `make [COMMAND]`. To see\nthe *contents* of a command that will be executed upon invocation of the\ncommand, simply run `make -n [COMMAND]`.\n\n### Commands\n+ `all`: (*aka*: `make`) defaults to converting all UN-converted notebooks\n+ `check-docker`: check Docker and host dependencies\n+ `check-image-jupyter`: check if the Jupyter Docker image exists\n+ `check-image-tests`: check if the Test Docker image exists\n+ `check-images`: check all docker images\n+ `check-workdir-tests`: confirm working dir is correct in tests image\n+ `check-deps-jupyter`: check Jupyter dependencies inside Docker\n+ `check-deps-tests`: check test dependencies inside Docker\n+ `check-all`: check all dependencies (Docker, Jupyter, Tests)\n+ `build-jupyter`: build Jupyter Docker image\n+ `build-tests`: build test Docker image\n+ `jupyter`: launches the Jupyter notebook development Docker image\n+ `execute`: execute all Jupyter notebooks (in place)\n+ `convert`: convert all Jupyter notebooks (even if not changed)\n+ `check-renamed-images`: check for lingering images\n+ `check-renamed-posts`: check for untracked posts\n+ `check-renamed`: check all renamed posts/images\n+ `clear-renamed-images`: clear lingering images\n+ `clear-renamed-posts`: clear renamed posts and their image dirs\n+ `clear-renamed`: clear all renamed posts/images\n+ `sync`: copy all converted files to necessary directories\n+ `sync-check`: sync and check converted files to necessary directories\n+ `jekyll`: startup Docker container running Jekyll server\n+ `build-site`: build Jekyll static site\n+ `pause`: pause PSECS (to pause between commands)\n+ `address`: get Docker container address/port\n+ `containers`: launch all Docker containers\n+ `check-repo-safety`: check if safe dir is setup\n+ `checkk-git`: check if Git is installed\n+ `commit`: git add/commit all synced files\n+ `push`: git push to remote branch\n+ `publish`: [ *WARNING* ] convert, sync, commit, and push all at once\n+ `safe-repository`: command to mark the repository as safe\n+ `list-containers`: list all running containers\n+ `stop-containers`: simply stops all running Docker containers\n+ `restart-containers`: restart all containers\n+ `unsync`: remove all synced files\n+ `clear-nb`: simply clears Jupyter notebook output\n+ `clear-output`: removes all converted files\n+ `clear-jekyll`: removes Jekyll _site/ directory\n+ `clean`: combines all clearing commands into one\n+ `update-times`: update timestamps to now\n+ `reset`: [ *WARNING* ] reverses all changes\n+ `print-config`: print info on variables used\n+ `lint`: run linters (isort, black, flake8, mypy)\n+ `tests`: run full testing suite (pytest, lint)\n+ `pytest`: run pytest in Docker container\n+ `isort`: run isort in Docker container\n+ `black`: run black in Docker container\n+ `flake8`: run flake8 in Docker container\n+ `mypy`: run mypy in Docker container\n+ `install-act`: install act command\n+ `check-act`: check if act is installed\n+ `run-act-tests`: run GitHub action tests locally\n+ `shell`: create interactive shell in Docker container\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiogenesanalytics%2Fblog_template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiogenesanalytics%2Fblog_template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiogenesanalytics%2Fblog_template/lists"}