diff --git a/README.md b/README.md index 6380b3a..cba7e65 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # Faultier-CV -![](media/logo.png) +

+ +

+ This is a CV generator that allows you to generate and modify your CV in seconds without any overhead. @@ -11,4 +14,6 @@ The name Faultier-CV is a combination of the german word "Faultier" (which means ## Features - Generate and Edit your CV in seconds - Save your CV as a JSON file and load it again later -- export your CV as a HTML file \ No newline at end of file +- export your CV as a HTML file + +Note: if you want a PDF version of your CV, you can simply print the HTML file as a PDF. \ No newline at end of file diff --git a/dist/bundle.js b/dist/bundle.js index 43b81c5..f47e4ac 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -9199,7 +9199,7 @@ eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElem /***/ ((__unused_webpack_module, exports) => { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.defaults = void 0;\nexports.defaults = {\n markdown: \"# Mia\\nSoftware Developer\\n\\n[📧 Email](mailto:career@i5h.eu) \\n[🌍 Web](https://heidenstedt.org) \\n[🛠GitHub](https://github.com/i5heu) \\n[🐦Twitter](https://twitter.com/MiauPub) \\n[🔗LinkedIn](https://www.linkedin.com/in/mia-heidenstedt-7198ab145/ ) \\n[🖇Xing](https://www.xing.com/profile/Mia_Heidenstedt/cv)\\n\\n| | |\\n|---|---|\\n| Location: | Ulm, Germany |\\n| Pronouns: | She/Her |\\n| Phone: | Available on request |\\n| Human Languages: | German, English |\\n\\n## Skills\\n\\n> ### Key Skills \\n> Golang, TypeScript, SQL, Node\\n\\n#### Languages\\nC#, CSS, HTML, JavaScript, PHP, Python, Liquid, Rust\\n\\n#### Frameworks\\nSymfony, Doctrine, Selenium, Jest, Codeception, Svelte, Vue, Redux\\n\\n#### Databases\\nMySql, CouchDB, RocksDB, PouchDB, Redis, SQLite, Postgres\\n\\n#### Systems\\nLinux (Debian / Ubuntu), Nginx, Shell-Scripting, Git, Mercurial, Docker, IPFS, Shopify, Node, Github-Actions, Google Cloud Functions, WASM etc.\\n\\n## Experience\\n\\n> ### Golang Developer @ Fireball Labs GmbH\\n> April 2022 - October 2022 \\n> ***Tech:*** Golang, Svelte, ClickHouse, MySQL, Typescript, Git \\n> ***Tasks:*** \\n> - Implemented a interface for batch processing domain changes in nicmanager with the corresponding front end\\n> - Build a background job to sync domains from nicmanager to Postgres\\n> - Build a dashboard with statistics generated from ClickHouse\\n> - Optimized various parts for speed and performance\\n> - Initiated and implemented a swtich to a mono git repo\\n\\n\\n> ### Frontend Developer @ netshake GmbH\\n> March 2021 - April 2022 \\n> ***Tech:*** JavaScript, PHP, Liquid, Shopify, Git, CSS \\n> ***Tasks:*** \\n> - implemented a synchronization middleware between MOEVE and Shopify for inventory, vouchers, orders, refunds and othe ERP functions\\n> - build a framework to generate PDF-coupons through Shopify APIs \\n> - build a module that allows to generate a slider with simple liquid instructions\\n> - build various Shopify Shops \\n\\n> ### Apprenticeship Computer Science Expert @ Intermetrics GmbH\\n> March 2018 - February 2021 \\n> ***Tech:*** JavaScript, TypeScript, PHP (Symfony/Doctrine), Node, C#, Svelte, Vue, Redux, Mercurial, Google Cloud Functions, CSS, Jest, PHPUnit, Codeception, Selenium \\n> ***Tasks:*** \\n> - build a system to show the expected areas of change of a html module through css parameter changes\\n> - implemented a low bandwidth, low latency system to sync nested data between the frontend and the server without interuptions for user in case of mild race conditions\\n> - build a system to stack css animations and transitions \\n> - prototyped a ui framework on top on shadow DOMs and Web Components\\n\\n> ### Managing Director @ my own company\\n> September 2016 - April 2018 \\n> ***Tech:*** JavaScript, Python, Bash-Scripting \\n> ***Tasks:*** \\n> - build a deamon to manage and run a small cluster of nodes for cluster rendering Systems\\n> - used varoius software to machine with CNC Systems\\n> - market investigation conducted\\n> - sales and marketing\\n\\n## Projects\\n\\n> ### Faultier-CV\\n> Generated this CV \\n> https://github.com/i5heu/Faultier-CV\\n\\n> ### simple-S3-cache\\n> Just hook it in front of your public S3 bucket and enjoy reduction in bandwidth costs from your bucket. \\n> https://github.com/i5heu/simple-S3-cache\\n\\n> ### tor-simple-hidden-website \\n> Create a hidden service with a static webpage in one minute. \\n> https://github.com/i5heu/tor-simple-hidden-website\\n\\n> ### LGBTQIA.space\\n> Running a Mastodon instance for the public. \\n> https://lgbtqia.space\\n\\n#### Hobbys\\nProgramming, Reading, Sailing, Community Work\",\n html: '\\n\\n\\n \\n \\n \\n CV\\n \\n\\n\\n \\n {{markdown}}\\n\\n',\n css: \"html {\\n font-family: Arial, Helvetica, sans-serif\\n}\\n\\nbody {\\n padding: 3em 3em 1em 3em;\\n}\\n\\nh1 {\\n margin-top: 0;\\n}\\n\\nh4 {\\n margin-bottom: 0.2em;\\n}\\n\\np {\\n margin-top: 0.3em;\\n}\\n\\na {\\n color: rgb(16, 6, 107);\\n text-decoration: none;\\n font-size: 1.2em;\\n margin-right: 7px;\\n}\\n\\nblockquote {\\n border: 1px solid black;\\n padding: 5px;\\n border-radius: 5px;\\n margin: 1em 0;\\n}\\n\\nblockquote h3 {\\n margin: 0;\\n}\\n\\nblockquote p {\\n margin: 0.5em 0;\\n}\\n\\nblockquote a {\\n line-height: 2em;\\n font-size: 0.9em;\\n margin: 0.5em 0;\\n}\",\n};\n\n\n//# sourceURL=webpack://faultier-cv/./src/default.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.defaults = void 0;\nexports.defaults = { \"markdown\": \"# Mia Heidenstedt\\nSoftware Developer\\n\\n[📧 Email](mailto:career@i5h.eu) \\n[🌍 Web](https://heidenstedt.org) \\n[🛠GitHub](https://github.com/i5heu) \\n[🐦Twitter](https://twitter.com/MiauPub) \\n[🔗LinkedIn](https://www.linkedin.com/in/mia-heidenstedt-7198ab145/ ) \\n[🖇Xing](https://www.xing.com/profile/Mia_Heidenstedt/cv)\\n\\n| | |\\n|---|---|\\n| Location: | Berlin, Germany |\\n| Pronouns: | She/Her |\\n| Phone: | Available on request |\\n| Human Languages: | German, English |\\n\\n## Skills\\n\\n> ### Key Skills \\n> Golang, TypeScript, SQL, Node\\n\\n#### Languages\\nGolang, TypeScript, JavaScript, SQL, C#, CSS, HTML, PHP, Python, Liquid, Rust\\n\\n#### Frameworks\\nSymfony, Doctrine, Selenium, Jest, Codeception, Svelte, Vue, Redux\\n\\n#### Databases\\nMySql, CouchDB, RocksDB, PouchDB, Redis, SQLite, Postgres\\n\\n#### Systems\\nLinux (Debian / Ubuntu), Nginx, Shell-Scripting, Git, Mercurial, Docker, IPFS, Shopify, Node, Github-Actions, Google Cloud Functions, WASM etc.\\n\\n## Experience\\n\\n> ### Senior Golang Developer @ Devoteam GmbH\\n> January 2023 - NOW \\n> ***Tech:*** Golang, IBM MQ, EDLS, Lambas, BlackDuck, SonarQube, Github Action, Docker, ECS, Stepfunction, S3, API Gateway, EFS \\n> ***Tasks:*** \\n> - Implemented IBM Message Queue using Go SDK\\n> - Implemented Go Lambdas with EFS and resource optimization\\n> - Cloudwatch and Postgres interactions in Go Lambdas\\n> - Created Step Function with Open Search compatible logs\\n> - Implemented REST interface with Open API documentation\\n> - Created and expanded Github Actions Pipelines\\n> - Set up a prototype of a Kafka system\\n\\n> ### Golang Developer @ Fireball Labs GmbH\\n> April 2022 - October 2022 \\n> ***Tech:*** Golang, Svelte, ClickHouse, MySQL, Typescript, Git \\n> ***Tasks:*** \\n> - Implemented a interface for batch processing domain changes in nicmanager with the corresponding front end\\n> - Build a background job to sync domains from nicmanager to Postgres\\n> - Build a dashboard with statistics generated from ClickHouse\\n> - Optimized various parts for speed and performance\\n> - Initiated and implemented a swtich to a mono git repo\\n\\n\\n> ### Frontend Developer @ netshake GmbH\\n> March 2021 - April 2022 \\n> ***Tech:*** JavaScript, PHP, Liquid, Shopify, Git, CSS \\n> ***Tasks:*** \\n> - implemented a synchronization middleware between MOEVE and Shopify for inventory, vouchers, orders, refunds and othe ERP functions\\n> - build a framework to generate PDF-coupons through Shopify APIs \\n> - build a module that allows to generate a slider with simple liquid instructions\\n> - build various Shopify Shops \\n\\n> ### Apprenticeship Computer Science Expert @ Intermetrics GmbH\\n> March 2018 - February 2021 \\n> ***Tech:*** JavaScript, TypeScript, PHP (Symfony/Doctrine), Node, C#, Svelte, Vue, Redux, Mercurial, Google Cloud Functions, CSS, Jest, PHPUnit, Codeception, Selenium \\n> ***Tasks:*** \\n> - build a system to show the expected areas of change of a html module through css parameter changes\\n> - implemented a low bandwidth, low latency system to sync nested data between the frontend and the server without interuptions for user in case of mild race conditions\\n> - build a system to stack css animations and transitions \\n> - prototyped a ui framework on top on shadow DOMs and Web Components\\n\\n> ### Managing Director @ my own company\\n> September 2016 - April 2018 \\n> ***Tech:*** JavaScript, Python, Bash-Scripting \\n> ***Tasks:*** \\n> - build a deamon to manage and run a small cluster of nodes for cluster rendering Systems\\n> - used varoius software to machine with CNC Systems\\n> - market investigation conducted\\n> - sales and marketing\\n\\n## Projects\\n\\n> ### Faultier-CV\\n> Generated this CV \\n> https://github.com/i5heu/Faultier-CV\\n\\n> ### simple-S3-cache\\n> Just hook it in front of your public S3 bucket and enjoy reduction in bandwidth costs from your bucket. \\n> https://github.com/i5heu/simple-S3-cache\\n\\n> ### tor-simple-hidden-website \\n> Create a hidden service with a static webpage in one minute. \\n> https://github.com/i5heu/tor-simple-hidden-website\\n\\n> ### LGBTQIA.space\\n> Running a Mastodon instance for the public. \\n> https://lgbtqia.space\\n\\n#### Hobbys\\nProgramming, Reading, Sailing, Community Work\", \"html\": \"\\n\\n\\n \\n \\n \\n CV\\n \\n\\n\\n \\n {{markdown}}\\n\\n\", \"css\": \"html {\\n font-family: Arial, Helvetica, sans-serif\\n}\\n\\nbody {\\n padding: 3em 3em 1em 3em;\\n}\\n\\nh1 {\\n margin-top: 0;\\n}\\n\\nh4 {\\n margin-bottom: 0.2em;\\n}\\n\\nimg {\\n border-radius: 5px;\\n}\\n\\np {\\n margin-top: 0.3em;\\n}\\n\\na {\\n color: rgb(16, 6, 107);\\n text-decoration: none;\\n font-size: 1.2em;\\n margin-right: 7px;\\n}\\n\\nblockquote {\\n border: 1px solid black;\\n padding: 5px;\\n border-radius: 5px;\\n margin: 1em 0;\\n}\\n\\nblockquote h3 {\\n margin: 0;\\n}\\n\\nblockquote p {\\n margin: 0.5em 0;\\n}\\n\\nblockquote a {\\n line-height: 2em;\\n font-size: 0.9em;\\n margin: 0.5em 0;\\n}\" };\n\n\n//# sourceURL=webpack://faultier-cv/./src/default.ts?"); /***/ }), @@ -9210,7 +9210,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst monaco_editor_1 = __webpack_require__(/*! monaco-editor */ \"include-loader!./node_modules/monaco-editor/esm/vs/editor/editor.main.js\");\nconst default_1 = __webpack_require__(/*! ./default */ \"./src/default.ts\");\nconst marked_1 = __webpack_require__(/*! marked */ \"./node_modules/marked/lib/marked.cjs\");\nconst store = getStorageFromBrowser()\n ? getStorageFromBrowser()\n : default_1.defaults;\nconst fileTabs = document.getElementById(\"fileTabs\");\nsetTabAsActive(\"markdown\");\nconst editorInstance = monaco_editor_1.editor.create(document.getElementById(\"editor\"), {\n value: store.markdown,\n language: \"markdown\",\n theme: \"vs-dark\",\n});\nwindow.onresize = function () {\n editorInstance.layout();\n};\nconsole.log(\"Hello World\");\nlet iframeHTMLPassive = \"\";\nconst iframe = document.createElement(\"iframe\");\nconst preview = document.getElementById(\"preview\");\npreview.innerHTML = \"\";\npreview.appendChild(iframe);\nbuildPreview();\nfileTabs.addEventListener(\"click\", (e) => {\n const val = e.target.innerText;\n setTabAsActive(val);\n switch (val) {\n case \"markdown\":\n editorInstance.setValue(store.markdown);\n break;\n case \"html\":\n editorInstance.setValue(store.html);\n break;\n case \"css\":\n editorInstance.setValue(store.css);\n break;\n default:\n break;\n }\n});\nlet loading = false;\neditorInstance.getModel().onDidChangeContent((e) => {\n if (loading)\n return;\n loading = true;\n setTimeout(() => {\n setCurrentFile(editorInstance.getValue());\n buildPreview();\n loading = false;\n }, 1000);\n});\nfunction setCurrentFile(val) {\n const file = getCurrentFile();\n switch (file) {\n case \"markdown\":\n store.markdown = val;\n break;\n case \"html\":\n store.html = val;\n break;\n case \"css\":\n store.css = val;\n break;\n default:\n break;\n }\n monaco_editor_1.editor.setModelLanguage(editorInstance.getModel(), file);\n}\nfunction getCurrentFile() {\n return fileTabs.querySelector(\".active\").innerHTML;\n}\nfunction setTabAsActive(file) {\n const active = fileTabs.querySelector(\".active\");\n if (active)\n active.classList.remove(\"active\");\n const newActive = fileTabs.querySelector(`[data-file='${file}']`);\n newActive.classList.add(\"active\");\n}\nfunction buildPreview() {\n let html = store.html;\n const css = store.css;\n const markdownParsed = marked_1.marked.parse(store.markdown);\n html = html.replace(\"{{css}}\", css);\n html = html.replace(\"{{markdown}}\", markdownParsed);\n iframe.contentWindow.document.write(linksWithNewTab(html));\n iframe.contentWindow.document.close();\n iframeHTMLPassive = html;\n saveStorageInBrowser();\n}\nfunction linksWithNewTab(html) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, \"text/html\");\n const links = doc.querySelectorAll(\"a\");\n links.forEach((link) => {\n link.setAttribute(\"target\", \"_blank\");\n });\n return doc.documentElement.innerHTML;\n}\ndocument.getElementById(\"save\").addEventListener(\"click\", () => {\n const blob = new Blob([JSON.stringify(store)], { type: \"text/plain\" });\n const a = document.createElement(\"a\");\n a.href = URL.createObjectURL(blob);\n a.download = \"store.json\";\n a.click();\n});\ndocument.getElementById(\"import\").addEventListener(\"click\", () => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n input.onchange = (e) => {\n const file = e.target.files[0];\n const reader = new FileReader();\n reader.onload = (e) => {\n const text = e.target.result;\n const store = JSON.parse(text);\n editorInstance.setValue(store.markdown);\n setTabAsActive(\"markdown\");\n buildPreview();\n };\n reader.readAsText(file);\n };\n input.click();\n});\ndocument.getElementById(\"html\").addEventListener(\"click\", () => {\n const blob = new Blob([iframeHTMLPassive], { type: \"text/html\" });\n const a = document.createElement(\"a\");\n a.href = URL.createObjectURL(blob);\n a.download = \"index.html\";\n a.click();\n});\nfunction saveStorageInBrowser() {\n localStorage.setItem(\"store\", JSON.stringify(store));\n}\nfunction getStorageFromBrowser() {\n const store = localStorage.getItem(\"store\");\n if (store)\n return JSON.parse(store);\n return null;\n}\n\n\n//# sourceURL=webpack://faultier-cv/./src/main.ts?"); +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst monaco_editor_1 = __webpack_require__(/*! monaco-editor */ \"include-loader!./node_modules/monaco-editor/esm/vs/editor/editor.main.js\");\nconst default_1 = __webpack_require__(/*! ./default */ \"./src/default.ts\");\nconst marked_1 = __webpack_require__(/*! marked */ \"./node_modules/marked/lib/marked.cjs\");\nconst store = getStorageFromBrowser()\n ? getStorageFromBrowser()\n : default_1.defaults;\nconst fileTabs = document.getElementById(\"fileTabs\");\nsetTabAsActive(\"markdown\");\nconst editorInstance = monaco_editor_1.editor.create(document.getElementById(\"editor\"), {\n value: store.markdown,\n language: \"markdown\",\n theme: \"vs-dark\",\n});\nwindow.onresize = function () {\n editorInstance.layout();\n};\nconsole.log(\"Application starting...\");\nlet iframeHTMLPassive = \"\";\nconst iframe = document.createElement(\"iframe\");\nconst preview = document.getElementById(\"preview\");\npreview.innerHTML = \"\";\npreview.appendChild(iframe);\nbuildPreview();\nfileTabs.addEventListener(\"click\", (e) => {\n const val = e.target.innerText;\n setTabAsActive(val);\n switch (val) {\n case \"markdown\":\n editorInstance.setValue(store.markdown);\n break;\n case \"html\":\n editorInstance.setValue(store.html);\n break;\n case \"css\":\n editorInstance.setValue(store.css);\n break;\n default:\n break;\n }\n});\nlet loading = false;\neditorInstance.getModel().onDidChangeContent((e) => {\n if (loading)\n return;\n loading = true;\n setTimeout(() => {\n setCurrentFile(editorInstance.getValue());\n buildPreview();\n loading = false;\n }, 1000);\n});\nfunction setCurrentFile(val) {\n const file = getCurrentFile();\n switch (file) {\n case \"markdown\":\n store.markdown = val;\n break;\n case \"html\":\n store.html = val;\n break;\n case \"css\":\n store.css = val;\n break;\n default:\n break;\n }\n monaco_editor_1.editor.setModelLanguage(editorInstance.getModel(), file);\n}\nfunction getCurrentFile() {\n return fileTabs.querySelector(\".active\").innerHTML;\n}\nfunction setTabAsActive(file) {\n const active = fileTabs.querySelector(\".active\");\n if (active)\n active.classList.remove(\"active\");\n const newActive = fileTabs.querySelector(`[data-file='${file}']`);\n newActive.classList.add(\"active\");\n}\nfunction buildPreview() {\n let html = store.html;\n const css = store.css;\n const markdownParsed = marked_1.marked.parse(store.markdown);\n html = html.replace(\"{{css}}\", css);\n html = html.replace(\"{{markdown}}\", markdownParsed);\n iframe.contentWindow.document.write(linksWithNewTab(html));\n iframe.contentWindow.document.close();\n iframeHTMLPassive = html;\n saveStorageInBrowser();\n}\nfunction linksWithNewTab(html) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, \"text/html\");\n const links = doc.querySelectorAll(\"a\");\n links.forEach((link) => {\n link.setAttribute(\"target\", \"_blank\");\n });\n return doc.documentElement.innerHTML;\n}\ndocument.getElementById(\"save\").addEventListener(\"click\", () => {\n const blob = new Blob([JSON.stringify(store)], { type: \"text/plain\" });\n const a = document.createElement(\"a\");\n a.href = URL.createObjectURL(blob);\n a.download = \"Faultier-CV-store.json\";\n a.click();\n});\ndocument.getElementById(\"import\").addEventListener(\"click\", () => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n input.onchange = (e) => {\n const file = e.target.files[0];\n const reader = new FileReader();\n reader.onload = (e) => {\n const text = e.target.result;\n const store = JSON.parse(text);\n editorInstance.setValue(store.markdown);\n setTabAsActive(\"markdown\");\n buildPreview();\n };\n reader.readAsText(file);\n };\n input.click();\n});\ndocument.getElementById(\"html\").addEventListener(\"click\", () => {\n const blob = new Blob([iframeHTMLPassive], { type: \"text/html\" });\n const a = document.createElement(\"a\");\n a.href = URL.createObjectURL(blob);\n a.download = \"Faultier-CV-CV.html\";\n a.click();\n});\nfunction saveStorageInBrowser() {\n localStorage.setItem(\"store\", JSON.stringify(store));\n}\nfunction getStorageFromBrowser() {\n const store = localStorage.getItem(\"store\");\n if (store)\n return JSON.parse(store);\n return null;\n}\n\n\n//# sourceURL=webpack://faultier-cv/./src/main.ts?"); /***/ }), diff --git a/dist/index.html b/dist/index.html index 1d23585..2ac3b14 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1,127 +1,163 @@ - - - - - Faultier-CV - - - - -
-
-
html
-
css
-
markdown
-
-
+ } + + + + + +
+
+
html
+
css
+
markdown
-
-
-
Save
-
html
-
Import
-
-
Loading...
+
+
+
+
+
Save
+
html
+
Import
+
Loading...
+
+
+

