{"id":31241747,"url":"https://github.com/jayeshlab/canvas","last_synced_at":"2026-02-14T02:03:34.402Z","repository":{"id":313058611,"uuid":"1049873334","full_name":"JayeshLab/canvas","owner":"JayeshLab","description":"This is a fully customizable portfolio template with internationalization.","archived":false,"fork":false,"pushed_at":"2025-09-03T16:07:28.000Z","size":1605,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-23T00:58:07.301Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JayeshLab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/funding.yml","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["HugoRCD"]}},"created_at":"2025-09-03T16:07:02.000Z","updated_at":"2025-09-03T16:07:29.000Z","dependencies_parsed_at":"2025-09-03T18:09:23.563Z","dependency_job_id":"6f7e87b9-8d02-495f-9810-994f2c5baa68","html_url":"https://github.com/JayeshLab/canvas","commit_stats":null,"previous_names":["jayeshlab/canvas"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JayeshLab/canvas","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JayeshLab%2Fcanvas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JayeshLab%2Fcanvas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JayeshLab%2Fcanvas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JayeshLab%2Fcanvas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JayeshLab","download_url":"https://codeload.github.com/JayeshLab/canvas/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JayeshLab%2Fcanvas/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29431593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T22:20:51.549Z","status":"online","status_checked_at":"2026-02-14T02:00:07.626Z","response_time":53,"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-23T00:58:05.586Z","updated_at":"2026-02-14T02:03:34.373Z","avatar_url":"https://github.com/JayeshLab.png","language":"Vue","funding_links":["https://github.com/sponsors/HugoRCD"],"categories":[],"sub_categories":[],"readme":"![Portfolio Social Preview](./public/og.png)\n\n\u003cp align=\"center\"\u003e\n    \u003ca aria-label=\"Hugo's Website\" href=\"https://hrcd.fr\"\u003e\n        \u003cimg alt=\"\" src=\"https://img.shields.io/badge/Website-hrcd.fr-blue?style=for-the-badge\u0026labelColor=000000\u0026logo=google-chrome\u0026logoColor=white\"\u003e\n  \u003ca aria-label=\"License\" href=\"https://github.com/hugorcd/canvas/blob/main/LICENSE\"\u003e\n    \u003cimg alt=\"\" src=\"https://img.shields.io/npm/l/vue.svg?style=for-the-badge\u0026labelColor=000000\u0026color=blue\"\u003e\n    \u003c/a\u003e\n  \u003ca aria-label=\"Follow Hugo on Twitter\" href=\"https://twitter.com/HugoRCD__\"\u003e\n    \u003cimg alt=\"\" src=\"https://img.shields.io/twitter/follow/HugoRCD__.svg?style=for-the-badge\u0026labelColor=000000\u0026logo=twitter\u0026label=Follow%20Hugo\u0026logoWidth=20\u0026logoColor=white\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# Canvas template\n\nCanvas Portfolio is a fully customizable i18n portfolio template built with Nuxt and Nuxt UI, designed to help you showcase your work, testimonials, and key information with ease. The template integrates with Nuxt Studio for a smooth editing experience, while leveraging Nuxt Content for content management. Built with performance, flexibility, and responsiveness in mind, Canvas Portfolio provides a robust foundation for developers and creatives alike.\n\n## Demo\n\nYou can see a live demo at [canvas.hrcd.fr](https://canvas.hrcd.fr/).\n\n## Features\n\n- **Modern Components \u0026 Layouts** – Includes built-in components.\n- **Nuxt UI v3** – Utilize pre-built, customizable UI components.\n- **NuxtHub ready** - Deploy on NuxtHub in seconds.\n- **Tailwind CSS** – A beautiful, responsive design system.\n- **Working Contact Form** – Integrated with Resend for easy email handling.\n- **Multi-language Support** – Powered by Nuxt i18n.\n- **SEO-Ready** – Open Graph Image (Nuxt OG Image) \u0026 Nuxt Robots for automatic robots.txt generation.\n- **Good practices** – Auto-generated sitemap, optimized images (Nuxt Image), and ESLint (Nuxt config with Flat config).\n- **Fully Responsive** – Adapts to all modern browsers and devices.\n- **Minimal \u0026 Professional Design** – Clean, elegant, and easy to customize.\n\n## Quick Setup\n\n1. Clone this repository if you have access or download it from the store\n```bash\ngit clone git@github.com:HugoRCD/canvas.git\n```\n\n2. Install dependencies\n```bash\npnpm install\n```\n\n3. Copy the `.env.example` file to `.env` and fill in the values\n```bash\ncp .env.example .env\n```\n\n4. Start development server\n```bash\npnpm dev\n```\n\n5. Generate static project\n```bash\npnpm generate\n```\n\n6. Start production server\n```bash\npnpm start\n```\n\n## Deployments\n\nCanvas Portfolio is designed to simplify the deployment process on various platforms, whether serverless or not. Below are several detailed methods to deploy your portfolio.\n\n### 1. Serverless Platforms (Vercel, Netlify, etc.)\n\nWhen using serverless platforms, it's important to note that Nuxt Content v3 relies by default on SQLite for content storage. Since these platforms do not support SQLite natively, we recommend connecting Canvas Portfolio to an external database such as:\n\n-  **PostgreSQL**\n-  **Turso**\n-  **D1**\n\nFor further details on this process and the suitable solutions for serverless deployments, refer to the official Nuxt Content documentation:  \n[Nuxt Content and Serverless Deployment](https://content.nuxt.com/docs/deploy/serverless)\n\n#### Vercel deployment do not need any extra configuration.\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FHugoRCD%2Fcanvas\u0026env=NUXT_PRIVATE_RESEND_API_KEY,NUXT_PUBLIC_SITE_URL\u0026envDescription=You%20will%20require%20an%20API%20key%20for%20Resend%20and%20Nuxt%20Studio%2C%20but%20it%20is%20not%20essential%20for%20the%20portfolio%20to%20work.%20Simply%20add%20%22test%2C%22%20for%20example%2C%20and%20edit%20the%20variable%20later.\u0026project-name=canvas-portfolio\u0026repository-name=canvas-portfolio\u0026demo-title=Canvas\u0026demo-url=canvas.hrcd.fr\u0026demo-image=https%3A%2F%2Fcanvas.hrcd.fr%2Fog.png)\n\n---\n\n### 2. Deployment on Nuxthub\n\nNuxthub offers a powerful solution to deploy your portfolio in just a few clicks. With fast global delivery through the Cloudflare network, Nuxthub also provides advanced features such as:\n\n-  KV storage for optimized data management\n-  High-performance caching to reduce loading times\n-  Integration of AI tools and analytics for performance improvements\n\nCheck out the [official Nuxthub documentation](https://hub.nuxt.com/docs/getting-started/installation#add-to-a-nuxt-project) for more info.\n\nNuxtHub deployment do not need any extra configuration.\n\n[![Deploy to NuxtHub](https://hub.nuxt.com/button.svg)](https://hub.nuxt.com/new?repo=HugoRCD/canvas-nuxthub)\n\n---\n\n### 3. Deployment via Docker\n\nCanvas Portfolio is also available as a Docker image, making it easy to deploy in containerized environments. An official Docker image is automatically created using a GitHub workflow whenever a new release is made, or it can be triggered manually. \n\nThis workflow not only builds the official Canvas image but also provides a standard way for anyone who forks the project to create their own Docker image with a proper version tag (e.g., v2.0, v1.0.0, etc.).\n\n**To pull the latest Docker image:**\n\n```bash\ndocker pull ghcr.io/hugorcd/canvas:latest\n```\n\nYou can also use Docker Compose for a quick deployment. A community-provided [docker-compose.community.yml](docker-compose.community.yml) file is available and can be used with platforms like Coolify for one-click deployments.\n\n## How to Modify the Portfolio Content\n\nThis portfolio uses [Nuxt Content](https://content.nuxt.com/) to manage the content. Here's how you can modify it:\n\nFirst check the `app.config.ts` file to change the global configuration of the portfolio, there is a lot of stuff you can change here.\n\n### Writing\n\n1. Navigate to the `content/2.articles` directory.\n2. Here, you'll find Markdown files for each article. To modify an article, simply open its Markdown file and make your changes.\n3. To add a new article, create a new Markdown file in this directory. The name of the file will be used as the URL slug for the article.\n\n### Works\n\n1. Navigate to the `content/1.works/` directory.\n2. Here, you'll find Markdown files for each article. To modify an article, simply open its Markdown file and make your changes.\n3. To add a new project, add a new JSON file in this directory.\n\n#### Featured Works\n\nTo change the featured works on the homepage, simply add the `\"featured\": true` key the JSON file.\n\n### Other Content\n\nSimply go to the `content/` directory and edit any of the Markdown or JSON files to modify the content.\n\n## Setup the Contact Form\n\nThis portfolio uses [Resend](https://resend.com/) to handle the contact form, but it's not mandatory. The server handle will not be used if you don't set the `NUXT_PRIVATE_RESEND_API_KEY` environment variable.\n\nTo set it up, follow these steps:\n- Get your api key from [Resend](https://resend.com/) here [your api key](https://resend.com/api-keys)\n- Add your api key in the `.env` file\n- change the `from` key in the `sendEmail` route in the `server/api/` folder, you can customize everything you want in this route\n- That's it, you're good to go!\n\n\u003c!-- automd:fetch url=\"gh:hugorcd/markdown/main/src/contributions.md\" --\u003e\n\n## Contributing\nTo start contributing, you can follow these steps:\n\n1. First raise an issue to discuss the changes you would like to make.\n2. Fork the repository.\n3. Create a branch using conventional commits and the issue number as the branch name. For example, `feat/123` or `fix/456`.\n4. Make changes following the local development steps.\n5. Commit your changes following the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification.\n6. If your changes affect the code, run tests using `bun run test`.\n7. Create a pull request following the [Pull Request Template](https://github.com/HugoRCD/markdown/blob/main/src/pull_request_template.md).\n   - To be merged, the pull request must pass the tests/workflow and have at least one approval.\n   - If your changes affect the documentation, make sure to update it.\n   - If your changes affect the code, make sure to update the tests.\n8. Wait for the maintainers to review your pull request.\n9. Once approved, the pull request will be merged in the next release !\n\n\u003c!-- /automd --\u003e\n\n\u003c!-- automd:fetch url=\"gh:hugorcd/markdown/main/src/local_development_dev.md\" --\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eLocal development\u003c/summary\u003e\n\n- Clone this repository\n- Install latest LTS version of [Node.js](https://nodejs.org/en/)\n- Enable [Corepack](https://github.com/nodejs/corepack) using `corepack enable`\n- Install dependencies using `bun install`\n- Start development server using `bun dev`\n- Open [http://localhost:3000](http://localhost:3000) in your browser\n\n\u003c/details\u003e\n\n\u003c!-- /automd --\u003e\n\n\u003c!-- automd:fetch url=\"gh:hugorcd/markdown/main/src/sponsors.md\" --\u003e\n\n## Sponsors\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://cdn.jsdelivr.net/gh/hugorcd/static/sponsors.svg\"\u003e\n    \u003cimg src='https://cdn.jsdelivr.net/gh/hugorcd/static/sponsors.svg' alt=\"HugoRCD sponsors\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003c!-- /automd --\u003e\n\n## Community\n\n\u003c!-- automd:contributors license=Apache author=HugoRCD github=\"hugorcd/canvas\" --\u003e\n\nPublished under the [APACHE](https://github.com/hugorcd/canvas/blob/main/LICENSE) license.\nMade by [@HugoRCD](https://github.com/HugoRCD) and [community](https://github.com/hugorcd/canvas/graphs/contributors) 💛\n\u003cbr\u003e\u003cbr\u003e\n\u003ca href=\"https://github.com/hugorcd/canvas/graphs/contributors\"\u003e\n\u003cimg src=\"https://contrib.rocks/image?repo=hugorcd/canvas\" /\u003e\n\u003c/a\u003e\n\n\u003c!-- /automd --\u003e\n\n\u003c!-- automd:with-automd lastUpdate --\u003e\n\n---\n\n_🤖 auto updated with [automd](https://automd.unjs.io) (last updated: Mon Feb 10 2025)_\n\n\u003c!-- /automd --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjayeshlab%2Fcanvas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjayeshlab%2Fcanvas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjayeshlab%2Fcanvas/lists"}