chore: initial project scaffold

Set up Mangalord with a Rust/axum backend, SvelteKit frontend, Postgres,
and Docker Compose deployment. Establishes the architecture and TDD
patterns the project will extend:

- Hexagonal-ish backend layering (domain / repo / storage / api) with
  a pluggable Storage trait (LocalStorage today, S3 as a future impl).
- Initial migration: users, mangas, chapters, bookmarks.
- Vertical slice for mangas (list, search, create, get) with
  #[sqlx::test] integration coverage and storage unit tests.
- SvelteKit frontend using Svelte 5 runes, typed API client, Vitest
  unit tests and Playwright e2e with route mocking.
- CLAUDE.md documenting layering, TDD/git/SemVer workflow rules, and
  extension points (tags, fulltext search, OCR, S3, auth).
- Project-scoped .claude/settings.json with permission allowlist for
  the toolchain (git, cargo, npm/vite, docker, psql, gh, doc fetches).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
MechaCat02
2026-05-16 21:05:16 +02:00
commit 6c1d04aaf4
48 changed files with 1657 additions and 0 deletions

121
.claude/settings.json Normal file
View File

@@ -0,0 +1,121 @@
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": [
"Bash(ls:*)",
"Bash(pwd)",
"Bash(tree:*)",
"Bash(find:*)",
"Bash(grep:*)",
"Bash(rg:*)",
"Bash(cat:*)",
"Bash(head:*)",
"Bash(tail:*)",
"Bash(wc:*)",
"Bash(file:*)",
"Bash(stat:*)",
"Bash(du:*)",
"Bash(df:*)",
"Bash(diff:*)",
"Bash(which:*)",
"Bash(whereis:*)",
"Bash(env)",
"Bash(printenv:*)",
"Bash(date:*)",
"Bash(awk:*)",
"Bash(sed:*)",
"Bash(cut:*)",
"Bash(sort:*)",
"Bash(uniq:*)",
"Bash(tr:*)",
"Bash(jq:*)",
"Bash(yq:*)",
"Bash(xargs:*)",
"Bash(echo:*)",
"Bash(printf:*)",
"Bash(mkdir:*)",
"Bash(touch:*)",
"Bash(cp:*)",
"Bash(mv:*)",
"Bash(git status:*)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(git show:*)",
"Bash(git ls-files:*)",
"Bash(git rev-parse:*)",
"Bash(git branch:*)",
"Bash(git switch:*)",
"Bash(git checkout:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git restore:*)",
"Bash(git stash:*)",
"Bash(git tag:*)",
"Bash(git merge:*)",
"Bash(git rebase:*)",
"Bash(git cherry-pick:*)",
"Bash(git remote:*)",
"Bash(git fetch:*)",
"Bash(git pull:*)",
"Bash(git clean -n:*)",
"Bash(git config --get:*)",
"Bash(git config --list:*)",
"Bash(gh:*)",
"Bash(cargo:*)",
"Bash(rustc:*)",
"Bash(rustup:*)",
"Bash(rustfmt:*)",
"Bash(clippy-driver:*)",
"Bash(sqlx:*)",
"Bash(node:*)",
"Bash(npm:*)",
"Bash(npx:*)",
"Bash(pnpm:*)",
"Bash(yarn:*)",
"Bash(tsc:*)",
"Bash(vite:*)",
"Bash(vitest:*)",
"Bash(playwright:*)",
"Bash(svelte-kit:*)",
"Bash(svelte-check:*)",
"Bash(eslint:*)",
"Bash(prettier:*)",
"Bash(docker:*)",
"Bash(docker compose:*)",
"Bash(docker-compose:*)",
"Bash(psql:*)",
"Bash(pg_isready:*)",
"Bash(pg_dump:*)",
"Bash(pg_restore:*)",
"Bash(createdb:*)",
"Bash(dropdb:*)",
"Bash(curl http://localhost:*)",
"Bash(curl http://127.0.0.1:*)",
"Bash(curl -s http://localhost:*)",
"Bash(curl -s http://127.0.0.1:*)",
"Bash(wget http://localhost:*)",
"Bash(wget http://127.0.0.1:*)",
"WebFetch(domain:docs.rs)",
"WebFetch(domain:doc.rust-lang.org)",
"WebFetch(domain:rust-lang.org)",
"WebFetch(domain:crates.io)",
"WebFetch(domain:svelte.dev)",
"WebFetch(domain:kit.svelte.dev)",
"WebFetch(domain:vitejs.dev)",
"WebFetch(domain:vitest.dev)",
"WebFetch(domain:playwright.dev)",
"WebFetch(domain:docs.docker.com)",
"WebFetch(domain:www.postgresql.org)",
"WebFetch(domain:postgresql.org)"
]
}
}