This project is a static portfolio site built with Next.js. It requires Node.js 22 or newer.
- Copy
portfolio.default.jsontoportfolio.json - Run
npm install - Run
npm run lintto ensure the code adheres to the project's ESLint rules. - Edit
portfolio.jsonto reflect your information. - Run
npm run devand navigate to http://localhost:3000 to view the site. - Run
npm testto execute the unit tests. - When you are satisfied with the results run
npm run exportto generate the static site.- The results of the export can be found in the
outfolder.
- The results of the export can be found in the
The portfolio.json file may include a style section to override the default
colors and fonts. The following keys are supported:
{
"style": {
"colors": {
"text": "#ffddff",
"background": "#111111",
"accent": "#ad71fb",
"accentAlt": "#ffddff",
"iconBackground": "#dfdfdf",
"icon": "#111111"
},
"fonts": {
"body": "'lato', sans-serif",
"header": "'PT Sans', sans-serif",
"googleFontsUrl": "https://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic|PT+Sans:400,700|PT+Sans+Narrow:400,700|Inconsolata:400&display=swap"
}
}
}
Any of these values can be omitted to use their defaults. The fonts URL
defaults to the value in DEFAULT_GOOGLE_FONTS_URL inside pages/index.js.
- Browse or search fonts at fonts.google.com.
- Add each font to your selection then open the Get embed code panel.
- Copy the
hrefattribute from the<link>tag and append&display=swapto minimize layout shift, then place the result instyle.fonts.googleFontsUrl. - Use an
https:URL if possible. The application forces Google Fonts URLs tohttpsand preconnects to the fonts domains to start the TLS handshake early for faster loading.
The file portfolio.json controls what content appears on your portfolio site. Below is an explanation of every supported field and where to obtain its value.
title– The main heading displayed on the page.pageTitle– (optional) Title shown in the browser tab. Defaults totitlewhen omitted.description– Markdown text shown below the heading.googleAnalyticsID– (optional) Measurement ID for Google Analytics. Create a property at analytics.google.com, open the Web stream for your site and copy the Measurement ID (for exampleG-XXXXXXX).gravatarEmail– (optional) Email address associated with your Gravatar account. The site hashes this email to fetch the avatar image.
favicon.linkUrl– URL to an image used as the browser favicon.favicon.useGravatar– Set totrueto use the avatar fromgravatarEmailinstead oflinkUrl.headerPicture.linkUrl– URL of the picture displayed in the page header.headerPicture.useGravatar– Set totrueto display your Gravatar.headerPicture.pictureText– Alternate text for the header picture.
The optional style.colors and style.fonts objects override the default colours and fonts as shown above. The googleFontsUrl value should be copied from the href attribute of the embed link on Google Fonts and include the &display=swap parameter.
portfolio contains entries for the icons displayed on the page. Each entry accepts an optional order property to control its position. Supported entries are:
github.username– GitHub user name.twitter.handle– Twitter handle without the@.bluesky.handle– Bluesky handle.linkedIn.username– LinkedIn profile name.email.address– Email address for the mail link.bitbucket.username– Bitbucket user name.stackOverflow.id– Numeric user ID from your Stack Overflow profile URL.stackExchange.id– Numeric user ID from your Stack Exchange profile URL.
portfolio.minimal.json contains the smallest possible configuration:
{
"title": "Developer Name",
"description": "A short description about me.",
"portfolio": {
"github": { "username": "github" }
}
}Copy this file to portfolio.json and update the values to get started quickly.