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 401a4f45a5 feat(quotesdb): POST /api/admin/lock and /api/admin/unlock endpoints
Add two admin-protected endpoints that toggle the global submissions lock:
- POST /api/admin/lock  — sets submissions_locked = true
- POST /api/admin/unlock — sets submissions_locked = false

Both require the X-Admin-Code header and return { "submissions_locked": bool }
on success, or 403 on missing/wrong code. Operation is idempotent.

Shared helper verify_admin_code() fetches and compares the stored admin code.
Routes registered in the router() function. Five unit tests added covering
correct code, wrong code, missing header, and idempotent lock behaviour.

OpenAPI spec updated with AdminCode security scheme, LockResponse schema,
/api/admin/lock and /api/admin/unlock path entries, and an admin tag.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 months ago
..
.claude quotesdb scaffolding 3 months ago
.nbd chore(quotesdb): close all tickets — implementation complete 3 months ago
api feat(quotesdb): POST /api/admin/lock and /api/admin/unlock endpoints 3 months ago
docs docs(quotesdb): admin features design doc 3 months ago
infra feat(quotesdb): Cloudflare Turnstile CAPTCHA on submit 3 months ago
src feat(quotesdb): POST /api/admin/lock and /api/admin/unlock endpoints 3 months ago
tests feat(quotesdb): implement API DB layer and all HTTP handlers 3 months ago
.env.example feat(quotesdb): implement API DB layer and all HTTP handlers 3 months ago
.gitignore fix frontend proxy issue 3 months ago
CLAUDE.md chore(quotesdb): resolve all triage tickets and create implementation tickets 3 months ago
Cargo.lock feat(quotesdb): Cloudflare Turnstile CAPTCHA on submit 3 months ago
Cargo.toml feat(quotesdb): Cloudflare Turnstile CAPTCHA on submit 3 months ago
README.md refactor(quotesdb): collapse to single crate with api and ui binaries 3 months ago
Trunk.toml fix frontend proxy issue 3 months ago
_redirects chore(quotesdb): add _redirects SPA fallback for Cloudflare Pages routing 3 months ago
build.rs feat(quotesdb): add build.rs to convert api/openapi.yaml to JSON at compile time 3 months ago
index.html feat(quotesdb): Cloudflare Turnstile CAPTCHA on submit 3 months ago

README.md

quotesdb

A quotes web application — browse, submit, and manage memorable quotes.

What

quotesdb is a full-stack web application with:

  • A JSON REST API (api binary) backed by Cloudflare Workers + D1 (SQLite)
  • A Yew/Wasm frontend (ui binary) hosted on Cloudflare Pages
  • NanoID-identified quotes protected by a 4-word passphrase auth code

How

Single Cargo crate with two binaries sharing common types via src/lib.rs:

  • api: Axum on Tokio, targeting Cloudflare Workers via workers-rs, SQLx + D1
  • ui: Yew compiled to wasm32-unknown-unknown via Trunk

Run

# Start API server (local dev)
cargo run

# Start UI dev server (requires wasm32 toolchain + trunk)
trunk serve

Test

cargo fmt && cargo check && cargo clippy && cargo test

License

Licensed under either of Apache License, Version 2.0 or MIT License at your option.

Disclaimer

This software was written with Claude Code (claude-sonnet-4-6).