Teemu Paakkunainen as a cartoon emperor in a chariot pulled by AI assistants

Teemu Paakkunainen · MSc (Econ.) · Kaarina, FinlandA marketer who ships ideas to production.

I combine digital marketing, websites and new technology into solutions that work. I use AI as a tool, but the direction, decisions and testing are my responsibility.

Looking for work right now

Looking for a permanent position in sales, digital marketing, web development or e-commerce. Turku region, Finland, or remote.

Get in touchSee the work
NowMarketing Coordinator, Flowpark Oy
EducationMSc (Econ.), University of Vaasa
BBA, Turku UAS
FocusMeta & Google Ads, GA4, WordPress, web development
LanguagesFinnish, English

Selected work

2026 · 8 projects
01 · Campaign and browser game

Yöradat (Night Trails)

A retro browser game supporting a moonlight climbing event. From concept to launch and Meta advertising.

Client
Flowpark Oy
Role
Concept, project lead, testing, launch and marketing
Year
2026
  • HTML5 Canvas
  • JavaScript
  • Supabase
  • PostgreSQL
  • WordPress
  • Meta Ads
  • Photoshop
Play the game

The brief

A moonlight climbing event on 26 September 2026 needed a campaign that ties together the chain's four parks. Instead of just an ad, we built a game: each park has its own level, the leaderboard is public and the best players win tickets. The winner chooses the park.

What I did

  • Defined the concept, the character of each level, the difficulty and the prize mechanics.
  • Led AI-assisted development with two assistants and brought their work together.
  • Tested on real devices and tracked down bugs, such as touch controls that released when a finger slid over the edge of a button.
  • Set up the database, deployed the game to the server and published two language versions in WordPress.
  • Designed the ad creative in Photoshop and set up the campaign in Meta.

After launch

  • The first days with real players showed what automated tests cannot. I moved score submission and instructions to their own screens, which removed scrolling from all 40 measured screen sizes.
  • The leaderboard now shows only the best score per nickname, and the same run cannot be submitted twice.
  • Ähtäri was added as a fourth prize park because it holds its own event on a different date. The database check constraint was extended before release.
6levels: practice, four parks and a bonus level
0external libraries or game engines
~3,100lines of code in a single HTML file
2language versions, one shared leaderboard

Scores are stored in PostgreSQL with row-level security. Email addresses are never exposed to the browser, and nicknames are moderated in the database.

02 · Service digitalisation and data protection

Safety waiver form

From a paper form to a QR code form connected to email, WordPress and Meta advertising. The form also collects data on children, so retention was built into the system.

Client
Flowpark Oy
Role
Development lead and Meta tracking
Year
2026
  • WordPress
  • Contact Form 7
  • Flamingo
  • Meta Pixel
  • Meta Ads
  • QR
  • GDPR
  • Data retention
  • WP-CLI
  • Scheduled deletion

The brief

Every adventure park visitor accepts the safety rules before going on the courses. This used to be done on paper at the till. The goal was a form that can be filled in on a phone at home or from a QR code in the park, across four parks and three languages.

What I did

  • Led the development of park and language specific forms for Turku, Tampere, Ähtäri and Vierumäki in Finnish, English and Swedish.
  • The form validates ages and required consents before submission: one adult and up to four minors at once.
  • A confirmation screen is shown at the till, and every submission is stored in WordPress and sent to the park's own email.
  • The cause of failed submissions was found: reCAPTCHA v3 scored real customers as low as 0.00. The protection was removed and submissions started working.

Retention and automatic deletion

  • The forms also collect children's names and dates of birth. That kind of data must not stay in the system forever just because nobody remembers to remove it.
  • Submissions are permanently deleted 366 days after they are sent. The deletion is automatic and it only touches the safety forms, not any other form.
  • It runs from a server schedule rather than from page loads. The old schedule had been failing silently on an outdated PHP version, which only surfaced while building the deletion.
  • For accident cases a single submission can be marked for retention. The mark always requires a stated reason and it blocks deletion until the case is closed.
  • The same limit covers the form emails that pile up in the parks' mailboxes, so the data does not live on somewhere else.
  • I documented the work technically: the data flow, the commands and the steps for handling a deletion request. A system must not depend on the person who built it.

