A WordPerfect-5.1-style, kiosked terminal UI that lets non-technical authors manage a Quiqr/Hugo site over SSH and direct a coding agent (Claude Code) to write and publish content — without ever touching a shell.
This repository is a bootstrap bundle. It is intended to be handed to a coding agent (Claude Code) which will build the Proof of Concept (PoC) autonomously, using:
- beans — git-tracked, agent-first issue tracker (epics, milestones, tasks).
- OpenSpec — spec-driven proposals + tasks per epic (the spec leads, code follows).
- Nix flakes — reproducible dev shell + a QEMU/NixOS VM test that runs Quiqr Server so end-to-end tests are real, not mocked.
The PoC is the alpha base for later development. It is deliberately scoped: SSH/kiosk hardening and the local wrapper app are later epics, not part of milestone 1.
A non-technical user connects to a remote server (SSH or a wrapper app) and is dropped — with no terminal knowledge required — into a two-pane TUI:
┌───────────────────────────────┬───────────────────────────────┐
│ LEFT: the application │ RIGHT: the coding agent │
│ │ │
│ • browse & open Quiqr sites │ • Claude Code session │
│ • on open: start `hugo server` │ • receives "@path/to/file …" │
│ and show the preview URL │ injected from the left pane │
│ • navigate content/ OR the │ • user finishes the sentence │
│ Quiqr Menu (Singles / │ in plain language │
│ Collections) from the schema │ • writes content; preview │
│ • open file = READ ONLY │ auto-refreshes │
│ • [F-key] sends file to agent │ • can commit → git pipeline │
├───────────────────────────────┴───────────────────────────────┤
│ F2 Browse F3 New F5 Preview F6 Ask AI F7 Save F9 Discard │
└────────────────────────────────────────────────────────────────┘
The left pane never edits files. All mutation happens through the agent on the right. This single-writer design is what makes the kiosk safe.
See docs/00-project-brief.md for the full vision and docs/01-architecture.md
for component responsibilities.
- Read
docs/00-project-brief.mdanddocs/01-architecture.md. Adjust anything that doesn't match your intent before handing the repo to the agent. - Fill in the real Quiqr flake reference in
flake.nix(markedTODO(author)). You are the author of the Quiqr Nix module/package, so wire in your actual input. - Copy
config/quiqr-tui.example.toml→config/quiqr-tui.tomland set the Quiqr data dir / agent command for your machine. - Run
scripts/bootstrap.sh(or let the agent run it) to initialize beans + OpenSpec and seed the epics. - Tell Claude Code: "Run
beans prime, readCLAUDE.md, then start thepoc-foundationOpenSpec change."
Your operating manual is CLAUDE.md. Read it first, every session. The
short version:
beans primeand heed its output. Beans is your durable memory and audit trail.- The work is organized as epics (in beans) and OpenSpec changes (one per epic). The spec is the source of truth; write/refine it before coding.
- Nothing is "done" without tests. Every epic ends green on
nix flake check, including the NixOS VM end-to-end test that boots Quiqr Server. - Commit small, reference bean IDs in commit messages, keep bean + spec state in sync with the code.
Releases are cut with scripts/release.sh, run from the Nix dev shell (it needs
jj, git, gh, and cargo — all provided by nix develop). The workspace
version lives only in Cargo.toml; the flake derives its version from there.
-
Between releases, add notes under the
## [Unreleased]heading inCHANGELOG.mdas you work. -
Make sure
ghis authenticated (gh auth status) and the working copy is clean. -
Cut the release:
scripts/release.sh patch # or: minor | major scripts/release.sh minor --dry-run # preview without changing anything
The script computes the next SemVer version, bumps
Cargo.toml(refreshingCargo.lock), promotes theUnreleasedchangelog entries into a dated## [X.Y.Z]section, commits the bump, creates and pushes the annotated tagvX.Y.Z, and creates the GitHub release with those notes.It refuses to run on a dirty working copy unless you pass
--allow-dirty(which commits only the files the script itself changed). Use--dry-runto see the plan first.
Alpha base. Milestone M1 — the two-pane PoC — is implemented and proven end to
end: nix flake check passes all unit/integration tests and a NixOS VM test
that boots Quiqr Server, runs qtui against it, and asserts the agent writes
content on disk. Run qtui init to point it at your Quiqr storage, then qtui.
Later milestones (SSH/kiosk hardening, the wrapper app, the publish pipeline)
are not yet built.