00 · Overview
JM Design Guidelines
v2.5.0 · CanvasStableUpdated Sep 2026Owner · Jessica Monteiro
This document is the design system and the working method behind my portfolio. I built the site the way I build products for clients: with a written process, a token-based visual language, documented components and an accessibility bar that is checked, not assumed.
The visual concept is "the file, not the render". Instead of polished screens, the site borrows the language of the tools where the work happens: labeled frames, redlines, comment pins and a grid you can switch on.
How it's organizedProcess first, then foundations (tokens), components built from tokens, patterns built from components and, last, the quality gates.
01 · Principles
Five rules that settle arguments
Principles exist to make decisions faster. When two options look equally good, the one that follows more of these wins.
| # | Principle | What it means in practice |
01 | Clarity over decoration | Every element earns its place by helping someone understand or act. |
02 | Evidence before opinion | Decisions trace back to research, data or an assumption we plan to test. |
03 | Systems, not screens | Token, then component, then screen. A one-off style means the system is missing something. |
04 | Accessible by default | WCAG 2.2 AA is the floor, checked before a component is called done. |
05 | Show the work | Document the why. A decision without a written rationale gets re-argued. |
02 · Process
The UI/UX process, end to end
Eight phases, grouped into the six stages shown on the portfolio. The order is the default; the loop is the rule. Each phase ends on an agreed criterion, so a client always knows where we are.
| Stage | Phase | Goal | Key outputs | Done when |
| Discover | 01 Discover & scope | Agree on the problem, the people and how success is measured. | Brief · stakeholder map · research plan · metrics baseline | The problem statement is signed off. |
| Research | 02 Research | Replace assumptions with evidence about how people behave. | Interviews · competitive audit · heuristic review | Every research question is answered or logged as a gap. |
| Define | 03 Synthesize & define | Turn findings into shared user models and a sharp problem. | Synthesis report · personas / JTBD · journey map | The team agrees on the 1–3 problems to solve first. |
04 Information architecture & flows | Make the product navigable before it is pretty. | Sitemap · user flows · content model · tree-test results | Core tasks reach ≥ 80 % tree-test success. |
| Design | 05 Ideate & wireframe | Explore cheaply, then converge on one structure. | Sketches · annotated wireframes · decision log | Stakeholders approve structure and content. |
06 UI design & design system | Apply the visual language and design every state. | Hi-fi screens · Figma library and variables · component specs | Every color is a token, every state exists, AA is verified. |
| Validate | 07 Prototype & validate | Test with real users before the build; fix what matters most. | Test plan · findings report · updated prototype | No severity 3–4 issues remain. |
| Deliver | 08 Handoff, QA & measure | Transfer intent, verify the build, then watch the numbers. | Annotated Figma file · token JSON · QA checklist | QA issues are under the agreed threshold. |
Success is defined at kickoff with a metrics baseline, tracked in usability rounds (task success, SUS) and read again after launch.
03 · Working together
Working agreements
Communication is part of the deliverable. These are the defaults I propose on every engagement; we adjust them at kickoff.
| Practice | Default | Why |
| Status update | Written, twice a week (Mon plan / Thu progress) | You always know what I'm designing and what I need from you. |
| Review checkpoints | End of each phase, 30–45 min | Decisions get made at the cheapest moment. |
| Feedback | Comments in Figma, resolved by me with a reply | One place, traceable, nothing lost in chat. |
| Decision log | One page, updated after every review | No re-arguing settled questions. |
| Definition of done | Per phase, the "Done when" column above | "Done" means the same thing to both of us. |
| Files | One Figma file per product, pages per phase, versions named | Anyone can find anything in under a minute. |
04 · Foundations
Color
Light-first. A warm paper and a near-black ink do most of the work, and ink is the brand. Sticky fills bring the FigJam energy; strong hues are their text-safe siblings.
Primitives · paper & ink
paper 0FFFFFF
paper 50 ★F7F3EA
paper 100EFEADD
paper 200E3DCCB
paper 300D3CAB5
ink 4008E8C80
ink 50066655B
ink 6004E4D44
ink 8002A2922
ink 900 ★16150F
ink 9500E0D09
Primitives · sticky fills
yellowFFD95A
lilacC9B8FF
mintB5EBDD
pinkFFC4DE
coralFF8A66
skyA9D4FF
Primitives · strong hues & functional
violet 6006445D6
violet 300B9A4FF
teal 7000B6F6B
teal 3007FD8CB
coral 700B83A0E
success2E7A3C
warning8A5E0B
dangerC53A2E
Semantic tokens
Components reference intent, never primitives: a change is a token swap, not a redesign. Every ratio below was measured.
| Token | Value | Use for | Contrast |
--color-text | ink-900 | Body and headings | 16.5 AAA |
--color-text-muted | ink-600 | Secondary text | 7.7 AAA |
--color-text-subtle | ink-500 | Mono labels, meta | 5.3 AA |
--color-brand | ink-900 | Primary action, one per view (lilac offset shadow) | 18.3 paper on ink |
--color-brand-text | violet-600 | Brand-colored text and links | 5.6 AA |
--color-border-strong | ink-900 | Buttons, tags, cards, inputs, offset shadows (always 1px) | ≥ 3:1 non-text ✓ |
--color-focus | violet-600 | Focus ring (2px, 3px offset) | 5.6 non-text ✓ |
| Sticky fills | yellow · lilac · mint · pink · coral · sky | Notes, tags, stamps, highlighter, section tabs | ink on them: 7.9 – 13.8 |
Rules
- Sticky fills always carry ink text, never white. Colored text uses a strong hue (violet-600, teal-700, coral-700).
- Never set text in a sticky color on paper (1.2–2.1:1). Every new pair gets measured and recorded here.
05 · Foundations
Typography
Four families with four jobs, chosen to be uncommon but never hard to read.
| Role | Family | Weights | Used for |
| Display | Brygada 1918 | 400, 500 + italic | Headlines, case titles, ribbon, quotes |
| Text | Hanken Grotesk | 300–600 | Body, UI labels, buttons |
| Mono | Fragment Mono | 400 | Frame labels, tags, measurements, code |
| Hand | Mynerve | 400 | Sticky notes and greetings. Never body or UI labels. |
Scale
display · 35–54
h-xl · lh 1.04 · −0.015emInterfaces you don't have to think about.
hand · 30 · 400
greeting · MynerveHello, I'm Jess 👋
display · 30–42
h-lg · lh 1.1Selected work
display · 24–32
h-md · lh 1.15The UI/UX process, end to end
text · 24 · 500
h-sm / case titleGuest-facing booking & stay flow
text · 20 · 500
h3 · lh 1.3Discover & scope
text · 18 · 400
lead · lh 1.65 · mutedI design digital products from research to handoff.
text · 16 · 400
body · lh 1.65 · max 68chWhat ties it together is the same habit: understand the person on the other side of the screen first, then design the smallest interface that gets them what they came for.
text · 14 · 400/500
small / button / tableYou get → findings report · prioritized fixes
mono · 12 · 400
label · +0.08em · uppercaseFrame 01 · Hero / Dashboard · 1440 × 900
mono · 10.5/10
tag / measureDesign system UI/UX Designer Ready for dev
Rules
- Body line length between 45 and 75 characters (
max-width: 68ch).
- Hierarchy comes from size and the italic, not bold. The highlighter (
em) goes on the one word that carries the meaning.
- Minimum sizes: 13px for UI text, 10px for mono meta, 18px for Mynerve, which never carries anything a task depends on.
06 · Foundations
Spacing & layout
A 4pt base with a 10-step scale: steps 1–4 inside components, 4–6 between them, 7–9 between sections. If a value isn't on the scale, the layout is wrong, not the scale.
sp-1 · 4
sp-2 · 8
sp-3 · 12
sp-4 · 16
sp-5 · 24
sp-6 · 32
sp-7 · 48
sp-8 · 64
sp-9 · 96
sp-10 · 128
A 12-column fluid grid inside a 1200px container with 24px gutters. Press Alt + G (⌥G on a Mac) on any page to see it.
| Breakpoint | Width | Columns | Notes |
| Mobile | < 640 | 4 | 16px side gutter, single-column flows |
| Tablet | 640 – 960 | 8 | Two-column grids collapse, nav becomes a sheet at 860 |
| Desktop | 960 – 1200 | 12 | Full layouts |
| Wide | > 1200 | 12, container capped | Whitespace grows, content doesn't |
07 · Foundations
Shape, borders & elevation
0
4 · inputs, chips
8 · buttons, bubbles
14 · cards, frames
full · tags, pills
The system is wireframe-first: modest corners, 1px hairlines, dashed lines for things that aren't final. Depth comes from borders and layering; shadows are small, offset and always ink. Icons are rare on purpose, because words are clearer.
08 · Foundations
Motion
Motion explains: things draw themselves, pins drop in, connections animate in the order a designer would make them. Nothing moves for decoration and everything respects prefers-reduced-motion.
standard · .2 .7 .2 1
emphasized · .05 .7 .1 1
exit · .4 0 1 1
| Token | Value | Use |
dur-1 | 120ms | Color and opacity on hover |
dur-2 | 200ms | Buttons, toggles, small transforms |
dur-3 | 320ms | Cards lifting, nav sheet, bubbles |
dur-4 | 600ms | Scroll reveals, pins dropping |
dur-5 | 1200ms | Headline rise, wireframe self-draw |
- Enter with
emphasized, exit with exit, everything else standard.
- Only animate
transform and opacity (and SVG stroke-dashoffset). No layout animation.
- Reduced motion: all durations drop to ~0, reveals render in their final state and the 3D story becomes still images.
09 · Foundations
Annotation language
The layer that makes the portfolio look like a working file: a small vocabulary borrowed from Figma and classic redlining, each mark with one fixed meaning.
Frame 12 Annotation demo 640 × 220
24
60
AUTO LAYOUT · GAP 8 · HUG
1JessicaDesigner comment: violet pin.
2ClientClient comment: yellow pin.
StickyWorkshop note or next step.
| Mark | Looks like | Means | Rules |
| Frame label | Mono, above the top-left corner | What this artboard is, and its size | Always present: Frame NN · Name · W × H. |
| Comment pin | Numbered teardrop | A conversation happened here | Violet = designer, yellow = client. Numbered per frame. |
| Measurement | Red line with end ticks and a value | Distance in px | Decorative and aria-hidden; never essential. |
| Hotspot | Violet rectangle with a dot | Prototype interaction starts here | Only on things that are really interactive. |
| Sticky note | Yellow sticky square, slightly rotated | Workshop note or next step | Max 2 lines. One per section. |
10 · Identity v2
The personality, rebuilt for this system
v2 brings back the voice of my first portfolio. Every element was kept, adapted or dropped against two filters: does it read as me and does it pass the accessibility bar.
One sentenceA designer's whiteboard on a sunny desk: paper, a fine ink pen, sticky notes and one lilac highlighter. Playful in the details, elegant in the type, precise in the grid.
| Trait | Looks like | Never like |
| Curious, hands-on | Sticky notes, handwritten notes in Mynerve, stamps | Clip-art, random doodles with no job |
| Confident, elegant | Brygada 1918 with an italic accent, 1px ink lines | Heavy grotesques, neon, gradients as decoration |
| Warm, Brazilian | Paper canvas, sunlit oak desk, sunflower glasses, “ordem e design” | Flag clichés, green-and-yellow everywhere |
| Precise | Redlines, spec chips, 12-column grid, “Ready for dev” | Misalignment passed off as “playful” |
11 · Components
Component library
Every example below uses the site's production CSS, and components consume semantic tokens only. The library also holds the section header, process step, case frame and annotation marks.
11.2 · Component
Tag
Tags label things: skills, status, categories. They are not buttons and never navigate.
DefaultBrand · status / roleProto · ready for devRedline · needs fixLive status pill
- Mono 10.5px uppercase, padding 3 × 10, pill shape, 1px border.
- Max three tags per case card. If you need more, the card needs a better title.
- The
status-pill pulsing dot is decorative and hidden on mobile.
11.3 · Component
Frame
The frame is the primary container, standing in for an artboard. It always has a label, may have selection handles, and may host annotation marks positioned absolutely inside it.
Frame Solid 220 × 120
Frame Dashed / WIP 220 × 120
Frame Selected 220 × 120
- Solid = final. Dashed = placeholder or in progress. Selected = hovered case or the hero.
- Frames sit on
bg-elevated; the page sits on bg. Never nest more than two frames.
- Labels are accurate: a 1200-wide frame says 1200.
11.4 · Component
Comment pin
A pin marks a conversation. Its bubble shows author, role and the comment. Pins are interactive: hover, click or focus to open; Esc closes; one open at a time.
1Jessica · designDesigner pin, open state.
2Client · reviewClient pin (yellow).
- A 24 × 24 teardrop with a mono number; the bubble is 190–240px wide.
- A real control:
role="button", tabindex="0", Enter or Space toggles, Esc closes all.
- The bubble opens to the right;
.pin--left flips it near the right edge.
12 · Patterns
Page patterns
| Pattern | Rule |
| Section header | Number chip · display title · mono meta in file terms ("Page 02 · 4 services"). |
| Process steps | Numbered circles in sticky colors joined by a dashed line; the line turns vertical on phones. |
| Responsive behavior | Grids collapse from 12 → 8 → 4 columns; annotations scale with the frame and bubbles flip near edges. |
| Screen states | Loading, empty, error and success are always designed. The copy says what happened and what to do next. |
13 · Patterns
Case study template
The structure every project write-up follows. Someone should get the story from the headings alone; the details reward those who read on.
- Summary: client, role, timeline and status, then "In 30 seconds": the problem, what I did, where it landed.
- Overview: the product, who it's for and what I owned.
- Challenge: what was broken, for whom, and the constraints.
- Process: the steps this project really took, each tied to one of the six stages.
- Solution: key screens with annotations, the decisions behind them and the system pieces built.
- Validation: what was tested and what changed, when the project had room to test.
- Outcome: what was handed off, what shipped, what didn't and why.
- Reflection: one thing I'd change, or what I'd measure next. Honest, short.
Freelance, ending at handoff?Most of my projects end when the file is handed off, before launch. Say so, list what was delivered, and never invent results: no numbers beats made-up numbers.
Under NDA?Keep the structure, anonymize the client, describe the category, show wireframes instead of final UI, and state which numbers are withheld rather than inventing them.
14 · Patterns
Content & voice
The voice is a designer explaining her work to a smart colleague: direct, specific, warm, no jargon for its own sake.
| Rule | Do | Don't |
| Case | Sentence case everywhere except mono labels | Title Case Headlines |
| Person | First person singular ("I design") | "We" when it's one person; third person |
| Claims | Numbers with a source, or no numbers | "Increased conversion significantly" |
| Buttons | Verb + object: "View work" | "Click here", "Learn more" |
| Punctuation | Middle dot (·) separates meta; em dash never | Slashes and pipes in running text |
| Language | English is the main version (Upwork audience); the pt-BR version keeps the same structure | Mixed languages on one page |
15 · Quality
Accessibility
Target: WCAG 2.2 level AA on every page, checked before every release. Ticked items are verified on v2.5.0.
- Text contrast ≥ 4.5:1 (1.4.3) for all body and label text.
- Non-text contrast ≥ 3:1 (1.4.11) for input borders, button boundaries and focus rings.
- Focus visible (2.4.7 / 2.4.11) with a 2px ring that is never obscured by sticky elements.
- Target size ≥ 24 × 24 (2.5.8, new in 2.2) with 44px default for primary controls.
- Keyboard operable (2.1.1): all controls including pins, toggles and mobile nav.
- Reduced motion respected (2.3.3): animations disabled under the OS preference.
- Semantics: one h1 per page, landmarks, skip link first; decorative marks are aria-hidden.
- Toggle state exposed: aria-pressed / aria-expanded / aria-current where relevant.
- Reflow (1.4.10): no horizontal scroll at 320px CSS width; tables scroll within their container.
- Screen reader pass and automated audit (VoiceOver, NVDA, axe): scheduled.
16 · Quality
Handoff & tokens
Handoff transfers intent. Specs live in Dev Mode and in tokens; annotations explain what the canvas can't show: logic, conditions, edge cases.
| Tier | Holds | Example | May reference |
| Primitive | Raw values, no meaning | violet-600 = #6445D6 | Nothing |
| Semantic | Intent | color-brand-text = {violet-600} | Primitives only |
| Component | Local decisions | button-bg-primary = {color-brand} | Semantic only |
- Naming:
category-property-variant-state, with no value words in semantic names ("brand", never "green").
- Source of truth:
tokens.json in the W3C DTCG format, mirrored by Figma variables with the same names.
- Ready frames: marked "Ready for dev", every value a variable, all states present, responsive at 375, 768 and 1440.
- Annotations for intent: what happens on click, validation rules, transitions, copy that changes.
- Names match code (Button/Primary/Md ↔
.btn.btn--primary); a walkthrough and a design QA plan close it.
17 · Changelog
Changelog
Semantic versioning: major for a renamed or removed token or a changed component API, minor for anything new, patch for fixes. Every change is checked against the principles, the accessibility checklist and the token dependency rule.
2.5.0 · “Canvas, reviewed” · Sep 2026
- Changed: the site moved to jessmonteiro.com, with a sitemap, a canonical pt-BR version and share previews in both languages.
- Fixed: accessibility gaps from a full review. Designer view needs Alt + G, the closed mobile menu leaves the tab order, the 3D chapters stay readable to screen readers and focus never hides under sticky bars.
- Changed: American English throughout and a line-by-line rewrite of the Portuguese against a shared glossary.
- Added: an "In 30 seconds" summary and stage labels on every case, and this template rewritten for freelance work.
- Added: responsive images, non-blocking Portuguese and a custom scrollbar in the cursor's style.
- Changed: these guidelines cut to about a third of their length.
Earlier releases
- 2.4.0 · “Canvas, heuristic pass”: a shorter 3D story with a “Skip to work” button, lite mode, larger EN / PT targets, real work cards, share images, structured data and a custom 404.
- 2.3.0 · “Canvas, bilingual”: a Brazilian Portuguese version of the whole site, with an EN / PT switch; English stays the main one.
- 2.2.0 · “Canvas, breathing”: light only (dark theme removed), one 8pt rhythm and the designer view easter egg.
- 2.1.0 · “Canvas, refined”: the olive ramp removed (the brand is now ink), today's four typefaces and 1px lines everywhere.
- 2.0.0 · “Canvas”: light-first paper and ink, sticky fills and strong hues, Identity v2 and the MacBook story.
- 1.0.0: the first tokens and components, the eight-phase process and the accessibility and handoff checklists.