{"id":18395352,"url":"https://github.com/syall/json-timeline","last_synced_at":"2026-04-15T07:37:12.125Z","repository":{"id":57285349,"uuid":"321020076","full_name":"syall/json-timeline","owner":"syall","description":"Generate Interactive Timelines stored in JSON Advents with Tags.","archived":false,"fork":false,"pushed_at":"2020-12-15T04:24:50.000Z","size":403,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-09T09:14:29.589Z","etag":null,"topics":["advent","interactive","json","tag","timeline"],"latest_commit_sha":null,"homepage":"https://json-timeline.syall.work/","language":"JavaScript","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/syall.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}},"created_at":"2020-12-13T08:40:48.000Z","updated_at":"2020-12-15T04:24:52.000Z","dependencies_parsed_at":"2022-09-10T09:54:12.810Z","dependency_job_id":null,"html_url":"https://github.com/syall/json-timeline","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/syall/json-timeline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syall%2Fjson-timeline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syall%2Fjson-timeline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syall%2Fjson-timeline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syall%2Fjson-timeline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/syall","download_url":"https://codeload.github.com/syall/json-timeline/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syall%2Fjson-timeline/sbom","scorecard":{"id":862547,"data":{"date":"2025-08-11","repo":{"name":"github.com/syall/json-timeline","commit":"521c9b5ce3c1c3420e34ee0aa01b70705d2b7366"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/3 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":3,"reason":"7 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-6vfc-qv3f-vr6c","Warn: Project is vulnerable to: GHSA-5v2h-r2cx-5xgj","Warn: Project is vulnerable to: GHSA-rrrm-qjm4-v8hf","Warn: Project is vulnerable to: GHSA-mxhp-79qh-mcx6","Warn: Project is vulnerable to: GHSA-cf4h-3jhx-xvhq"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T01:44:39.825Z","repository_id":57285349,"created_at":"2025-08-24T01:44:39.825Z","updated_at":"2025-08-24T01:44:39.825Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273752976,"owners_count":25161909,"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-09-05T02:00:09.113Z","response_time":402,"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":["advent","interactive","json","tag","timeline"],"created_at":"2024-11-06T02:10:26.583Z","updated_at":"2026-04-15T07:37:07.089Z","avatar_url":"https://github.com/syall.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# json-timeline\n\n## Overview\n\nGenerate Interactive Timelines stored in JSON Advents with Tags.\n\n## Usage\n\nTo install the command-line application:\n\n```shell\nnpm install json-timeline\n```\n\nTo use the command-line application:\n\n```shell\njson-timeline path/to/advents/ path/to/output/ [vf]\n```\n\n### Process\n\nAdvents are loaded from the `path/to/advents` directory to generate a HTML/CSS/JS template (`index.html`, `index.css`, `index.js`, `renderAdvents.js`, `advents.js`) in the `path/to/output` directory. Existing files that clash names with the generated files will not be overwritten by default except for `advents.js`.\n\n### Arguments\n\nArgument           | Description\n-------------------|--------------------------------------------\n`path/to/advents/` | Path to Advents Directory\n`path/to/output/`  | Path to Output Directory\n`[vf]`             | `v`: verbose logging, `f`: force overwrites\n\n## Advents\n\nAdvents represent events in the timeline that each include a mandatory start date, title, content, and tags. An optional end date can also be supplied to change the date range in the rendered Advent DOM.\n\nAdvents are stored as JSON objects in `*.advent.json` files or default exports of `*.advent.js` files in a directory specified in `path/to/advents/`.\n\nThe Advent Schema can be found in [`schemas.js`](./src/schema/schemas.js):\n\n```javascript\n// AdventSchema\n{\n  \"start\": DateSchema,\n  \"end?\": DateSchema,\n  \"title\": String,\n  \"content\": String,\n  \"tags\": Array.of(String)\n}\n// DateSchema\n{\n  \"month\": Number,\n  \"day\": Number,\n  \"year\": Number\n}\n```\n\nExamples of Advents can be found in [`tst/example/`](./tst/example/).\n\n## Customization\n\nBy default, json-timeline generates a basic template that can be deployed as a static site (such as on GitHub pages). The template files can be edited safely after they have been generated once since running json-timeline again will not overwrite the edited files by default.\n\n- `index.html` provides a minimal HTML file\n- `index.css` provides styling for the rendered HTML\n- `index.js` is the entry point of the javascript\n- `renderedAdvents.js` dynamically generates HTML\n- `advents.js` provides the Advents and Tags and should NOT be edited\n\nAs reference for writing custom HTML/CSS/JS extending the template, minimal HTML are listed below.\n\n### Timeline\n\n```html\n\u003cbody\u003e\n  \u003c!-- Timeline Title --\u003e\n  \u003cp class=\"timeline mono-text\"\u003eTimeline\u003c/p\u003e\n  \u003c!-- Tag Toggles --\u003e\n  \u003cnav\u003e\u003c/nav\u003e\n  \u003c!-- Advent Groups --\u003e\n  \u003cmain\u003e\u003c/main\u003e\n\u003c/body\u003e\n```\n\n### Tag Toggles DOM\n\n```html\n\u003cnav\u003e\n  \u003c!-- Tag Toggles Label and Visibility Toggler --\u003e\n  \u003cp class=\"toggle-container-title mono-text\"\u003eTags [▼]\u003c/p\u003e\n  \u003c!-- Tag Toggles Container --\u003e\n  \u003cdiv class=\"toggles-container hidden\"\u003e\u003c/div\u003e\n\u003c/nav\u003e\n```\n\n### Tag Toggle DOM\n\n```html\n\u003cdiv class=\"toggles-container hidden\"\u003e\n  \u003c!-- Tag Toggle Container --\u003e\n  \u003cdiv class=\"toggle-container\"\u003e\n    \u003c!-- Tag Toggle Checkbox --\u003e\n    \u003cinput type=\"checkbox\" checked=\"true\" class=\"tag-toggle\"\u003e\n    \u003c!-- Tag Toggle Label --\u003e\n    \u003clabel class=\"tag-toggle-label mono-text\"\u003eTag Name\u003c/label\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n```\n\n### Advent Group DOM\n\n```html\n\u003cmain\u003e\n  \u003c!-- Advent Group --\u003e\n  \u003cdiv class=\"group\"\u003e\n    \u003c!-- Advent Group Date and Visibility Toggler --\u003e\n    \u003cp class=\"group-date mono-text\"\u003e1/1/1970 [▼]\u003c/p\u003e\n    \u003c!-- Advent Group Container --\u003e\n    \u003cdiv class=\"advents hidden\"\u003e\u003c/div\u003e\n  \u003c/div\u003e\n\u003c/main\u003e\n```\n\n### Advent DOM\n\n```html\n\u003cdiv class=\"advents hidden\"\u003e\n  \u003c!-- Advent --\u003e\n  \u003cdiv class=\"advent\"\u003e\n    \u003c!-- Advent Title --\u003e\n    \u003cp class=\"title mono-text\"\u003eAdvent Title\u003c/p\u003e\n    \u003c!-- Advent Date Range --\u003e\n    \u003cp class=\"date mono-text\"\u003e1/1/1970\u003c/p\u003e\n    \u003c!-- Advent Tags --\u003e\n    \u003cp class=\"tags mono-text\"\u003eTags:Tag1,Tag2\u003c/p\u003e\n    \u003c!-- Advent Content --\u003e\n    \u003cp class=\"content read-text\"\u003eOutput content here.\u003c/p\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyall%2Fjson-timeline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsyall%2Fjson-timeline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyall%2Fjson-timeline/lists"}