You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Elijah Voigt 46e7a3dae5 feat(pages): add removable page aliases (serve-direct)
A page keeps one canonical slug and can have up to 10 long-lived,
removable aliases in the same URL namespace. Serving is serve-direct:
routes::serve falls back to Db::get_page_by_alias on a canonical miss
and serves the canonical page's R2 content under its <slug>/ prefix — no
redirect, no second copy, and a real page always wins over an alias of
the same name.

- migrations: new `aliases` table + idx_aliases_slug (schema.sql +
  idempotent 0003-aliases.sql).
- db.rs: get_page_by_alias, insert_alias (NameTaken on collision),
  delete_alias (page-scoped), list/count/delete-for-page, alias_exists.
- api.rs: POST /api/pages/:slug/aliases (can_upload + owner-or-admin) and
  DELETE /api/pages/:slug/aliases/:alias (owner-or-admin); create_page
  rejects a name held by an alias; delete_page removes a page's aliases;
  GET /api/pages returns each page's aliases[].
- Namespace uniqueness across pages.slug + aliases.alias is enforced in
  the handlers (SQLite can't express the cross-table rule).
- Frontend: alias chips (× to remove) + an "Add alias" button.

Replaces the earlier rename+conditional-redirect idea (dropped for
301-cache fragility). No R2 or behavioral change to existing pages.
196 unit + 20 doctests, both-target clippy clean.

Bean: pages-9lsk.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 day ago
.beans feat(bit-by-bit): backfill missed days, add changelog tab & feedback link 4 days ago
.claude chore: migrate task tracking from nbd to beans 4 months ago
.gitea/workflows feat(quotesdb): implement API DB layer and all HTTP handlers 4 months ago
bit-by-bit feat(bit-by-bit): backfill missed days, add changelog tab & feedback link 4 days ago
edu chore(edu): update bean statuses and write self-play chapter content 4 months ago
pages feat(pages): add removable page aliases (serve-direct) 1 day ago
quotesdb chore: migrate task tracking from nbd to beans 4 months ago
scripts chore: migrate task tracking from nbd to beans 4 months ago
.beans.yml chore: migrate task tracking from nbd to beans 4 months ago
.envrc Initial commit 5 months ago
.gitattributes Initial commit 5 months ago
.gitignore Merge development flakes 5 months ago
CLAUDE.md docs: replace nbd task-tracking docs with beans prime 4 months ago
LICENSE-APACHE chore: initial repo scaffolding 5 months ago
LICENSE-MIT chore: initial repo scaffolding 5 months ago
PROJECTS.md chore: remove nbd project 4 months ago
README.md feat(pages): static-site host at pages.elijah.run (v0) 1 week ago
TODO.md tickets: triage TODO files → nbd tickets 5 months ago
flake.lock chore: remove nbd project 4 months ago
flake.nix chore: remove nbd project 4 months ago

README.md

Vibed

A mono-repo of CLI tools and self-contained HTTP web services built in Rust, targeting Cloudflare's edge platform.

  • Backend services run on Cloudflare Workers (via workers-rs + Axum).
  • Frontend applications compile to Wasm with Yew and deploy to Cloudflare Pages.
  • Data is stored in Cloudflare D1 (SQLite-compatible), with Turso for local development.
  • Infrastructure is managed with OpenTofu and the Cloudflare provider.

Services

Service Description
common Shared library crate — types, utilities, and definitions used across services
pages Micro static-site host at pages.elijah.run — upload an .html/.zip, served sandboxed at /<name>/ (Cloudflare Workers + R2 + D1, Rust→wasm, GitHub OAuth)

Services will be listed here as they are added.

Getting Started

Prerequisites

Setup

# Clone the repository
git clone https://gitea.elijah.run/pop/vibed.git
cd vibed

# Enter the dev shell (installs Rust, Trunk, OpenTofu, wrangler, etc.)
nix develop

The dev shell provides everything needed to build, test, and deploy all services.

Running a Service

# Backend
cd <service>
cargo run

# Frontend
cd <service>
trunk serve

Validation

Run from within a service directory, in order:

cargo fmt       # formatting
cargo check     # compilation
cargo clippy    # lints
cargo test      # tests

Repository Layout

vibed/
├── CLAUDE.md         # conventions and instructions for Claude Code
├── README.md         # this file
├── LICENSE-APACHE
├── LICENSE-MIT
├── flake.nix         # base Nix flake
├── common/           # shared library crate
└── <service>/        # each service is an independent Rust crate
    ├── src/
    ├── tests/        # integration tests
    ├── docs/         # PLANNING.md, ARCHITECTURE.md
    └── infra/        # OpenTofu infrastructure

See CLAUDE.md for full conventions, code style, and project documentation requirements.

License

Licensed under either of

at your option.

Disclaimer

This software is developed with the assistance of Claude Code by Anthropic.