A reference application for learning how to build small, interoperable Solid applications with the Muze software stack.
This repository exists before the accompanying book does. The application is intended to reveal the real design problems first, so that Building Software on Solid Ground can explain solutions that have already survived implementation.
- Programming for Wizards explains why Muze is betting on Solid, linked data, replaceable applications, and user-controlled software.
- Building Software on Solid Ground will explain how to build that kind of software.
- This repository is the working reference implementation used to discover and test the material for the second book.
- The margin-notes component is the concrete example from Programming for Wizards: private reader notes first, stable passage addresses, linked meanings, user-owned storage, and deliberate sharing.
The project will provide an embeddable margin-notes component that a site can load with a script tag. Readers can attach notes to stable parts of a page, keep them in browser storage, optionally store them in their Solid Pod, combine their private notes with public note collections, and submit selected notes to a configurable inbox. The component must remain useful outside the original book website.
Implementation has started with a local-first slice, the first fixed-resource Solid storage slice, and the first SimplySolid workspace-backed storage path. The current code exposes the margin-notes package, mounts a SimplyFlow app through MarginNotes.mount(config), attaches quiet note affordances to host-supplied anchors, opens the Cobalt editor, and saves/restores OLDMed annotation subjects through a local-first SimplySolid notes resource.
The current storage shape uses OLDM-style prefix$predicate names. The default notes resource has an IndexedDB local replica and can attach a discovered Solid Turtle resource as its remote replica when the reader connects. createSolidResourceStore({ resourceUrl, solid }) remains available as a narrow fixed-resource adapter and compatibility test of the Solid stack. The automated tests now cover the annotation model, local store, Turtle-backed Solid resource store, executable host contract used by the component, local-first create/restore/edit/delete, Solid connect/sync, and keyboard-access paths against the mounted public API.
The package name is margin-notes.
- Build the application before writing the tutorial around it.
- Keep the data independent from the application.
- Use native linked data rather than mapping it into a closed application model.
- Preserve facts the application does not understand.
- Keep storage, transport, presentation, and application policy separate.
- Make Solid optional at first, but do not create a second data model for local storage.
- Prefer small replaceable parts over a framework that owns the whole application.
- Treat errors, permissions, partial data, and network failure as ordinary states.
- Clearly distinguish Solid standards, established conventions, Muze conventions, and experiments.
- Record unexpected design discoveries while they are still fresh.
- Treat the application as evidence for SimplySolid, not as a reason to implement its roadmap in advance.
- Distinguish designed, required, implemented, and application-validated capabilities.
- Warn before accepting changes that move away from the Programming for Wizards touchstone.
docs/REASON_FOR_EXISTENCE.md— why this project comes before the bookdocs/DESIGN.md— product and interaction designdocs/ARCHITECTURE.md— proposed system boundariesdocs/DATA_MODEL.md— initial linked-data modeldocs/PROGRAMMING_FOR_WIZARDS_TOUCHSTONE.md— the book's why applied to this componentdocs/MUZE_DESIGN_PRINCIPLES.md— Muze design principles applied to this projectdocs/IMPLEMENTATION_PLAN.md— vertical milestonesdocs/CURRENT_SLICE.md— the one active end-to-end slicedocs/DEMAND_DRIVEN_SIMPLYSOLID.md— how application needs may change SimplySoliddocs/DESIGN_PRESSURES.md— observed pressure on application and library boundariesdocs/SIMPLYSOLID_FEATURES.md— designed, required, implemented, and validated statesdocs/proposals/— evidence-based shared-library proposalsdocs/WORKING_WITH_SOLID_TOOLS.md— cross-repository workflowdocs/DECISIONS.md— accepted and proposed design decisionsdocs/OPEN_QUESTIONS.md— unresolved questions worth testingdocs/STACK_ASSUMPTIONS.md— expected roles of Muze librariesdocs/BOOK_FEEDBACK_LOOP.md— how implementation discoveries become book materialdocs/AI_WORKFLOW.mdandAGENTS.md— rules for AI-assisted workdocs/SECURITY_AND_PRIVACY.md— trust and privacy constraintsdocs/TEST_STRATEGY.md— what the reference implementation must prove
Continue the slice in docs/CURRENT_SLICE.md: validate the local-first SimplySolid connect/sync path against either a real disposable Solid server or an explicit reason that fake-client evidence is enough for the current teaching step.
MIT. Copyright muze.nl.