Commit 51409ab
authored
* ci: enable PR builds and previews with static export defaults
- Add pull_request trigger for main branch to run builds on PRs
- Set NEXT_PUBLIC_EXPORT default to 'export' when variable is not defined
- Remove check_var job that blocked workflow when variable was missing
- Upgrade Node.js from 16 to 20 for Vercel compatibility
- Add deploy_preview job for GitHub Pages preview on internal PRs
- Add .nvmrc file and engines field in package.json for Node 20
Closes #29
* feat: add PDF export button for CV download
- Add LogoPdf component with download icon
- Integrate PDF export button alongside LinkedIn, GitHub, and Malt icons
- Use html2pdf.js library for client-side PDF generation
- Configure high-quality A4 PDF output
- Add print-specific CSS styles for better PDF rendering
- Add TypeScript type definitions for html2pdf.js
Closes #29
* feat: improve PDF export with professional 2-column layout
- Create dedicated PdfCvLayout component for optimized PDF rendering
- Add pdfExportService for extracting CV data from DOM
- Implement compact two-column design (sidebar + main content)
- Limit content to fit on 1-2 A4 pages maximum
- Show only 5 most recent jobs for concise presentation
- Modern professional design with clean typography
- French/English language support
The PDF now generates a clean, professional-looking CV that fits
on 1-2 pages with proper formatting for printing.
* refactor: optimize PDF CV layout for single page
- Switch to pixel-based layout for better control
- Show only 3 most recent experiences with short descriptions
- Filter technologies to show only main ones per experience
- Simplify education section to 3 key items
- Truncate about section to 120 characters
- Add compact clients section
- Add experience summary block mentioning +20 years
This should fit the CV on 1-2 A4 pages maximum.
* fix: improve PDF data extraction and revert debug mode
- Fix pdfExportService to correctly extract job data from DOM
- Extract client name, role, dates, description from job.tsx structure
- Properly parse contact info from #contact section
- Revert debug mode (hidden container, shorter delay)
The PDF now shows correct experience data with proper formatting.
* feat: replace PDF export with toggle CV mode (full/compact)
- Add toggle button to switch between full CV and compact 1-page version
- Compact mode uses same design system (colors, fonts) as main site
- Hide main header in compact mode (compact CV has its own header)
- Hide toggle on mobile (only print button available)
- Remove html2pdf.js dependency and related files
- Use native browser print for PDF export
- Reduce skill/framework tag sizes on mobile with no text wrapping
New components:
- CvModeContext: React context for CV display mode
- CvModeToggle: Toggle button component
- CompactCvLayout: Professional 1-page CV layout
- CvContent: Wrapper for full/compact mode switching
- HeaderContent: Conditionally hidden header
- logoPrint: Print button component
Removed:
- html2pdf.js dependency
- PdfCvLayout, pdfExportService, logoPdf components
- types/html2pdf.d.ts
* chore: shorten toggle button label
* feat: add URL routing for compact CV and fix print behavior
- Add /fr/short and /en/short routes for direct access to compact CV
- Replace React state toggle with URL-based navigation
- Fix mobile print: shows compact version instead of full version
- Fix desktop print: shows full version with header
- Add PrintCompactVersion component for mobile print rendering
- Add ShortPageWrapper for short page navigation
Routes:
- /fr, /en → Full CV version
- /fr/short, /en/short → Compact CV version
Print behavior:
- Mobile: prints compact version (1 page)
- Desktop: prints full version with header
Removed:
- CvModeContext (replaced by URL routing)
- CvContent (no longer needed)
* feat: improve print logic and compact CV layout
Print behavior:
- Print what you see: full page prints full, short page prints short
- Remove screen-size-based print logic that was confusing
- Remove PrintCompactVersion component (no longer needed)
Toggle visibility:
- Show toggle button on all screen sizes (not just desktop)
- Users can now switch between full/short on mobile too
Compact CV layout improvements:
- Larger header with more vertical padding (py-8/py-12)
- Bigger header text (text-6xl/text-7xl for name)
- Increased section spacing (gap-8/gap-10)
- Larger section titles (text-2xl)
- Better visual hierarchy with border opacity
Simplified main page:
- Removed compact data query and PrintCompactVersion
- Cleaner code structure
* fix: make toggle button icon-only on mobile
* fix: make ShortPageWrapper toggle button consistent with CvModeToggle on mobile
* fix: unify header structure and button sizes between full and short versions
- Make toggle button icon same size as other buttons (h-5 w-5)
- Move header (name + role) to ShortPageWrapper using HeaderContent
- Remove duplicate header from CompactCvLayout
- Both versions now have identical header structure:
- Nav bar with locale switcher and icons
- HeaderContent with name and role
- Content area
This ensures consistent UX between full and short CV views.
* feat: move Profile section to full-width above two columns
* feat: optimize compact CV layout for space efficiency
- Domains: show only titles inline (Agile · Dev · Ops) without tags
- Move Domains above Skills in left column
- Experience: remove role line, keep client/location/dates/description/tech
- Education: move to right column, inline format showing all studies
- Reduced spacing throughout for better print fit
This makes the compact CV much more condensed while keeping all key info.
* feat: move Education back to left column for better balance
The left column was too short after removing tags from Domains.
Moving Education back to the left column creates better visual
balance between the two columns.
* feat: redesign compact CV with full domains, complete education
- Domains displayed like full CV (title + description + tags)
- Skills with simpler border style (no gradient)
- Complete education with all studies and dates (sorted descending)
- Better print optimization for A4
* feat: simplify compact CV - remove domain tags, education end year only
- Remove competency tags under domain descriptions
- Education shows only title and end year (not full date range)
* feat: increase section titles and spacing in compact CV
- Bigger section titles (text-xl/text-2xl instead of text-lg)
- More horizontal spacing between main sections (Profil, Domains, columns)
- Better visual hierarchy
* feat: match skills badge style between full and compact CV
Skills badges now use border style (no gradient) like in compact CV.
Added hover effect for better interactivity. Same text size preserved.
* feat: skills badges with auto-width, left-aligned, inline layout
- Remove md:flex-col to keep flex-wrap on all screen sizes
- Remove text-center from skill badges
- Badges now adapt to text content width
- Left-aligned layout with natural wrapping
* feat: use DatoCMS titles in compact CV, show 5 jobs
- Fetch section titles from DatoCMS (about, skills, contact, studies, jobs)
- Use contact field labels from DatoCMS (phoneTitle, emailTitle, locationTitle)
- Display 5 jobs instead of 4 for better page fill
- Keep fallback labels if DatoCMS titles are empty
* fix: harmonize colors between full and short CV
- Job dates: text-sky-300 (was text-sky-300/70)
- Job frameworks: bg-fuchsia-200 (was bg-fuchsia-300/80)
- Remove text-gray-300 from descriptions (use default like full CV)
- Add skill link field to short CV query
* fix: align toggle button height with other header buttons
Remove md:py-1.5 to keep consistent p-2 padding like LinkedIn/Print buttons
* feat: harmonize Profile and Domains sections between full/short views
- Use same spacing (mt-10) between sections
- Use same title styles (text-2xl, solid border-b)
- Use same text spacing (mt-4 for descriptions)
- Add mt-10 before two-column layout for consistency
* fix: unify all section title sizes to text-2xl
All section titles in CompactCvLayout now use text-2xl to match full CV:
- Contact, Skills, Education, Experience titles updated
- Removed semi-transparent borders for consistency with full CV
* refactor: reuse Skill and Domain components in compact view
Hybrid approach for component reuse:
- Skill component: add compact prop for print-optimized styling
- Domain component: add showTags and compact props
- CompactCvLayout now imports and uses these shared components
- Update data structure to pass raw domain data with competencies
- Maintain visual consistency between full and short views
* refactor: extract Display components and add dynamic PDF titles
- Create ContactDisplay, JobDisplay, StudyDisplay presentational components
- Update contact.tsx, job.tsx, study.tsx to use new Display components
- Refactor CompactCvLayout to reuse Display components with compact prop
- Add dynamic document titles for PDF export (developer style: lowercase with underscores)
- Increase spacing between domains and two-column layout in short view
- Remove unused frameworks.tsx.backup file
* chore: add .playwright-mcp to gitignore
* chore: remove tracked Playwright screenshots
* fix: resolve TypeScript errors in domain.tsx and date.ts
* chore: trigger Vercel redeploy
* fix: pin Node.js version to 20.x for Vercel compatibility
* chore: disable vercel deployment checks
Disable performance/reliability checks that exceed hobby plan limit.
The site works correctly, this is just a quota limitation.
* revert: remove invalid vercel.json
1 parent a67899f commit 51409ab
File tree
26 files changed
+1001
-182
lines changed- app/[lang]
- short
- components
- lib
- styles
26 files changed
+1001
-182
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
43 | | - | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
20 | | - | |
| 21 | + | |
21 | 22 | | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
22 | 33 | | |
23 | | - | |
| 34 | + | |
24 | 35 | | |
25 | | - | |
| 36 | + | |
26 | 37 | | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
| 38 | + | |
45 | 39 | | |
46 | 40 | | |
47 | 41 | | |
This file was deleted.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
| |||
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
21 | | - | |
22 | | - | |
| 22 | + | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
| 28 | + | |
37 | 29 | | |
38 | 30 | | |
39 | 31 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
45 | | - | |
| 44 | + | |
| 45 | + | |
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | 3 | | |
5 | 4 | | |
6 | 5 | | |
| |||
12 | 11 | | |
13 | 12 | | |
14 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
15 | 17 | | |
16 | | - | |
17 | | - | |
18 | | - | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
19 | 26 | | |
20 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
21 | 53 | | |
22 | 54 | | |
23 | 55 | | |
24 | 56 | | |
25 | | - | |
26 | 57 | | |
27 | 58 | | |
28 | 59 | | |
29 | 60 | | |
| 61 | + | |
30 | 62 | | |
31 | 63 | | |
32 | 64 | | |
33 | 65 | | |
34 | 66 | | |
35 | | - | |
36 | | - | |
| 67 | + | |
| 68 | + | |
37 | 69 | | |
38 | 70 | | |
39 | 71 | | |
40 | 72 | | |
41 | 73 | | |
42 | 74 | | |
43 | | - | |
| 75 | + | |
44 | 76 | | |
45 | 77 | | |
46 | | - | |
| 78 | + | |
47 | 79 | | |
48 | 80 | | |
49 | 81 | | |
| |||
0 commit comments