{"id":13694299,"url":"https://github.com/Thomvis/Construct","last_synced_at":"2025-05-03T01:32:38.439Z","repository":{"id":37699723,"uuid":"298809329","full_name":"Thomvis/Construct","owner":"Thomvis","description":"Dungeons \u0026 Dragons DM companion app in SwiftUI","archived":false,"fork":false,"pushed_at":"2023-09-11T11:29:47.000Z","size":71329,"stargazers_count":120,"open_issues_count":2,"forks_count":5,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-11-07T23:02:25.379Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.construct5e.app","language":"Swift","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/Thomvis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-09-26T12:27:26.000Z","updated_at":"2024-11-02T18:01:07.000Z","dependencies_parsed_at":"2024-01-18T05:23:41.395Z","dependency_job_id":null,"html_url":"https://github.com/Thomvis/Construct","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thomvis%2FConstruct","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thomvis%2FConstruct/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thomvis%2FConstruct/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Thomvis%2FConstruct/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Thomvis","download_url":"https://codeload.github.com/Thomvis/Construct/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224346493,"owners_count":17296223,"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","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":[],"created_at":"2024-08-02T17:01:28.908Z","updated_at":"2024-11-12T20:32:04.641Z","avatar_url":"https://github.com/Thomvis.png","language":"Swift","readme":"\u003cimg src=\"https://github.com/Thomvis/Construct/raw/main/assets/logo.png\" height=\"25\" /\u003e Construct: D\u0026D companion app in SwiftUI\n===\n\n![](https://github.com/Thomvis/Construct/workflows/Construct%20CI/badge.svg?branch=main) [![](https://img.shields.io/badge/TestFlight-join-blue.svg)](https://testflight.apple.com/join/tvK1gYv9)\n\n| \u003cimg src=\"https://github.com/Thomvis/Construct/raw/main/assets/screenshot1.png\" width=\"200\" /\u003e | \u003cimg src=\"https://github.com/Thomvis/Construct/raw/main/assets/screenshot2.png\" width=\"200\" /\u003e | \u003cimg src=\"https://github.com/Thomvis/Construct/raw/main/assets/screenshot3.png\" width=\"200\" /\u003e |  \u003cimg src=\"https://github.com/Thomvis/Construct/raw/main/assets/screenshot4.png\" width=\"200\" /\u003e |\n|---|---|---|---|\n\n## Project Goals\nThis project aims to be...\n- 🐉 an easy to use companion app for Dungeon Masters running [5th edition D\u0026D](https://en.wikipedia.org/wiki/Dungeons_%26_Dragons)\n- 🎓 a resource for developers learning [SwiftUI](https://developer.apple.com/xcode/swiftui/) and [The Composable Architecture](https://github.com/pointfreeco/swift-composable-architecture)\n\n### For Dungeon Masters\nThe easiest way to use the app is by downloading it from the App Store.\n\n\u003ca href=\"https://apps.apple.com/app/construct-for-d-d-5e/id1490015210\"\u003e\u003cimg src=\"https://github.com/Volorf/Badges/blob/master/App%20Store/App%20Store%20Badge.png?raw=true\" width=\"150\" /\u003e\u003c/a\u003e\n\nYou can find an overview of Construct's features at [construct5e.app](https://www.construct5e.app).\n\n### For developers\nDownload the project, open `Construct.xcodeproj` and run `Construct`.\n\n#### Architecture overview\nConstruct is built using SwiftUI and a reducer-based architecture implemented using [The Composable Architecture](https://github.com/pointfreeco/swift-composable-architecture) framework. The entire app's state is represented by the [AppState struct](https://github.com/Thomvis/Construct/blob/main/Construct/App/AppState.swift), a deeply nested data structure containing the top-level screens and any screen, sheet or popover opened from there. A [tight integration](https://github.com/Thomvis/Construct/blob/main/Construct/Foundation/Navigation.swift) between SwiftUI's NavigationLink and the app's state make programmatic navigation a breeze.\n\nAll data in the app is stored locally in an sqlite database using [GRDB](http://groue.github.io/GRDB.swift/). Construct defines a simple [key-value store](https://github.com/Thomvis/Construct/blob/main/Construct/Persistence/KeyValueStore.swift) on top of GRDB. All entities are serialized using Swift's Codable, can optionally support full-text search and are [automatically](https://github.com/Thomvis/Construct/blob/main/Construct/Persistence/EntityChangeObserver.swift) saved in the database when they change in the app state.\n\nThe D\u0026D domain calls for some interesting parsing solution. Construct contains a small [parser combinator framework](https://github.com/Thomvis/Construct/blob/main/Construct/Foundation/ParserCombinator.swift) and defines a couple of [interesting](https://github.com/Thomvis/Construct/blob/main/Construct/Models/CreatureActionParser.swift) [parsers](https://github.com/Thomvis/Construct/blob/main/Construct/Models/DiceExpressionParser.swift).\n\nI hope to write posts detailing some of the interesting parts of the app in the future.\n","funding_links":[],"categories":["Uncategorized","Misc","Swift"],"sub_categories":["Uncategorized","Notes"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FThomvis%2FConstruct","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FThomvis%2FConstruct","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FThomvis%2FConstruct/lists"}