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.
- infra/turnstile.tf: provision Turnstile widget (managed mode, quotes.elijah.run domain) with site_key and secret_key outputs - infra/variables.tf: add var.domain (default: quotes.elijah.run) - src/lib.rs: add cf_turnstile_token: Option<String> (#[serde(default)]) to CreateQuoteInput; update doctest - Cargo.toml: add reqwest (0.12, rustls-tls) under native-only dependencies - src/bin/api/handlers/mod.rs: add verify_turnstile() and CAPTCHA gate in create_handler, both gated on #[cfg(not(target_arch = "wasm32"))] - src/bin/api/db/native.rs: add cf_turnstile_token: None to all CreateQuoteInput struct literals in tests - api/openapi.yaml: document cf_turnstile_token field in QuoteCreateRequest schema - index.html: add Turnstile JS script tag - src/bin/ui/pages/submit.rs: add turnstile_token state, use_effect_with callback registration, widget div, token included in CreateQuoteInput - docs/LOCAL_DEV.md: add Cloudflare Turnstile CAPTCHA section Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
3 months ago | |
|---|---|---|
| .. | ||
| .claude | 3 months ago | |
| .nbd | 3 months ago | |
| api | 3 months ago | |
| docs | 3 months ago | |
| infra | 3 months ago | |
| src | 3 months ago | |
| tests | 3 months ago | |
| .env.example | 3 months ago | |
| .gitignore | 3 months ago | |
| CLAUDE.md | 3 months ago | |
| Cargo.lock | 3 months ago | |
| Cargo.toml | 3 months ago | |
| README.md | 3 months ago | |
| Trunk.toml | 3 months ago | |
| _redirects | 3 months ago | |
| build.rs | 3 months ago | |
| index.html | 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 (
apibinary) backed by Cloudflare Workers + D1 (SQLite) - A Yew/Wasm frontend (
uibinary) 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 + D1ui: Yew compiled towasm32-unknown-unknownvia 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).