Warning

+

As of now, using only browser-based JavaScript, it's not feasible to print HTML content into a PDF while + specifying a custom height. The workaround involves saving the HTML file, opening it, and then exporting it as a + PDF.

+
+ + + + - - - - + \ No newline at end of file diff --git a/src/default.ts b/src/default.ts index 162b3a9..fd4aabe 100644 --- a/src/default.ts +++ b/src/default.ts @@ -4,9 +4,4 @@ export type Store = { css: string; }; -export const defaults: Store = { - markdown: - "# Mia\nSoftware Developer\n\n[📧 Email](mailto:career@i5h.eu) \n[🌍 Web](https://heidenstedt.org) \n[🛠GitHub](https://github.com/i5heu) \n[🐦Twitter](https://twitter.com/MiauPub) \n[🔗LinkedIn](https://www.linkedin.com/in/mia-heidenstedt-7198ab145/ ) \n[🖇Xing](https://www.xing.com/profile/Mia_Heidenstedt/cv)\n\n| | |\n|---|---|\n| Location: | Ulm, Germany |\n| Pronouns: | She/Her |\n| Phone: | Available on request |\n| Human Languages: | German, English |\n\n## Skills\n\n> ### Key Skills \n> Golang, TypeScript, SQL, Node\n\n#### Languages\nC#, CSS, HTML, JavaScript, PHP, Python, Liquid, Rust\n\n#### Frameworks\nSymfony, Doctrine, Selenium, Jest, Codeception, Svelte, Vue, Redux\n\n#### Databases\nMySql, CouchDB, RocksDB, PouchDB, Redis, SQLite, Postgres\n\n#### Systems\nLinux (Debian / Ubuntu), Nginx, Shell-Scripting, Git, Mercurial, Docker, IPFS, Shopify, Node, Github-Actions, Google Cloud Functions, WASM etc.\n\n## Experience\n\n> ### Golang Developer @ Fireball Labs GmbH\n> April 2022 - October 2022 \n> ***Tech:*** Golang, Svelte, ClickHouse, MySQL, Typescript, Git \n> ***Tasks:*** \n> - Implemented a interface for batch processing domain changes in nicmanager with the corresponding front end\n> - Build a background job to sync domains from nicmanager to Postgres\n> - Build a dashboard with statistics generated from ClickHouse\n> - Optimized various parts for speed and performance\n> - Initiated and implemented a swtich to a mono git repo\n\n\n> ### Frontend Developer @ netshake GmbH\n> March 2021 - April 2022 \n> ***Tech:*** JavaScript, PHP, Liquid, Shopify, Git, CSS \n> ***Tasks:*** \n> - implemented a synchronization middleware between MOEVE and Shopify for inventory, vouchers, orders, refunds and othe ERP functions\n> - build a framework to generate PDF-coupons through Shopify APIs \n> - build a module that allows to generate a slider with simple liquid instructions\n> - build various Shopify Shops \n\n> ### Apprenticeship Computer Science Expert @ Intermetrics GmbH\n> March 2018 - February 2021 \n> ***Tech:*** JavaScript, TypeScript, PHP (Symfony/Doctrine), Node, C#, Svelte, Vue, Redux, Mercurial, Google Cloud Functions, CSS, Jest, PHPUnit, Codeception, Selenium \n> ***Tasks:*** \n> - build a system to show the expected areas of change of a html module through css parameter changes\n> - implemented a low bandwidth, low latency system to sync nested data between the frontend and the server without interuptions for user in case of mild race conditions\n> - build a system to stack css animations and transitions \n> - prototyped a ui framework on top on shadow DOMs and Web Components\n\n> ### Managing Director @ my own company\n> September 2016 - April 2018 \n> ***Tech:*** JavaScript, Python, Bash-Scripting \n> ***Tasks:*** \n> - build a deamon to manage and run a small cluster of nodes for cluster rendering Systems\n> - used varoius software to machine with CNC Systems\n> - market investigation conducted\n> - sales and marketing\n\n## Projects\n\n> ### Faultier-CV\n> Generated this CV \n> https://github.com/i5heu/Faultier-CV\n\n> ### simple-S3-cache\n> Just hook it in front of your public S3 bucket and enjoy reduction in bandwidth costs from your bucket. \n> https://github.com/i5heu/simple-S3-cache\n\n> ### tor-simple-hidden-website \n> Create a hidden service with a static webpage in one minute. \n> https://github.com/i5heu/tor-simple-hidden-website\n\n> ### LGBTQIA.space\n> Running a Mastodon instance for the public. \n> https://lgbtqia.space\n\n#### Hobbys\nProgramming, Reading, Sailing, Community Work", - html: '\n\n\n \n \n \n CV\n \n\n\n \n {{markdown}}\n\n', - css: "html {\n font-family: Arial, Helvetica, sans-serif\n}\n\nbody {\n padding: 3em 3em 1em 3em;\n}\n\nh1 {\n margin-top: 0;\n}\n\nh4 {\n margin-bottom: 0.2em;\n}\n\np {\n margin-top: 0.3em;\n}\n\na {\n color: rgb(16, 6, 107);\n text-decoration: none;\n font-size: 1.2em;\n margin-right: 7px;\n}\n\nblockquote {\n border: 1px solid black;\n padding: 5px;\n border-radius: 5px;\n margin: 1em 0;\n}\n\nblockquote h3 {\n margin: 0;\n}\n\nblockquote p {\n margin: 0.5em 0;\n}\n\nblockquote a {\n line-height: 2em;\n font-size: 0.9em;\n margin: 0.5em 0;\n}", -}; +export const defaults: Store = {"markdown":"# Mia Heidenstedt\nSoftware Developer\n\n[📧 Email](mailto:career@i5h.eu) \n[🌍 Web](https://heidenstedt.org) \n[🛠GitHub](https://github.com/i5heu) \n[🐦Twitter](https://twitter.com/MiauPub) \n[🔗LinkedIn](https://www.linkedin.com/in/mia-heidenstedt-7198ab145/ ) \n[🖇Xing](https://www.xing.com/profile/Mia_Heidenstedt/cv)\n\n| | |\n|---|---|\n| Location: | Berlin, Germany |\n| Pronouns: | She/Her |\n| Phone: | Available on request |\n| Human Languages: | German, English |\n\n## Skills\n\n> ### Key Skills \n> Golang, TypeScript, SQL, Node\n\n#### Languages\nGolang, TypeScript, JavaScript, SQL, C#, CSS, HTML, PHP, Python, Liquid, Rust\n\n#### Frameworks\nSymfony, Doctrine, Selenium, Jest, Codeception, Svelte, Vue, Redux\n\n#### Databases\nMySql, CouchDB, RocksDB, PouchDB, Redis, SQLite, Postgres\n\n#### Systems\nLinux (Debian / Ubuntu), Nginx, Shell-Scripting, Git, Mercurial, Docker, IPFS, Shopify, Node, Github-Actions, Google Cloud Functions, WASM etc.\n\n## Experience\n\n> ### Senior Golang Developer @ Devoteam GmbH\n> January 2023 - NOW \n> ***Tech:*** Golang, IBM MQ, EDLS, Lambas, BlackDuck, SonarQube, Github Action, Docker, ECS, Stepfunction, S3, API Gateway, EFS \n> ***Tasks:*** \n> - Implemented IBM Message Queue using Go SDK\n> - Implemented Go Lambdas with EFS and resource optimization\n> - Cloudwatch and Postgres interactions in Go Lambdas\n> - Created Step Function with Open Search compatible logs\n> - Implemented REST interface with Open API documentation\n> - Created and expanded Github Actions Pipelines\n> - Set up a prototype of a Kafka system\n\n> ### Golang Developer @ Fireball Labs GmbH\n> April 2022 - October 2022 \n> ***Tech:*** Golang, Svelte, ClickHouse, MySQL, Typescript, Git \n> ***Tasks:*** \n> - Implemented a interface for batch processing domain changes in nicmanager with the corresponding front end\n> - Build a background job to sync domains from nicmanager to Postgres\n> - Build a dashboard with statistics generated from ClickHouse\n> - Optimized various parts for speed and performance\n> - Initiated and implemented a swtich to a mono git repo\n\n\n> ### Frontend Developer @ netshake GmbH\n> March 2021 - April 2022 \n> ***Tech:*** JavaScript, PHP, Liquid, Shopify, Git, CSS \n> ***Tasks:*** \n> - implemented a synchronization middleware between MOEVE and Shopify for inventory, vouchers, orders, refunds and othe ERP functions\n> - build a framework to generate PDF-coupons through Shopify APIs \n> - build a module that allows to generate a slider with simple liquid instructions\n> - build various Shopify Shops \n\n> ### Apprenticeship Computer Science Expert @ Intermetrics GmbH\n> March 2018 - February 2021 \n> ***Tech:*** JavaScript, TypeScript, PHP (Symfony/Doctrine), Node, C#, Svelte, Vue, Redux, Mercurial, Google Cloud Functions, CSS, Jest, PHPUnit, Codeception, Selenium \n> ***Tasks:*** \n> - build a system to show the expected areas of change of a html module through css parameter changes\n> - implemented a low bandwidth, low latency system to sync nested data between the frontend and the server without interuptions for user in case of mild race conditions\n> - build a system to stack css animations and transitions \n> - prototyped a ui framework on top on shadow DOMs and Web Components\n\n> ### Managing Director @ my own company\n> September 2016 - April 2018 \n> ***Tech:*** JavaScript, Python, Bash-Scripting \n> ***Tasks:*** \n> - build a deamon to manage and run a small cluster of nodes for cluster rendering Systems\n> - used varoius software to machine with CNC Systems\n> - market investigation conducted\n> - sales and marketing\n\n## Projects\n\n> ### Faultier-CV\n> Generated this CV \n> https://github.com/i5heu/Faultier-CV\n\n> ### simple-S3-cache\n> Just hook it in front of your public S3 bucket and enjoy reduction in bandwidth costs from your bucket. \n> https://github.com/i5heu/simple-S3-cache\n\n> ### tor-simple-hidden-website \n> Create a hidden service with a static webpage in one minute. \n> https://github.com/i5heu/tor-simple-hidden-website\n\n> ### LGBTQIA.space\n> Running a Mastodon instance for the public. \n> https://lgbtqia.space\n\n#### Hobbys\nProgramming, Reading, Sailing, Community Work","html":"\n\n\n \n \n \n CV\n \n\n\n \n {{markdown}}\n\n","css":"html {\n font-family: Arial, Helvetica, sans-serif\n}\n\nbody {\n padding: 3em 3em 1em 3em;\n}\n\nh1 {\n margin-top: 0;\n}\n\nh4 {\n margin-bottom: 0.2em;\n}\n\nimg {\n border-radius: 5px;\n}\n\np {\n margin-top: 0.3em;\n}\n\na {\n color: rgb(16, 6, 107);\n text-decoration: none;\n font-size: 1.2em;\n margin-right: 7px;\n}\n\nblockquote {\n border: 1px solid black;\n padding: 5px;\n border-radius: 5px;\n margin: 1em 0;\n}\n\nblockquote h3 {\n margin: 0;\n}\n\nblockquote p {\n margin: 0.5em 0;\n}\n\nblockquote a {\n line-height: 2em;\n font-size: 0.9em;\n margin: 0.5em 0;\n}"}; diff --git a/src/index.html b/src/index.html index 09dc5a9..d8e362f 100644 --- a/src/index.html +++ b/src/index.html @@ -1,127 +1,163 @@ - - - - - Faultier-CV - - - - -
-
-
html
-
css
-
markdown
-
-
+ } + + + + + +
+
+
html
+
css
+
markdown
-
-
-
Save
-
html
-
Import
-
-
Loading...
+
+
+
+
+
Save
+
html
+
Import
+
Loading...
+
+
+

Warning

+

As of now, using only browser-based JavaScript, it's not feasible to print HTML content into a PDF while + specifying a custom height. The workaround involves saving the HTML file, opening it, and then exporting it as a + PDF.

+
+ + + + - - - - + \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 1a09a4d..cdfe1bd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,7 +17,7 @@ window.onresize = function () { editorInstance.layout(); }; -console.log("Hello World"); +console.log("Application starting..."); let iframeHTMLPassive = ""; const iframe = document.createElement("iframe"); const preview = document.getElementById("preview"); @@ -114,7 +114,7 @@ document.getElementById("save").addEventListener("click", () => { const blob = new Blob([JSON.stringify(store)], { type: "text/plain" }); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); - a.download = "store.json"; + a.download = "Faultier-CV-store.json"; a.click(); }); @@ -141,7 +141,7 @@ document.getElementById("html").addEventListener("click", () => { const blob = new Blob([iframeHTMLPassive], { type: "text/html" }); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); - a.download = "index.html"; + a.download = "Faultier-CV-CV.html"; a.click(); });