https://github.com/saboteur-works/getwrite
A local-first writing studio
https://github.com/saboteur-works/getwrite
writer-tools writing-software
Last synced: 3 days ago
JSON representation
A local-first writing studio
- Host: GitHub
- URL: https://github.com/saboteur-works/getwrite
- Owner: saboteur-works
- Created: 2026-02-16T04:16:38.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-06-10T23:10:18.000Z (8 days ago)
- Last Synced: 2026-06-11T01:09:06.824Z (7 days ago)
- Topics: writer-tools, writing-software
- Language: TypeScript
- Homepage: https://getwrite.app
- Size: 3.97 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Roadmap: docs/roadmap.md
Awesome Lists containing this project
README
# GetWrite
GetWrite is a local-first writing workspace focused on structured projects, resource templates, and reproducible project scaffolding. This monorepo contains the frontend app, CLI tooling, specs, and documentation used to develop, test, and extend GetWrite.
## Quick links
- Docs: `docs/features` (project types, sidecars, data types)
- Specs examples: `specs/002-define-data-models/project-types/`
- Runtime templates: `getwrite-config/templates/project-types/`
- Frontend source: `frontend/src`
## Requirements
- Node.js >= 24 (we use Volta in CI/dev). If using nvm:
- pnpm (preferred package manager). Install with npm if needed:
```bash
npm install -g pnpm
```
## Setup
1. Install dependencies (repo root):
```bash
pnpm install
```
2. Install frontend workspace dependencies (if working in `frontend` alone):
```bash
cd frontend
pnpm install
```
## Development
- Run frontend unit tests:
```bash
cd frontend
pnpm exec vitest
```
- Run the repo test task (runs frontend tests used by CI):
```bash
pnpm run test
```
- Start a local frontend dev server (when implemented / for app development):
```bash
cd frontend
pnpm run dev
```
## Project structure (high level)
- `frontend/` — Next.js frontend, components, tests, and runtime models
- `getwrite-config/` — example runtime configuration and templates shipped alongside the app
- `specs/` — specification artifacts and example project-type definitions used for docs and tests
- `docs/` — user- and developer-facing documentation (see `docs/features`)
- `src/cli/` and `dist-cli/` — CLI code and built CLI artifacts
## Runtime models & validation
Key model files live under `frontend/src/lib/models/`:
- `schemas.ts` — Zod runtime schemas and helpers (use `validateProjectType()` / `validateProjectTypeFile()`)
- `project-creator.ts` — scaffolding helper `createProjectFromType()` which validates specs and creates folders/resources
- `sidecar.ts` — read/write helpers for sidecar metadata
See `docs/features` for more detailed docs on project types, sidecars, and data types.
## Adding project-types and templates
- Examples and tests reference `specs/002-define-data-models/project-types/`.
- Runtime-discoverable templates belong in `getwrite-config/templates/project-types/`.
- When adding or changing project-type schemas, update `frontend/src/lib/models/schemas.ts` and add unit tests under `frontend/tests/unit`.
## Tests
- Unit & integration tests run with Vitest in the `frontend` workspace.
- The repository `pnpm run test` target executes the CI test runner for the frontend workspace.
## Contributing
- Open issues and PRs against the `002-define-data-models` branch for data model changes.
- Follow repository standards found under `standards/` (TypeScript implementation, package selection, template integrity).
- Run and update unit tests for any model/schema changes.
## Troubleshooting
- If tests fail due to Node version mismatch, ensure you are running Node v24+.
- Validation errors for project types include Zod error messages — use `validateProjectTypeFile()` locally to inspect problems.
## Where to look next
- `docs/features/project-types.md` — project-type spec guidance
- `docs/features/sidecars.md` — sidecar metadata guidance
- `docs/features/data/data-types.md` — data type reference
## Known Issues
### Resource Tree
- ResourceTree selected item does not update when resource is set from outside of the component