{"id":15612331,"url":"https://github.com/patarapolw/blogdown-cms","last_synced_at":"2025-04-28T12:57:19.639Z","repository":{"id":42818181,"uuid":"231164972","full_name":"patarapolw/blogdown-cms","owner":"patarapolw","description":"Content Management System, to provide API endpoints for Static Site Generators or JAMStacks","archived":false,"fork":false,"pushed_at":"2023-01-07T18:41:03.000Z","size":3171,"stargazers_count":8,"open_issues_count":40,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-30T09:41:30.462Z","etag":null,"topics":["blogdown-cms","cms","heroku"],"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/patarapolw.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-01-01T01:51:34.000Z","updated_at":"2025-02-09T07:38:58.000Z","dependencies_parsed_at":"2023-02-07T21:00:28.639Z","dependency_job_id":null,"html_url":"https://github.com/patarapolw/blogdown-cms","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fblogdown-cms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fblogdown-cms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fblogdown-cms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patarapolw%2Fblogdown-cms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patarapolw","download_url":"https://codeload.github.com/patarapolw/blogdown-cms/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251319566,"owners_count":21570424,"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":["blogdown-cms","cms","heroku"],"created_at":"2024-10-03T06:41:49.405Z","updated_at":"2025-04-28T12:57:19.562Z","avatar_url":"https://github.com/patarapolw.png","language":"TypeScript","funding_links":[],"categories":["Tools"],"sub_categories":[],"readme":"# Blogdown-CMS\n\nContent Management System, to provide API endpoints for Static Site Generators or JAMStacks\n\n![App preview](/docs/cmsv2.gif)\n\n## Features\n\n- [Extended markdown](/packages/admin-web/src/assets/make-html/index.ts#L35)\n- [Extended with Handlebars](/packages/admin-web/src/assets/make-html/template.ts)\n  - `{{{github 'patarapolw/blogdown-cms'}}}` for embedding GitHub links\n  - `{{{card url}}}` for embedding link previews with image\n  - `{{{pdf url}}}` for embedding PDF\n  - `{{{reveal slug}}}` for embedding reveal MD\n  - Quoting can be `\"` or `'`, and is optional, thanks to [shlex.ts](/packages/admin-web/src/assets/make-html/shlex.ts)\n- [Reveal MD](https://github.com/patarapolw/reveal-md) for PowerPoint-esque presentation\n- No specific framework is required for styling\n  - You might need to disable CSS reset to enable native Markdown styling\n- The Heroku hosted REST API exposes an OpenAPI documentation\n  - You can see the example doc at \u003chttps://patarapolw-blogdown.herokuapp.com/api/doc\u003e thanks to [Fastify OAS](https://github.com/SkeLLLa/fastify-oas).\n  - There is a larger doc in development mode (editable API endpoints).\n- Search syntax is powered by [patarapow/qsearch](https://github.com/patarapolw/qsearch) via exposed REST API. So, you can query MongoDB with a string instead of JSON.\n\n## How it works\n\nThis project uses the following endpoints\n\n- MongoDB for storing text-based contents\n- Heroku to provide public API endpoints to MongoDB\n- Cloudinary is used to store media (e.g. images)\n- Editing is only enabled offline\n  - via `npm run dev`\n\n## Environmental variables\n\n- All the following environmental variables, except for `MONGO_URI` are optional. If you need a MongoDB server, you might try MongoDB Atlas or [local docker image](https://hub.docker.com/_/mongo).\n- Put the `.env` file inside `/packages/server/`\n\n```sh\nMONGO_URI=\nCLOUDINARY_API_KEY=\nCLOUDINARY_API_SECRET=\nCLOUDINARY_CLOUD_NAME=\n```\n\n- Client side `.env` will be needed if you want to host Reveal MD, namely `BASE_URL`\n- Put the `.env` file inside `/packages/admin-web/`\n\n```sh\nBASE_URL=\n```\n\n## Running the app\n\n- Development mode -- `npm run dev`\n- Building the Docker and run -- `npm run build \u0026\u0026 npm start`\n- Deploy to Heroku -- `npm run deploy` (Don't forget to `heroku create` first)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatarapolw%2Fblogdown-cms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatarapolw%2Fblogdown-cms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatarapolw%2Fblogdown-cms/lists"}