product and visual design

Systems people can build with, and a brand they recognise

Hi, I’m Erik. A product and visual designer based in Turku, Finland. For the past 10 years I’ve designed products, brands and visual systems for startups and large companies, including work in regulated healthcare.

Some of my work


Product Design  ·  CardioSignal

CardioSignal Design System

A token-based system engineers use directly in Flutter.

CardioSignal, F-Secure, ParkMan

Illustration

Blog, event and email illustration in vector, bitmap and watercolour.


Product work


Product Design  ·  CardioSignal

CardioSignal design system

A token-based system engineers use directly in Flutter.

Product Design  ·  Side project

Skeins

From a knitter’s problem to a working app.


Visual work


Visual Designer  ·  CardioSignal ·  F-Secure

Information Design.

Print and event design for consumer tech and regulated medtech. From data-heavy whitepapers to 3 m trade-show booths, built on consistent brand systems.

Illustration  ·  CardioSignal, F-Secure, ParkMan

Illustration

Blog, event and email illustration in vector, bitmap and watercolour.

Image of a design system and a phone

CardioSignal design system

Design system · Medtech · Accessibility · Mobile


tl;dr

I built CardioSignal’s design system from the ground up to give design and engineering one source of truth. It cut duplicate work, made every design decision traceable for medical device certification, and became the base for a second product, CardioSignal Inside, launched with Mehiläinen.

ROLEProduct Designer, sole designer on the product, 2023 to present
TEAMFlutter developers, product owner, regulatory team
SCOPEDesign system, design process, developer handover
TOOLSFigma, Zeplin, Jira, Confluence
RESULT53 components in 17 categories, a traceable process, and a second product shipped in 5 months

background

In a certified product, inconsistency is a compliance risk

CardioSignal detects signs of atrial fibrillation using the phone’s gyroscope sensors. It is Software as a Medical Device, built under IEC 62304, so every change has to be specified, reviewed and traceable.


problem

Screens, but no system

When I took over product design, there were screens but no system. In the code, the onboarding flow alone had 3 separate top bar components, 3 ways to close a screen and 4 tab components, each built from scratch. Colours were named after palettes, not roles, so nothing told developers which one to use where, and there were no accessibility requirements. What shipped often didn't match the designs.

A table showing the duplicates of the code vs the design

DECISIONS

Three calls that shaped the system

In a regulated product, speed, flexibility and compliance rarely point the same way. These decisions set the balance.


01 Borrow the structure, own the look

We built on Material 3 rather than a custom system. Flutter supports it natively, so developers could adopt the tokens without rewriting the app. A custom system would have given more visual freedom, but Material 3 was faster and carried less regulatory risk.The structure is Material 3. The look is CardioSignal’s: its own colour scheme and type, applied to Material’s roles and scale.


Material design tokens


02 Put accessibility in the system, not the screens

Accessibility is built into the tokens and components, not checked screen by screen. Every text and background pair meets WCAG AA contrast, text sizes stay readable at every level of the type scale, and every tappable component has a 48dp minimum touch target. A new screen built from the system starts accessible.


Contrast of each colour role against its matching "on" colour. AA needs 4.5:1 for body text, AAA needs 7:1.


03 Bring regulatory in early to avoid rework later

Weekly syncs with developers and the regulatory team cost time every week while the system took shape. I chose that cost over late surprises. Regulatory could flag blockers before anything was designed, so no work went into solutions they wouldn't approve.


THE SYSTEM

Foundations first, then components

I defined colour, typography, spacing and elevation first. Eight tonal palettes feed a semantic colour scheme, so a role like Primary Container means the same thing in Figma and in code.On top sit 53 components in 17 categories, including medical ones like measurement results and cardiograms. Each one ships with usage guidelines developers build from directly.


A look into the component library


COMING TOGETHER

The activity calendar, redesigned for colour blindness

The activity calendar shows every measurement from the month at a glance. Most CardioSignal users are over 50, and many have some form of colour blindness. The old calendar told results apart by colour alone, so for many of them a normal day and a day with signs of atrial fibrillation looked the same.The new calendar pairs colour with shape. Signs of AF show as a ring, a measured day as a bold date with a dot, so the result reads the same with or without colour.


Typical colour vision

Old calendar: results shown as solid green, amber and red circlesNew calendar: signs of AF shown as a red ring, measured days as a bold date with a dot

Deuteranopia simulation

Old calendar as seen with red-green colour blindness: green and red days look almost the sameNew calendar as seen with red-green colour blindness: the ring still marks signs of AF

In the simulation, the old calendar’s green, amber and red turn into the same olive. The ring still shows signs of AF.


DESIGN TO CODE

Design and code speak the same language

Tokens follow Material 3 roles, so names match one to one. If the spec says Primary Container, the code says primaryContainer.

In FigmaIn Flutter
PrimarycolorScheme.primary
On PrimarycolorScheme.onPrimary
Title LargetextTheme.titleLarge
Body MediumtextTheme.bodyMedium

