Skip to content

Commit 495e29d

Browse files
author
whatever
committed
m
0 parents  commit 495e29d

26 files changed

+793
-0
lines changed

.firebase/hosting.ZG9jcw.cache

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
TestPage.jsx,1741577870204,cbecd257b6490e4927a2ce09bca121a270bb01f813885d3aac48da1f68e17a50
2+
TemplatesPage.jsx,1741577868313,c7d2f03023ef9f771268653a4bffc08aeef799f6eb7a8d4d115ac11d835cafaa
3+
template.html,1741563931582,feabde7601fe17900a73bcc23bd35831c4c7fcb57a023e50d17a6ea78afa3825
4+
PdfPreviewComponent.jsx,1741577866062,4a82b5673d9b379d4f0303f7d5099c9dc6d29b04874c215df1639a7329d5174a
5+
main.jsx,1741577863306,95f507424ee396cc790df92ddd5b24d0a55bb877d5ff85fe8569a5770cc90ecb
6+
Layout.jsx,1741577860328,af12e08362cebc1e974e649e9a7560921282a307d5f4dd43621f42c63b07b6e4
7+
index.html,1741577474818,ba1e1fd9cba4794b2a3b8a8f993daab461f77fd72fa78abbe7763a19c7cde7f2
8+
icon.png,1741520184144,c08e3530d8ce1ecad828959e046639194222b167dcdfb113a856cfdffed1c68f
9+
HtmlPreviewComponent.jsx,1741577857522,2bda6a83a7ee3a744f2497db7671d79fed99a8622738c5370435afaa53096d35
10+
favicon.ico,1741519904290,1748c6a37905ec34e97c04b7f24e17f30b2a2cc1ec22556f79f89da2cbb32fa1
11+
ErrorBoundary.jsx,1741577854574,b818c2d6d982f803bc169fb95484808afeed45795d589cf2041fed263323387e
12+
EditorComponent.jsx,1741577852156,ac0727797e79ac3e1c4c5e180ccfa4fba4881321b69dcaa794337907125617a2
13+
AuthPage.jsx,1741577849675,fd16295ceb6e8b916e3ee245cfceb2f5b6c3ea4fe9d89ce56806cf4162f073b3
14+
App.jsx,1741577846973,67c1fe1956c99bc937a830aec08c345287e9621073cdfd4449278a04aa1f174c
15+
AboutPage.jsx,1741577844273,2a9dda4df5d9af24b615ba79d997754dbdb5234886a8869763104cc469628141
16+
404.html,1741589150891,762bf484ba67404bd1a3b181546ea28d60dfddf18e9dd4795d8d25bcf3c1a890
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# This file was auto-generated by the Firebase CLI
2+
# https://github.com/firebase/firebase-tools
3+
4+
name: Deploy to Firebase Hosting on merge
5+
on:
6+
push:
7+
branches:
8+
- main
9+
jobs:
10+
build_and_deploy:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
- run: echo x
15+
- uses: FirebaseExtended/action-hosting-deploy@v0
16+
with:
17+
repoToken: ${{ secrets.GITHUB_TOKEN }}
18+
firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_HTML_RESUME_PDF }}
19+
channelId: live
20+
projectId: html-resume-pdf
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# This file was auto-generated by the Firebase CLI
2+
# https://github.com/firebase/firebase-tools
3+
4+
name: Deploy to Firebase Hosting on PR
5+
on: pull_request
6+
permissions:
7+
checks: write
8+
contents: read
9+
pull-requests: write
10+
jobs:
11+
build_and_preview:
12+
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
- run: echo x
17+
- uses: FirebaseExtended/action-hosting-deploy@v0
18+
with:
19+
repoToken: ${{ secrets.GITHUB_TOKEN }}
20+
firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_HTML_RESUME_PDF }}
21+
projectId: html-resume-pdf

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
src
2+
archive
3+
node_modules
4+
.temp
5+
# Copy-Item -Path .\src\* -Destination C:\Users\Admin\Desktop\backup\ -Recurse -Force; Copy-Item -Path .\src\* -Destination .\docs\ -Recurse -Force; Get-ChildItem -Path .\docs\*.jsx -File | ForEach-Object { $basename = $_.BaseName; esbuild $_.FullName --outfile=".\docs\$basename.js"; javascript-obfuscator ".\docs\$basename.js" --output .\docs --config config.json; Remove-Item $_.FullName; terser ".\docs\$basename.js" --compress --mangle --output ".\docs\$basename.min.js"; Remove-Item ".\docs\$basename.js"; Move-Item ".\docs\$basename.min.js" $_.FullName }
6+
# git config --global user.name "whatever" && git config --global user.email "whatever" && rm -r -fo .git && git init && git checkout -b main && git remote add origin https://github.com/html-resume/html-resume.github.io.git && git add . && git commit -m m && git push origin main --force

