A modern resume & portfolio template for professionals
Full config → CONFIGURATION.md
All screenshots (click to expand)
Comprehensive feature set designed for professional portfolios, focused on accessibility, performance, and deployability.
- Next.js 14 App Router (server & client components)
- TypeScript (strict mode) throughout the codebase
- Tailwind CSS utility based styling and accessible UI components
- Dynamic
sitemap.xmlthat includes blog and portfolio entries - Per-page metadata using the Metadata API (Open Graph, Twitter Cards)
- JSON-LD structured data (Article/Organization schemas) for rich previews
- Canonical URLs and per-post SEO overrides
- Semantic HTML and ARIA where needed
- Keyboard navigable components and visible focus states
- Axe-based unit accessibility tests and Pa11y CI for site-level checks
- Skip-link included and form controls with proper labels and aria descriptions
- Mobile-first responsive layouts (mobile, tablet, desktop)
- Dark & light themes with system preference and explicit toggle
- Reduced-motion respect and graceful fallbacks for animations
- Gallery/lightbox with keyboard support and image fallbacks
- Contact form with client-side validation and server-side validation
- Rate limiting with in-memory fallback; optional Redis for production
- Honeypot field and opt-in email sending (SMTP) guarded by ENV flags
- Debug endpoints protected by opt-in flags and secrets; disabled by default in production
- Image optimization using
next/imageand optimized font loading - Minimal client JS where possible; dynamic imports for heavy components
- Optional debug logging; local dump files for post-mortem debugging
- CI workflows for linting, type checks, accessibility, and tests
- ESLint, Prettier, Husky pre-commit hooks
- Vitest + jest-axe unit tests and a11y checks
- Scripts for building, packaging, and local utilities
- Clear
.env.exampledocumenting recommended environment variables
- Next.js (App Router)
- React + TypeScript
- Tailwind CSS
- Vitest + axe core for tests
- Pa11y for site level accessibility scans
- Framer Motion for optional animations
- Node.js 18+ (Node 20 recommended)
- npm (or yarn/pnpm)
npm install# development server
npm run dev
# run tests and checks
npm test
npm run lint
npm run typecheck- Content:
content/contains site content (hero, portfolio, blog metadata). - Styles: Global styles and tokens in
app/globals.css; Tailwind config intailwind.config.cjs. - Metadata:
app/layout.tsxcontains site metadata and head elements. - Images: Add images to
public/images/orpublic/screenshots/for screenshots.
Tip: keep
public/assets small and optimized for faster builds.
- Automated accessibility tests are included (Vitest + axe-core) and a Pa11y configuration for site checks.
- Linting uses ESLint (flat config) and TypeScript for strong typings.
- The project includes pre-commit hooks to run header checks, lint, and typecheck.
- Aim to run
npm run a11yafter UI changes to catch regressions early.
- No secrets or
.envfiles are committed to this repository. - Use
.env.exampleto document required environment variables and keep secrets out of version control. - Debug endpoints are disabled by default; do not enable
DEBUG_ALLOW_READon production deployments.
- Code is licensed under the MIT License. This applies to the source code, build scripts, and logic.
- UI and design (CSS, layouts, visual components, and templates) are licensed under Creative Commons Attribution 4.0 (CC BY 4.0). See
DESIGN-LICENSE.mdfor the full license text. - Attribution required: If you redistribute or publish a site using this template (modified or not), you must retain visible attribution on the site footer that credits Next Resume Pro by Kushalitha Maduranga and link to the project:
https://github.com/Kushalitha.
Kushalitha Maduranga — Web Developer & Photographer
https://github.com/Kushalitha
- If you find this project useful, please consider starring the repository and forking it for your work.
- For questions or discussions, open an issue or use GitHub Discussions if enabled.
- When contributing, keep attribution and license terms in mind.
If you'd like to support ongoing maintenance and development, you can sponsor this project on GitHub:
Thank you — contributions help keep the project healthy and documented.
See CONTRIBUTING.md for details on running tests, Husky hooks, and submitting changes.
Made with care — please preserve attribution if you use the design.
This repository includes Axe-based accessibility tests using Vitest and jest-axe.
- Install dev dependencies:
npm install. - Run tests:
npm test(uses Vitest). The tests include accessibility checks for critical components such asContactFormandGallery.
Notes:
- The tests run in a
jsdomenvironment;next/imageis mocked during tests. - If you want to demonstrate a failing accessibility report in CI, create a PR and add the label
a11y-demo(see above) — this will upload a sample failing report as an artifact for demonstration.
You can run an automated accessibility sweep locally using Pa11y:
- Install dev dependencies:
npm install(this addspa11y,pa11y-ci, andwait-on) - Build and start the app:
npm run build && npm run start(ornpm run dev) - Run the quick reporter (HTML):
npm run a11y— writes./a11y/report.html. - Run the CI-style checks (fail on violating issues): start your server on port 3000 and run
npm run a11y:ci.
A GitHub Actions workflow (.github/workflows/ci.yml) is included to run typecheck, lint, and accessibility checks automatically on PRs.






