JMguidelines.fig v2.5.0 · canvas
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.

#PrincipleWhat it means in practice
01Clarity over decorationEvery element earns its place by helping someone understand or act.
02Evidence before opinionDecisions trace back to research, data or an assumption we plan to test.
03Systems, not screensToken, then component, then screen. A one-off style means the system is missing something.
04Accessible by defaultWCAG 2.2 AA is the floor, checked before a component is called done.
05Show the workDocument 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.

StagePhaseGoalKey outputsDone when
Discover01 Discover & scopeAgree on the problem, the people and how success is measured.Brief · stakeholder map · research plan · metrics baselineThe problem statement is signed off.
Research02 ResearchReplace assumptions with evidence about how people behave.Interviews · competitive audit · heuristic reviewEvery research question is answered or logged as a gap.
Define03 Synthesize & defineTurn findings into shared user models and a sharp problem.Synthesis report · personas / JTBD · journey mapThe team agrees on the 1–3 problems to solve first.
04 Information architecture & flowsMake the product navigable before it is pretty.Sitemap · user flows · content model · tree-test resultsCore tasks reach ≥ 80 % tree-test success.
Design05 Ideate & wireframeExplore cheaply, then converge on one structure.Sketches · annotated wireframes · decision logStakeholders approve structure and content.
06 UI design & design systemApply the visual language and design every state.Hi-fi screens · Figma library and variables · component specsEvery color is a token, every state exists, AA is verified.
Validate07 Prototype & validateTest with real users before the build; fix what matters most.Test plan · findings report · updated prototypeNo severity 3–4 issues remain.
Deliver08 Handoff, QA & measureTransfer intent, verify the build, then watch the numbers.Annotated Figma file · token JSON · QA checklistQA 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.

PracticeDefaultWhy
Status updateWritten, twice a week (Mon plan / Thu progress)You always know what I'm designing and what I need from you.
Review checkpointsEnd of each phase, 30–45 minDecisions get made at the cheapest moment.
FeedbackComments in Figma, resolved by me with a replyOne place, traceable, nothing lost in chat.
Decision logOne page, updated after every reviewNo re-arguing settled questions.
Definition of donePer phase, the "Done when" column above"Done" means the same thing to both of us.
FilesOne Figma file per product, pages per phase, versions namedAnyone 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.

TokenValueUse forContrast
--color-textink-900Body and headings16.5 AAA
--color-text-mutedink-600Secondary text7.7 AAA
--color-text-subtleink-500Mono labels, meta5.3 AA
--color-brandink-900Primary action, one per view (lilac offset shadow)18.3 paper on ink
--color-brand-textviolet-600Brand-colored text and links5.6 AA
--color-border-strongink-900Buttons, tags, cards, inputs, offset shadows (always 1px)≥ 3:1 non-text ✓
--color-focusviolet-600Focus ring (2px, 3px offset)5.6 non-text ✓
Sticky fillsyellow · lilac · mint · pink · coral · skyNotes, tags, stamps, highlighter, section tabsink 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.

RoleFamilyWeightsUsed for
DisplayBrygada 1918400, 500 + italicHeadlines, case titles, ribbon, quotes
TextHanken Grotesk300–600Body, UI labels, buttons
MonoFragment Mono400Frame labels, tags, measurements, code
HandMynerve400Sticky notes and greetings. Never body or UI labels.

Scale

display · 35–54
h-xl · lh 1.04 · −0.015em
Interfaces you don't have to think about.
hand · 30 · 400
greeting · Mynerve
Hello, I'm Jess 👋
display · 30–42
h-lg · lh 1.1
Selected work
display · 24–32
h-md · lh 1.15
The UI/UX process, end to end
text · 24 · 500
h-sm / case title
Guest-facing booking & stay flow
text · 20 · 500
h3 · lh 1.3
Discover & scope
text · 18 · 400
lead · lh 1.65 · muted
I design digital products from research to handoff.
text · 16 · 400
body · lh 1.65 · max 68ch
What 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 / table
You get → findings report · prioritized fixes
mono · 12 · 400
label · +0.08em · uppercase
Frame 01 · Hero / Dashboard · 1440 × 900
mono · 10.5/10
tag / measure
Design 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.