README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# HTML Resume PDF Editor WYSIWYG
2+
3+
[![Deployment Link](https://img.shields.io/badge/Live-HTML%20Resume-blue?logo=rocket&logoColor=yellow)](https://html-resume.github.io)
4+
5+
## Overview
6+
7+
The HTML Resume PDF Editor is a web application that enables users to create, customize, and export high-quality resumes using standard HTML markup. This tool offers a streamlined experience allowing direct manipulation of HTML code to generate visually appealing resumes with real-time previews and PDF export capabilities.
8+
9+
## Key Features
10+
11+
* **Professional HTML Markup Editor:** Harness the power of HTML to create pixel-perfect resumes using the industry-standard Monaco Editor (the same editor that powers VS Code).
12+
13+
* **Instantaneous Rendering:** The application processes your HTML markup in real-time, generating immediate visual previews that accurately represent your final document.
14+
15+
* **PDF Generation Engine:** Convert your HTML markup directly into professional PDF documents suitable for job applications, all processed client-side for data privacy.
16+
17+
* **WYSIWYG Experience:** What You See Is What You Get - the editor provides a seamless connection between your markup and the rendered output, ensuring your resume appears exactly as intended.
18+
19+
* **Responsive Design Integration:** Embedded responsive design capabilities ensure your resume displays correctly across all devices and print media.
20+
21+
* **Cross-browser Compatibility:** The generated documents maintain consistent formatting across different browsers and platforms.
22+
23+
## Technical Implementation
24+
25+
The HTML Resume PDF Editor leverages modern web technologies to transform raw HTML markup into professional documents:
26+
27+
* **HTML Markup Processing:** Custom HTML is interpreted and rendered through sandboxed iframes for modularity.
28+
29+
* **CSS Styling Support:** Fully supports embedded CSS for advanced styling and layout control.
30+
31+
* **PDF Conversion Pipeline:** Utilizes html2pdf.js to transform the HTML markup into publication-ready PDF documents.
32+
33+
* **Responsive Framework:** Supports any JS or CSS frameworks to allow responsive or sophisticated designs.
34+
35+
* **Real-time Update Engine:** Implements a reactive architecture that instantly propagates markup changes to all preview panels.
36+
37+
## Getting Started
38+
39+
1. Open the online editor at [HTML Resume PDF Editor WYSIWYG](https://html-resume.github.io) or clone and serve the `docs` folder
40+
2. Customize the HTML markup in the editor panel
41+
3. View real-time changes in the HTML/PDF preview panels
42+
4. Generate and download a professional PDF when satisfied with your design
43+
44+
## Use Cases
45+
46+
* Job seekers creating customized resumes for different positions
47+
* Professionals maintaining up-to-date CVs with precise formatting control
48+
* Career counselors helping clients build effective application materials
49+
* Recruiters creating standardized resume templates for candidates

config.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"compact": true,
3+
"controlFlowFlattening": false,
4+
"controlFlowFlatteningThreshold": 0.1,
5+
"deadCodeInjection": true,
6+
"deadCodeInjectionThreshold": 0.2,
7+
"debugProtection": false,
8+
"debugProtectionInterval": 2000,
9+
"disableConsoleOutput": true,
10+
"identifierNamesGenerator": "hexadecimal",
11+
"renameGlobals": false,
12+
"rotateStringArray": true,
13+
"selfDefending": false,
14+
"splitStrings": true,
15+
"splitStringsChunkLength": 5,
16+
"stringArray": true,
17+
"stringArrayEncoding": ["base64"],
18+
"stringArrayThreshold": 0.25,
19+
"transformObjectKeys": true,
20+
"unicodeEscapeSequence": true
21+
}

docs/404.html

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title>Page Not Found</title>
7+
8+
<style media="screen">
9+
body { background: #ECEFF1; color: rgba(0,0,0,0.87); font-family: Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; }
10+
#message { background: white; max-width: 360px; margin: 100px auto 16px; padding: 32px 24px 16px; border-radius: 3px; }
11+
#message h3 { color: #888; font-weight: normal; font-size: 16px; margin: 16px 0 12px; }
12+
#message h2 { color: #ffa100; font-weight: bold; font-size: 16px; margin: 0 0 8px; }
13+
#message h1 { font-size: 22px; font-weight: 300; color: rgba(0,0,0,0.6); margin: 0 0 16px;}
14+
#message p { line-height: 140%; margin: 16px 0 24px; font-size: 14px; }
15+
#message a { display: block; text-align: center; background: #039be5; text-transform: uppercase; text-decoration: none; color: white; padding: 16px; border-radius: 4px; }
16+
#message, #message a { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }
17+
#load { color: rgba(0,0,0,0.4); text-align: center; font-size: 13px; }
18+
@media (max-width: 600px) {
19+
body, #message { margin-top: 0; background: white; box-shadow: none; }
20+
body { border-top: 16px solid #ffa100; }
21+
}
22+
</style>
23+
</head>
24+
<body>
25+
<div id="message">
26+
<h2>404</h2>
27+
<h1>Page Not Found</h1>
28+
<p>The specified file was not found on this website. Please check the URL for mistakes and try again.</p>
29+
<h3>Why am I seeing this?</h3>
30+
<p>This page was generated by the Firebase Command-Line Interface. To modify it, edit the <code>404.html</code> file in your project's configured <code>public</code> directory.</p>
31+
</div>
32+
</body>
33+
</html>

docs/AboutPage.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
function a0_0x1c6c(e,t){const a=a0_0xa24c();return a0_0x1c6c=function(t,n){let c=a[t-=341];if(void 0===a0_0x1c6c.QZeKkv){a0_0x1c6c.UJwPjQ=function(e){let t="",a="";for(let a,n,c=0,r=0;n=e.charAt(r++);~n&&(a=c%4?64*a+n:n,c++%4)?t+=String.fromCharCode(255&a>>(-2*c&6)):0)n="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(n);for(let e=0,n=t.length;e<n;e++)a+="%"+("00"+t.charCodeAt(e).toString(16)).slice(-2);return decodeURIComponent(a)},e=arguments,a0_0x1c6c.QZeKkv=!0}const r=t+a[0],o=e[r];return o?c=o:(c=a0_0x1c6c.UJwPjQ(c),e[r]=c),c},a0_0x1c6c(e,t)}function a0_0xa24c(){const e=["Dg9tDhi","zgL2","zgL0B3i","Dgv4Dc0","Aw9U","BMrdu1m","mtK4mJq0wwPxqNLt","Aw9Ulwm","ChjVC2u","y3jLyxq","igv4Cg8","ifberI4","zgvUia","BNqTBwu","tMfTzq","Aw1WBgu","ndC1mJbIv2DOD20","Dc1Szwy","Bc03idC","CYbHihm","B24P","AwWUy28","mty5mJCXmLP0ten1Ea","odG3otuWohPlvvjbwq","BxGTyxu","igeGAgK","C3bHBG","mtm4tM1ozfj0","ifrHAwW","B2XVCNm","z21HAwW","BNqGyw4","BMuTBM8","B2WGzNi","AwX3Aw4","igeGCMu","CM4GDgG","D2fYBG","ltGGBwe","C20GDgu","y2XHC3m","uMvZDw0","Bwf4lxC","otaYmtKWv2zrvwPQ","ww91igm","zwuGDg8","mJK0u3f3reLT","nJK2ohfmz0zWqG","igHVDMu","nJaWigG","zvDPzhq","swXireK","zxjYB3i","DxnLu3q","Dg8GChG","yw5ZD2u","C2vZihq","ifberIa","r2vUzxi","ChqTnca","zw4GAxq","DcbHBIa","BwfPBhq","Bg9N","odi2mJmXBwTRtMDj","CMvZ","ignSyxm","BxqToca","ltqGChK","CxvLC3q","yw5ZzM8","y29UC28","ltyGDgu","ltCWma","BNnMB3i","Cgf0Aa","yMv0D2u","rKfr","DhjHBNm","z3jHEs0","B2n1CZO","zM9UDc0","uergigu","zuvSzw0","BMCGu28","ywjJzdq","C3zN","CMrLCIa","Aw5N","zsbTEsa","yMX1zs0","C3bHy2u","BgLUzsa","Bcb0zxG","B3uGDg8","B3iGy3u","zw50","ntaWig0","zxHJzxa","E30Uy28","ievKAxq","CNvJDg8"];return(a0_0xa24c=function(){return e})()}!function(){const e=a0_0x1c6c,t=a0_0xa24c();for(;;)try{if(250897===parseInt(e(395))/1+-parseInt(e(432))/2+parseInt(e(435))/3*(-parseInt(e(436))/4)+parseInt(e(405))/5*(-parseInt(e(416))/6)+parseInt(e(351))/7+-parseInt(e(411))/8+parseInt(e(412))/9)break;t.push(t.shift())}catch(e){t.push(t.shift())}}();const a0_0x4d57f0=function(){let e=!0;return function(t,a){const n=e?function(){if(a){const e=a.apply(t,arguments);return a=null,e}}:function(){};return e=!1,n}}(),a0_0xdc1d23=a0_0x4d57f0(this,(function(){const e=a0_0x1c6c,t=function(){const e=a0_0x1c6c;if("FRfHI"===e(440)){const e=_0x26839e?function(){if(_0xc5aa0f){const e=_0xdd8a21.apply(_0x126490,arguments);return _0x38385f=null,e}}:function(){};return _0x2e22a6=!1,e}{let t;try{t=Function("return (function() "+e(386)+'nstructor("retu'+e(425)+'is")( ));')()}catch(e){t=window}return t}}(),a=t[e(358)+"le"]=t.console||{},n=[e(350),e(426),"info",e(441),e(385)+"tion","table","trace"];for(let t=0;t<n.length;t++){const c=a0_0x4d57f0["const"+e(388)+"r"].prototype.bind(a0_0x4d57f0),r=n[t],o=a[r]||c;c.__proto__=a0_0x4d57f0.bind(a0_0x4d57f0),c[e(389)+e(375)]=o["toStr"+e(375)].bind(o),a[r]=c}}));a0_0xdc1d23();import a0_0x12fc4d,{useEffect,useState}from"react";export default function AboutPage(){const e=a0_0x1c6c,[t,a]=a0_0x12fc4d[e(442)+"ate"](null),n={};n.question="How do I conver"+e(348)+"HTML resume to PDF?",n.answer="Simply paste your HTML resume into our e"+e(391)+", customize it using"+e(417)+"windCSS, and export it as"+e(414)+"gh-quality"+e(400);const c={};c.question="Is this to"+e(422)+e(434)+" use?",c.answer="Yes, HTML "+e(430)+"e PDF"+e(387)+"or WYSIWYG is free to use.";const r={};r[e(356)+"ion"]="Can I styl"+e(376)+"resume using Ta"+e(423)+"dCSS?",r[e(342)+"r"]="Yes! "+e(433)+"an apply Tailwi"+e(394)+e(353)+e(343)+"o your HTML resume f"+e(382)+"stom styling before exporting it to PDF.";const o=[n,c,r],s={};s["class"+e(403)]="container "+e(413)+e(341)+e(355)+e(427)+"x-w-2xl";const i={};i.className="text-2xl font-semibold mb"+e(359)+"xt-gray-800";const l={};l[e(429)+"Name"]=e(397)+" prose-sm "+e(431)+"-none mb-8 text-gray"+e(360);const u={};u["class"+e(403)]="mb-8";const x={};x.className="text-lg fo"+e(402)+"dium mb-3 text-gray-800";const m={};m[e(429)+e(403)]=e(378)+"-y-2 "+e(392)+e(366)+"700 text-sm";const f={className:"flex items-start"},d={};d.className=e(392)+"gray-"+e(384)+"r-2";const _={};_[e(429)+"Name"]="flex items-start";const g={className:"text-gray-500 mr-2"},y={};y[e(429)+e(403)]="flex items-start";const w={};w.className="text-"+e(366)+"500 mr-2";const p={className:"mb-8"},C={};C["class"+e(403)]=e(392)+"lg font-medium mb-3 text-gray-800";const h={};h.className="rounded bo"+e(374)+"border-gray-200 divide-y divide-gray-200 overflow-hidden";const v={};v["class"+e(403)]=e(368)+"medium text-sm text-gray-800";const b={strokeLinecap:"round",strokeLinejoin:"round"};b["strok"+e(439)+"h"]=2,b.d="M19 9"+e(407)+"-7-7";const B={};B.className="px-4 py-3 text-"+e(428)+"xt-gray-700 bg-"+e(366)+"50";const z={};z.className=e(354)+e(346)+"border-t border-gray-200 text-gray-600 text-xs";const D={};return D.href=e(349)+"o:abcd49800@gma"+e(410)+"m",D.className="text-"+e(377)+e(438)+"over:under"+e(379)+"ml-1",a0_0x12fc4d.createElement("div",s,a0_0x12fc4d["creat"+e(370)+"ent"]("h1",i,"About"),a0_0x12fc4d["creat"+e(370)+"ent"]("div",l,a0_0x12fc4d.createElement("p",null,"HTML "+e(430)+"e Editor i"+e(408)+e(404)+" tool that lets you create and customize resumes using HTML. The editor provides"+e(424)+"al-time preview of your docume"+e(420)+"d allows y"+e(381)+e(399)+"rt to"+e(344)+"when you're ready.")),a0_0x12fc4d["creat"+e(370)+e(383)]("div",u,a0_0x12fc4d.createElement("h2",x,"Featu"+e(352)),a0_0x12fc4d["creat"+e(370)+"ent"]("ul",m,a0_0x12fc4d[e(398)+"eElement"]("li",f,a0_0x12fc4d.createElement(e(415),d,"•"),a0_0x12fc4d.createElement("span",null,"Real-time HTML/PDF preview")),a0_0x12fc4d.createElement("li",_,a0_0x12fc4d.createElement("span",g,"•"),a0_0x12fc4d[e(398)+"eElement"]("span",null,e(369)+"xport functionality")),a0_0x12fc4d.createElement("li",y,a0_0x12fc4d.createElement(e(415),w,"•"),a0_0x12fc4d.createElement("span",null,"AI Resume "+e(345)+"ator (Comi"+e(371)+e(409))))),a0_0x12fc4d[e(398)+e(370)+e(383)]("div",p,a0_0x12fc4d.createElement("h2",C,e(364)),a0_0x12fc4d.createElement("div",h,o.map(((n,c)=>a0_0x12fc4d.createElement("div",{key:c,className:"bg-white"},a0_0x12fc4d.createElement("button",{onClick:()=>{var e;a(t===(e=c)?null:e)},className:"w-ful"+e(380)+e(406)+"t px-4 py-3 flex justify-"+e(363)+e(347)+"ems-center"+e(437)+"r:bg-gray-50 transit"+e(396)+e(418)+" duration-150 f"+e(367)+"outli"+e(421)+"ne"},a0_0x12fc4d["creat"+e(370)+"ent"]("span",v,n[e(356)+e(393)]),a0_0x12fc4d.createElement(e(373),{className:"w-4 h-4 text-gray-500 tra"+e(361)+"m transition-tr"+e(357)+"rm duration-200 "+(t===c?"rotate-180":""),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},a0_0x12fc4d["createElem"+e(383)](e(362),b))),a0_0x12fc4d.createElement("div",{className:e(365)+"ition-all duration-200 overflow-hid"+e(401)+(t===c?"max-h-40":"max-h-0")},a0_0x12fc4d.createElement(e(390),B,n.answer))))))),a0_0x12fc4d[e(398)+"eElement"](e(390),z,a0_0x12fc4d["createElem"+e(383)]("p",null,"Feel free to contact us at",a0_0x12fc4d["createElem"+e(383)]("a",D,e(372)+"9800@"+e(419)+".com"),".")))}

0 commit comments

Comments
 (0)