aaacfae653
Feat: Serve images directly from Cloudflare R2 CDN
...
API responses now include file_url and thumbnail_url fields. When
S3_PUBLIC_BASE_URL is configured, these point to the CDN domain;
when unset, they fall back to the existing API proxy paths so local
dev requires no additional setup. UI updated to use response URL
fields directly instead of constructing proxy URLs client-side.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-09 00:17:22 +00:00
9246f75fdd
Feat: Polish Angular UI with cohesive design system
...
Introduces a shared CSS custom property token layer and applies it
across all five views (library, upload, detail, login, app shell).
Each view now has intentional loading, empty, and error states.
- styles.css: 13 design tokens on :root; shimmer skeleton animation
- Library: 150ms-debounced skeleton loading, empty state with /upload
link, error card with retry, card hover lift, broken-image fallback
- Upload: token-styled drop-zone, Uploading… spinner, 4s success
banner, distinct validation vs. network error messages
- Detail: image skeleton, network error card (separate from 404
not-found card), Owner actions panel, danger tag error styling,
broken-image fallback
- Login: vertically centred surface card, danger field/server errors,
Signing in… disabled button
- App shell: 48px fixed header, app name left, sign-out right, no
reflow on auth state change
- All 24 ESLint errors resolved (including pre-existing auth spec
issues); ng build and ng lint pass clean
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-03 20:03:56 +00:00
5fbbc1e67f
Feat: Implement JWT bearer token authentication
...
Protects image upload, delete, and tag-update endpoints behind
Bearer token auth. Public read endpoints remain open. Angular SPA
gains a login page, auth interceptor, and route guard for /upload.
- JWTAuthProvider (HS256, sub/iat/exp, secrets.compare_digest)
- POST /api/v1/auth/token login endpoint
- require_auth FastAPI dependency on all write routes
- AuthService, LoginComponent, authInterceptor, authGuard
- Detail page hides write controls for unauthenticated visitors
- 43 unit tests passing; integration tests require Docker stack
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-03 19:12:38 +00:00
8bf6ef443a
[Spec Kit] Implementation progress
...
Implements all 88 tasks for the Reaction Image Board (specs/001-reaction-image-board):
- docker-compose.yml: postgres, minio, minio-init, api, ui services with healthchecks
- api/: FastAPI app with SQLAlchemy 2.x async, Alembic migrations, S3/MinIO storage,
full integration + unit test suite (pytest + pytest-asyncio)
- ui/: Angular 19 standalone app (Library, Upload, Detail, NotFound components)
- .env.example: all required environment variables
- .gitignore: Python, Node, Docker, IDE, .env patterns
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-02 16:13:23 +00:00