{"id":26529274,"url":"https://github.com/melkassib/cv-generator-latex","last_synced_at":"2025-06-14T11:38:38.621Z","repository":{"id":277264832,"uuid":"712170472","full_name":"melkassib/cv-generator-latex","owner":"melkassib","description":" A Kotlin Library for Generating LaTeX-based CVs","archived":false,"fork":false,"pushed_at":"2025-03-11T03:43:52.000Z","size":1644,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T09:42:53.353Z","etag":null,"topics":["altacv","awesomecv","cv-builder","cv-generator","cv-template","dsl","java","kotlin","latex","latex-template","resume-generator","resume-latex"],"latest_commit_sha":null,"homepage":"https://melkassib.github.io/cv-generator-latex/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/melkassib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-30T23:52:25.000Z","updated_at":"2025-03-31T16:37:50.000Z","dependencies_parsed_at":"2025-02-13T02:35:17.963Z","dependency_job_id":"c1c5dc21-f277-4201-b064-0d8b74149da5","html_url":"https://github.com/melkassib/cv-generator-latex","commit_stats":null,"previous_names":["melkassib/altacv-generator-dsl","melkassib/cv-generator-latex"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/melkassib/cv-generator-latex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melkassib%2Fcv-generator-latex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melkassib%2Fcv-generator-latex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melkassib%2Fcv-generator-latex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melkassib%2Fcv-generator-latex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/melkassib","download_url":"https://codeload.github.com/melkassib/cv-generator-latex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/melkassib%2Fcv-generator-latex/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259810442,"owners_count":22915093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["altacv","awesomecv","cv-builder","cv-generator","cv-template","dsl","java","kotlin","latex","latex-template","resume-generator","resume-latex"],"created_at":"2025-03-21T16:29:32.696Z","updated_at":"2025-06-14T11:38:38.595Z","avatar_url":"https://github.com/melkassib.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build](https://github.com/melkassib/cv-generator-latex/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/melkassib/cv-generator-latex/actions/workflows/build.yml)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=melkassib%3Acv-generator-latex\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=melkassib:cv-generator-latex)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=melkassib%3Acv-generator-latex\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=melkassib:cv-generator-latex)\n[![Maven Central Version](https://img.shields.io/maven-central/v/com.melkassib/cv-generator-latex)](https://central.sonatype.com/artifact/com.melkassib/cv-generator-latex)\n\n# DSL for AltaCV/AwesomeCV Résumés\n\nGenerate professional resumes with ease using [AltaCV](https://github.com/liantze/AltaCV) and [AwesomeCV](https://github.com/posquit0/Awesome-CV) LaTeX templates in a type-safe Kotlin DSL.\n\n## Why I Built This\n\nThis started as a side project to explore building DSLs with Kotlin. Many of my friends are amazed by the quality of LaTeX in the compiled PDF but struggle with LaTeX. So, I built this library to make LaTeX-based CV generation easier and more customizable for developers.\n\n## Features:\n\n✅ **Template-Based CV Generation** – Supports LaTeX templates (AltaCV/AwesomeCV) for structured CV generation.\n\n✅ **Kotlin \u0026 Java Support** – Designed for use in Kotlin, but Java is also supported.\n\n✅ **Customizable Templates** – Define your own LaTeX structures for flexibility (tuning parameters without altering template code).\n\n✅ **Separation of Data \u0026 Presentation** – Focus on your résumé data, forget LaTeX commands\n\n✅ **Simple Integration** – Can be used in web services or standalone apps.\n\n✅ **JSON \u0026 YAML Serialization** – Save your résumé in JSON and YAML representations, useful for web services\n\n## Usage\n\n### Adding the dependency\n\nThis package is available on Maven central.\n\n#### Maven:\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.melkassib\u003c/groupId\u003e\n    \u003cartifactId\u003ecv-generator-latex\u003c/artifactId\u003e\n    \u003cversion\u003e0.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### Gradle:\n\n```kotlin\ndependencies {\n    implementation(\"com.melkassib:cv-generator-latex:0.2.0\")\n}\n```\n\n### Create your résumé\n\n1. Create a repository based on this template: [cv-generator-latex-template](https://github.com/melkassib/cv-generator-latex-template/)\n2. Start writing your résumé using your preferred language:\n    - Kotlin: `src/main/kotlin`\n    - Java: `src/main/java`\n3. Use the following Overleaf templates to compile your generated LaTeX résumé:\n    - [AltaCV](https://github.com/liantze/AltaCV): Template [Link](https://www.overleaf.com/latex/templates/altacv-template/trgqjpwnmtgv) by LianTze Lim (liantze@gmail.com)\n    - [AwesomeCV](https://github.com/posquit0/Awesome-CV): Template [Link](https://www.overleaf.com/latex/templates/awesome-cv/tvmzpvdjfqxp) by Claud D. Park (posquit0.bj@gmail.com)\n\n## Examples\n\nYou can find the generated files in the [docs/examples](docs/examples) folder.\n\n### AltaCV résumé using Kotlin DSL\n```kotlin\naltacv {\n    config {\n        photoShape = PhotoShape.NORMAL\n        theme = PredefinedColorPalette.THEME1\n    }\n\n    header {\n        tagline = \"Your Position or Tagline Here\"\n        photo = Photo(2.8, \"Globe_High.png\")\n        userInfo = AltaCVUserInfo(\"Your Name Here\", linkedSetOf(\n            Email(\"your_name@email.com\"),\n            Phone(\"000-00-0000\"),\n            MailAddress(\"Address, Street, 00000 Country\"),\n            Location(\"Location, COUNTRY\"),\n            HomePage(\"www.homepage.com\"),\n            Twitter(\"@twitterhandle\"),\n            LinkedIn(\"your_id\"),\n            Github(\"your_id\"),\n            Orcid(\"0000-0000-0000-0000\"),\n            UserInfoField(\"gitlab\", \"\\\\faGitlab\", \"https://gitlab.com/\", \"your_id\")\n        ))\n    }\n\n    sections {\n        section(\"Experience\", firstColumn(1), Divider) {\n            contents {\n                event(\"Job Title 1\") {\n                    holder = \"Company 1\"\n                    location = \"Location\"\n                    duration = eventDurationStr(\"Month XXXX\", \"Ongoing\")\n                    description = listOf(\n                        Item(\"Job description 1\"),\n                        Item(\"Job description 2\"),\n                        Item(\"Job description 3\", false)\n                    )\n                }\n\n                event(\"Job Title 2\") {\n                    holder = \"Company 2\"\n                    location = \"Location\"\n                    duration = eventDurationDate(\"2023-10\", \"2023-10\")\n                    description = listOf(Item(\"Item1\"))\n                }\n\n                event(\"Job Title 3\") {\n                    holder = \"Company 3\"\n                    location = \"Location\"\n                }\n            }\n        }\n\n        section(\"Projects\", firstColumn(2), separator = Divider) {\n            contents {\n                event(\"Project 1\") {\n                    holder = \"Funding agency/institution\"\n                    description = listOf(Item(\"Details\"))\n                }\n\n                event(\"Project 1\") {\n                    holder = \"Funding agency/institution\"\n                    duration = eventDurationStr(\"Project duration\")\n                    description = listOf(Item(\" A short abstract would also work.\", withBullet = false))\n                }\n            }\n        }\n\n        section(\"A day of my life\", firstColumn(3)) {\n            contents {\n                wheelchart(1.5, 0.5) {\n                    item(6, 8, \"accent!30\", \"Sleep,\\\\\\\\beautiful sleep\")\n                    item(3, 8, \"accent!40\", \"Hopeful novelist by night\")\n                    item(8, 8, \"accent!60\", \"Daytime job\")\n                    item(2, 10, \"accent\", \"Sports and relaxation\")\n                    item(5, 8, \"accent!20\", \"Spending time with family\")\n                }\n                content(\"\\\\newpage\")\n            }\n        }\n\n        section(\"My Life Philosophy\", secondColumn(1)) {\n            contents {\n                quote(\"Something smart or heartfelt, preferably in one sentence.\")\n            }\n        }\n\n        section(\"Most Proud of\", secondColumn(2), ignored = false) {\n            contents {\n                achievement(\"faTrophy\", \"Fantastic Achievement\", \"and some details about it\")\n                achievement(\"faHeartbeat\", \"Another achievement\", \"more details about it of course\")\n                achievement(\"faHeartbeat\", \"Another achievement\", \"more details about it of course\")\n            }\n        }\n\n        section(\"Strengths\", secondColumn(3)) {\n            contents {\n                tag(\"Hard-working\")\n                tag(\"Eye for detail\")\n                content(NewLine)\n\n                tag(\"Motivator \u0026 Leader\")\n                content(Divider)\n\n                tag(\"C++\")\n                tag(\"Embedded Systems\")\n                content(NewLine)\n\n                tag(\"Statistical Analysis\")\n            }\n        }\n\n        section(\"Languages\", secondColumn(4)) {\n            contents {\n                skill(\"Arabic\", \"Native/Bilingual\")\n                skill(\"English\", \"Professional working proficiency\")\n                skill(\"Spanish\", \"Limited working proficiency\")\n                skill(\"German\", 2.0)\n            }\n        }\n\n        section(\"Education\", secondColumn(5), separator = Divider) {\n            contents {\n                event(\"Ph.D. in Your Discipline\") {\n                    holder = \"Your University\"\n                    duration =  eventDurationDate(\"2002-09\", \"2006-06\")\n                    description = listOf(Item(\"Thesis title: Wonderful Research\",  false))\n                }\n\n                event(\"M.Sc. in Your Discipline\") {\n                    holder = \"Your University\"\n                    duration = eventDurationDate(\"2001-09\", \"2002-06\")\n                }\n\n                event(\"B.Sc. in Your Discipline\") {\n                    holder = \"Stanford University\"\n                    duration = eventDurationDate(\"1998-09\", \"2001-06\")\n                }\n            }\n        }\n    }\n}\n```\n\n### AwesomeCV résumé using Kotlin DSL\n```kotlin\nawesomecv {\n    config {\n        colorTheme = ColorTheme.ORANGE\n        isSectionHighlighted = true\n        headerSocialSeparator = \"\\\\cdotp\"\n    }\n\n    header {\n        photo = Photo(PhotoShape.RECTANGLE, PhotoEdge.NO_EDGE, path = \"profile\")\n        quote = \"Be the change that you want to see in the world.\"\n\n        user {\n            firstName = \"John\"\n            lastName = \"Dupont\"\n            personalInfo = linkedSetOf(\n                Position(\"Developer \\\\enskip\\\\cdotp\\\\enskip Cloud Engineer\"),\n                MailAddress(\"Address, Street, City\"),\n                Phone(\"(+212) 000-000-000\"),\n                Email(\"contact@email.com\"),\n                HomePage(\"www.homepage.com\"),\n                Github(\"your_id\"),\n                LinkedIn(\"your_id\"),\n                Gitlab(\"your_id\"),\n                Twitter(\"@your_id\"),\n                Skype(\"your_id\"),\n                Reddit(\"your_id\"),\n                Medium(\"your_id\"),\n                StackOverFlow(\"SO-id\", \"SO-name\"),\n                GoogleScholar(\"googlescholar-id\", \"name-to-display\"),\n                ExtraInfo(\"extra information\"),\n            )\n        }\n    }\n\n    footer {\n        left = \"\\\\today\"\n        center = \"John Dupont $\\\\sim$$\\\\sim$ $\\\\cdot$ $\\\\sim$$\\\\sim$ Résumé\"\n        right = \"\\\\thepage\"\n    }\n\n    sections {\n        section(\"Summary\") {\n            contents {\n                paragraph(\"This is a paragraph\")\n            }\n        }\n\n        section(\"Work Experience\") {\n            contents {\n                event(\"Software Engineer\") {\n                    holder = \"TechNova Solutions\"\n                    location = \"New York, USA\"\n                    duration = eventDurationStr(\"Jan. 2022\", \"Present\")\n                    description = listOf(\n                        Item(\"Developed scalable microservices architecture for cloud applications.\"),\n                        Item(\"Reduced system downtime by 40% by implementing automated monitoring and alerting.\"),\n                        Item(\"Led a team of 5 engineers to build a real-time analytics dashboard using Kafka and Elasticsearch.\")\n                    )\n                }\n\n                event(\"Backend Developer\") {\n                    holder = \"CodeWave Inc.\"\n                    location = \"San Francisco, USA\"\n                    duration = eventDurationStr(\"Jun. 2019\", \"Dec. 2021\")\n                    description = listOf(\n                        Item(\"Designed RESTful APIs that handled over 1M requests per day.\"),\n                        Item(\"Optimized database queries, improving response times by 50%.\"),\n                        Item(\"Implemented CI/CD pipelines using Jenkins and Docker to streamline deployments.\")\n                    )\n                }\n            }\n        }\n\n        section(\"Honors \u0026 Awards\") {\n            contents {\n                honors(\"International Awards\") {\n                    honor(\"Winner\", \"Google Cloud Hackathon\", \"Online\", \"2022\")\n                    honor(\"Top 5 Finalist\", \"Microsoft AI Challenge\", \"Seattle, USA\", \"2021\")\n                }\n\n                content(\"\\\\medskip\")\n\n                honors(\"Domestic Awards\") {\n                    honor(\"1st Place\", \"National Coding Championship\", \"New York, USA\", \"2020\")\n                }\n            }\n        }\n    }\n}\n```\n\n## Credits\n- [AltaCV](https://github.com/liantze/AltaCV): LaTeX template by LianTze Lim (liantze@gmail.com)\n- [AwesomeCV](https://github.com/posquit0/Awesome-CV): LaTeX template by posquit0 (posquit0.bj@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmelkassib%2Fcv-generator-latex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmelkassib%2Fcv-generator-latex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmelkassib%2Fcv-generator-latex/lists"}