BreakpointWidthColumnsNotes
Mobile< 640416px side gutter, single-column flows
Tablet640 – 9608Two-column grids collapse, nav becomes a sheet at 860
Desktop960 – 120012Full layouts
Wide> 120012, container cappedWhitespace 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
TokenValueUse
dur-1120msColor and opacity on hover
dur-2200msButtons, toggles, small transforms
dur-3320msCards lifting, nav sheet, bubbles
dur-4600msScroll reveals, pins dropping
dur-51200msHeadline 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.
MarkLooks likeMeansRules
Frame labelMono, above the top-left cornerWhat this artboard is, and its sizeAlways present: Frame NN · Name · W × H.
Comment pinNumbered teardropA conversation happened hereViolet = designer, yellow = client. Numbered per frame.
MeasurementRed line with end ticks and a valueDistance in pxDecorative and aria-hidden; never essential.
HotspotViolet rectangle with a dotPrototype interaction starts hereOnly on things that are really interactive.
Sticky noteYellow sticky square, slightly rotatedWorkshop note or next stepMax 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.
TraitLooks likeNever like
Curious, hands-onSticky notes, handwritten notes in Mynerve, stampsClip-art, random doodles with no job
Confident, elegantBrygada 1918 with an italic accent, 1px ink linesHeavy grotesques, neon, gradients as decoration
Warm, BrazilianPaper canvas, sunlit oak desk, sunflower glasses, “ordem e design”Flag clichés, green-and-yellow everywhere
PreciseRedlines, 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.1 · Component

Button

Buttons trigger actions; links go places. A view has one primary button. Labels are verb-first and never longer than three words.

Variants Sizes States (hover any button to see it)
DefaultLabel
HoverLabel
Focus-visibleLabel
ActiveLabel
DisabledLabel
View work
11 · ContainerHeight 48 (lg) · padding-x 32 · radius 8 · 1px ink border.
22 · LabelHanken Grotesk 500 · 15 (lg) / 14 (md) · verb first.
33 · Trailing iconOptional · gap 8 · slides 3px on hover.
hug · min 44
  • Hover lifts it 1.5px, active presses it 2px, disabled fades to .45 opacity with the label still readable.
  • Minimum height 44px. Small (32px) lives only in the toolbar, with 8px of space around it.
  • Focus ring: 2px focus color, 3px offset, visible on every variant, never removed.
  • Anchors styled as buttons are real links; buttons that don't navigate are real <button> elements.
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.
11.5 · Component

Toolbar

A quiet editor toolbar: wordmark, page navigation, the EN / PT switch and a Designer view pill (Alt + G) that shows the grid and turns the pointer into an inspector, like Figma.

  • Sticky, 60px, translucent elevated background with blur, 1px bottom border.
  • The current section is marked with aria-current="true" and a 2px underline.
  • Below 860px the nav becomes a sheet toggled by a "Menu" button with aria-expanded and aria-controls.
  • Designer view is a toggle with aria-pressed; Esc closes it.
12 · Patterns

Page patterns

PatternRule
Section headerNumber chip · display title · mono meta in file terms ("Page 02 · 4 services").
Process stepsNumbered circles in sticky colors joined by a dashed line; the line turns vertical on phones.
Responsive behaviorGrids collapse from 12 → 8 → 4 columns; annotations scale with the frame and bubbles flip near edges.
Screen statesLoading, 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.

  1. Summary: client, role, timeline and status, then "In 30 seconds": the problem, what I did, where it landed.
  2. Overview: the product, who it's for and what I owned.
  3. Challenge: what was broken, for whom, and the constraints.
  4. Process: the steps this project really took, each tied to one of the six stages.
  5. Solution: key screens with annotations, the decisions behind them and the system pieces built.
  6. Validation: what was tested and what changed, when the project had room to test.
  7. Outcome: what was handed off, what shipped, what didn't and why.
  8. 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.

RuleDoDon't
CaseSentence case everywhere except mono labelsTitle Case Headlines
PersonFirst person singular ("I design")"We" when it's one person; third person
ClaimsNumbers with a source, or no numbers"Increased conversion significantly"
ButtonsVerb + object: "View work""Click here", "Learn more"
PunctuationMiddle dot (·) separates meta; em dash neverSlashes and pipes in running text
LanguageEnglish is the main version (Upwork audience); the pt-BR version keeps the same structureMixed 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.

TierHoldsExampleMay reference
PrimitiveRaw values, no meaningviolet-600 = #6445D6Nothing
SemanticIntentcolor-brand-text = {violet-600}Primitives only
ComponentLocal decisionsbutton-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.