The marketing angle

  • Language specific thank-you pages trigger custom conversions in Meta Ads.
  • People who filled in the form are excluded from retargeting, so the budget goes to those still deciding.
  • Finding: group booking ads were optimising for the safety form conversion. Every campaign needs a conversion that matches its own goal.
4parks: Turku, Tampere, Ähtäri and Vierumäki
3languages: Finnish, English and Swedish
1 + 4one adult and up to four minors on one form
366 dretention, after which a submission deletes itself
03 · Integration and data protection

Newsletter integration

Newsletter opt-ins from the safety forms now flow automatically into the email platform. Before, subscribers were picked out of a CSV export by hand.

Client
Flowpark Oy
Role
Vendor comparison, spec, build and rollout
Year
2026
  • WordPress
  • PHP
  • Contact Form 7
  • REST API
  • Background queue
  • SPF, DKIM, DMARC
  • GDPR

A follow-up to the safety form: same form, a new layer behind it.

The task

The safety forms carry an optional newsletter checkbox. Opt-ins piled up in the form archive and went nowhere. The goal was an automatic transfer into the email platform, with only the data that belongs in a marketing list. The forms also handle children's details, so data protection defined the solution.

Choosing the platform

  • I first built a version on a familiar platform with its ready-made plugin. It worked, but I dropped it: the free tier was already too small, the price would grow with the list and the data would have left the EU.
  • I read the plugin's source code. It guesses the email and name fields from the form. On a safety form the name field can be a child's name, so I defined the transferred fields myself.
  • I compared five free options and picked an EU-based service: 2,500 subscribers on the free tier, automations included. It had no ready-made form integration, so I wrote one. That also gave full control over what data moves.

The build

  • The forms, the checkbox and the fields stayed as they were. Customers notice nothing.
  • The park comes from a hidden field and the language from the form ID, so subscribers land in park-specific groups automatically.
  • The transfer runs in a background queue. An outage at the email platform can never block a safety form submission.
  • A failed transfer is retried five times with staggered delays, and every transfer is logged. I built a command line tool for checking the connection and reading the log.
  • Someone who has unsubscribed is not reactivated even if they fill in the form again. An existing subscriber is updated, no duplicates.
  • The newsletter and the group offers have their own separate consents. They are stored in different fields and never overwrite each other, so either one can be withdrawn without touching the other.
  • I authenticated the sending domain (SPF, DKIM and DMARC) and kept the strict DMARC policy even though the platform suggested a looser one. The privacy policy was updated in Finnish and English.
  • The legal basis is consent. For every subscription the time of consent and the exact wording shown on the form are stored, so the consent can be evidenced later.

What I learned

A ready-made solution is not automatically the best one, even when it works. Cost, where the data sits and what the system actually does with it decided this. The API documentation did not match reality either: field identifiers came back in a different place than the docs said, and only testing against the real response revealed it.

01Form12 forms, 4 parks, 3 languages
02Filteronly opt-ins, only the fields that are needed
03Queuefive retries, every transfer logged
04Email platformpark groups, service based in the EU
TransferredEmail, park, form language and the consent: timestamp, checkbox text and source.
Not transferredNames, dates of birth, phone numbers or any details about children.
12forms feeding subscribers in automatically
325existing subscribers migrated and grouped by park
0 €per month, against roughly 13 $/month for the alternative
4data points transferred: email, park, language and consent
04 · Client work and restaurant site

Hamptown Burger

A site for two restaurants that tells guests what is on offer and moves them to a booking. Menu, lunch, table reservations and gift cards in one place.

Client
Hamptown Burger, Tampere and Hämeenlinna
Role
Build and the technical side, worked as a pair
Year
2023
  • WordPress
  • Site build
  • TableOnline
  • Booking flow
  • Gift card sales
  • WP Rocket
  • Cloudflare
  • Cookie consent
hamptownburger.fi

The task

A restaurant site is not there to look good. It is there to say what is on offer, get the guest to book a table, and sell gift cards even when the kitchen is closed. This was client work, built as a pair. I was responsible for the build and the technical side.

