- Change to new Dart SaaS using @use & @forward
- Added pre loader
- Removed @imports from SCSS
- NG Bootstrap 21, Bootstrap 5.3 and Angular 22
- UI Bug Fixes
Luther Angular 22 Portfolio Template Documentation
Luther is an Angular 22 based portfolio landing page template built with Bootstrap 5.3, SCSS and TypeScript. It comes with 6 dark and light home page designs, ideal for portfolio templates, portfolio landing pages, personal websites, Angular portfolio websites and Angular CV websites.
Every home page is assembled from reusable standalone Angular components such as hero, about, resume, skills, services, pricing, portfolio, testimonials, hire me and contact. Content like text, icons, prices and images lives in typed data files, so you can turn the demo into your own personal website without rewriting any layout code.
This guide walks you through installation, the project structure, routes, menu and section setup, theme customization, deployment and the change log. Looking for plain HTML instead? Luther is also available as a Bootstrap HTML resume template.
- Angular 22
- Bootstrap 5.3
- SCSS
- TypeScript
What's included
6 home pages
Six ready-to-use portfolio landing page layouts with top navigation, sidebar and animated particle hero variations.
Light & dark themes
Every home page includes both themes with a built-in theme switcher and SCSS color variables.
Complete sections
Hero, about, resume, skills, services, pricing, portfolio, testimonials, hire me and contact.
Typed content files
Edit text, icons, prices and images from simple TypeScript data files instead of component templates.
Responsive layout
Built on the Bootstrap 5.3 grid, so every page works on phones, tablets and desktops.
Modern Angular
Standalone components, no NgModules, and a fast Vite-based build with Vitest for unit tests.
Template at a glance
| Framework | Angular 22 (standalone components) |
|---|---|
| UI library | Bootstrap 5.3 and ng-bootstrap |
| Styling | SCSS with light and dark theme maps |
| Language | TypeScript |
| Build tool | Angular CLI with @angular/build |
| Unit testing | Vitest |
| Icons | Unicons |
| Fonts | Poppins and Great Vibes (Google Fonts) |
| Home pages | 6 (routes /index to /index6) |
| HTML version | Available as a separate Bootstrap template |
Quick start
Already have Node.js and Angular CLI installed? Run these commands inside the template folder, then open http://localhost:4200/.
npm install
npm startNew to Angular? Follow the full requirements and installation steps below.
How this documentation is organized
- Getting started: requirements, installation and the project structure.
- Building your site: home pages and routes, menu and sections, and customization.
- Design and launch: light and dark theme, dependencies, build and deploy.
- Help: troubleshooting, FAQ, change log, credits and support.
Who this guide is for
Developers, designers, freelancers, photographers, students and anyone who wants to launch an Angular personal website, portfolio landing page or CV website. Basic knowledge of Angular, HTML and SCSS is helpful, but you can personalize most content without writing code.
Requirements
Make sure your machine has the tools below before you set up the Luther Angular portfolio template. Angular 22 needs a recent Node.js release and npm.
- Node.js: a version supported by Angular 22 (
^22.22.3,^24.15.0or>=26). Download from nodejs.org. - npm: version 8 or newer (included with Node.js).
- Angular CLI 22.
- A code editor such as VS Code.
Installation
Get the Luther Angular 22 template running locally in four steps: install the CLI, open the folder, install dependencies and start the dev server.
1. Install Angular CLI
npm install -g @angular/cli2. Open the template folder
cd bob-portfolio-angular-223. Install dependencies
npm install4. Start the development server
npm startOpen http://localhost:4200/ in your browser. The app reloads automatically whenever you change a source file.
Tip: keep your own changes in the data files and a custom SCSS file so future template updates are easy to merge.
Project Structure
Luther uses Angular standalone components, so there are no NgModules to manage. Here is how the folders are organized and where to find each part of the template.
bob-portfolio-angular-22/
├── public/ # favicon and static files
├── src/
│ ├── index.html
│ ├── main.ts
│ ├── styles.scss
│ ├── assets/
│ │ ├── images/ # profile, portfolio and author images
│ │ └── scss/ # variables, themes, sections, plugins
│ └── app/
│ ├── app.ts / app.html # root component
│ ├── app.config.ts # providers (router, http, animations)
│ ├── app.routes.ts # index … index6 routes
│ ├── core/layout/ # header, header2, sidebar, footer, preloader, scrolltop, settingbox
│ ├── pages/ # index, index2 … index6 home pages
│ └── shared/
│ ├── components/ # abouts, contacts, homes, portfolios, pricings,
│ │ # resumes, services, skills, testimonials …
│ ├── directives/ # counter, parallax, scrollspy, skills
│ └── services/ # navlink, settingbox (theme)
├── angular.json
└── package.jsonHome Pages & Routes
Luther ships with six home page designs, each registered as its own route. Pick one as your default or keep several to show different layouts.
Each home page is a standalone component registered in src/app/app.routes.ts. The root path redirects to /index.
| Route | Page component | Layout |
|---|---|---|
/index | IndexComponent | Top navigation |
/index2 | Index2Component | Sidebar navigation |
/index3 | Index3Component | Top navigation |
/index4 | Index4Component | Top navigation |
/index5 | Index5Component | Top navigation + scroll to top |
/index6 | Index6Component | Sidebar + particle hero |
To make a different home page your default, change the redirectTo value of the empty path in app.routes.ts.
Customization
Change text, images, icons, fonts and prices without touching component templates. Most content lives in typed data files.
Edit content from data files
Text, icons, prices and images come from typed data.ts files, so you rarely need to touch a template.
| Section | File |
|---|---|
| About | src/app/shared/components/abouts/data.ts |
| Resume & skills | src/app/shared/components/resumes/data.ts |
| Services | src/app/shared/components/services/data.ts |
| Pricing | src/app/shared/components/pricings/data.ts |
| Portfolio | src/app/shared/components/portfolios/data.ts |
| Testimonials | src/app/shared/components/testimonials/data.ts |
| Contact | src/app/shared/components/contacts/data.ts |
Replace images
Put your own photos in src/assets/images/ and update the file names in the matching data file.
Fonts and icons
Fonts (Poppins and Great Vibes) are imported in src/assets/scss/fonts/_fonts.scss. Icons come from Unicons, used like <i class="uil uil-camera"></i>.
Light & Dark Theme
Every home page supports light and dark mode out of the box. Rebrand the whole template by changing a few SCSS color variables.
Every home page supports dark and light mode through the theme switcher (the settingbox component) and the SettingBoxService. Both themes are included on every page, so visitors can switch at any time.
Theme colors live in src/assets/scss/_variables.scss:
$primary: #02E4C0; // dark theme accent
$light-primary: #fa292a; // light theme accentChange these values (and the matching entries in the dark and light theme maps in the same file) to rebrand the whole template.
Dependencies
These packages power Luther. Run npm install and all of them are installed for you.
Packages
- @angular/animations
- @angular/common
- @angular/compiler
- @angular/core
- @angular/forms
- @angular/localize
- @angular/platform-browser
- @angular/router
- @iconscout/unicons
- @ng-bootstrap/ng-bootstrap
- aos
- bootstrap
- jarallax
- ng-particles
- ngx-owl-carousel-o
- ngx-page-scroll
- rxjs
- tslib
- tsparticles
- tsparticles-engine
- typed.js
Dev packages
- @angular/build
- @angular/cli
- @angular/compiler-cli
- @types/aos
- jsdom
- prettier
- typescript
- vitest
Known minor vulnerabilities
Last checked with npm audit on October 01, 2026. One moderate-severity advisory is reported, and it comes from a nested package, not from Luther's own code.
- uuid < 11.1.1 (moderate, GHSA-w5hq-g745-h8pq): missing buffer bounds check in
v3/v5/v6when abufargument is passed. It is installed as a dependency of@iconscout/unicons(uuid 3.4.0). Luther never calls uuid, so the template is not affected. Re-runnpm auditafter updating@iconscout/uniconsto check whether a newer release clears it.
Build & Deploy
Turn your Angular portfolio into optimized static files and publish them to any hosting provider.
Create an optimized production build:
npm run buildThe output is written to the dist/ folder. Upload its contents to any static host. Because the template uses Angular routing, configure your server to serve index.html for unknown paths.
Hosting options
Any static host works. Popular choices:
- Netlify
- Vercel
- Firebase Hosting
- GitHub Pages
- Cloudflare Pages
- Nginx
- Apache
Server rewrite rule
Since routes such as /index2 are handled by Angular, send unknown paths to index.html. Example for Nginx:
location / {
try_files $uri $uri/ /index.html;
}Testing
Run unit tests with Vitest:
npm testTroubleshooting
Quick fixes for the most common installation, build and deployment problems.
npm install fails
Check your Node.js version against the requirements above. Delete node_modules and package-lock.json only if you must, then run npm install again.
Port 4200 is already in use
npm start -- --port 4300Page shows 404 after refresh on the live site
Add the rewrite rule shown in the Build & Deploy section so every path serves index.html.
Changes to SCSS variables do not appear
Stop and restart npm start, then hard-refresh the browser to clear cached styles.
Images are not showing
Confirm the file exists in src/assets/images/ and that the name in the data file matches exactly, including the extension and letter case.
FAQ
Short answers to the questions we hear most about the Luther Angular portfolio template.
Which Node.js version does the Luther Angular template need?
Luther uses Angular 22, which requires Node.js ^22.22.3, ^24.15.0 or >=26 with npm 8 or newer.
How do I change the theme colors in Luther?
Edit the dark and light color variables in src/assets/scss/_variables.scss, then rebuild. Bootstrap 5.3 theme colors are mapped from these variables.
How do I edit portfolio, services and pricing content?
Each section reads its content from a typed data.ts file inside src/app/shared/components, so you can change text, icons, prices and images without touching templates.
Is the Luther Angular template available as plain HTML?
Yes. See the Luther Bootstrap HTML resume template.
Can I remove the home pages I don't need?
Yes. Delete the route from app.routes.ts and remove the unused page folder from src/app/pages/.
Does the template support dark and light mode?
Yes. Every home page includes both themes and a built-in switcher.
Can I use Luther for a client project?
Yes, according to the license you purchased. Check your license terms for usage limits.
How do I update to a newer version?
Review the change log, then copy the updated files into your project. Keeping your content in the data files makes merging much easier.
Change Log
Release notes for the Luther Angular portfolio template.
Credits
Luther is built on open-source libraries and free resources. Thanks to their authors.
- Angular
- Bootstrap
- ng-bootstrap
- Unicons
- AOS
- Typed.js
- Owl Carousel
- tsParticles
- Jarallax
- Poppins (Google Fonts)
- Great Vibes (Google Fonts)
Demo images are for preview purposes only. Replace them with your own before publishing.
Support
Need help with the Luther Angular portfolio template? Start here before you get in touch.
Need help with the Luther Angular portfolio template? Check the troubleshooting and FAQ sections first. Contact LettstartDesign through the support link on your purchase page, and include your template version and a short description of the issue.