Every change follows the same path, from requirement to design, build, design review, QA and release. Each step links to the last in Jira, which feeds the IEC 62304 documentation directly.


IMPACT

How CardioSignal builds products now

  • A second product in 5 months. CardioSignal Inside runs on the same system, so the team built features instead of components. Theming lets partners like Mehiläinen, one of Finland's largest private healthcare providers, apply their own brand so it feels native in their app.

  • Implementation matches design. Developers build from specs and tokens instead of guessing, so fewer fixes come up at design review.

  • Smoother handover and QA. QA tests against a single source of truth, so issues are faster to spot and settle.

  • Accessible and traceable by default. New screens inherit WCAG AA contrast, and every change links to a spec, a ticket and an approval.


REFLECTIONS

What I’d do differently

  • Make tokens live, not just named. Figma and Flutter share token names, but the values were matched by hand. Setting tokens up as Figma variables from day one would have let values sync straight to code.

  • Review with developers, not just hand over to them. Developers often saw a component for the first time at handover, when changes cost the most. Next time I’d bring them into component reviews early, while a change is still a conversation rather than a rework.


More of my work

CardioSignal, F-Secure, ParkMan

Illustration

Blog, event and email illustration in vector, bitmap and watercolour.

Designing with AI: Skeins

Design system · Medtech · Accessibility · Mobile


tl;dr

I used a real problem to test where AI fits in a design process: knitters lose count when they put their work down. I wrote the requirements, and Claude built a prototype, a design and the app. I tested, reviewed and reworked at every stage. AI made building fast. The test findings, the visual quality and the accessibility fixes came from the design process around it.


ROLEProduct designer. Sole owner from research to a working first version.
TEAMSolo, with Claude as builder and one experienced knitter for testing
SCOPEResearch, usability testing, UX, UI, design system, AI-assisted build
TOOLSClaude, Figma, FigJam, React, Storybook, Supabase
RESULTA working app, and a tested way of bringing AI tools into each step of the design process

background

A small problem to answer a bigger question

AI tools can now build prototypes, designs and code from a description. I wanted to find out what that changes for a designer, and what it doesn't. Reading about it wasn't enough, so I ran a full project with AI from start to finish.I picked a problem I knew well. When I started knitting, the stitches weren't the hard part. Counting was. Shaped pieces repeat a cycle: knit a set number of rows, then add or remove stitches. Put the work down for a few minutes and the count in your head is gone. Many knitters still track it with pen and paper, and existing apps count rows without knowing where you are in the cycle.Small enough to finish, real enough to test with users.


Process

I designed. Claude Built.

I split the work along one line: AI makes things, I decide what they should be. Every stage ran the same loop. I wrote the requirements, Claude built them, I tested or reviewed the result, then I decided what to change.


Stage 1  ·  Prototype

Something to test before anything to design

I described how the counter should work: count rows, track a repeat cycle, flag when to increase. Claude built a working prototype in an afternoon. That changed the order of my process. I could test real behaviour before I drew a single screen.


The test

I gave the prototype to an experienced knitter and told him only that it was for knitters. Two problems came up within minutes.

  • What do I enter here? He didn't know what to put in the increase interval. The field asked for a number without saying what it meant.

  • Now, or after one more row? At row seven, the app said an increase was due on the next row. He couldn't tell if that meant now or after one more row.

Both came from the same place. The app assumed people already understood how patterns are structured. AI had built exactly what I asked for, and what I asked for was unclear. The brief changed: Skeins didn't need to count better, it needed to be clearer.


Four principles

The test gave me four principles. They became the brief for every stage after.

  • One action per moment. Every screen makes the next step obvious.

  • Context over count. A number means nothing without its position. Always show where the user is in the cycle.

  • Self-evident, not taught. If the main feature needs instructions, the design is wrong.

  • Built for interruption. Pick up exactly where you stopped, even days later.


Stage 2  ·  Design

AI gave me a draft. Taste made it a product.

I gave Claude the four principles, the screens I needed and what each one had to say. It produced a complete design fast. It was also generic: default blue and white, and information in the order it happened to be listed. Everything that makes Skeins feel like Skeins came from my review.


What I changed

  • Palette. Skeins belongs to the world of yarn, so I replaced the default blue with warm colours. Sand neutrals for surfaces, terracotta for the main action, sage for increases, ember for decreases, and shadows tinted warm instead of grey.

  • The counter card. I reordered it so the eye lands on "8 of 8" first, then the progress dots, then the prompt. The row number and its position in the cycle read as one unit, following "context over count".

  • The copy. The answer to finding two was words, not layout. On the action row the card now says "Increase on this row", and the main button changes colour and becomes "Increase done". Three signals, one message.

  • The setup screen. The answer to finding one: every number has a hint in knitter's words, and a live preview confirms the result, like "You'll increase on row 8, then every 8 rows after that."

