Personal resume site for Antonio Maina — a minimalist, print-friendly CV built with Next.js.
Live at antoniomaina.com.
git clone https://github.com/r0b0tt/r0b0tt.github.io.git
cd r0b0tt.github.io
pnpm install
pnpm dev
# open http://localhost:3000
Copy .env.example to .env.local and set NEXT_PUBLIC_CLOUDFLARE_ANALYTICS_TOKEN if you want Cloudflare Web Analytics in production.
pnpm dev # start development server
pnpm build # build for production (Next.js)
pnpm start # start production server
pnpm preview # build and preview on Cloudflare Workers locally
pnpm deploy # build and deploy to Cloudflare Workers
pnpm cf-typegen # generate Cloudflare Worker types
pnpm lint # run biome linting checks
pnpm lint:fix # run biome linting with auto-fix
pnpm format # check code formatting with biome
pnpm format:fix # format code with biome
pnpm check # run both linting and formatting checks
pnpm check:fix # run both linting and formatting with auto-fix
This site uses the OpenNext Cloudflare adapter (@opennextjs/cloudflare).
npx wrangler login)NEXT_PUBLIC_CLOUDFLARE_ANALYTICS_TOKEN — from Cloudflare Dashboard → Web Analytics → Add a sitepnpm deploy
antoniomaina.com (and www if needed).pnpm preview
This builds with OpenNext and serves the app locally via Wrangler.
For better performance, enable R2 incremental caching — see the OpenNext caching guide. Uncomment the R2 sections in wrangler.jsonc and open-next.config.ts, then create the bucket with npx wrangler r2 bucket create web-cv-opennext-cache.
src/
├── app/ # next.js app router
│ ├── components/ # page-level components
│ ├── layout.tsx # root layout with metadata
│ └── page.tsx # main resume page
├── components/ # shared components
│ ├── icons/ # social icon components
│ └── ui/ # shadcn/ui components
├── data/ # resume data configuration
│ └── resume-data.ts
└── lib/ # utilities and types
├── structured-data.ts
├── types.ts
└── utils.ts
All resume content lives in a single file:
// src/data/resume-data.ts
export const RESUME_DATA = {
name: "Your Name",
initials: "YN",
location: "Your City, Country",
about: "Brief description",
summary: "Professional summary",
// ... more fields
}
Styling uses Tailwind CSS — customize colors in tailwind.config.js and global styles in src/app/globals.css.
Docker remains available for local or self-hosted deployments:
docker compose build # build the container
docker compose up -d # run the container
docker compose down # stop the container
Note: the Docker setup uses output: 'standalone', which was removed in favor of the Cloudflare OpenNext build. To use Docker, you may need to restore standalone output in next.config.js for that workflow.
Design inspired by Bartosz Jarocki’s minimalist cv template.
This project is based on minimalist cv, which is licensed under the MIT License. Copyright (c) 2023 Bartosz Jarocki.