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.
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 | 4 days ago | |
| .claude | 4 months ago | |
| .gitea/workflows | 4 months ago | |
| bit-by-bit | 4 days ago | |
| edu | 4 months ago | |
| pages | 1 day ago | |
| quotesdb | 4 months ago | |
| scripts | 4 months ago | |
| .beans.yml | 4 months ago | |
| .envrc | 5 months ago | |
| .gitattributes | 5 months ago | |
| .gitignore | 5 months ago | |
| CLAUDE.md | 4 months ago | |
| LICENSE-APACHE | 5 months ago | |
| LICENSE-MIT | 5 months ago | |
| PROJECTS.md | 4 months ago | |
| README.md | 1 week ago | |
| TODO.md | 5 months ago | |
| flake.lock | 4 months ago | |
| flake.nix | 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
- Nix with Flakes enabled
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
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Disclaimer
This software is developed with the assistance of Claude Code by Anthropic.