An HTML mobile template for a freelancer profile screen with a cover photo, rating, skills chips, portfolio thumbnails, reviews with a rating breakdown and a sticky Hire button. Use this service provider profile UI in freelance marketplaces, agency apps and booking PWAs, or package it with Capacitor. Built with Bootstrap 5, Bootstrap Icons and Figtree in white and deep green. The photos come from Unsplash; replace them with your own images.
How it works
The root .flp-app is a centred app column (max 430 px). The .flp-cover photo carries back, share and save buttons; in .flp-head the avatar overlaps it, next to the rate pill, name, role, rating and three .flp-stats. Below follow the .flp-skills chips, the horizontal .flp-work portfolio row, the About text and the reviews section. The .flp-cta bar with Message and "Hire Elena" sticks to the bottom of the column.
The About text is clamped to three lines until "Read more" toggles .is-open and aria-expanded. A portfolio thumbnail copies its data-title, data-img and data-text into the Bootstrap offcanvas #flp-work-sheet and opens it. "Show more reviews" reveals the reviews marked hidden and moves focus to the first new one.
Message opens #flp-message, which requires at least 10 characters. Hire opens #flp-hire, a form with project type, budget (segmented radio buttons), start, details (20+ characters) and email. Invalid fields get is-invalid and aria-invalid and focus moves to the first one; a valid request shows the .flp-done confirmation.
Customization
--flp-green,--flp-green-2and--flp-green-softon.flp-app: the primary colour, hover shade and chip background.--flp-staron.flp-app: the colour of the rating stars.height: calc(164px + env(safe-area-inset-top))on.flp-cover: makes the header photo taller or shorter.-webkit-line-clamp: 3on.flp-about: how many lines of About are visible before "Read more".data-title,data-imganddata-texton each.flp-work__item: the content of the portfolio sheet..flp-bar__fill--92and the other width classes: set the rating breakdown bars to your own percentages.- The
window.setTimeoutin the hire form submit handler: replace it with afetch()to your backend.
Use cases
- Freelance marketplaces: a designer, developer or writer profile with a direct hire request
- Home service apps: show a cleaner's or electrician's rating, reviews and work photos
- Coaching and tutoring platforms: present skills and reviews before booking a session
Accessibility
Each section is labelled by its heading. Icon-only buttons have aria-label values, the verified badge and star ratings use role="img" with text labels, and the rating bars include hidden "stars:" text. Read more and Show more reviews use real buttons with aria-expanded where it applies. Sheets are offcanvas dialogs that trap focus, close with Escape or the backdrop, and return focus to the button that opened them. Form errors are linked with aria-describedby, and toasts use role="status".
Usage notes
Requires Bootstrap 5 (offcanvas) and Bootstrap Icons; Figtree is loaded from Google Fonts. The back button has no action; connect it to your router.