{"id":13555012,"url":"https://github.com/lukebarnard1/journal","last_synced_at":"2025-04-03T07:33:40.395Z","repository":{"id":43624945,"uuid":"71666672","full_name":"lukebarnard1/journal","owner":"lukebarnard1","description":"a blogging platform built on [matrix]","archived":true,"fork":false,"pushed_at":"2020-03-13T21:18:56.000Z","size":23617,"stargazers_count":70,"open_issues_count":27,"forks_count":6,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-11-04T03:32:43.991Z","etag":null,"topics":["blog-platform","decentralised","journal","matrix"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukebarnard1.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":"2016-10-22T21:28:35.000Z","updated_at":"2023-07-26T20:23:39.000Z","dependencies_parsed_at":"2022-07-12T18:19:23.519Z","dependency_job_id":null,"html_url":"https://github.com/lukebarnard1/journal","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukebarnard1%2Fjournal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukebarnard1%2Fjournal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukebarnard1%2Fjournal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukebarnard1%2Fjournal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukebarnard1","download_url":"https://codeload.github.com/lukebarnard1/journal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246957283,"owners_count":20860598,"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-platform","decentralised","journal","matrix"],"created_at":"2024-08-01T12:02:59.834Z","updated_at":"2025-04-03T07:33:38.878Z","avatar_url":"https://github.com/lukebarnard1.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","others"],"sub_categories":[],"readme":"# journal - an (incomplete) blogging platform concept built on [\\[matrix\\]](https://matrix.org)\n\nAn open source blog hosting website.\n\n### Note: journal is no longer maintained\n\nWhat I imagined it could be: A web client for writing news stories, personal blogs and more, built on the Matrix protocol - https://matrix.org.\n\nWhat happened: I didn't have enough time to build the entire thing, plus there are decent alternatives. See https://github.com/lukebarnard1/journal/issues/118.\n\n## Contents\n - [Introduction](#introduction)\n   - [Matrix](#matrix)\n   - [But what is journal?](#but_what_is_journal)\n - [Installation](#installation)\n - [Contributing](#contributing)\n\n## Introduction\n\njournal is (currently) an open source blog website that in future will be part of a larger system, forming part of a decentralised blog network built on the Matrix protocol.\n\nOriginally, journal was a Matrix client that relied on being connected to a Matrix server in order to view blog posts, write blog posts and comment on blog posts. However, connecting to a Matrix server to download blogs for the first time gave a poor user experience so a change in architecture was devised to overcome this:\n\n```\n    journal backend-----[matrix]\n      |  |                 |\n      |  |         ________|\n      |  |        |\n      |  |        |\n  ____|__:________|_next.js_\n |                          |\n | journal web UI frontend  |\n |__________________________|\n       | :\n       | |\n       | |\n   web browser\n```\n\n 1. The journal backend is pushed new blog data from the Matrix network, generating blog files.\n 1. The journal web UI\n   - \\*displays blogs\n   - via the Matrix network protocol\n       - allows for administration of the user's Matrix/journal account\n       - allows for creation of blogs and posting of comments.\n       - allows for blog subscription and notifications\n\nItems marked \"\\*\" are completed.\n\n### Matrix\n\nMatrix is a messaging protocol that distributes chat rooms across a global network of \"home servers\". The distributed nature of Matrix makes it ideal for hosting published content, with no central server that could fail and the potential for real-time interaction from Matrix users with effectively \"free\" support for chat rooms. journal is an attempt to use Matrix for viewing, creating and publishing journalistic writing and blogs.\n\nIn future, users could be able to subscribe to blogs, hold discussions on a blog or create their own blogs (if allowed by the journal admin).\n\nUsers will login to the matrix.org homeserver with their Matrix user/password combination or login as a guest. Users could also specify their own homeserver to use as an entry point into the network.\n\nIn this sense, journal will be seen as a use case of the Matrix protocol. It uses the flexibility of the Matrix protocol to embed published materials and comments with meta-data that serve to enhance the functionality of journal.\n\n### Next.js\n\nNext.js is now a key component to the journal web view. It enables SSR (Server-Side Rendering) of pages that are rendered using React. This makes viewing pages snappy but keeps the benefits of being able to update the view dynamically based on user interaction and new data from the server.\n\n### But what _is_ journal?\nThe [demo](https://journal.lukebarnard.co.uk) shows one example of journal running in the wild. This currently demonstrates what viewing a blog looks like.\n\n## Installation\n\n### Docker\n\njournal runs on [node.js](https://nodejs.org) version \u003e=8\n\nIt is recommended to run journal in a docker container with the following commands:\n\n```\n# Create a directory for all of your markdown articles\nmkdir articles\n\n# Create a category directory\nmkdir articles/baking\n\n# Create your first article (See docs/writing-an-article.md)\nvi articles/baking/my-first-carrot-cake.md\n\nexport JOURNAL_ARTICLES_DIR=$(pwd)/articles\n\ngit clone git@github.com:lukebarnard1/journal.git\ncd journal\n\ndocker build -t journal .\ndocker run -d \\\n  --name=\"journal\" \\\n  --mount \"type=bind,source=$JOURNAL_ARTICLES_DIR,target=/usr/src/app/web/articles\" \\\n  -p 3000:3000 \\\n  journal\n\n# journal should now be visible at http://localhost:3000\n\n```\n\n### Developing Locally\n\nThe code below will install dependencies for and run journal using `npm` and `node`, with hot reloading when code changes are made.\n\n```\ngit clone git@github.com:lukebarnard1/journal.git\ncd journal\n\n# Install dependencies\nnpm install\n\n# Build and run journal\nnpm run build\nnpm run start\n\n# journal should now be visible at http://localhost:3000\n```\n\n## Contributing\njournal needs some love!\n\n### Reporting Issues\nIf you find an issue through using journal, please report it on [Github](http://github.com/lukebarnard1/journal), making sure you follow the guidelines:\n - The title should summarise the issue entirely and succinctly: not too short and not too long.\n - For bugs, there must be a full set of steps (no matter how few/simple) required to reproduce it, and logs/stack traces are always appreciated.\n - For feature requests, the description should be as detailed as possible with, if possible, discussion of a possible implementation.\n\n### Submitting PRs\nPlease feel free to submit patches for any of the issues with journal. Follow these guidelines when you do submit patches:\n - Keep them focussed. This should help to speed up the code review process.\n - If a PR is in response to an existing issue, reference the issue number (e.g. #5).\n - If the issue being fixed is not reported yet, explain it in the PR and follow 2. of the [Reporting Issues](#reporting-issues) section.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukebarnard1%2Fjournal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukebarnard1%2Fjournal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukebarnard1%2Fjournal/lists"}