# Antonija Pek > Antonija Pek is a Lead Product Designer and design engineer in Helsinki, Finland, who ships production code. She has 15+ years of product design experience at Yousician, Wolt, and AI startups, and she designed, coded, and shipped Vocabbie, an AI language tutor for iOS and Android, on her own. ## Facts - Name: Antonija Pek - Title: Lead Product Designer. Also describes herself as a design engineer and a product designer who ships code. - Location: Helsinki, Finland. Works with startups in Finland, Europe, and worldwide. - Current role: Lead Product Designer at Yousician, on the GuitarTuna team (2024 to present). - Experience: 15+ years of product design. Yousician, Wolt, Wudpecker, Epicbrief, Nosto, Singa. - Code: React, Svelte, SvelteKit, Next.js, TypeScript on the web; React Native and Expo on mobile; Supabase; Figma Plugin API. - Vocabbie: AI language tutor on iOS and Android that she designed, coded, and shipped alone. React Native, Expo, TypeScript, Supabase, TanStack Query, Reanimated, RevenueCat, PostHog. Speech grading, AI-generated flashcard decks. Opened in 99 countries, 42 languages studied, paying subscribers in Finland, Sweden, Germany, Slovakia and Croatia. - Dax: her own AI agent, built on the Claude Agent SDK. Reached over Telegram by voice or text. Watches Vocabbie metrics, runs her calendar, adds todos to TickTick, triages her inbox, drafts posts. - AI Party: podcast about designing with AI, hosted with Vitali Gusatinsky. - Writing: Substack "Vibe & Ship" at https://antonijapek.substack.com and https://apek.me/blog. - Contact: hi@apek.me. Book a call at https://apek.me/book. - Knows about: Product Design, UX Design, Design Engineering, Frontend Development, Mobile App Development, React Native, Expo, React, Svelte, SvelteKit, TypeScript, Supabase, AI-First Design Workflows, AI Agents, Claude Agent SDK, Design Systems, Prototyping, User Research, UX Writing, Data Analysis, Accessibility, Figma Plugins, Brand and Visual Identity. ## Pages - [Home](https://apek.me/): overview, Vocabbie, Dax, skills, testimonials, latest writing - [About](https://apek.me/about): plain-language summary and FAQ - [CV](https://apek.me/cv): print-ready CV - [Experience](https://apek.me/experience): work history - [Projects](https://apek.me/projects): apps, tools, plugins - [Blog](https://apek.me/blog): articles (RSS: https://apek.me/blog/rss.xml) - [AI Party podcast](https://apek.me/designpartypodcast) - [Impact stories](https://apek.me/stories) ## Experience - [Lead Product Designer at Yousician, 2024 - Present](https://apek.me/experience/yousician): GuitarTuna team, the most downloaded tuning app in the world (100M+ downloads) - [Senior Product Designer at Wudpecker, 2024](https://apek.me/experience/wudpecker): AI meeting summarization tool, now Userlens - [Senior Product Designer at Epicbrief, 2023 (contract)](https://apek.me/experience/epicbrief): early-stage AI startup for sales - [Senior Product Designer at Wolt, 2020 - 2023](https://apek.me/experience/wolt): launched Wolt+ subscription, B2B promotions across Europe - [Product Designer at Nosto, 2018 - 2020](https://apek.me/experience/nosto): enterprise eCommerce personalization - [Product Designer at Singa, 2017 - 2018](https://apek.me/experience/singa): karaoke apps for iOS, Android and web ## Projects - [Vocabbie](https://vocabbie.app) (Mobile app): AI language tutor, live on iOS and Android. Designed, coded, and shipped solo. React Native, Expo, TypeScript, Supabase, TanStack Query, Reanimated, RevenueCat, PostHog. - [AI Party](https://apek.me/designpartypodcast) (Podcast): Podcast about designing with AI, hosted by Antonija Pek and Vitali Gusatinsky. - [Period Or Not](https://apek.me/projects/period-or-not) (Mobile app): Private, offline-first period tracker for iOS. No accounts, no servers, no analytics. - [Pooperton](https://apek.me/projects/pooperton) (Mobile app): Digestive health tracker for iOS, SwiftUI. - [Monoset](https://monoset.design) (Design system): Minimal, monotone design system: tokens and React components. - [Perfect Cut](https://antonija.lemonsqueezy.com/checkout/buy/8bb61e4f-1455-426c-80d1-1f9abd25114e) (Tool): Podcast editor that cuts filler words (paid app). - [Icon Grid Maker](https://apek.me/projects/icon-grid-maker) (Figma plugin): Generates icon grids in Figma. - [Color Scale](https://apek.me/projects/color-scale) (Figma plugin): Generates color scales from a base color. - [Name Scrambler](https://apek.me/projects/name-scrambler) (Figma plugin): Anonymizes names and personal data in Figma files. - [Figma + Vue Starter](https://apek.me/projects/figma-vue-starter) (Open source): Starter template for Figma plugins with Vue.js. - [React Figma Starter](https://apek.me/projects/react-figma-starter) (Open source): Starter template for Figma plugins with React and TypeScript. ## Blog posts - [A 50 euro lesson in prerendering](https://apek.me/blog/a-50-euro-vercel-invoice) (2026-08-18): My website is not a one-pager anymore and my hosting bill noticed first - [New in Vocabbie: think in the language, and merge your decks](https://apek.me/blog/new-in-vocabbie-think-in-the-language) (2026-08-06): Two features that came straight from user emails - [Summer is supposed to be the slow season](https://apek.me/blog/summer-is-supposed-to-be-the-slow-season) (2026-07-27): Instead I shipped the biggest Vocabbie update so far - [Design Party is now AI Party](https://apek.me/blog/design-party-is-now-ai-party) (2026-07-03): The podcast is back, with a new name and a narrower focus - [Good builder, bad marketer](https://apek.me/blog/good-builder-bad-marketer) (2026-06-09): My own AI agent said it to my face. It was right. - [My AI agent kept forgetting everything. So I gave him a brain](https://apek.me/blog/my-ai-agent-kept-forgetting-everything) (2026-03-27): Adding long-term semantic memory to an open-source agent using Pinecone and local embeddings for exactly $0. - [I built a 'digital CMO' to escape Meta's UI hell](https://apek.me/blog/i-built-a-digital-cmo-to-escape-metas) (2026-03-11): Why I replaced my marketing dashboard with a CLI script and accidentally offended my human consultant in the process. - [Designers are shipping code now](https://apek.me/blog/designers-are-shipping-code-now) (2026-02-16): The tools changed, and the handoff is next - [Vibe coders, set up a local environment](https://apek.me/blog/vibe-coders-set-up-a-local-environment) (2026-02-16): The five-minute setup that separates pros from hobbyists ## Elsewhere - LinkedIn: https://linkedin.com/in/antonijapek - GitHub: https://github.com/antonijap - YouTube: https://www.youtube.com/@antonijapek - Substack: https://antonijapek.substack.com - X: https://x.com/antonijapek - Vocabbie: https://vocabbie.app (App Store: https://apps.apple.com/us/app/vocabbie-language-learning/id6751135436, Google Play: https://play.google.com/store/apps/details?id=me.apek.vocabbie) - Dax: https://daxfox.cc - Monoset: https://monoset.design - AI Party on Spotify: https://open.spotify.com/show/5fsndQmvi4Hl9ababIuqMR - AI Party on Apple Podcasts: https://podcasts.apple.com/fi/podcast/design-party/id1506946568 ## FAQ ### Who is Antonija Pek? I am a Lead Product Designer and design engineer in Helsinki, Finland. I have 15+ years of product design experience at Yousician, Wolt, and AI startups, and I ship production code, not just Figma files. My latest product is Vocabbie, an AI language tutor for iOS and Android that I designed, coded, and shipped on my own. ### Are you a designer or a developer? Both. I am a product designer who writes and ships production code: React, Svelte, and Next.js on the web, React Native and Expo on mobile. I design in code rather than handing off Figma files. ### Where are you based? Helsinki, Finland. I work with startups in Finland, across Europe, and worldwide. ### Who built Vocabbie? I did, alone: brand, interaction design, the React Native code, speech grading, and the release pipeline. Vocabbie is an AI language tutor on iOS and Android, built with React Native, Expo, TypeScript, and Supabase. ### What is Dax? Dax is the AI agent I built for myself on the Claude Agent SDK. I talk to it over Telegram by voice or text. It watches Vocabbie metrics, runs my calendar, adds todos to TickTick, triages my inbox, and drafts posts in my voice. ### What is the AI Party podcast? AI Party is a podcast about designing with AI that I host with Vitali Gusatinsky. It is on Spotify and Apple Podcasts and at apek.me/designpartypodcast. ### Where do you write? On Substack at antonijapek.substack.com (Vibe & Ship) and at apek.me/blog. Topics: designers shipping code, AI agents, and building products solo. ## Optional - [Full text of every page](https://apek.me/llms-full.txt) - [Sitemap](https://apek.me/sitemap.xml) --- # Full text ## Experience pages ### Lead Product Designer at Yousician, 2024 - Present Source: https://apek.me/experience/yousician I lead design on GuitarTuna, the most downloaded tuning app in the world, with 100M+ downloads and 20 million people using it every month. I own the core app experience: tuning, and everything people do with a song once they pick one. Specific results are under NDA. The public shape of the work: the core app experience, the design system, and the frontend of the new app. What I do - Own the core app experience, tuning and song playing, for an app that runs at global scale - Read the product data to find what is worth changing, then design and run the experiments. Activation, retention and revenue decide, not taste - Lead design and frontend for the rewrite from Unity to React Native. I set up the design system, built the Storybook myself, and write the frontend with AI-assisted coding, in the same repo and pull requests as the engineers - Run my own research, from interviews to usability testing, in a prototype React Native app where every idea meets testers before it reaches a roadmap - Designed onboarding, first-time user experience, paywall and re-engagement, run as experiments with product and engineering - No dedicated PM on the team this year, so I ran the product with the tech lead. I read the numbers for the quick wins, proposed what to build next and where the product should go, and made the business case for it. Discovery through data and research, on top of the design work Sidequests I've built a few internal tools to help our design team work faster and smarter: - Song Metadata Populator, instantly fills in real song data in mocks - Icon Creator Plugin, simplifies our variant and icon asset management - Multi-language Preview Tool, stress-tests designs in all supported app languages Community I also organize Yousician Design Jam (https://lu.ma/yousician-design-jam), a meetup for designers in Helsinki, and I run critique for the design team. I'm passionate about community building, I truly believe we're better (and faster) when we learn from each other. ### Senior Product Designer at Wudpecker, 2024 Source: https://apek.me/experience/wudpecker At Wudpecker (now Userlens (https://www.userlens.com/)), I worked with founders to shape an AI meeting summarization tool, focusing on intuitive UX in a fast-paced startup environment. Focus Areas My work centered on balancing technical AI capabilities with user expectations, focusing on clarity and trust. The challenge was making AI outputs feel approachable and actionable rather than overwhelming or opaque. Key Contributions - Designed the core meeting summary interface, ensuring key insights surfaced quickly - Created patterns for displaying AI confidence levels without confusing users - Worked on onboarding flows to help new users understand the product's value proposition - Iterated rapidly on feedback from early adopters to refine the experience Lessons Learned This short but intense engagement reinforced the importance of clear communication in early-stage startups and the unique challenges of designing AI products where user trust is paramount. ### Senior Product Designer at Epicbrief, 2023 (contract) Source: https://apek.me/experience/epicbrief At Epicbrief, I served as a strategic business partner in an early-stage AI startup for sales. Multifaceted Role My role was multifaceted: establishing a comprehensive design system from the ground up, conducting iterative research to align design with business goals, and shaping the product UX. Collaboration I collaborated closely with founders to align design decisions with the company's vision and business objectives. Leadership I also handled hiring and mentoring for the design department, helping to build the team from scratch. ### Senior Product Designer at Wolt, 2020 - 2023 Source: https://apek.me/experience/wolt Over three years at Wolt, I worked across different teams. I started in the Retention and Engagement team on the consumer side, then moved to the Merchant Experience division. Wolt+ My proudest moment was designing Wolt+, our customer loyalty subscription program. It was a big collaboration across teams, and our Brand team brought amazing creative energy to it. Loyalty and Promotions I worked on features that kept people coming back. On the consumer side, I helped make Wolt+ a success. For business clients, I designed tools to keep them engaged and happy. B2B Experience I redesigned the Analytics experience for our business partners. I also led the loyalty program design, giving me a full view of the user journey from consumer apps to internal tools to B2B dashboards. Internal Tooling I designed tools that made life easier for our in-house team. I also built an internal A/B testing platform that let us run experiments quickly and make decisions based on real data. Sidequests I built a collection of Figma plugins. The most popular one, Salmiakki (https://blog.wolt.com/engineering/2022/08/23/figma-plugin-scaling-design/), let designers use real data in their mockups. I worked with data engineers to make it seamless and wrote documentation so everyone could use it. Another plugin simplified our localization workflow. I also started Wolt Design Talks (https://www.meetup.com/woltdesigntalks/), a meetup series for skill-sharing and design discussions within the company. ### Product Designer at Nosto, 2018 - 2020 Source: https://apek.me/experience/nosto At Nosto (https://www.nosto.com/), I joined as a product designer in 2018. As a member of a talented team comprised of developers and a product manager, I was entrusted with the delivery of various new products and the upkeep of existing ones. Our approach to each project was rooted in an agile methodology, and we worked tirelessly in two-week sprints to bring our clients' vision to life. Dynamic Bundles My initial project, Dynamic Bundles, was particularly memorable. This solution aimed to provide eCommerce platforms with the ability to create dynamic collections with ease. Working in close collaboration with the product manager, we engaged with our clients to gain a deeper understanding of their requirements. Armed with this knowledge, we meticulously planned and designed the solution, utilizing Figma's prototyping capabilities to test and refine our ideas. The end result was a product that exceeded our clients' expectations, and I felt proud to have been a part of the team that brought it to fruition. Category Merchandising Another notable project that I was assigned was the development of a complex and innovative solution for personalizing and merchandising category pages on webshops. The project required months of research, as well as countless iterations and consultations with clients. However, our persistence paid off, and we were eventually able to develop an enterprise tool that was both flexible and simple to use. As the project was especially demanding, I was pleased to contribute my coding skills and help bring it to completion. Design System Improvements In addition to my assigned projects, I took the initiative to improve our design system. Over the course of the year, I implemented a number of improvements, such as Slack notifications, better documentation, and other refinements, all aimed at making our lives easier and more efficient. ### Product Designer at Singa, 2017 - 2018 Source: https://apek.me/experience/singa As a full-time product designer, I was hired at Singa with the responsibility of handling the UI/UX design of both the B2B and B2C apps on various platforms. In addition to my design duties, I also offered support to the sales and marketing teams with the creation of graphical assets and videography. Upon my arrival at Singa, my first task was to identify the friction points and drawbacks of the products. I used analytical tools to analyze user behavior and discovered what was hindering the growth of sales. In response, I revamped the information architecture and refreshed the design, resulting in an upward growth trend. During the redesign process, I established a design system and brand guidelines to provide a unified source of information for all team members. Solving the Problem I was tasked with revamping the iOS, Android, and web apps. I started with the web as it contained the most information about users through Google Analytics. Upon conducting a top-level audit, I found that the majority of users were searching for songs, yet the search functionality was buried three clicks deep in the interface. The personal profile was also confusing, with various buttons leading to the same views, making it challenging to upgrade to a paid subscription. Additionally, downgrading was difficult to find and generated numerous customer support tickets. The overall design was outdated and inconsistent. Summary of Issues - Complicated information architecture and navigation - Lack of clear upselling opportunities - Overly complex navigation system Process for the Web My priority was to declutter the navigation and make search easily accessible from the landing page, as most users wanted to search for a song. I discovered that the registration form contained an unused input and, after consulting with the developers, we decided to hide the username field and generate it in the backend. This resulted in a 96% increase in successful registrations. I also completely redesigned the profile section to include more functionality. I introduced an off-boarding flow to reduce churn and help users resolve issues that may lead to cancellation of the service. I also implemented a modern typeface, a grid system, and a new payment form. Process for iOS and Android Similarly, the navigation in the iOS and Android apps needed to be improved to enhance the user experience. The previous navigation consisted of a hamburger menu with a cluttered search functionality in a side-panel that took up less than 50% of the screen estate. I switched to a tab bar navigation and made search a prominent separate tab bar item. Given the importance of search in Singa, I updated the search results design to align with the latest trends and best practices. Outcome After a few months of hard work, numbers started to grow on all platforms. iOS had the biggest growth. The app even got picked up by Apple in their collections that drove even more users. Check it out live on App Store (https://apps.apple.com/app/singa), Google Play (https://play.google.com/store/apps/details?id=me.singa.singaapp), and the web (https://singa.com). ## Project pages ### Color Scale (Figma Plugin, 2024) Source: https://apek.me/projects/color-scale Generate color scales inside Figma What it is A Figma plugin that generates color scales from any base color. Pick a color, choose how many steps you want, and it creates a harmonious scale you can drop straight into your design system. Why I built it I kept doing this manually, taking a brand color and creating 10 shades by hand in every new project. It's tedious and inconsistent. So I turned it into a one-click plugin. How it works Select a color, set the number of steps, and the plugin generates a scale with proper lightness distribution. You can tweak the curve if you want more control. The output goes directly onto your canvas as named color swatches. Built with Figma Plugin API with a custom color math engine for perceptually uniform scales. Install from Figma Community (https://www.figma.com/community/plugin/1103971792306373442/color-scale) ### Figma + Vue Starter (Open Source, 2024) Source: https://apek.me/projects/figma-vue-starter Starter template for design-to-code with Vue.js What it is A starter template that connects Figma designs to a Vue.js project. It extracts design tokens from Figma and generates a matching component structure so you're not starting from scratch every time. Why I built it Every new project starts the same way: you have a Figma file and an empty code editor. Setting up the bridge between them takes hours. This template cuts that setup to minutes. What's included - Design token extraction (colors, typography, spacing) from Figma - Pre-configured Vue component structure - Hot reload dev environment - Responsive breakpoint system matching Figma frames Built with Vue.js, Vite, Figma Plugin API. View on GitHub (https://github.com/antonijap/vue-figma-starter) ### Icon Grid Maker (Figma Plugin, 2024) Source: https://apek.me/projects/icon-grid-maker Create consistent icon grids in Figma What it is A Figma plugin that generates icon grids. Select your icons, set the grid size and spacing, and it lays them out perfectly aligned in one click. Why I built it Arranging icons into a grid is one of those tasks that's simple in theory but annoying in practice. You end up nudging things pixel by pixel. This plugin does it instantly. How it works Select a set of icon components or frames, configure your grid (columns, spacing, size), and hit generate. The plugin handles alignment, distribution, and consistent sizing. Built with Figma Plugin API. Install from Figma Community (https://www.figma.com/community/plugin/915872262120014607/icon-grid-maker) ### Name Scrambler (Figma Plugin, 2024) Source: https://apek.me/projects/name-scrambler Anonymize text layers in Figma designs What it is A Figma plugin that scrambles names and personal data in your designs. One click and all text layers with names get replaced with random alternatives, keeping the same text length and format. Why I built it You're presenting a design to a client or posting it on Dribbble, and suddenly you realize there's real user data in your mockups. I got tired of manually replacing names, so I automated it. How it works Select a frame, run the plugin, and it replaces recognizable names with generated ones. The replacements match the original length so your layout doesn't break. You can restore originals if needed. Built with Figma Plugin API. Install from Figma Community (https://www.figma.com/community/plugin/900628950520349167/name-scrambler) ### Period Or Not (iOS App, 2023) Source: https://apek.me/projects/period-or-not Private period and cycle tracker. Your data never leaves your device What it is Period Or Not is a period tracking app with one rule: your data stays on your device. No accounts, no cloud sync, no analytics, no data selling. Zero-knowledge encryption. Just a simple tracker that does its job and keeps your business private. Why I built it Period tracking apps became a privacy concern after Roe v. Wade. Most popular trackers sync everything to the cloud. I wanted to build something where the data literally cannot leave your phone. How it works Log your period, get cycle predictions. The app learns your patterns over time and gives you insights on your home screen. You can export data for backup and optionally sync with your calendar, but everything stays local. The pivot The app originally had partner calendar sharing. In version 3.0, I stripped it out entirely. The more I thought about it, the more I realized sharing features created attack surface for privacy. So I deleted them on purpose and went fully local with zero-knowledge encryption instead. Less features, stronger promise. Design approach Minimal UI, fast logging. Open the app, tap, done. The home screen shows cycle insights at a glance without making you dig through dashboards. Dark and light themes both ship, and the app follows your system setting. Built with React Native, everything on-device. No Figma file exists for this one. I designed it straight in code, screen by screen, adjusting in the simulator instead of in a canvas. That's the part I'm most proud of. Download on the App Store (https://apps.apple.com/us/app/period-or-not/id6737966705) Legal Privacy Policy (/period-or-not/privacy) — what the app stores, and why none of it reaches me. Terms of Service (/period-or-not/terms) — licence, purchases, medical disclaimer, liability. ### Pooperton (iOS App, 2023) Source: https://apek.me/projects/pooperton A digestive health tracker that doesn't take itself too seriously What it is Pooperton is a digestive health tracking app for iOS. You log entries, see patterns over time, and can generate IBS reports to share with your doctor. The idea came from a simple problem: existing health trackers are either too clinical or too complicated. Nobody wants to open a sterile medical app multiple times a day. So I made something that feels light but works seriously. How it works You tap, log, done. The main screen shows your activity heatmap and streak. Over time, patterns emerge: what days are worse, what correlates with what. If you need it, the app generates a proper IBS report you can bring to a gastroenterologist. Design approach Dark UI, warm accent color, minimal chrome. The interface stays out of your way. I wanted it to feel like a utility you actually use, not a health app you download and forget. Key decisions: - One-tap logging to reduce friction - Activity heatmap borrowed from GitHub's contribution graph, familiar and glanceable - No onboarding walls, you're logging within seconds of opening - Lifetime unlock at a low price instead of a subscription Built with Designed in Figma, built in SwiftUI. I handled design, development, and App Store publishing end to end. Download on the App Store (https://apps.apple.com/fi/app/pooperton/id6753089884) ### React Figma Starter (Open Source, 2024) Source: https://apek.me/projects/react-figma-starter Starter template for design-to-code with React What it is Same idea as the Vue starter, but for React and TypeScript. A template that bridges Figma designs to a React project with automated token extraction and component scaffolding. What's included - Design token sync from Figma to CSS variables - TypeScript React component structure - Vite build system with hot reload - Testing setup with Jest and React Testing Library Built with React, TypeScript, Vite, Figma Plugin API. View on GitHub (https://github.com/antonijap/react-figma-starter) ## Blog posts ### A 50 euro lesson in prerendering Published: 2026-08-18 Source: https://apek.me/blog/a-50-euro-vercel-invoice Author: Antonija Pek My website is not a one-pager anymore and my hosting bill noticed first I got an invoice from Vercel for 50 euros. I will survive. But it is the kind of bill that only arrives when you forgot to think, so here is what I forgot. The setup The Vocabbie website used to be a small marketing page. Then it grew a blog, then generated pages, and now it has around 11,000 URLs. I had it on pay-as-you-go and never changed how pages rendered. Every one of those URLs was being rendered on request, on a serverless function, every time a crawler or a person hit it. Crawlers hit it a lot. Eleven thousand pages times a month of bots is a lot of function invocations for content that changes roughly never. The fix Prerender everything that does not need to be live. In SvelteKit that is one line per route, or one line in the root layout if you want the whole site static: export const prerender = true; Build it once, serve files from the CDN, pay nothing per request. The pages that actually need server work (a form, a search) stay dynamic. Everything else becomes HTML on disk. The lesson The mental model of "it is just my website" stopped being true and I did not update it. When a site crosses from a few pages to thousands, hosting decisions that used to be irrelevant start to matter. Check the rendering mode before the invoice does. Fifty euros is cheap tuition. I have paid more for worse lessons. ### New in Vocabbie: think in the language, and merge your decks Published: 2026-08-06 Source: https://apek.me/blog/new-in-vocabbie-think-in-the-language Author: Antonija Pek Two features that came straight from user emails Two things shipped in Vocabbie this week, and both exist because users wrote to me. Think in the language A new practice game. Instead of translating a word back to your own language, you stay inside the one you are learning: the prompt, the options, the feedback, all of it. Translating is a crutch, and the moment you can stop doing it is the moment a language starts to feel like yours. A user asked for exactly this, in a long and specific email, and it was too good an idea to leave in the inbox. Merge decks On the Learn page, swipe right on two or more decks and you can merge them into one. Also a user request. People generate a deck per topic with the AI, then end up with fifteen small decks they want to review together. Now they can. Why this matters more than the features Vocabbie has around 1,500 people using it. A handful of them take the time to write me long emails about their experience and what they wish it did. That is rare. Most feedback you get as a solo founder is a one-star review with no text, or silence. The people who write are the ones who care, and they are usually right. I read every message, and the good ideas ship within weeks, not quarters, because there is no roadmap meeting between the email and the code. That speed is the one real advantage of being one person, and I intend to keep using it. If you use Vocabbie and something bugs you, write to me. Long emails welcome. ### Summer is supposed to be the slow season Published: 2026-07-27 Source: https://apek.me/blog/summer-is-supposed-to-be-the-slow-season Author: Antonija Pek Instead I shipped the biggest Vocabbie update so far Finland empties out in July. Everyone is at a cabin. I was at my desk with the tokens cranked up, and the biggest Vocabbie update so far went live this week. What changed A full brand refresh. The old look was a placeholder that lasted nine months. The new one is clean, a little playful, and built for something you open every day. Icon, colours, type, every screen. More ways to practice. Flashcards alone do not make vocabulary stick, so there are now several modes that hit the same words from different angles. Listen and learn, speak, translate, and a new "think in the language" game that came straight from a user request. Hand-made Finnish content. Vocabbie works with any language, but I live in Finland and I am learning Finnish myself, so I wrote and reviewed a proper curriculum for it. Real sentences, the ones people actually say, and every lesson gets graded for correctness before it ships. Built in public, grown by nobody Growth so far is entirely organic. No ads, no launch, no influencer sending. It is steady rather than fast, and honestly watching strangers use something I made to learn a language is the best part of the whole project. Someone in the app has studied on 59 separate days. I did not do anything to cause that except make the thing work. The part nobody sees The update is also a big code change. New brand meant touching every screen, which meant the release gate earned its keep: golden test cases for the speech grading, a Maestro run through the main flows, an error telemetry check after the build. Nothing shipped until all of it was green. It is the reason I could push this much in one go without a rollback. If you have been waiting for the right time to start a language, this is a decent one. Vocabbie is on the App Store and Google Play. ### Design Party is now AI Party Published: 2026-07-03 Source: https://apek.me/blog/design-party-is-now-ai-party Author: Antonija Pek The podcast is back, with a new name and a narrower focus Building products kept me away from the podcast for most of a year. It is back, and it has a new name: AI Party. Why the rename Design Party started as a show about design. Somewhere along the way every episode became a show about AI anyway. What tools we use, what changed this month, what broke. Pretending it was still a general design podcast felt dishonest, so the name caught up with the content. The audience is the same: makers with taste. People who design and build, and who care about both. The first episode Vitali Gusatinsky and I talk about three things: the rebrand and why it took a year, AI overload and what to do about it, and where design tools are heading now that every one of them has a prompt box. Where to listen It is on Spotify, Apple Podcasts and the rest of the podcast apps. Search for AI Party. New episodes will come out when we have something to say, not on a schedule. That is the only promise I can keep while also shipping an app. ### Good builder, bad marketer Published: 2026-06-09 Source: https://apek.me/blog/good-builder-bad-marketer Author: Antonija Pek My own AI agent said it to my face. It was right. Dax, my personal agent, watches Vocabbie's PostHog for me. Last week I asked it for a one-line read on the business. It said: good builder, bad marketer. I have not stopped thinking about it. The numbers back it up Vocabbie ships almost every week. New practice modes, speech grading fixes, a release gate that catches regressions before they reach the stores. The app is in good shape. The install curve is not. Growth is organic, which is a polite way of saying I have done nothing to cause it. I know how to make a product. I know a lot less about making people find one. What I have tried Posting on LinkedIn when I remember. Mentioning the app at the end of a podcast episode. That is the whole list. Compared to the hours I put into the app, marketing gets scraps. Part of it is preference. Building is fun, distribution feels like homework. Part of it is that I never had to do it. At Yousician and Wolt there was a growth team. You shipped, they told people. As a solo founder that team is me, and I have been skipping the meeting. What I am going to do Treat distribution like a feature. It gets a ticket, it gets a week, it gets measured. I am starting with the things that compound: store optimisation per language, since Vocabbie is strongest in Finnish and Spanish, and one honest post a week about what I am building. Not "excited to announce". Just what happened. If you are a solo founder who cracked this, I want to hear how. Genuinely. Reply, email, anything. And if you want to learn a language, Vocabbie is on both stores. See, I am learning. ### My AI agent kept forgetting everything. So I gave him a brain Published: 2026-03-27 Source: https://apek.me/blog/my-ai-agent-kept-forgetting-everything Author: Antonija Pek Adding long-term semantic memory to an open-source agent using Pinecone and local embeddings for exactly $0. Dax is my OpenClaw agent. He runs on my machine, manages my cold outreach, posts on Twitter, builds small websites for clients, and generally does whatever I tell him to. He's been running for a while now. For most of those months, he was a goldfish. Every new session: blank slate. No memory of what we'd built last week. No memory of who I'd emailed. No memory of the rules I'd explained, corrected, and re-explained until I started typing them in ALL CAPS out of desperation. The em dash thing alone — I had to correct him on this so many times I started keeping count. If you run agents, you know this feeling. You close a session, you open a new one, you're explaining something again. Eventually, you write a rules document. Then the rules document is 400 lines. Then you're reading that 400-line rules document at session start and burning tokens just to get back to baseline. I did all of that. Then I fixed it. Flat markdown files (which work, actually) The boring first step: I made Dax write a markdown file at the end of each session. Daily logs at `~/.openclaw/workspace/memory/2026-03-26.md`. What happened, what was decided, what broke, who he emailed. There is also a `rules.md` one file, all behavioral rules, no exceptions. He reads these at session start. It works better than I expected. For a long time, this was the whole system and it was fine. The crack in it: search. "Did we already contact that guy from the German medtech company?" means reading through weeks of logs. Slow. Token-expensive. Sometimes he'd miss an entry and we'd double-contact someone. The search problem isn't something you can solve by writing better markdown. What I wanted was: given this question, find the relevant memories from the past six months. That's a vector database. Pinecone + nomic-embed-text running locally I set up a Pinecone serverless index (768 dimensions, cosine similarity). The embedding model is nomic-embed-text via Ollama, running on the same machine. I didn't want agent memory going through a third-party embedding API — it includes references to projects, people, and half-formed strategies. Ollama handles it locally. Data doesn't leave. The whole thing is one Python script. No external libraries, just urllib and some JSON. 1. Writing a memory Usage looks like this: python3 ~/.openclaw/skills/dax-memory/scripts/memory.py write \ "LinkedIn account banned after verification wall" \ --category event \ --importance 4 Categories are: fact, decision, event, rule, lesson, person, project, credential. Importance 1-5. That covers basically everything. 2. Reading at session start This runs automatically at the start of every session: python3 ~/.openclaw/skills/dax-memory/scripts/memory.py read \ "current session context rules projects recent events" \ --top-k 20 --format context It takes about two seconds. Dax gets back the 20 most relevant memories before touching anything else. 3. Bootstrapping existing files When I first set this up, I had months of logs already. I wasn't going to write 400 memories by hand, so I built a bootstrap command: python3 ~/.openclaw/skills/dax-memory/scripts/memory.py bootstrap \ --file ~/.openclaw/workspace/memory/rules.md It reads the file, chunks it, embeds each piece, and upserts to Pinecone. I started with rules.md, did a few daily logs, and ended up with 28 memories in about three minutes. What actually changed The double-contact problem went away. Before any outreach, Dax queries memory, gets back relevant history, and knows whether we've already talked to someone without reading every log file. Rules retrieval is better than I expected. I thought semantic search would help with factual recall. Turns out it's even more useful for rules, which are written in natural language and don't keyword-match reliably. "Don't use em dashes" and "avoid double dashes in output" are the same rule. Semantic search knows that. A grep doesn't. The em dash rule is importance 5. It comes back on any writing-related query now. We haven't had an incident since (well, almost). The setup today - Markdown daily logs: still exist as the source of truth for "what happened." - rules.md: still the canonical rules file. - Pinecone: sits on top as the semantic retrieval layer. - Session start: reads markdown AND queries Pinecone. - Session end: writes new memories AND appends to the log. Markdown is the backup. Pinecone is the brain. Cost: Pinecone free tier covers the first 2GB. nomic-embed-text on Ollama is free. This whole setup costs nothing to run. ### I built a 'digital CMO' to escape Meta's UI hell Published: 2026-03-11 Source: https://apek.me/blog/i-built-a-digital-cmo-to-escape-metas Author: Antonija Pek Why I replaced my marketing dashboard with a CLI script and accidentally offended my human consultant in the process. For the last year, I've been living in the code for Vocabbie. It's my baby. It's a language app designed to make flashcard creation lightning-fast, and I've poured every spare hour into it. But recently, I hit the wall every indie dev eventually face-plants into: The Marketing Void. Building the app? Honestly, these days, that's the "easy" part. We can code circles around complex problems. But if a tree falls in the forest and no one is there to download it from the App Store... did you just waste a year of your life? Entering the Meta Multiverse I decided it was time. Friday night. Me vs. Instagram Ads. As a product designer, I thought I knew what "user experience" meant. Then I opened Meta's Ads Manager. Calling that interface a "mess" is an insult to messes. It's a Frankenstein's monster of patches, legacy code, and UI decisions that seem designed to induce a migraine. It's a labyrinth where logic goes to die. I spent hours clicking through nested menus just to find a "Save" button. I felt like a genius who couldn't figure out a door handle. After days of fumbling, I finally got a campaign live. But then came the second wall: I had no idea if I was winning or losing. Is a $2.00 CPC good? Is my CTR trash? I was staring at a dashboard of numbers that felt like The Matrix, minus the cool leather coat. If you can't join 'em, automate 'em I realized I didn't want to be a media buyer. I wanted to be a hacker. So, I treated my marketing like an AI hackathon project. I sat down at the terminal and wrote a CLI script powered by Cloud Code. I built a digital CMO that lives in my command line. Now, I don't touch the Meta UI. I stay in the terminal. My script: - Monitors performance in real-time. - Kills underperforming ads before they burn my budget. - Acts as a creative director, telling me exactly what kind of video or static art I need to generate next based on the data. It's fast, it's lean, and it's slightly terrifying. The human side But here's where the story gets messy. I have a friend, a literal marketing expert. I asked her for help early on. But when I showed her my "Marketing Bot," the vibe shifted from collaborative to... icy. She wasn't just unimpressed; she was angry. She felt like I was shortcutting her years of expertise with a few lines of Python and an LLM. Suddenly, I wasn't just a dev launching an app; I was "The Gal Using AI to Replace People's Jobs." It's a weird spot to be in. I wasn't trying to devalue her. I was just trying to move at the speed of code. What's next? So, here I am: Vocabbie is live, my ads are being managed by a script that doesn't sleep, and I'm officially the villain in my friend's "AI is taking over" story. Was I wrong to automate the "human touch" out of my launch? Or is this just the new reality for indie hackers who don't have the time (or the sanity) to navigate Meta's UI? I guess we'll see what the conversion rates say. ### Designers are shipping code now Published: 2026-02-16 Source: https://apek.me/blog/designers-are-shipping-code-now Author: Antonija Pek The tools changed, and the handoff is next Designers are shipping code now. Not "learning to code" in the old sense, where you'd spend six months on freeCodeCamp and still not build anything real. This is different. At Intercom, every designer ships directly to production. One of their designers spotted a line-height issue on the messenger buttons and fixed it himself. Took less time than writing a Jira ticket to explain the problem to an engineer. At LinkedIn, Tomer Cohen killed their Associate Product Manager program and replaced it with an Associate Product Builder program, where people learn coding, design, and PM together. Designers there push actual pull requests. A CollabSoft survey found that 68% of designers think they should know how to code. But here's the part that stuck with me: 91% of developers said designers should code. Developers want this more than designers do. The tools are what changed Figma keeps inching toward code. At Config 2025 they announced Figma Make, which turns prompts or Figma files into working apps. They launched Figma Sites so designers can publish websites without leaving the tool. Their MCP server connects Figma context straight to code editors. Two-thirds of Figma's 13 million monthly users aren't even designers anymore. The tool crossed over a while ago. And then AI blew the door open. Benhur Senabathi wrote about building 15 working prototypes with Claude Code and Cursor, and shipping 3 real apps in 2025 with basic Swift knowledge. Another designer he mentioned shipped production frontend in one week using Windsurf. Built reusable components, handled the UI, passed off code ready to plug into the backend. A week. From a designer. The money follows You can see it in the funding too. Framer raised $100 million at a $2 billion valuation. 40% of YC's latest batch uses it. Lovable went from zero to $200 million ARR in 12 months. Bolt.new generated over a million websites in five months. People are building things, and they're not all engineers. The handoff is dying The old workflow: designer makes mockup, writes specs, hands off to engineer, engineer interprets specs wrong, designer files QA bugs, two weeks gone. That whole cycle is getting shorter or disappearing entirely. 91% of developers and 92% of designers say the handoff process needs work. When you can fix a button's padding in the codebase faster than you can document it in Figma, the handoff stops making sense. What stays human This doesn't mean design is turning into engineering though. The mechanical stuff, the pixel-pushing, component assembly, handoff docs, that's what's getting automated. What's left is the hard part. Knowing which of three variations actually solves the problem. Thinking through what happens downstream. Making trade-offs with incomplete information. Nielsen Norman Group said it plainly: if you're just assembling components from a design system, AI can do that. What it can't do is have taste, or the kind of judgment that comes from watching real people struggle with your product. I've been on both sides. I designed products at Wolt and Yousician for years, and now I build my own app with Claude Code and Cursor. A year ago I would've needed an engineer to ship what I can do in an afternoon. That's not an exaggeration, it's just what the tools allow now. The "should designers code" debate is done. It's been done for a while. The only question left is whether you're going to pick up the tools or wait until everyone else already has. ### Vibe coders, set up a local environment Published: 2026-02-16 Source: https://apek.me/blog/vibe-coders-set-up-a-local-environment Author: Antonija Pek The five-minute setup that separates pros from hobbyists I was talking to someone recently who was interviewing "vibe coders." The takeaway was grim. Most of them don't have a staging environment. They push code straight to production and hope for the best. I get it. Vibe coding is about speed. You prompt, you ship, you move on. But if you're building something real, something with users and their data, pushing untested code to prod is how you lose trust overnight. One bad migration, one broken auth flow, and you're scrambling to fix something you could've caught on your own machine in two minutes. You can run your entire Supabase stack locally. Your database, auth, edge functions, email, all of it. Here's my setup. OrbStack, not Docker Desktop Docker Desktop works but it's slow and heavy. OrbStack boots in about 2 seconds. Docker Desktop takes 20-30. OrbStack uses 60% less RAM and about 4x less power when idle. If you're on a Mac, just switch. orbstack.dev. Run Supabase locally Most vibe coders I've talked to develop directly against their production database. Every schema change, every edge function test, every experimental migration hits real user data. I've seen people drop columns in production because they were "just trying something." Local Supabase is free, instant, and private. No quota, no latency, no risk. The setup: 1. Install OrbStack 2. `supabase init` in your project root 3. `supabase start` pulls the images and boots everything 4. Open `localhost:54323`, that's your local dashboard Write migrations here. Break things here. When it works, push it with `supabase db push`. If something goes wrong, it goes wrong on your machine, not on your users' accounts. Mailpit for email testing Supabase Auth sends emails: signups, password resets, magic links. In production those go to real inboxes. Locally, Mailpit catches all of them. `brew install mailpit`, open `localhost:8025`. Every email your local Supabase sends shows up there instantly. You can see the HTML, the headers, the attachments. No more sending test password resets to your own Gmail and checking spam. Don't commit your .env I see this constantly. `.env` files pushed to git with Supabase keys and API tokens sitting right there. Put your secrets in `.env` at the project root. The Supabase CLI picks them up automatically. Add `.env` to `.gitignore` before your first commit. My daily workflow This is how I work on my app every day: 1. `supabase db pull` to grab any remote changes 2. Make schema changes locally in Studio or raw SQL 3. `supabase db diff -f migration-name` to generate a migration 4. `supabase db reset` to test it clean 5. If it passes, `supabase db push` 6. `supabase functions deploy` for edge functions Everything is tested before it touches prod. That's it. Five minutes to set up, and it's the difference between a professional workflow and crossing your fingers every time you deploy.