What we built

  • A menu in five sections and over forty items with prices. Dietary options are on the list itself, so nobody has to ask.
  • A lunch page by weekday, with Wednesday burger day on top of it. The staff update the list themselves without anyone touching code.
  • The burger of the month on the front page with drink pairings. It is also the strongest upsell spot on the site.
  • Two locations on one site, each with its own details, opening hours and booking link.

Booking and sales

  • Table reservations go to TableOnline through location-specific links, so the guest does not have to pick the restaurant twice.
  • Digital gift cards are bought through TableOnline. The gift card is the one thing the site sells directly, and it sells while the restaurant is closed.
  • Corporate orders and groups have a path of their own, because a single order there is worth more than one table.

Tech and upkeep

  • WordPress was chosen so the restaurant updates the lunch and the monthly burger itself. A site must not depend on the person who built it.
  • Performance was handled with caching and Cloudflare, because lunchtime traffic arrives on phones and in spikes.
  • Cookie consent and a privacy policy were in place from the start, since the site has tracking and social integrations.

Published in 2023 and still in production in the same shape. Upkeep sits with the client.

01Menu and lunchwhat is on offer, prices and dietary options
02Burger of the monthfront page feature with drink pairings
03Table bookingTableOnline, a separate link per restaurant
04Gift cardrevenue even when the restaurant is closed
2restaurants on one site: Tampere and Hämeenlinna
40+items on the menu with prices, in five sections
3paths that make money: booking, gift card and corporate orders
2023published, still in production in the same shape
05 · Website and booking flow

Rukanhuvila

A luxury villa website redesign: one lightweight page, its own booking calendar and two languages.

Property
Rental villa, Ruka (my own business)
Role
Design, build and launch
Year
2026
  • HTML
  • CSS
  • JavaScript
  • PHP
  • iCal
  • Schema.org
  • hreflang
rukanhuvila.fi

Starting point

The old 2022 Elementor site worked but did not sell. The look did not match the price level, availability was not visible and every enquiry went through email.

What I did

  • Merged six subpages into one page that carries the whole story and the booking flow.
  • Built a calendar that reads the owner's phone calendar. The server extracts only the dates from the feed, so guest names never leave the server.
  • Every booking request is logged before sending, so nothing is lost even if email fails. Spam protection uses a honeypot field and a timing check, no CAPTCHA.
  • The price list detects the current season from the date and ski holiday weeks from the week number.
  • Finnish and English at their own URLs, structured data as a lodging business and HTTPS enforced.
3 → 0.2 MBgallery image weight
92 KBwhole page, no frameworks or tracking scripts
0clicks of upkeep: bookings come from the phone
2languages with hreflang tags
06 · Concept and customer journey

Telecom operator online store

A working concept of a fibre operator's online store: from availability check to order and upselling to existing customers.

Context
Made for a job interview at Lounea
Role
Customer journey, UI, measurement and integration thinking
Year
2026
  • UX
  • Customer journey
  • Conversion
  • A/B testing
  • CRM integration
  • Event tracking

A concept, not a Lounea service. Subscription prices are invented examples. Device prices, product names and the visual style come from the public lounea.fi site. No orders can be placed.

Core idea

For fixed broadband there is no product list until the address is known. So the journey starts with an availability check, and the address shapes everything after it: products, price, recommended equipment and whether an installation visit is needed.

Key solutions

  • The cart separates monthly and one-off fees and shows the total contract value, the number worth tracking in sales and CRM.
  • Checkout verifies that the order will work. Suggesting a missing router is not upselling, it is a prevented support call.
  • Every recommendation logs whether it was shown, accepted or skipped. A rule that everyone skips should be removed.
  • Existing customers see upgrades as a price difference, and the order goes to CRM as a contract change, not a new customer.
  • A technical view shows what data the journey produces and where it would go.
07 · Portfolio and API

paakkun.ai

This site. Hand written, in two languages, with its own API for stock quotes and animations without a single library.

