Commit Graph

27 Commits

Author SHA1 Message Date
2f112efe75 fix: cascade delete dependent rows for version removal 2026-04-04 15:46:53 +02:00
5facc4b7a5 feat: add dashboard success-rate tracking and submission stages 2026-04-04 15:16:12 +02:00
3eb2825a86 fix: accept non-JSON CORS origins env values 2026-04-04 14:48:06 +02:00
Claude
aa419cde0d Prepare repository for public deployment
- Replace ReportLab PDF export with LibreOffice headless for proper DOCX formatting preservation
- Add libreoffice-writer + fonts-liberation to backend Dockerfile
- Proxy public CV PDFs through frontend (/cv/[slug]) instead of redirecting to MinIO storage directly
- Fix docker-compose: route backend/worker to internal MinIO URL (http://cvfs-minio:9000), remove MinIO from public network, parameterize all domain/env vars
- Add storage cleanup (MinIO artifact deletion) when a document is deleted
- Add docker-compose.standalone.yml for self-deployment without Traefik/dokploy
- Update .env.example with comprehensive self-deployment documentation

https://claude.ai/code/session_017HGM9VPptZG52asT5pbL6Y
2026-04-04 10:06:20 +00:00
96a1f1683a feat: surface published assets for versions 2026-04-04 11:43:31 +02:00
c9914191d8 feat: allow updating existing CV branches 2026-04-04 11:29:46 +02:00
15d5ef6ac6 fix: cascade public assets on version deletion 2026-04-04 11:25:50 +02:00
95c81955c9 fix: remove public assets before deleting branch 2026-04-04 11:23:48 +02:00
Claude
1b11cdf25c Fix document loading: circular FK, patch validation 500, and token expiry redirect
- documents.py: fix root_version_id never being saved due to SQLAlchemy
  deferring the circular FK (CvDocument↔CvVersion). Use flush-based approach:
  flush doc, flush version, then set root_version_id before final commit.
- config.py: add validator to coerce empty MINIO_ENDPOINT string to None,
  preventing boto3 ValueError: Invalid endpoint at startup.
- versions.py: catch PatchValidationError and return 422 instead of 500
  when a patch violates ATS guard rules.
- api.ts: on 401, clear stale OIDC cookies and redirect to /login instead
  of showing the "Failed to load documents" error.

https://claude.ai/code/session_01KKbzWYz8fLyG2qcwiDZ8fy
2026-04-04 07:43:00 +00:00
copilot-swe-agent[bot]
ad91369371 fix: address code review - use timezone-aware datetime, full ip hash
Agent-Logs-Url: https://github.com/velocitatem/cvfs/sessions/fb35fb9a-a89e-4df0-9584-109f7151509c

Co-authored-by: velocitatem <60182044+velocitatem@users.noreply.github.com>
2026-04-04 06:02:24 +00:00
copilot-swe-agent[bot]
7435a0f1bf feat: add CV view analytics and PDF rendering for public share links
Agent-Logs-Url: https://github.com/velocitatem/cvfs/sessions/fb35fb9a-a89e-4df0-9584-109f7151509c

Co-authored-by: velocitatem <60182044+velocitatem@users.noreply.github.com>
2026-04-04 05:59:05 +00:00
af7a9cb63f fix cascade delete on cv versions 2026-04-03 18:28:54 +02:00
copilot-swe-agent[bot]
5d815cd24d feat: add mobile support, delete CV/branch, and fix DOCX export with patches
Agent-Logs-Url: https://github.com/velocitatem/cvfs/sessions/4d754ed6-7f63-44e0-8689-123d7a70595f

Co-authored-by: velocitatem <60182044+velocitatem@users.noreply.github.com>
2026-04-03 14:45:54 +00:00
Claude
01f34915f6 feat(dashboard): complete CV branching dashboard with auth and full editing workflow
- Visual branch heritage tree with colored dots and connecting lines, depth-aware expand/collapse
- Dashboard 3-tab layout: Content (inline block editing + patch staging), Patches (diff view), Submissions (AI suggestions)
- Inline block editing: click to edit any CV block, stage edits, save as named branch with pre-filled patches
- Submissions tab: create applications, request AI tailoring suggestions, accept/reject per suggestion
- Simple hardcoded login (username/password via env vars LOGIN_USER/LOGIN_PASS, defaults admin/admin)
- Authentik OIDC integration: authorize redirect + callback exchange, configurable via NEXT_PUBLIC_AUTHENTIK_*
- Middleware protecting /dashboard with session cookie verification (HMAC-SHA256)
- Auth API routes: /api/auth/login, /api/auth/logout, /api/auth/callback, /api/auth/token
- Backend: GET/PATCH submission routes for listing submissions and accepting/rejecting AI suggestions
- API client: OIDC bearer token forwarding from client-readable cookie

https://claude.ai/code/session_01CdisLhbC2kVt2hxfJ7TNPf
2026-04-03 13:45:51 +00:00
abf424779d fix(db): ensure patches are eager-loaded when creating a new branch 2026-04-02 21:06:45 +02:00
3ebe9d3fb8 fix(db): resolve ambiguous foreign key relationships in join queries 2026-04-02 21:04:24 +02:00
1ff7c5b23a fix(db): specify ON conditions in publication queries to avoid ambiguous foreign keys 2026-04-02 20:57:07 +02:00
0d1020e503 fix(db): ensure versions and patches are loaded when returning created document 2026-04-02 20:55:59 +02:00
28678ab17f fix(db): specify foreign keys for CvDocument.versions relationship to resolve ambiguity 2026-04-02 20:53:53 +02:00
93f9e88fc4 fix(api): fix trailing slash proxy redirects 2026-04-02 20:50:55 +02:00
02a682b401 fix(networking): update MINIO_ENDPOINT to use public URL and allow trailing slashes in FastAPI 2026-04-02 20:46:19 +02:00
Claude
ab04d1aed0 Disable FastAPI redirect_slashes to stop 307s on API routes
https://claude.ai/code/session_01Xmxm2QLgFBgRJyYD6VukR6
2026-04-02 18:35:10 +00:00
Claude
e6c29f3bd4 Redesign webapp with minimal style and full backend integration
- New monochrome design system in globals.css (no shadows, tight spacing, system-font)
- Root layout stripped to html/body; home page owns its Header/Footer
- Dashboard fully wired to FastAPI backend: upload, branch, submission, publish, download
- CVTree rebuilt as compact file-tree component driven by real version data
- DiffViewer rebuilt as minimal git-diff display using real patch data
- API client (libs/api.ts) extended with all CRUD operations
- Header redesigned to match minimal style
- Backend: added GET /documents/{id}/versions/{id}/download endpoint for DOCX export

https://claude.ai/code/session_01Xmxm2QLgFBgRJyYD6VukR6
2026-04-02 18:12:25 +00:00
f7e32d59cc Fix PublicAsset SQLAlchemy type annotation 2026-04-02 19:31:55 +02:00
400f344d89 Fix parent SQLAlchemy type annotation again 2026-04-02 19:30:43 +02:00
f4526c0123 Fix sqlalchemy mapped annotation type 2026-04-02 19:29:06 +02:00
30cb18b55e Finish MVP and dockerize 2026-04-02 19:15:47 +02:00