Portfolify Design System
Portfolify is a one-person portfolio that looks like a printed CV set in a wide display face. Everything large is uppercase Fleuron, small reading text is Inter, and the page is held together by 2px solid black rules: under the nav, between nav cells, beside timeline entries and blog posts, between project panels and above the footer. It is black and white; the colour comes from a flat illustrated portrait and bright product photos in the work section.
Four signatures make it recognisable:
- The ruled nav. A white bar 130px tall split into two cells by a 2px vertical rule: the PORTFOLYO wordmark (260px wide) on the left, four uppercase links on the right, with a 2px rule along the bottom.
- The scroll-lit statement. Under the 109px HEY, I'M LIAM PARK, a long sentence is set one line per heading at 42px. Lines sit at 20% opacity and turn solid as they scroll into view, while the portrait stays sticky on the right.
- The black work stage. When MY WORK arrives, the page turns black and the nav inverts. Projects then slide sideways in a sticky full-screen stage, each panel 44% wide and separated by a 2px vertical rule.
- Outline pills. Categories are transparent pills with a 2px border and uppercase 14px text (CODE, UI, UX, DEVELOPMENT). There are no filled buttons.
The design is light, with one black section.
Colors
Surfaces
#FFFFFFPage background, nav, footer
#F1F1F7 · 55%The testimonial slider panel
#000000The work section and the inverted nav over it
Ink
#111314Text on primary
#111314All headings, nav links, rules, tags
#111314Body text and lists are full ink too
#111314 · 47%The timeline meta line (TESLA AT 2014-2017) only
#FFFFFFText on inverse-canvas
#FFFFFFText over project photos (rare)
Action
#FFFFFFThere is no filled button; actions are underlined text and outline pills
Lines & effects
#111314 · 20%The 2px timeline track; a short black segment moves along it
#111314Every 2px rule: nav, dividers, blog left borders, footer top, underlines
Typography
Fleuron · display-hero · shown in Syncopate (fallback)
The quick brown fox jumpsHEY, I'M LIAM PARK. 109px · 400 · 1.0 · 3px
Fleuron · headline-lg · shown in Syncopate (fallback)
The quick brown fox jumpsThe intro statement, one line per heading. 42px · 600 · 1.2
Fleuron · title-lg · shown in Syncopate (fallback)
The quick brown fox jumpsBlog titles. 30px · 400 · 1.2
Fleuron · label-nav · shown in Syncopate (fallback)
The quick brown fox jumpsNav links (two stacked copies for the roll). 21px · 700 · 1.52 · 1px
Fleuron · caption · shown in Syncopate (fallback)
The quick brown fox jumpsDates, copyright. 14px · 500 · 1.2
Fleuron · body-sm · shown in Syncopate (fallback)
The quick brown fox jumpsBody default (uppercase). 14px · 400 · 1.43
Spacing & shape
| Purpose | Value |
|---|---|
| Container | max 1200px for blog and testimonials |
| Section rhythm | 100px top and bottom; 60px at ≤991px |
| Breakpoints | 991px, 767px and 479px, plus two min-width: 1440px rules |
Spacing scale
| Token | Value | Preview |
|---|---|---|
hair | 2px | |
xs | 16px | |
sm | 25px | |
md | 30px | |
lg | 50px | |
xl | 60px | |
2xl | 100px |
Layout spacing
| Token | Value | Preview |
|---|---|---|
gutter | 72px | |
section | 100px | |
nav-height | 130px | |
sticky-offset | 200px |
Border radius
Motion
| Statement light-up | Each intro line starts at opacity 0.2 and goes to 1 as it scrolls into view |
| Fade-up on scroll | y 50px → 0, opacity 0 → 1, 600ms outExpo |
| Text roll (nav, project titles, links) | Two stacked copies in an overflow-hidden 20–30px window; the pair moves to y 0%/−100%, 300ms ease |
| Underline grow | 2px line width or height 0 → full, 300–500ms ease |
| Work section switch | Background-colour and filter (invert) actions, 300ms ease: the page turns black and the nav inverts |
| Work stage | Sticky 100vh stage in a 600vh track; panels move horizontally with scroll |
| Timeline marker | The short black segment moves down its 2px track with scroll |
| Tag and social hover | Opacity → 0.76 (tags) and 0.3 (social), 300ms |
Do’s and don’ts
- Set every heading and label in uppercase Fleuron; keep paragraphs and lists in Inter 16px weight 500.
- Draw structure with 2px solid #111314 rules: nav cells, section-label underlines, blog left borders, panel dividers.
- Use outline pills (2px border, 30px radius, 7px 19px 4px padding) for categories.
- Make actions underlined text links with a 2px line and a text roll on hover.
- Switch to #000000 with white type for the work showcase, and invert the nav with it.
- Keep images square-cornered and bright against the black stage.
- Add filled buttons, shadows or a brand colour.
- Use #111314 at 47% (ink-subtle) for anything but the 13px uppercase timeline meta; it is too light for reading text.
- Round images or the nav; only pills (30–40px) and the slider (15px) have corners.
- Mix sentence case into Fleuron text.
- Use 1px rules for main structure; 2px is the system (1px only inside the social grid).
- Set the intro statement as one paragraph; it must be one heading per line.
Example prompt
Any page in the Portfolify style
More design systems like this
Portfolio design systems, the same colors first.
Bring any of them to your AI tool
All Access unlocks all 398 design systems, ready for Claude, ChatGPT, Gemini, Cursor, v0 and Lovable, plus 400+ templates on all 5 platforms.
Get All AccessUpgrade to All AccessHow to use the Portfolify design system
Pick a file to see what it’s for and where it goes.
What it is
The whole design system in one markdown file, written for AI: every color, type style, spacing value, component and motion rule, plus do's, don'ts and a ready prompt.
Best for
Claude, ChatGPT, Gemini, Cursor and v0, or any other AI tool that builds pages or code.
How to use it
- Put
DESIGN.mdin your project and mention it in your request, or save it as.cursor/rules/portfolify.mdc - For the rule file, start it with a front-matter block that sets
alwaysApply: true, so every chat uses it - Ask: “Build a pricing page using DESIGN.md.” Cursor follows the colors, fonts, spacing and rules
- Put
DESIGN.mdin the project root - Add one line to
CLAUDE.md: “Follow DESIGN.md for all UI.” - Ask for any page or component; Claude reads the file first
- Attach
DESIGN.mdto the chat (or paste it in) - Ask: “Build a landing page in this design system.”
- Keep the file in the chat or project knowledge, so follow-up pages stay on style
What it is
Every token as data, in the W3C Design Tokens format: colors with their roles, type styles, radius, spacing, and component tokens that point at them.
Best for
Figma (Tokens Studio), Style Dictionary and other design-token tools, and build scripts.
How to use it
- In Figma, open Tokens Studio, choose Import, and pick
tokens.json - Or point Style Dictionary’s
sourceat it to generate tokens for any platform - In code, import it like any JSON file
What it is
A Tailwind CSS v4 theme: every color, font, type style, radius and spacing value becomes a Tailwind utility, like bg-canvas, text-headline-lg or rounded-md.
Best for
Tailwind v4 projects, and AI builders that write Tailwind (v0, Lovable, Bolt).
How to use it
- Save
theme.cssnext to your main CSS file - Import it after Tailwind:
@import "tailwindcss"; @import "./theme.css"; - Use the classes:
bg-canvas text-ink rounded-md p-lg
What it is
The same tokens as plain CSS variables on :root. Component values point at the color variables, so changing one color updates everything that uses it.
Best for
Any website: plain CSS, Webflow custom code, Framer, WordPress.
How to use it
- Add it to your stylesheet, or in Webflow paste it into Site settings → Custom code inside a
<style>tag - Use the variables anywhere:
color: var(--color-ink) - Change a token once and every place that uses it follows






