{"id":13876185,"url":"https://github.com/fuxingloh/contented","last_synced_at":"2025-10-27T21:30:26.354Z","repository":{"id":45551433,"uuid":"512176860","full_name":"fuxingloh/contented","owner":"fuxingloh","description":"Contented is a Markdown-based authoring workflow \u0026 processor that encourage developer authoring within its contextual Git repository.","archived":true,"fork":false,"pushed_at":"2025-02-08T12:31:01.000Z","size":15392,"stargazers_count":52,"open_issues_count":24,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-22T21:58:20.044Z","etag":null,"topics":["authoring","cms","content","markdown","nextjs","unifiedjs","workflows","writing"],"latest_commit_sha":null,"homepage":"https://contented.fuxing.dev","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/fuxingloh.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-09T12:12:04.000Z","updated_at":"2025-02-08T16:31:24.000Z","dependencies_parsed_at":"2022-08-12T11:52:23.033Z","dependency_job_id":"c066edb4-2660-45de-95f2-e8b9842d4e44","html_url":"https://github.com/fuxingloh/contented","commit_stats":{"total_commits":795,"total_committers":6,"mean_commits":132.5,"dds":0.3106918238993711,"last_synced_commit":"777472da2d5eadc20e395c71b041020f5dc0c7df"},"previous_names":["levaintech/contented","birthdayresearch/contented","fuxingloh/contented"],"tags_count":98,"template":false,"template_full_name":null,"purl":"pkg:github/fuxingloh/contented","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuxingloh%2Fcontented","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuxingloh%2Fcontented/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuxingloh%2Fcontented/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuxingloh%2Fcontented/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fuxingloh","download_url":"https://codeload.github.com/fuxingloh/contented/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fuxingloh%2Fcontented/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281012060,"owners_count":26429438,"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-25T02:00:06.499Z","response_time":81,"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":["authoring","cms","content","markdown","nextjs","unifiedjs","workflows","writing"],"created_at":"2024-08-06T06:01:06.800Z","updated_at":"2025-10-27T21:30:26.039Z","avatar_url":"https://github.com/fuxingloh.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","nextjs"],"sub_categories":[],"readme":"# Contented\n\n[Contented](https://contented.fuxing.dev) is a prose bundler for your documentation with pipeline driven authoring-oriented workflow to encourage developers authoring within its contextual Git repository.\n\nWith a headless design of 1 config file `contented.config.mjs`,\ndevelopers can start writing their [markdown content](./04-markdown.md)\nand preview it on their localhost `contented generate --watch`.\nChoosing convention over configuration reduces HTML/UI clutter, allowing developers to focus on authoring.\n\nAuthored content can be continuously delivered (CD) into a hosted static site\n(e.g., GitHub Pages/Netlify/Vercel) for preview `contented generate`.\nAs code drift, so does documentation;\nthis allows each pull request to have an accompanying sharable preview of the documentation.\nWith CD, it effectively shift-left your documentation workflow and checks it is compilable and presentable.\n\nBy encouraging authoring next to the source (in the same git repo),\ndevelopers can contextually document changes as they develop.\nAll domain-specific changes will go into the `main` branch with one Git Pull Request.\n\nWith `contented build`, you can compile your prose into sources `index.js` and `*.json`.\nThat output into `./dist` to `npm publish` them into any registry of your choice,\nfor you can easily `npm i @your-scope/your-npm-package` and use the processed content on any of your downstream sites.\nEasily pulling up-to-date content and prose from individual domain-specific repositories and re-presented.\nThink microservices, but for your prose!\n\n## Motivation\n\nIf you don’t make it easy to get something done (authoring),\nnobody will go out of their way to get it done perfectly every time.\nTurn it into a GitOps workflow\nand give people the necessary tools and power to get it done perfectly every single time —\neveryone will get it done, as now there is no other way else to get it done.\nAn efficient workflow naturally satisfies.\n\n### Just Another SSG?\n\n**This is not a static site generator.**\nThis is a prose processor workflow with a built-in static site generator.\nThe outcome\nwe're trying to achieve is this [@contentedjs/contented-example/dist](https://www.jsdelivr.com/package/npm/@contentedjs/contented-example)\n\n\u003e [See Contented Limitations](./09-Others/02-limitations.md)\n\n## Powered By\n\n- [Next](https://nextjs.org/)\n- [Tailwind](https://tailwindcss.com/)\n- [@babel/generator](https://babeljs.io/docs/en/babel-generator)\n- [unified](https://www.npmjs.com/package/unified)\n\n## Getting Started\n\nYour docs can be anywhere as long as contented is configured to pick them up.\n\n```text\nrepo/\n├─ packages/**\n├─ docs/\n│  ├─ 01-Title 1/*.md\n│  ├─ 02-Title 2/*.md\n│  ├─ 03-Title 3/\n│  │  ├─ 01-Subtitle 1/*.md\n│  │  ├─ 02-overview.md\n│  │  └─ 03-faq.md\n│  └─ package.json\n├─ contented.config.mjs\n├─ package.json\n└─ README.md\n```\n\n**package.json**\n\n```json\n{\n  \"name\": \"@contentedjs/contented-example\",\n  \"version\": \"0.0.0\",\n  \"private\": false,\n  \"files\": [\"dist\"],\n  \"main\": \"dist/index.js\",\n  \"scripts\": {\n    \"write\": \"contented generate --watch\",\n    \"generate\": \"contented generate\",\n    \"build\": \"contented build\"\n  },\n  \"devDependencies\": {\n    \"@contentedjs/contented\": \"latest\"\n  }\n}\n```\n\n**contented.config.mjs**\n\n```js\n/** @type {import('@contentedjs/contented').ContentedConfig} */\nexport default {\n  preview: {\n    url: 'https://contented.fuxing.dev',\n    name: 'Contented',\n    github: {\n      url: 'https://github.com/fuxingloh/contented',\n    },\n  },\n  processor: {\n    pipelines: [\n      {\n        type: 'Docs',\n        pattern: 'docs/**/*.md',\n        processor: 'md',\n        fields: {\n          title: {\n            type: 'string',\n            required: true,\n            resolve: (s) =\u003e s ?? 'Contented',\n          },\n          description: {\n            type: 'string',\n          },\n          tags: {\n            type: 'string[]',\n          },\n        },\n        transform: (file) =\u003e {\n          file.path = file.path.replaceAll(/^\\/docs\\/?/g, '/');\n          file.sections = file.sections.slice(1);\n          return file;\n        },\n      },\n    ],\n  },\n};\n```\n\n### Examples\n\n- [developer.levain.tech](https://developer.levain.tech) Website Built with Contented\n- [fuxingloh/contented/packages/contented-example](https://github.com/fuxingloh/contented/tree/main/packages/contented-example)\n- [levaintech/sticky/packages/docs](https://github.com/levaintech/sticky/tree/main/packages/docs)\n- [fuxingloh/jellyfishsdk-docs](https://github.com/fuxingloh/jellyfishsdk-docs)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffuxingloh%2Fcontented","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffuxingloh%2Fcontented","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffuxingloh%2Fcontented/lists"}