|
2 | 2 |  |
3 | 3 |  |
4 | 4 |
|
5 | | -General tooling for interactive tutoring systems, with experimentation toward |
| 5 | +Modular toolkit for the construction of interactive tutoring systems, with experimentation toward |
6 | 6 | - mass-collaborative authoring |
7 | 7 | - mixture-of-expert-systems guided learning |
8 | 8 | - self-healing courses via proactive surfacing of learning bottlenecks |
9 | | -- content inheritance between courses |
| 9 | +- schema definition to share content between courses, e.g., a package manager for curricula |
| 10 | +- MCP hooks for LLMs to responsibly generate structured content according to structured demand; slop on rails |
10 | 11 |
|
11 | | -Think: the FOSS lovechild of anki, duolingo, wikipedia, and MathAcadamy, with a more generalized surface area for the types of content and skills that can be exercised. |
| 12 | +Think: the FOSS lovechild of Anki, Duolingo, Wikipedia, and MathAcademy, with a more generalized surface area for the types of content and skills that can be exercised. |
12 | 13 |
|
13 | | -Aiming toward effective libraries and a main learner-loop to enable: |
14 | | -- a. independent authoring of individual courses |
15 | | -- b. community developed courses |
16 | | -- c. a platform to support both a. and b. |
| 14 | +## Quick Start |
17 | 15 |
|
18 | | -## Project Architecture |
19 | | - |
20 | | -This monorepo contains three top-level system components: |
21 | | - |
22 | | -- **Vue SPA Frontend** (`packages/platform-ui`): Vue 3 + Vuetify 3 progressive web app |
23 | | -- **Express API** (`packages/express`): Node.js backend API |
24 | | -- **CouchDB Database**: Storage layer with replication protocol support |
25 | | - |
26 | | -Which are in turn built from the helper packages: |
| 16 | +### For Course Creators (building *with* `vue-skuilder`) (start here!) |
27 | 17 |
|
28 | | -- `common`: some core logic and interfaces that define communication between project components |
29 | | -- `common-ui`: UI components useful in both a `platform` and standalone `course` context |
30 | | -- `courses`: logic and interfaces for both generic and domain specific courses. |
31 | | -- `db`: interfaces for the application's communication with the data later, and an implementation for CouchDB backend via PouchDB |
| 18 | +Install the Skuilder CLI to create your first course: |
32 | 19 |
|
33 | | -## Development Quick Start |
34 | | - |
35 | | -### Prerequisites |
| 20 | +```bash |
| 21 | +npm install -g skuilder # npx ok too! |
| 22 | +skuilder init my-course --data-layer=static |
| 23 | +cd my-course |
| 24 | +npm run dev # serve your course locally |
| 25 | +npm run studio # edit your course content via web UI |
| 26 | +``` |
36 | 27 |
|
37 | | -- Node.js 18+ |
38 | | -- Yarn 4 (or corepack) |
39 | | -- Docker (for development database) |
| 28 | +### For Platform Developers / Contributors (building `vue-skuilder` itself) |
40 | 29 |
|
41 | | -### Commands |
| 30 | +Clone and develop the full platform: |
42 | 31 |
|
43 | 32 | ```bash |
44 | 33 | git clone https://github.com/patched-network/vue-skuilder.git |
45 | 34 | cd vue-skuilder |
46 | | -git submodule update --init --recursive # a test-time database dump |
47 | 35 | yarn install |
48 | | -yarn dev |
| 36 | +yarn setup # makes git submodule available - test database |
| 37 | +yarn dev # runs platform-ui, express API, and CouchDB |
49 | 38 | ``` |
50 | 39 |
|
51 | | -`dev` here: |
52 | | -- Builds packages |
53 | | -- Starts a local CouchDB instance in Docker with test data (http://localhost:5984) |
54 | | -- Launches the Express backend server (http://localhost:3000) |
55 | | -- Launches the Vue frontend (http://localhost:5173) |
| 40 | +## Project Architecture |
56 | 41 |
|
57 | | -## Production Build |
| 42 | +This monorepo is structured to support both **platform development** and **course creation**. |
58 | 43 |
|
59 | | -```bash |
60 | | -yarn build |
| 44 | +Broadly: an education system has `User` and `Content` as endpoints, with `UI` as the mediating software in between. |
| 45 | + |
| 46 | +Here: |
| 47 | + |
| 48 | +### User |
| 49 | + |
| 50 | +The only user abstraction in the project is the `UserDBInterface`, which lives in the `@vue-skuilder/db` package. It's powered by PouchDB, which stores data locally in the case of static courses, or syncs with a CouchDB backend in dynamic / platform deployments. |
| 51 | + |
| 52 | +### Content |
| 53 | + |
| 54 | +Again, contained in the `db` package. Content is served over a core interface: |
| 55 | + |
| 56 | +``` |
| 57 | +interface StudyContentSource { |
| 58 | + getPendingReviews(): Promise<(StudySessionReviewItem & ScheduledCard)[]>; |
| 59 | + getNewCards(n?: number): Promise<StudySessionNewItem[]>; |
| 60 | +} |
61 | 61 | ``` |
62 | 62 |
|
63 | | -This builds all packages and outputs the frontend as a static web app in the `packages/platform-ui/dist` folder and the backend in `packages/express/dist`. |
| 63 | +Various implementations satisfy this interface, but the important distinction is that content can be either **static** (JSON files) or **dynamic** (CouchDB database). The `db` package contains converters to transform courses between these form factors as well, enabling, e.g., checkpointing and portable deployment of a 'live' course. |
| 64 | + |
| 65 | +### UI |
| 66 | + |
| 67 | +There are several UI *application* packages: |
| 68 | +- `standalone-ui`: a skeleton static SPA for rendering a course. The thing that you'd deploy as user-facing. |
| 69 | +- `studio-ui`: a focused content editor for individual courses, usable against either static or dynamic courses. |
| 70 | +- `platform-ui`: ⚠️functional wip⚠️ a static SPA for managing many users and courses, allowing, e.g., multi-course study sessions, user course creation, classrooms (teacher-led cohorts). NB: the site itself is static, but it connects to a dynamic backend API and CouchDB database. |
| 71 | +- `tuilder`: ⚠️**non**-functional wip⚠️ a tui for consuming courses in the terminal |
| 72 | + |
| 73 | +And some shared UI packages: |
| 74 | +- `common-ui`: a library of reusable Vue components and utilities |
| 75 | +- `courses`: a package containing domain-specific course logic and content types, also base-types for course content rendering components (e.g., a Chessboard component for a chess course) |
| 76 | +- `edit-ui`: course editing widgets used in both `studio-ui` and `platform-ui` |
| 77 | + |
| 78 | +All web UI is built with Vue 3 and Vuetify 3, in TypeScript, mostly with Composition API and Pinia state management. All web UI shares most of its config via `./vite.config.base.json` |
| 79 | + |
| 80 | +### Glue |
| 81 | + |
| 82 | +The `express` backend API server is responsible, in dynamic-data contexts, for: |
| 83 | +- post-processing media content |
| 84 | +- enforcing correct metadata in course databases |
| 85 | +- handling various user requests |
| 86 | +- and probably other stuff as well! |
| 87 | + |
| 88 | +The `common` package contains some core logic and interfaces that define communication between components. |
| 89 | + |
| 90 | +### Utility |
| 91 | + |
| 92 | +The `cli` package (published on npm as `skuilder`) gives commands to create, manage, or migrate courses. See [packages/cli/README.md](packages/cli/README.md) for more details. |
| 93 | + |
| 94 | +## 🤝 Contributing |
| 95 | + |
| 96 | +Please do: |
| 97 | +- kick tires |
| 98 | +- file issues (bugs) |
| 99 | +- file issues (questions) |
| 100 | +- file issues (feature requests, roadmap / vision discussions) |
| 101 | +- open smallish PRs that present as clear wins, even without prior discussion |
| 102 | + |
| 103 | +Probably don't: |
| 104 | +- open large PRs without prior discussion |
64 | 105 |
|
65 | | -## License |
| 106 | +## 📄 License |
66 | 107 |
|
67 | 108 | This project is licensed under: |
68 | 109 |
|
|
0 commit comments