{"version":1,"pages":[{"id":"HYaObaURvgklyiYZO81d","title":"Welcome","pathname":"/safe-clean-architecture","siteSpaceId":"sitesp_iD2Wv","icon":"hand-wave","description":""},{"id":"J4kbSKzyMwremT3334my","title":"Motivations","pathname":"/safe-clean-architecture/motivations","siteSpaceId":"sitesp_iD2Wv","icon":"compass","description":""},{"id":"XG6uzdANyxQtAtGveiGe","title":"Audience","pathname":"/safe-clean-architecture/audience","siteSpaceId":"sitesp_iD2Wv","icon":"microphone-lines","description":""},{"id":"FMuu0swdexaH16biHEFN","title":"Status","pathname":"/safe-clean-architecture/status","siteSpaceId":"sitesp_iD2Wv","icon":"location-check","description":"Indicates the progress status of the book and its companion app, Shopfoo."},{"id":"vPRYbnwKGgQu1RModm4M","title":"Introduction","pathname":"/safe-clean-architecture/shopfoo/introduction","siteSpaceId":"sitesp_iD2Wv","icon":"play","description":"","breadcrumbs":[{"label":"Shopfoo","icon":"basket-shopping-simple"}]},{"id":"L9MmAmjlJEXacv7rYMfL","title":"General Features","pathname":"/safe-clean-architecture/shopfoo/general","siteSpaceId":"sitesp_iD2Wv","icon":"star","description":"","breadcrumbs":[{"label":"Shopfoo","icon":"basket-shopping-simple"}]},{"id":"waw3nACjUP8PpMCY1p2A","title":"Navigation & UI","pathname":"/safe-clean-architecture/shopfoo/navigation","siteSpaceId":"sitesp_iD2Wv","icon":"sidebar","description":"","breadcrumbs":[{"label":"Shopfoo","icon":"basket-shopping-simple"}]},{"id":"NGZf97G9fqTQtFqve2ar","title":"Products","pathname":"/safe-clean-architecture/shopfoo/products","siteSpaceId":"sitesp_iD2Wv","icon":"product-hunt","description":"","breadcrumbs":[{"label":"Shopfoo","icon":"basket-shopping-simple"}]},{"id":"Z2haQCoEqghvRMUUl7r7","title":"Product Management","pathname":"/safe-clean-architecture/shopfoo/management","siteSpaceId":"sitesp_iD2Wv","icon":"user-tie","description":"","breadcrumbs":[{"label":"Shopfoo","icon":"basket-shopping-simple"}]},{"id":"eSUzqTkP09SH3VL1D79S","title":"Introduction","pathname":"/safe-clean-architecture/architecture/architecture","siteSpaceId":"sitesp_iD2Wv","icon":"light-ceiling","description":"","breadcrumbs":[{"label":"Architecture","icon":"archway"}]},{"id":"SEi7rHjlRW5Jc0FRxnEO","title":"Overview","pathname":"/safe-clean-architecture/architecture/architecture-1","siteSpaceId":"sitesp_iD2Wv","icon":"diagram-successor","description":"","breadcrumbs":[{"label":"Architecture","icon":"archway"}]},{"id":"4czaS0ZuVxkwO2XtpzCL","title":"Solution Organisation","pathname":"/safe-clean-architecture/architecture/1-solution-orga","siteSpaceId":"sitesp_iD2Wv","icon":"inboxes","description":"","breadcrumbs":[{"label":"Architecture","icon":"archway"}]},{"id":"O4Ub4QPcSn8JMvvtYHO3","title":"Principles","pathname":"/safe-clean-architecture/architecture/2-principles","siteSpaceId":"sitesp_iD2Wv","icon":"lightbulb-exclamation-on","description":"","breadcrumbs":[{"label":"Architecture","icon":"archway"}]},{"id":"EcnBK51qLh40CuvmAaKw","title":"Introduction","pathname":"/safe-clean-architecture/domain-workflows/1-introduction","siteSpaceId":"sitesp_iD2Wv","icon":"presentation-screen","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"}]},{"id":"qTKwFX3J9fIvGA7kqkRT","title":"Dependency Injection","pathname":"/safe-clean-architecture/domain-workflows/1-introduction/1-dependency-injection","siteSpaceId":"sitesp_iD2Wv","icon":"syringe","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Introduction","icon":"presentation-screen"}]},{"id":"xSI9ApOwlrLnu4Dd94Zn","title":"Dependency Interpretation","pathname":"/safe-clean-architecture/domain-workflows/1-introduction/2-dependency-interpretation","siteSpaceId":"sitesp_iD2Wv","icon":"hands-asl-interpreting","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Introduction","icon":"presentation-screen"}]},{"id":"ddYRq9LL57TlP5Xk2227","title":"Free Monad","pathname":"/safe-clean-architecture/domain-workflows/1-introduction/3-free-monad","siteSpaceId":"sitesp_iD2Wv","icon":"diamond-half-stroke","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Introduction","icon":"presentation-screen"}]},{"id":"z1bumg3eJpuhmOXQvuOa","title":"Algebraic Effects","pathname":"/safe-clean-architecture/domain-workflows/1-introduction/4-algebraic-effects","siteSpaceId":"sitesp_iD2Wv","icon":"diamonds-4","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Introduction","icon":"presentation-screen"}]},{"id":"DapZ0ZB73D3nuMro6yZH","title":"Tagless Final","pathname":"/safe-clean-architecture/domain-workflows/1-introduction/5-tagless-final","siteSpaceId":"sitesp_iD2Wv","icon":"tag","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Introduction","icon":"presentation-screen"}]},{"id":"eDiQLkfg3mGuxAePB9Q3","title":"Program","pathname":"/safe-clean-architecture/domain-workflows/2-program","siteSpaceId":"sitesp_iD2Wv","icon":"brackets-curly","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"}]},{"id":"pZ6sOogDtm011HY1NyiP","title":"Addendum: Pattern Variations","pathname":"/safe-clean-architecture/domain-workflows/2-program/pattern-variations","siteSpaceId":"sitesp_iD2Wv","icon":"lambda","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Program","icon":"brackets-curly"}]},{"id":"gbUjKxJuTQXH0xp1w7B7","title":"Domain Project","pathname":"/safe-clean-architecture/domain-workflows/3-domain-workflow","siteSpaceId":"sitesp_iD2Wv","icon":"rectangle-history","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"}]},{"id":"YRwq6ghwBQnTkTxKmEqp","title":"Domain Model","pathname":"/safe-clean-architecture/domain-workflows/3-domain-workflow/0-domain-model","siteSpaceId":"sitesp_iD2Wv","icon":"cube","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Domain Project","icon":"rectangle-history"}]},{"id":"Woo5DXqrkcYSAcOMcfJL","title":"Instructions","pathname":"/safe-clean-architecture/domain-workflows/3-domain-workflow/1-instructions","siteSpaceId":"sitesp_iD2Wv","icon":"rectangle-terminal","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Domain Project","icon":"rectangle-history"}]},{"id":"uPtHcbjEtAMAR11URE3e","title":"Workflows","pathname":"/safe-clean-architecture/domain-workflows/3-domain-workflow/2-workflows","siteSpaceId":"sitesp_iD2Wv","icon":"arrow-progress","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Domain Project","icon":"rectangle-history"}]},{"id":"274pUn0wknmbC08NCNbo","title":"Data","pathname":"/safe-clean-architecture/domain-workflows/3-domain-workflow/3-data","siteSpaceId":"sitesp_iD2Wv","icon":"database","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Domain Project","icon":"rectangle-history"}]},{"id":"sBAv6WzBOG1i7PKH9FPm","title":"Api","pathname":"/safe-clean-architecture/domain-workflows/3-domain-workflow/4-api","siteSpaceId":"sitesp_iD2Wv","icon":"webhook","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Domain Project","icon":"rectangle-history"}]},{"id":"RHxSW2H1fMq9jVJ834dc","title":"Conclusion","pathname":"/safe-clean-architecture/domain-workflows/3-domain-workflow/5-conclusion","siteSpaceId":"sitesp_iD2Wv","icon":"clipboard-list","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"},{"label":"Domain Project","icon":"rectangle-history"}]},{"id":"Vl2PavJprzKH5Q0i2yD3","title":"Tests","pathname":"/safe-clean-architecture/domain-workflows/4-tests","siteSpaceId":"sitesp_iD2Wv","icon":"vial-circle-check","description":"","breadcrumbs":[{"label":"Domain workflows","icon":"arrow-progress"}]},{"id":"pQHfMbM9f0aRFJuUWbJt","title":"Elmish","pathname":"/safe-clean-architecture/front-end/elmish","siteSpaceId":"sitesp_iD2Wv","icon":"command","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"}]},{"id":"iMBeOYfEFAst1FZH9l8W","title":"SAFEr template","pathname":"/safe-clean-architecture/front-end/elmish/safer-template","siteSpaceId":"sitesp_iD2Wv","icon":"shield-heart","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"},{"label":"Elmish","icon":"command"}]},{"id":"i9ICctaGDR8Y9h75NF7h","title":"Data flow","pathname":"/safe-clean-architecture/front-end/elmish/data-flow","siteSpaceId":"sitesp_iD2Wv","icon":"chart-network","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"},{"label":"Elmish","icon":"command"}]},{"id":"taThApiH3biMd9XA4V4e","title":"Tests","pathname":"/safe-clean-architecture/front-end/elmish/tests","siteSpaceId":"sitesp_iD2Wv","icon":"flask-vial","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"},{"label":"Elmish","icon":"command"}]},{"id":"QknDHnaxO1X5HlG1mLXh","title":"Navigation","pathname":"/safe-clean-architecture/front-end/navigation","siteSpaceId":"sitesp_iD2Wv","icon":"diamond-turn-right","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"}]},{"id":"Xb9Oc9ChXVgApQQ4bF07","title":"Notifications","pathname":"/safe-clean-architecture/front-end/notifications","siteSpaceId":"sitesp_iD2Wv","icon":"message-check","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"}]},{"id":"S0NdI7bBskyLOGxUADfy","title":"Remoting","pathname":"/safe-clean-architecture/front-end/remoting","siteSpaceId":"sitesp_iD2Wv","icon":"tower-cell","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"}]},{"id":"JI3lYVXHoxfZ0YiCxSc9","title":"Security","pathname":"/safe-clean-architecture/front-end/security","siteSpaceId":"sitesp_iD2Wv","icon":"shield-user","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"}]},{"id":"SGJgE8NnNFR5BW3HnpNa","title":"Translations","pathname":"/safe-clean-architecture/front-end/translations","siteSpaceId":"sitesp_iD2Wv","icon":"globe","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"}]},{"id":"SUNQETVzQn6anJBVjvB7","title":"Validation","pathname":"/safe-clean-architecture/front-end/validation","siteSpaceId":"sitesp_iD2Wv","icon":"clipboard-list-check","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"}]},{"id":"rqfavMCzu7ZT6oH6MKWD","title":"Versioning","pathname":"/safe-clean-architecture/front-end/versioning","siteSpaceId":"sitesp_iD2Wv","icon":"code-pull-request","description":"","breadcrumbs":[{"label":"Front-end","icon":"sidebar"}]},{"id":"tUEIVZJrhDfGIZdIpQJy","title":"Index","pathname":"/safe-clean-architecture/tips-and-tricks/tips-and-tricks","siteSpaceId":"sitesp_iD2Wv","icon":"address-book","description":"","breadcrumbs":[{"label":"Tips & Tricks","icon":"lightbulb"}]},{"id":"AvlJY0YtD3xIn7TJnVkW","title":"As active pattern","pathname":"/safe-clean-architecture/tips-and-tricks/tips-and-tricks/as-active-pattern","siteSpaceId":"sitesp_iD2Wv","description":"","breadcrumbs":[{"label":"Tips & Tricks","icon":"lightbulb"},{"label":"Index","icon":"address-book"}]},{"id":"OCSf11alMjn6k2hG37oB","title":"F# formatting with Fantomas","pathname":"/safe-clean-architecture/tips-and-tricks/tips-and-tricks/fsharp-formatting","siteSpaceId":"sitesp_iD2Wv","description":"","breadcrumbs":[{"label":"Tips & Tricks","icon":"lightbulb"},{"label":"Index","icon":"address-book"}]},{"id":"413xzUI7HruGzuKBNeCe","title":"Better assertions","pathname":"/safe-clean-architecture/tips-and-tricks/tips-and-tricks/better-assertions","siteSpaceId":"sitesp_iD2Wv","description":"","breadcrumbs":[{"label":"Tips & Tricks","icon":"lightbulb"},{"label":"Index","icon":"address-book"}]},{"id":"RoErhaVjhXpfU7lK6yyg","title":"Lightweight FsCheck generators","pathname":"/safe-clean-architecture/tips-and-tricks/tips-and-tricks/lightweight-fscheck-generators","siteSpaceId":"sitesp_iD2Wv","description":"","breadcrumbs":[{"label":"Tips & Tricks","icon":"lightbulb"},{"label":"Index","icon":"address-book"}]},{"id":"dMr6erxjSgK7p14iXIzd","title":"Parameterized tests: mirror enums","pathname":"/safe-clean-architecture/tips-and-tricks/tips-and-tricks/parameterized-tests-mirror-enums","siteSpaceId":"sitesp_iD2Wv","description":"","breadcrumbs":[{"label":"Tips & Tricks","icon":"lightbulb"},{"label":"Index","icon":"address-book"}]},{"id":"aRQlr3Hiy1z2k26AI48L","title":"Strongly-typed identifiers","pathname":"/safe-clean-architecture/tips-and-tricks/tips-and-tricks/strongly-typed-ids","siteSpaceId":"sitesp_iD2Wv","description":"","breadcrumbs":[{"label":"Tips & Tricks","icon":"lightbulb"},{"label":"Index","icon":"address-book"}]},{"id":"mkIfCDESxo8wyYl25T0P","title":"Type hierarchy without OOP: SKU","pathname":"/safe-clean-architecture/tips-and-tricks/tips-and-tricks/sku-type-hierarchy","siteSpaceId":"sitesp_iD2Wv","description":"","breadcrumbs":[{"label":"Tips & Tricks","icon":"lightbulb"},{"label":"Index","icon":"address-book"}]},{"id":"YPvORWxRj9e9lXj7sf33","title":"Resources","pathname":"/safe-clean-architecture/appendices/resources","siteSpaceId":"sitesp_iD2Wv","icon":"link","description":"","breadcrumbs":[{"label":"Appendices","icon":"gifts"}]},{"id":"xNeL8zF5k3UM97fpBA9u","title":"Outreach","pathname":"/safe-clean-architecture/appendices/outreach","siteSpaceId":"sitesp_iD2Wv","icon":"linkedin","description":"","breadcrumbs":[{"label":"Appendices","icon":"gifts"}]},{"id":"BEZRggpCECejtvWCpHZm","title":"What if your pattern matching could call functions?","pathname":"/safe-clean-architecture/appendices/outreach/active-patterns","siteSpaceId":"sitesp_iD2Wv","description":"","breadcrumbs":[{"label":"Appendices","icon":"gifts"},{"label":"Outreach","icon":"linkedin"}]}]}