Subject
My own portfolio
Role
Design, build, deploy and upkeep
Year
2026
  • HTML
  • CSS
  • JavaScript
  • Canvas 2D
  • Cloudflare Workers
  • REST API
  • Caching
  • hreflang
  • Schema.org
  • Accessibility
You are on this page

The task

A portfolio should show the skill, not describe it. So this site is written line by line. No CMS, no ready-made theme, no JavaScript libraries. Every movement and every request is my own code, and I can explain all of it.

The quotes API

  • The PAAK ticker at the top is a joke, but the quotes next to it are real. They come through a Cloudflare Worker that sits between the site and the data provider.
  • The API key is a server-side secret. It is not in the code and never reaches the browser.
  • Responses are cached for 15 minutes, so the provider is called about 380 times a day whether there are ten visitors or ten thousand.
  • Three levels of fallback. If the API is down, the page uses a stored file. If that is missing too, it uses the values written into the page. The visitor never sees an error.
  • One failing symbol does not take down the strip, the others keep showing.

Animations

  • The dot field on the front page reacts to the cursor and first gathers into the p. logo before scattering again. Drawn on canvas, not a video or a GIF.
  • The ticker line is drawn in real time, and as the price accelerates the logo catches fire and the whole bar tilts.
  • The 404 page is a full-screen illustration with a layout of its own.
  • Every animation respects the reduced motion setting and pauses when off screen. That saves battery and attention.

Fundamentals

  • Two languages on their own URLs, a language switch and hreflang for search engines.
  • Light and dark themes that follow the system setting and remember the manual choice.
  • Structured data, a sitemap, descriptions and share images for both languages.
  • Keyboard accessible, a skip link to the content and real alternative texts on the images.

Deployed on Cloudflare. The static files are one project and the API is a separate Worker that answers only on /api/.

01Browserasks for the quotes on page load
02Workerkey on the server, response cached for 15 min
03Providerfour symbols, one failure does not break the rest
04Tickerquotes on screen, a file as backup
0JavaScript libraries, all code my own
2languages on their own URLs with hreflang
15 mincache, about 380 API calls a day
3fallback levels, the visitor never sees an error
08 · Visual identity and match graphics

Esports graphics

Match day graphics for two esports organisations. Game day, line-up and result, every round in the same identity and always before the puck drops.

Client
Örebro Hockey eSports and SJ Gaming
Role
Design and production
Years
2018–2020
  • Adobe Photoshop
  • Adobe Illustrator
  • Visual identity
  • Templates
  • Social graphics
  • Sponsor visibility
  • Publishing schedule
  • eSHL
  • ECL Elite

The task

In competitive gaming the audience arrives through social media. The match has to be announced before it starts and the result has to go out the moment it is known. I designed and produced these graphics myself for two organisations. The esports team of the Swedish SHL club Örebro Hockey, and the Finnish organisation SJ Gaming.

What I did

  • I built a template for every type of post. Game day before the match, line-up on match day and the result straight after the final whistle.
  • The templates were made so that only the logo, the time and the numbers change for the next match. Everything else stays put, so the identity does not erode under time pressure.
  • Player portraits were cut out by hand and matched to the same light, so six different photos became one line-up.
  • Örebro's look was built around the castle in the city. A dark version for evening matches and a light one for daytime posts, with the same composition in both.

Sponsors and rules

  • Sponsor logos are part of a contract, not decoration. Up to seven of them had to fit into the same bottom bar, each one readable and none covering the image.
  • League marks sat on top and changed from match to match. The same template served both eSHL and ECL Elite fixtures.
  • Each post was needed in several sizes. Landscape for Twitter, square for Instagram and a taller version for a phone screen.

What stayed with me

This was the first place where I did visual work to a real schedule and for real contract partners. A match starts when it starts, so the graphic is finished before that. The same thinking is still there when I produce campaign material today.

The graphics were published on the teams' own channels. Örebro's matches in eSHL were also broadcast on C More.

01Fixture confirmedopponent, time and league into the template
02Game daypublished before the match, in three sizes
03Line-upplayers, numbers and roles on one frame
04Resultstraight after the match, same identity
2organisations: Örebro Hockey eSports and SJ Gaming
3post types: game day, line-up and result
7sponsor logos in one bar, all readable
2018starting year, ran through to 2020