Visual: before and after. The AI-built counter next to my final card.(Screenshot to add.)
Visual: palette and logo.


Stage 3  ·  App

A system that checks the work, mine included

For the build, I gave Claude the final design and a structure to follow: foundations, primitives, compounds, screens, the same order as in Figma. AI writes code fast, so the risk isn't speed. It's drift between design and code. A design system with built-in checks is how I kept control.


Tokens

Tokens come in two layers. Primitive tokens hold raw values, like a specific sand or terracotta. Semantic tokens say what a value is for, like the main action or an increase. Components only use semantic tokens, so dark mode is a remap of one layer instead of a rewrite.


Components in Storybook

7 primitives, 4 compounds and 5 screens, documented in 60 Storybook stories. Each story is a real state: the counter at row 1, on the action row, in decrease mode, in dark mode. Storybook is where I reviewed what AI built, state by state, instead of clicking through the app hoping to find problems.


Accessibility, caught by the system

Storybook runs an automated accessibility check on every story. It flagged four colours. They came from my own palette, and AI had carried them into code without question. The worst was the orange decrease button: white text on it scored 2.9:1, below the WCAG AA minimum. I fixed each colour once, at token level, and every component that used it was fixed with it. All 60 stories now pass WCAG AA in light and dark mode.


Saving progress

Supabase handles sign-in and stores each project, and each person can only see their own. When you come back, the app opens on the row you left. Without an account it saves on the device, so nobody has to sign up to try it.
Visual: Storybook token page and component overview.
Links: View Storybook · Try the app (add once published)


Impact

A working app and a process I can repeat

  • A working app. Skeins counts rows, flags every increase and decrease, and opens where you left off.

  • A design system in code. Two layers of tokens, 16 components, 60 Storybook stories, WCAG AA in light and dark mode.

  • A faster loop. From idea to a tested prototype in an afternoon. My time went to requirements, testing and review, not to building.

  • A clear split of roles. I know now which parts of my work AI can take on, and which parts it can't.

  • Honest scale. One tester and no usage data yet. The next step is to retest the new build with the same knitter.


Reflections

AI builds what you specify, not what you mean

  • • Requirements are the design now. AI built exactly what I asked for, including my mistakes. The prototype failed its test because my spec was unclear, not because the code was wrong. Writing clear requirements became the most important design skill in the project.

  • • Test earlier, because you can. When a prototype costs an afternoon, there's no reason to design before testing. One test changed what the product was about.

  • • Taste doesn't come from the tool. AI's design worked but looked like every other app. The palette, the layout and the words came from my review.

  • • Build checks into the system. AI won't question your choices. The accessibility check found problems in a palette I picked myself. Checks that run on every component are how you stay in control when a lot of code arrives fast.

  • • Next: retest with the knitter, connect Figma variables to the code tokens so they can't drift apart, and add pattern import.

  • Contact line (Eyebrow): Want to talk about design? Get in touch


Information Design

Illustration work

Illustration · Various projects


tl;dr

Illustration is where I get to play. When a brief leaves room for it, I give a brand its own characters, scenes and details, and several of the companies I’ve worked with did exactly that. I draw in vector (Illustrator) and bitmap (Procreate), and by hand in watercolour.


illustration

CardioSignal

Blog  ·  2021 to 2024

I illustrated CardioSignal’s blog, which explains why tracking your health, and your heart health in particular, matters. Each illustration had to carry the idea of its article at a glance.



vector illustration

F-Secure

Events  ·  2018 to 2021

Tech people love their stickers. Events and internal campaigns at F-Secure kept calling for new ones, from Christmas gifts and a welcome back to the office after Covid to event promotion.



vector illustration

ParkMan

Email campaigns · 2016 to 2017

ParkMan’s onboarding emails introduced the app and shared tips for parking smarter. I illustrated them in a classic stroke style, so each email was easier and more fun to read.




More of my work

Product Design  ·  CardioSignal

CardioSignal Design System

A token-based system engineers use directly in Flutter.


About me


Hi, I’m Erik. A product and visual designer based in Turku, Finland.For the past 10 years I’ve designed products, brands and visual systems for startups and large companies, including work in regulated healthcare.I start with research and validate through testing, so decisions are grounded in evidence rather than opinion. I work closely with engineering, marketing, sales and regulatory teams, and I’m comfortable owning a product from first concept to release.My focus is clarity: experiences that are easy to understand, easy to use and accessible to people of all ages. Function comes first. Craft and visual quality are how I make it feel right.


Experience

RoleCompanyYears
Product DesignerCardioSignal2023 to now
Visual DesignerCardioSignal2021 to 2023
Brand DesignerF-Secure2020 to 2021
Visual DesignerF-Secure2018 to 2020
Product DesignerSuomen Hosting Palvelu2017 to 2018
Product DesignerParkMan2016 to 2017

Education

Bachelor of Engineering, Information Technology, Turku University of Applied Sciences


Languages

Spanish (native), English (fluent), Finnish (beginner)