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.
Add three new QuoteRepository trait methods and a seed helper: - update_admin_auth_code(current, new_code): replaces the admin code if `current` matches; generates a fresh passphrase when new_code is None; returns DbError::Forbidden on mismatch. - get_submissions_locked(): reads the submissions_locked key from admin_config; returns false when the key is absent. - set_submissions_locked(locked): upserts "1"/"0" into admin_config. - seed_submissions_locked(): INSERT OR IGNORE "0" — safe to call on every startup without clobbering an active lock. Implemented in both NativeRepository (rusqlite) and D1Repository (wasm32). Updated startup seeding in main.rs (native and wasm32 paths) to call seed_submissions_locked after the existing admin auth code seeding. Added 7 unit tests in db/native.rs covering all four specified scenarios: default false, set-then-get, seed does not overwrite, correct code succeeds, None new_code generates passphrase, wrong code returns Forbidden, stored code unchanged after Forbidden. MockRepo in handlers/mod.rs updated with stub implementations of all four new trait methods to satisfy the trait bound. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
3 months ago | |
|---|---|---|
| .claude | 3 months ago | |
| .gitea/workflows | 3 months ago | |
| common | 4 months ago | |
| edu | 3 months ago | |
| nbd | 3 months ago | |
| quotesdb | 3 months ago | |
| src | 3 months ago | |
| .envrc | 3 months ago | |
| .gitattributes | 3 months ago | |
| .gitignore | 3 months ago | |
| CLAUDE.md | 3 months ago | |
| Cargo.lock | 3 months ago | |
| Cargo.toml | 3 months ago | |
| LICENSE-APACHE | 4 months ago | |
| LICENSE-MIT | 4 months ago | |
| PROJECTS.md | 3 months ago | |
| README.md | 3 months ago | |
| flake.lock | 3 months ago | |
| flake.nix | 3 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 |
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.