{"id":31376563,"url":"https://github.com/metaory/jsonresume-theme-roundy","last_synced_at":"2025-09-28T04:00:19.330Z","repository":{"id":316446500,"uuid":"861871502","full_name":"metaory/jsonresume-theme-roundy","owner":"metaory","description":"🚧 WIP -- A modern and minimal JSONResume compatible theme with Astro","archived":false,"fork":false,"pushed_at":"2025-09-24T15:49:12.000Z","size":4387,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-24T17:47:44.479Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://metaory.github.io/jsonresume-theme-roundy/","language":"Astro","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/metaory.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-09-23T16:44:05.000Z","updated_at":"2025-09-24T15:49:16.000Z","dependencies_parsed_at":"2025-09-24T17:47:58.982Z","dependency_job_id":null,"html_url":"https://github.com/metaory/jsonresume-theme-roundy","commit_stats":null,"previous_names":["metaory/jsonresume-theme-roundy"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/metaory/jsonresume-theme-roundy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaory%2Fjsonresume-theme-roundy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaory%2Fjsonresume-theme-roundy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaory%2Fjsonresume-theme-roundy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaory%2Fjsonresume-theme-roundy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metaory","download_url":"https://codeload.github.com/metaory/jsonresume-theme-roundy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaory%2Fjsonresume-theme-roundy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277322053,"owners_count":25798726,"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","status":"online","status_checked_at":"2025-09-28T02:00:08.834Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2025-09-28T04:00:17.461Z","updated_at":"2025-09-28T04:00:19.319Z","avatar_url":"https://github.com/metaory.png","language":"Astro","funding_links":[],"categories":["Astro"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg height=\"70\" src=\"public/logo.png\"\u003e\n  \u003cbr\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"public/wordmark-dark.png\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"public/wordmark-light.png\"\u003e\n    \u003cimg height=\"60\" alt=\"JSON Resume Theme Roundy\" src=\"public/wordmark-light.png\"\u003e\n  \u003c/picture\u003e\n  \u003cbr\u003e\n  \u003ci\u003e\u003csmall\u003ejsonresume theme v0.10.0\u003c/small\u003e\u003c/i\u003e\u003cbr\u003e\n  \u003ca href=\"https://metaory.github.io/jsonresume-theme-roundy\"\u003edemo\u003c/a\u003e |\n  \u003ca href=\"out/sample-basic.pdf\"\u003esample.pdf\u003c/a\u003e\n  \u003cp\u003eA modern, customizable JSON Resume theme with dynamic theming and dark mode support\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"out/screenshot.png\" width=\"80%\" /\u003e\n\u003c/p\u003e\n\n---\n\n\u003e [!WARNING]\n\u003e **Work in progress.**  \n\u003e This is under active development and is **not production ready**.\n\u003e \n\u003e **For a stable, production-ready version**, use our legacy theme:\n\n\u003cdiv align=\"center\"\u003e\n  \u003ci\u003e\u003csmall\u003ejsonresume-theme-legacy v7.x\u003c/small\u003e\u003c/i\u003e\u003cbr\u003e\n  legacy\n  \u003ca href=\"https://metaory.github.io/jsonresume-theme-legacy\"\u003edemo\u003c/a\u003e |\n  \u003ca href=\"https://github.com/metaory/jsonresume-theme-legacy/blob/master/out/sample.pdf\"\u003esample.pdf\u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://github.com/metaory/jsonresume-theme-legacy\"\u003ehttps://github.com/metaory/jsonresume-theme-legacy\u003c/a\u003e\n  \u003cbr\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/metaory/jsonresume-theme-legacy/refs/heads/master/.github/assets/screenshot.png\" width=\"60%\" /\u003e\n\u003c/div\u003e\n\n## Why the Rewrite?\n\nThis roundy theme is a complete rewrite of our legacy theme, focusing on simplicity and modern architecture:\n\n- **Technology**: Pure Astro instead of Handlebars + Vite\n- **Code size**: Reduced from ~3,110 lines to ~1,535 lines (50% smaller)\n- **Approach**: Modern web standards and cleaner component architecture\n- **Maintenance**: Simpler codebase for better long-term maintainability\n\nThe legacy version remains fully functional and production-ready while we refine this new implementation.\n\n\n\n\n\n---\n\n## Quick Start\n\n```bash\nnpm install\nnpm run dev\n```\n\nAdd your resume data to `src/data/` and visit `http://localhost:4321`\n\n## Features\n\n- **Dynamic Theming**: HSL-based color system with live customization\n- **Dark/Light Mode**: Automatic system detection with manual toggle\n- **Multiple Resumes**: Support for multiple resume files\n- **Responsive Design**: Mobile-optimized layouts\n- **PDF Export**: Built-in PDF generation\n\n## Tech Stack\n\nBuilt with Astro, vanilla JavaScript, and CSS custom properties.\n\n## Usage\n\n### Resume Data\n\nPlace your JSON Resume data in `src/data/`:\n\n```\nsrc/data/\n├── basic.json      # Sample resume (included)\n├── complete.json   # Extended sample (included)\n└── private.json    # Your resume (create this)\n```\n\n**File Naming \u0026 Access:**\n\n- `basic.json` → accessible at `/basic` (sample)\n- `complete.json` → accessible at `/complete` (extended sample)\n- `private.json` → accessible at `/private` (your resume)\n\n**Creating Your Resume:**\n\n1. Copy `basic.json` to `private.json`\n2. Replace sample data with your information\n3. Access at `http://localhost:4321/private`\n4. `private.json` is gitignored to prevent accidental commits\n\n### Theme Customization\n\nAdd theme options to your resume JSON:\n\n```json\n{\n  \"meta\": {\n    \"themeOptions\": {\n      \"hue\": 240,\n      \"sat\": 60,\n      \"dark\": false\n    }\n  }\n}\n```\n\n#### Theme Options\n\n| Option          | Type    | Default | Description           |\n| --------------- | ------- | ------- | --------------------- |\n| `hue`           | number  | 240     | Primary hue (0-360)   |\n| `sat`           | number  | 60      | Saturation (0-100)    |\n| `dark`          | boolean | false   | Dark mode             |\n| `sectionTitles` | object  | {}      | Custom section titles |\n| `icons`         | object  | {}      | Custom icon mappings  |\n\n#### Live Theme Editor\n\nIn development mode, use the theme picker on the right side to:\n\n- Adjust hue and saturation with sliders\n- Select from preset color combinations\n- Preview changes in real-time\n\n### Icon Customization\n\nOverride default icons for both section titles and keywords using Iconify icons:\n\n```json\n{\n  \"meta\": {\n    \"themeOptions\": {\n      \"icons\": {\n        // Section title icons\n        \"work\": \"solar:city-bold-duotone\",\n        \"skills\": \"solar:code-square-linear\",\n        \"education\": \"solar:diploma-bold-duotone\",\n        \"volunteer\": \"solar:hand-heart-bold-duotone\",\n        \"projects\": \"solar:rocket-bold-duotone\",\n\n        // Keyword icons\n        \"aws\": \"tabler:brand-aws-filled\",\n        \"docker\": \"tabler:brand-docker\",\n        \"git\": \"tabler:brand-git-filled\",\n        \"javascript\": \"tabler:brand-javascript-filled\",\n        \"react\": \"tabler:brand-react-filled\",\n        \"nodejs\": \"tabler:brand-nodejs\"\n      }\n    }\n  }\n}\n```\n\n#### Finding Icons\n\nBrowse available icons at these Iconify collections:\n\n- [icones.js.org](https://icones.js.org/) - Interactive icon browser\n- [icon-sets.iconify.design](https://icon-sets.iconify.design/) - Official Iconify collections\n\n#### Icon Format\n\n**✅ Correct format:** `collection:iconname`\n\n```json\n\"solar:asteroid-bold-duotone\"\n\"tabler:brand-github-filled\"\n\"mdi:code-braces\"\n```\n\n**❌ Incorrect formats:**\n\n```json\n\"solar-asteroid-bold-duotone\"    // Wrong: uses dash\n\"solar--asteroid-bold-duotone\"   // Wrong: uses double dash\n```\n\n#### Icon Usage Types\n\nIcons are used in two contexts:\n\n**1. Section Title Icons**\nIcons appear next to section titles (e.g., Work Experience, Skills, Education):\n\n```json\n{\n  \"meta\": {\n    \"themeOptions\": {\n      \"icons\": {\n        \"work\": \"solar:city-bold-duotone\",\n        \"skills\": \"solar:code-square-linear\",\n        \"education\": \"solar:diploma-bold-duotone\",\n        \"volunteer\": \"solar:hand-heart-bold-duotone\",\n        \"projects\": \"solar:rocket-bold-duotone\"\n      }\n    }\n  }\n}\n```\n\n**2. Keyword Icons**\nIcons appear next to keywords within sections (e.g., technology skills, tools):\n\n```json\n{\n  \"meta\": {\n    \"themeOptions\": {\n      \"icons\": {\n        \"aws\": \"tabler:brand-aws-filled\",\n        \"docker\": \"tabler:brand-docker\",\n        \"javascript\": \"tabler:brand-javascript-filled\"\n      }\n    }\n  }\n}\n```\n\n#### Keyword Matching\n\nIcons are matched using case-insensitive, space-normalized matching:\n\n- `\"AWS\"` → matches `\"aws\"` in icons\n- `\"Node.js\"` → matches `\"nodejs\"` in icons\n- `\"React Native\"` → matches `\"reactnative\"` in icons\n- `\"CI/CD\"` → matches `\"cicd\"` in icons\n\nKeywords are automatically normalized by:\n\n- Converting to lowercase\n- Removing spaces, dots, slashes, and special characters\n- Trimming whitespace\n\n### Section Customization\n\nOverride default section titles:\n\n```json\n{\n  \"meta\": {\n    \"themeOptions\": {\n      \"sectionTitles\": {\n        \"work\": \"Professional Experience\",\n        \"skills\": \"Technical Skills\",\n        \"projects\": \"Portfolio\"\n      }\n    }\n  }\n}\n```\n\n### Section Ordering\n\nSections display in the order they appear in your JSON file.\nReorder sections by changing the key order:\n\n```json\n{\n  \"basics\": { ... },\n  \"skills\": [ ... ],     // First section\n  \"work\": [ ... ],       // Second section\n  \"projects\": [ ... ],   // Third section\n  \"education\": [ ... ]   // Fourth section\n}\n```\n\n### PDF Export\n\nGenerate PDFs with headless Chrome:\n\n```bash\nnpm run pdf:sample    # Export sample resume → out/sample-basic.pdf\nnpm run pdf:private   # Export your resume → out/private.pdf\n```\n\n**Output Directory:**\n\n- All exports go to `out/` directory\n- Sample: `out/sample-basic.pdf`\n- Private: `out/private.pdf`\n- Screenshot: `out/screenshot.png`\n\n**Custom Exports:**\nAdd your own export scripts to `package.json`:\n\n```json\n\"pdf:myresume\": \"chromium --headless --disable-gpu --no-sandbox --disable-dev-shm-usage --no-pdf-header-footer --print-to-pdf=out/myresume.pdf http://localhost:4321/myresume\"\n```\n\n### Schema Support\n\nFull JSON Resume schema compatibility:\n\n- `basics` - Personal info, contact, profiles\n- `work` - Work experience with highlights\n- `volunteer` - Volunteer experience\n- `education` - Education with courses\n- `awards` - Awards and recognition\n- `certificates` - Professional certificates\n- `publications` - Publications and papers\n- `skills` - Skills with proficiency levels\n- `languages` - Language proficiency\n- `interests` - Personal interests with keywords\n- `references` - Professional references\n- `projects` - Project portfolio with roles\n\n## Development\n\n```bash\nnpm run dev      # Start development server\nnpm run build    # Production build\nnpm run preview  # Preview build\nnpm run check    # Type checking\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaory%2Fjsonresume-theme-roundy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetaory%2Fjsonresume-theme-roundy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaory%2Fjsonresume-theme-roundy/lists"}