{"id":20579119,"url":"https://github.com/tim0-12432/markdown-blog","last_synced_at":"2026-04-09T01:32:35.490Z","repository":{"id":122993067,"uuid":"483775061","full_name":"tim0-12432/markdown-blog","owner":"tim0-12432","description":"Markdown blog","archived":false,"fork":false,"pushed_at":"2022-05-05T19:18:05.000Z","size":6983,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-03T17:37:34.364Z","etag":null,"topics":["appwrite","blog","markdown","mdx","nextjs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/tim0-12432.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2022-04-20T18:46:59.000Z","updated_at":"2023-04-06T15:54:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"279610e1-7be0-4538-b78f-869598cd9608","html_url":"https://github.com/tim0-12432/markdown-blog","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/tim0-12432/markdown-blog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tim0-12432%2Fmarkdown-blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tim0-12432%2Fmarkdown-blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tim0-12432%2Fmarkdown-blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tim0-12432%2Fmarkdown-blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tim0-12432","download_url":"https://codeload.github.com/tim0-12432/markdown-blog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tim0-12432%2Fmarkdown-blog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31581864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["appwrite","blog","markdown","mdx","nextjs"],"created_at":"2024-11-16T06:15:49.794Z","updated_at":"2026-04-09T01:32:35.476Z","avatar_url":"https://github.com/tim0-12432.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Markdown Blog\n\n![Cover image for this repo](/doc/images/cover.png)\n\n[![GitHub](https://img.shields.io/github/license/tim0-12432/markdown-blog?color=blue\u0026label=License\u0026logo=github\u0026style=flat)](/LICENSE.md)\n[![Docker Image CI](https://github.com/tim0-12432/markdown-blog/actions/workflows/docker-image.yml/badge.svg)](https://github.com/tim0-12432/markdown-blog/actions/workflows/docker-image.yml)\n[![Release CI](https://github.com/tim0-12432/markdown-blog/actions/workflows/release.yml/badge.svg)](https://github.com/tim0-12432/markdown-blog/actions/workflows/release.yml)\n\n## Motivation\n\nI wanted to learn NextJS for a few months. Now the time have come and I created a server for displaying markdown blog posts. So this is my first project using NextJS.\n\nWhen noticing the new appwrite hackathon, I decided to add a feature to store your markdown post files in a appwrite database.\n\n## Installation and usage\n\n### Prerequisites\n\nIf you are planning to add posts via the [Appwrite Database](https://github.com/appwrite/appwrite) capability, you need to have a [Appwrite instance](https://github.com/appwrite/appwrite) running on your local machine or on a server.\n\n\u003e Files should be stored in a bucket in the storage and their ids must match the file name in order to be found!\n\n### Configuration\n\n1. [`configuration.json`](config/configuration.json) in `config`\n   - Example AppwriteDB\n\n```json\n    \"appwriteDatabase\": {\n        \"url\": {\n            \"host\": \"localhost\",\n            \"port\": 3000\n        },\n        \"projectId\": \"YOUR_PROJECT_ID\",\n        \"postBucketId\": \"YOUR_POST_BUCKET_ID\",\n        \"apiKey\": \"YOUR_API_KEY\"\n    }\n```\n\n2. Environment variables `.env` or Docker `-e`\n   - Example AppwriteDB\n\n```bash\nENV_APPWRITEDATABASE_URL_HOST=localhost\nENV_APPWRITEDATABASE_URL_PORT=3000\nENV_APPWRITEDATABASE_PROJECTID=YOUR_PROJECT_ID\nENV_APPWRITEDATABASE_POSTBUCKETID=YOUR_POST_BUCKET_ID\nENV_APPWRITEDATABASE_APIKEY=YOUR_API_KEY\n```\n\nAll [Configuration keys](src/types/Configuration.ts):\n|key|subkeys|type|purpose|\n|:---|:---|:---|:---|\n|**blogName**||`string`|Name of the blog to be displayed on the page|\n|**blogDescription**||`string`|A small description about the blog to be displayed in the header and seo|\n|**blogCopyright**||`string`|Maintainer of the blog|\n|**colors**|dark|`{ \"primary\": string, \"secondary\": string, \"font\": string, \"accent\": string }`|Color definition for dark theme|\n||light|`{ \"primary\": string, \"secondary\": string, \"font\": string, \"accent\": string }`|Color definition for light theme|\n|**appwriteDatabase**|url|`{ \"host\": string, \"port\": string\\|number }`|Connection url of the appwrite database|\n||projectId|`string`|Id for identifying the correct project|\n||postBucketId|`string`|Id of bucket where blog files should be stored|\n||apiKey|`string`|Api key for accessing the appwrite database. **!Make sure only reading files is permitted!** |\n\nWhen changing the configuration, you need to restart the server.\n\n### Docker\n\n- **Volumes**:\n  - [`config`](config/): for accessing the configuration file\n  - [`posts`](posts/): when wanting to add posts via file explorer\n  - [`public/images`](public/images/): when wanting to add images\n- **Ports**:\n  - `3000`: for displaying NextJS frontend\n\n1. `docker pull ghcr.io/tim0-12432/markdown-blog:latest`\n2. `docker run --name markdown-blog -d -p 8082:3000 -v markdown-blog_config:/config -v markdown-blog_posts:/posts -v markdown-blog_images:/public/images -e \u003cENVIRONMENT_VARIABLES\u003e ghcr.io/tim0-12432/markdown-blog:latest`\n\n### NodeJS\n\n1. Clone the [repository](https://github.com/tim0-12432/markdown-blog)\n2. Install the dependencies via [`npm install`](package.json)\n3. Build the application via `npm run build`\n4. Run the server via `npm run start`\n\n## Structure\n\n```mermaid\ngraph TD\n    A[(Appwrite DB)] --\u003e N[NextJS Server]\n    P[(Posts Directory)] --\u003e N\n    N --\u003e F[NextJS Frontend]\n```\n\n## Screenshots\n\n### Comparison: light vs. dark mode\n\n|device|light|dark|\n|---:|:---:|:---:|\n|desktop|![homescreen on desktop in light mode](doc/images/localhost_3000_(desktop)_light.png)|![homescreen on desktop in dark mode](doc/images/localhost_3000_(desktop)_dark.png)|\n|mobile|![homescreen on mobile in light mode](doc/images/localhost_3000_(mobile)_light.png)|![homescreen on mobile in dark mode](doc/images/localhost_3000_(mobile)_dark.png)|\n\n\u003e All colors are [configurable](#configuration)!\n\n### Testpost on mobile and desktop\n\n|mobile|desktop|\n|:---:|:---:|\n|![testpost on mobile](doc/images/localhost_3000_markdown_(mobile)_dark.png)|![testpost on desktop](doc/images/localhost_3000_markdown_(desktop)_dark.png)|\n\n## License\n\n[MIT](/LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftim0-12432%2Fmarkdown-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftim0-12432%2Fmarkdown-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftim0-12432%2Fmarkdown-blog/lists"}