Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ Anti-draft public live-writing tool for fighting perfectionism: if text exists,

Unfinal is a tiny writing space where each URL is a live document. Visitors can read in real time; authenticated writers can edit, all changes are public in real-time.

See `FEATURES.md` for the canonical concise list of product and internal features.

## Tech Stack

Elixir/Phoenix LiveView app with Phoenix PubSub, Clerk OAuth/OIDC auth stored in signed session cookies, `.env` config, and S3-compatible object storage for document persistence.
Expand Down
22 changes: 22 additions & 0 deletions FEATURES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Features

Unfinal is an anti-draft public live-writing tool for publishing text as soon as it exists.

1. Live document pages let public readers watch text update in real time.
2. Personal namespaces let each claimed user publish their own notebook.
3. User-created public documents live under `/n/...`, with other routes reserved for application and owner use.
4. Nested document URLs let users organize pages inside a namespace.
5. Visitors can read public documents without logging in.
6. Namespace owners can edit only their own claimed namespace.
7. A claim page lets authenticated users reserve one namespace.
8. Namespace sidebars provide a page index for navigating documents.
9. Namespace owners can delete non-root pages.
10. The `/live` page lists documents currently being edited and documents edited recently.
11. Readers receive live document updates without manually refreshing.
12. Writer presence tracks active editing activity for live documents.
13. Login is powered by Clerk; the current implementation uses Clerk OAuth because the app has no JavaScript frontend framework.
14. Edits are automatically persisted while the writer types.
15. Documents are durably stored in SQLite.
16. Production backups are supported through Litestream to S3/R2-compatible storage.
17. Deployment automation builds assets, runs migrations, validates backup restore, and restarts services.
18. CI checks cover tests, migrations, schema consistency, and deployment readiness.
Loading