moooon
Motir
Vibe the project. Bring an idea — Motir's three AI layers plan it, track it, and ship it, end to end. You're looking at Motir, built in Motir.
- Vibe Project
- Open Source
- AI Agent
- AI Loop
- 6
- requests
- 4
- upvotes
- 497
- planned
- 4,958
- shipped
- (motir-core) The page at its own address — `/pages/[pageId]` with its title, loading, not-found and read-only states, and `PageEditorHost` binding the editor's propsPages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-core) Page IMAGES stay with their page — an upload route filing each image under its page (`attachment.page_id`), the orphan sweep sparing it, and its read gated by `page:view`Pages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-core) The page ROUTES — create, read and rename, and the save route taking one Yjs update as bytes, each page refusal mapped to its HTTP statusPages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-core) `pagesService` and the `page:view` / `page:edit` keys — create, read, rename and save in one transaction, the `page` domain in the catalog and built-in roles, `canViewPages` / `canEditPages`Pages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-core) `pageRepository` and the `PageStore` ADAPTER — the composition root `lib/pages/index.ts` binding `@motir/pages`' ports over Prisma per transaction, with a no-op `replaceDerivedLinks`Pages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-core) The page EDITOR in `@motir/pages` — the Tiptap 3 stack grown from `MarkdownEditor.tsx`, bound to the Yjs document, with autosave and saved / saving / offline states, app wiring as propsPages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-core) The SAVE procedure and the `PageStore` port in `@motir/pages` — create, rename, and merge one Yjs update into the stored state with its derived formats, refusing an over-size body or requestPages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-core) The `page` TABLE — migration with the Yjs body and derived columns, parent-xor-folder CHECK, cotenancy and cycle triggers, depth CHECK, RLS, and the Prisma modelPages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-core) The page DOCUMENT in `@motir/pages` — the page editor schema and headless Yjs ↔ ProseMirror JSON ↔ markdown ↔ plain-text conversions over itPages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- A member writes a page and reads it back — the project's Pages section with New page, the editor, saves that merge instead of overwrite, and the page's own addressPages — a project's documents: write a page, keep it in the project tree beside the work it describes, and keep its history
- (motir-gateway) A re-priced `qwen-plus` or `qwen3.7-plus` can never arrive green — its long-context tier sheet, base included, is a Go literal in `motir_provider_direct_tier.go` that the refresh's price proposal and a re-read of `provider_direct_prices.json` both leave behind
- (motir-gateway) `main` is red: the MOTIR-4332 seed E2E uses `origin/main` as its "before" baseline, so it broke itself the moment it merged
- (motir-meta) Pin the `motir-skills` release that carries `motir-continue` — move `tag=` to it, add `motir-continue` to `skills=` (seven skills), and `install.sh --check` and the drift guard report no drift
- (motir-marketing) `/docs/skills` gains the `motir-continue` usage section, the install commands move to the new release tag, and the page E2E covers the section
- CI's orchestrator job never measures coverage: `test -- --coverage` turns `--coverage` into a file filter under pnpm 11
- (deploy) Release `motir-skills` with `motir-continue` and the CI-aware `motir-fix` — bump `plugin.json` to the next minor, tag it, publish the GitHub release, then install it from the tag as a consumer would
- A hard-killed `motir run` never sends its `checkout_ready` — the server never learns the branch, so `motir continue` refuses the dead run `no_branch`
- (motir-gateway) When models.dev disagrees with a provider-direct price, the catalog refresh PROPOSES the new price — it rewrites that entry in `provider_direct_prices.json`, dates it to the fetch, flags it UNCONFIRMED with the provider's own pricing URL, and amends ADR §8.4/§8.5
- (motir-skills) The two-mode `motir-continue` skill — runbook mode routes to `prompts/continue.md`; standalone mode condenses the claim and its refusals, the checkout on the dead run's own branches, the CONTINUE prompt, liveness, delivery with the CI-aware acceptance step, the close and the report
- (motir-meta) The CONTINUE protocol — `prompts/continue.md`: claim a dead run's card, check out its branch in every repository, read the CONTINUE prompt, keep the continue alive, deliver by `run.md`, let CI publish the acceptance receipt where the lane carries the uploader, close, report; and `_shared.md`'s door list names it