Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Canvas is a fully customizable i18n portfolio template built with Nuxt, Nuxt UI, and Tailwind CSS for developers and creatives.

Free one-page Bootstrap HTML5 portfolio template for agencies and personal sites with pricing table, blog, and working contact form.

Collection of 35 responsive HTML/CSS vCard and resume templates with live demos and source code.

Jekyll theme for a beautiful online CV with particles.js animation, printing-friendly layout, and light/dark modes.

Free Next.js template for building a product manager portfolio with case-study pages.
Canvas Portfolio is an open-source, fully customizable i18n portfolio template built on Nuxt 3, Nuxt Content v3, Nuxt UI v3, and Tailwind CSS v4 that generates a minimal, responsive portfolio website from Markdown and JSON content. Created by Hugo RCD and the community, it is published under the Apache 2.0 license and can be seen live at canvas.hrcd.fr.
Canvas Portfolio is a portfolio template that takes content stored in Markdown and JSON files inside a content/ directory and renders it as a static or server-rendered Nuxt site with pages for works, articles, and a contact form. It runs on Nuxt 3 with Nuxt Content v3 for content management, Nuxt UI v3 for interface components, and Tailwind CSS v4 for styling. The template is made by Hugo RCD and is available on GitHub with a live demo at canvas.hrcd.fr.
/admin in the running dev server; authenticate with GitHub to edit articles, projects, and pages from the browser.NUXT_PRIVATE_RESEND_API_KEY environment variable and customize the from address in the server API route.ghcr.io/hugorcd/canvas with each release.content/2.articles, works are JSON files in content/1.works (add a featured property set to true to pin one to the homepage), and global settings live in app.config.ts.Canvas Portfolio is for developers who want a well-structured Nuxt 3 starter to build a personal portfolio without starting from scratch. It is also for creative professionals and freelancers who prefer editing their content through Nuxt Studio's visual editor instead of writing code, and for anyone who needs a multilingual portfolio with minimal setup.
pnpm install, copy .env.example to .env, and run pnpm dev to start a local server at http://localhost:3000./admin while the dev server is running and use Nuxt Studio's GitHub-authenticated editor to modify content directly without touching Markdown or JSON..env and customize the sendEmail route in server/api/ to receive messages from the contact form.Canvas uses Nuxt Content v3 to read Markdown and JSON files from the content/ directory and turn them into pages, with the article file name becoming the URL slug. The quick-start workflow is: clone the repository, run pnpm install, copy the .env.example file to .env and fill in the values, then run pnpm dev for development, pnpm generate for a static build, and pnpm start for the production server. For content changes, either edit the Markdown and JSON files directly or use Nuxt Studio's /admin interface.
Yes, the template is open source and published under the Apache 2.0 license, and the repository is publicly available on GitHub. The demo site at canvas.hrcd.fr is also publicly accessible.
Start the dev server and go to /admin in your browser. You'll authenticate with GitHub, and then the Nuxt Studio visual editor lets you update articles, projects, and pages from the browser. Alternatively, edit the Markdown and JSON files in the content/ directory directly.
Yes, these serverless platforms require no extra configuration for Vercel, but Nuxt Content v3 uses SQLite by default, and serverless environments do not support SQLite. Connect the template to a PostgreSQL, Turso, or D1 database instead; Vercel also needs the environment variables listed in the repository's deploy button.
No. If you don't set the NUXT_PRIVATE_RESEND_API_KEY environment variable, the server route for the contact form is not used. To enable email sending, get an API key from Resend, add it to .env, and customize the from key in the sendEmail route inside server/api/.
Add a featured property set to true in the work's JSON file inside content/1.works/. The home page's featured works section picks up that flag automatically.
