{"ref":"artifact:mariokernich-ui5-cap-todo","page":"/artifacts/mariokernich-ui5-cap-todo","json":"/artifacts/mariokernich-ui5-cap-todo.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"mariokernich-ui5-cap-todo","name":"ui5-cap-todo","artifact_type":"sample","ecosystem":"cap","domain":"learning-and-reference","origin_ring":"independent","serves_ecosystems":["ui5"],"description":{"one_line":"A todo application with a CAP backend and a SAPUI5 frontend, both in TypeScript, connected over OData V4 in one pnpm workspace, with projects and their todos in a master-detail FlexibleColumnLayout.","short":"Todo app with CAP and SAPUI5 in TypeScript over OData V4","what_it_solves":"Projects and their todos in a master-detail `FlexibleColumnLayout`, with deadlines, priorities, inline editing, a status filter, sorting and grouping. On the CAP side it has a bound action `completeAll`, per-project progress computed as virtual elements, and a validation that rejects past deadlines with localised messages; the UI5 side binds an OData V4 model and transpiles with `ui5-tooling-transpile`. Data is seeded from CSV into a SQLite file, or into memory with a separate start script. German and English texts cover both halves."},"links":{"repo":"https://github.com/mariokernich/ui5-cap-todo"},"compat":{"runtimes":["node"],"typed":true},"type_properties":{"form":{"value":"reference-application","sources":[{"url":"https://github.com/mariokernich/ui5-cap-todo","title":"ui5-cap-todo — README","checked":"2026-10-18","quote":"Best-practice example of a fullstack app with **SAP CAP** (Node.js/TypeScript) as backend and **SAPUI5** (TypeScript) as frontend, connected via **OData V4**."}]}},"demonstrates":["capability:reference-apps"],"maintainers":["actor:mariokernich"],"source_available":true,"drafted_with_ai":true,"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-09-13"},"contributors":["actor:mariokernich"]},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-07, not archived"}],"compatibility":[{"label":"Declared for","tier":"fair","evidence":"nothing declared"},{"label":"Survived majors","tier":"unknown","evidence":"no release dates"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"poor","evidence":"none found in the tree"},{"label":"Docs","tier":"fair","evidence":"README 3 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","npm":"not published under this name","stars":0,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2026-07-11","license_spdx":null,"org_owned":false,"default_branch":"main","created_at":"2026-07-08T14:48:40Z","open_prs":0,"tree_truncated":false,"test_files":0,"workflows":0,"other_ci":false,"readme_bytes":3456,"docs_files":0,"changelog":false,"license_file":false,"dts_files":0,"first_commit":"2026-07-08","last_commit":"2026-07-11","commits":10,"contributors":1,"readme_path":"README.md","readme_sha":"76f1a5f09533948eb77e91bd91810a2fec1094a5","repo_read":"2026-10-26"},"edges":{"maintainers":[{"ref":"actor:mariokernich","name":"Mario Kernich","json":"/actors/mariokernich.json"}],"contributors":[{"ref":"actor:mariokernich","name":"Mario Kernich","json":"/actors/mariokernich.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}