How I work

Approach
01

Measure before building

First find out where customers drop off. A hypothesis is not knowledge, and measuring the journey step by step often shows the answer within a week.

02

Narrow but finished

One journey built end to end reveals the problems; a broad but half-finished one does not. I take work all the way to production: the server, the launch and the ads.

03

AI as a tool, responsibility with me

I use Claude and ChatGPT for code, content and analysis. I am open about what I did myself, and I test everything on real devices before release.

Background

Experience · Education · Tools

Experience

  1. 2024 onwards

    Marketing Coordinator

    Flowpark Oy, Turku

    Digital marketing for several locations, Meta and Google Ads campaigns, WordPress development and maintenance, GA4 and conversion tracking.

  2. 2021 onwards

    Owner

    Rukanhuvila.fi, Himoksen Draivi, Villa Lydia

    Running and developing a holiday rental business: digital marketing, online visibility and sales.

  3. 2023

    Marketing Trainee

    Panic Marketing Oy

    B2B marketing, Google Ads, SEO, content production and service productisation.

  4. 2016

    Account Manager

    AUTO1.com GmbH, Tampere

    B2B sales to about 200 car dealerships. About 500 vehicles sold, total value around €5M. International sales included.

Positions of trust

  1. 2023-2024

    Chair of the Board

    As Oy Adele housing company, Kaarina
  2. 2020-2021

    Team lead and international group instructor

    Project Workshop, Turku University of Applied Sciences

Education

  1. 2024-2026

    Master of Science (Economics and Business Administration), Marketing Management

    University of Vaasa

    Master's thesis: Generative AI videos on TikTok. Consumer attitudes towards AI-generated content.

    GPA 4.30 / 5 · Thesis 5 / 5
  2. 2020-2023

    Bachelor of Business Administration, Digital Business

    Turku University of Applied Sciences

    Bachelor's thesis: Using ChatGPT in content marketing.

    GPA 4.35 / 5 · Thesis 5 / 5

Studies and theses The whole story

Tools I use in my projects

Code is often written together with AI. I define, read, test, deploy and maintain it: on the server, in the database and on the publishing platform.

Advertising and analytics

  • Meta Ads Manager
  • Meta Business Suite
  • Meta Pixel
  • Custom conversions
  • Google Ads
  • Google Analytics 4

Used inPark chain campaigns, Yöradat, safety form

Websites and publishing

  • WordPress
  • Elementor
  • Block editor
  • Contact Form 7
  • Flamingo
  • Polylang
  • Autoptimize
  • Cache Enabler
  • Custom plugin (mu-plugin)

Used inflowpark.fi, Yöradat, safety form, newsletter integration

Servers and domains

  • cPanel
  • File Manager
  • Terminal
  • WP-CLI
  • Cloudflare
  • Cloudflare Workers
  • Routes and secrets
  • Caching
  • DNS
  • SPF, DKIM, DMARC
  • Google Workspace

Used inflowpark.fi, rukanhuvila.fi, paakkun.ai and its API

Code

  • HTML
  • CSS
  • JavaScript
  • PHP
  • REST API
  • Fetch and caching
  • Background queue
  • Canvas 2D
  • SVG
  • Schema.org
  • hreflang
  • Accessibility
  • iCal

Used inYöradat, Rukanhuvila, newsletter integration, this site and its animations

Data and databases

  • SQL
  • PostgreSQL
  • Supabase
  • Row Level Security
  • APIs
  • CSV imports

Used inYöradat: leaderboard and moderation. Subscriber data cleanup and import

Newsletter and privacy

  • Sender
  • Mailchimp
  • Segmentation
  • Consent handling
  • Deliverability
  • GDPR
  • Privacy policy

Used inNewsletter integration, safety form

Content production

  • Adobe Photoshop
  • Adobe Illustrator
  • Canva
  • Copywriting

Used inAd creatives, posters, campaign materials

AI

  • Claude
  • ChatGPT
  • Generative AI

Used inAll projects: development, content and analysis