Finnish YKI exam preparation service @ yki-testi.fi (pet project)
Full CV index — Tony Miasoedov
- Candidate: Tony Miasoedov, Senior Software Engineer
- Company: yki-testi.fi (pet project)
- Period: 2025 — present
- Role: Founder, solo developer
- Team: Solo project
- Main result: Built yki-testi.fi, a mobile-first practice service for the Finnish YKI language exam, with AI agents generating exam-accurate tasks and 1,000+ Finnish audio files; 2,500+ users a month, top-5 in Google and top-1 in Copilot search, at €0 acquisition and near-zero running costs.
Context
yki-testi.fi is a set of practice tasks for the Finnish YKI language exam.
Stack: Next.js, TypeScript, server-side rendering, PostgreSQL.
The business problem it solves:
- Practicing for the exam in conditions as close to the real ones as possible.
How the service solves it:
- Speaking tasks have crowd noise in the background that recreates the real exam setting, with an explanation of why it's there. It can be turned off.
- Timers with the real preparation time, and tasks picked at random.
- A lot of work went into collecting real exam tasks (see Tasks that feel like the real exam below).
What I did well
Tasks that feel like the real exam
The tasks are not just generated texts on a topic — they are the work of a team of agents.
First, I ran an AI agent in deep research mode over every known source of sample tasks: closed groups where people share tasks after the exam, photos of tasks, PDFs and other documents.
Based on the research, I built 2 agents: one generates tasks from a prompt, the other checks them against real exam tasks.
The real YKI exam also has traps and special rules for composing tasks. In our generator each of them is a parameter. As in the real exam, some tasks contain traps — about 9 types, spread evenly across the tasks.
An exam strategy built from 100+ closed forums
I ran an AI agent in deep research mode over forums, Reddit and WhatsApp groups in Russian, English, Hindi and other languages to collect tips, recommendations and best practices for language exams.
Based on this, I built a help page for users, YKI tips, with tips, recommendations and best practices for the exam.
Finnish audio for listening tasks
The site has 1,000+ Finnish audio files with tasks, generated with the ElevenLabs API. Problems I had to solve:
- Finnish wasn't fully supported at the time, so every voice had to be picked by hand.
- Many texts are dialogues with several speakers. ElevenLabs didn't keep a voice tied to a speaker and didn't allow setting it manually. So I split dialogues into separate audio files and merged them with FFmpeg. The whole process is automated with scripts.
Development run from a phone
I work on YKI in my free time — only 1–2 hours a month. So I automated the whole development process to work from a phone:
- Agents and workflows are orchestrated with my own spec kit, sdd-spec-kit, built for a solo developer working with Vercel and GitHub Projects.
- The project is covered with tests and has use cases for agents, so they collect the right context for any task.
- A permanent staging branch has its own credentials for the Stripe sandbox, Google Auth and other services. It runs end-to-end tests of the full flow, including payments and sign-up, and I can check any process by hand before deploying to production — online, from a phone.
Additional features
- The site works in 4 languages.
- The site has 2 color schemes.
- The front end follows Feature-Sliced Design, with a clear structure split into functional modules.
Results
yki-testi.fi launched in March 2026. So far:
- 250 new users a week and 2,500+ users a month (Google Analytics).
- Retention: ~5% of users are still active after 4 weeks — a strong figure for this type of project.
Top 5 in search and AI search (SEO and GEO):
- Copilot search: top 1.
- Google search: top 5 for key queries.
- Customer acquisition cost: €0, thanks to organic traffic.
- ChatGPT recommendations: in progress. One ranking experiment failed — and that's exactly what this pet project is for.
Costs:
- €0 running costs, thanks to distributed audio storage and the way the work is organized. Optimized API requests keep even hosting on a free plan.
- The only paid plan is the database, to back up paying users.
What I learned:
- Hands-off development fully with AI agents: setting up a deterministic pipeline, automating tests and acceptance criteria, managing the project from a phone.
- Working with GEO and agentic search, so that ChatGPT, Claude and Gemini recommend the site for key queries.
- Observability with metrics and logging for all key processes. Agents have read-only access to these metrics to monitor the service and collect context for tasks.
Stack & skills
- AI agents: Built a two-agent pipeline — one generates exam tasks, the other checks them against real YKI tasks, including ~9 types of exam traps.
- Deep research: Ran AI deep research over closed groups, photos, PDFs and 100+ forums in several languages to collect real tasks and exam tips.
- Text-to-speech: Generated 1,000+ Finnish audio files with the ElevenLabs API, hand-picking voices for Finnish.
- FFmpeg: Split multi-speaker dialogues into separate voice tracks and merged them back with FFmpeg.
- Automation: Automated audio generation and the whole development process with scripts and agents.
- Spec-driven development: Run the project in 1–2 hours a month from a phone with my own spec kit for agent orchestration.
- End-to-end testing: Covered the full flow, including payments and sign-up, with end-to-end tests on a permanent staging branch.
- CI/CD: Set up a staging branch with its own Stripe sandbox, Google Auth and service credentials before every production deploy.
- Next.js: Built the service on Next.js.
- TypeScript: Wrote the whole codebase in TypeScript.
- Server-side rendering: Render pages on the server for fast loads on phones and for SEO.
- PostgreSQL: Store users, payments and progress in PostgreSQL.
- Vercel: Deploy and preview the project on Vercel, still on the free plan.
- Payment integration: Integrated Stripe payments, tested end to end in a sandbox.
- Authentication: Integrated Google sign-in, with separate credentials for staging.
- Mobile-first: Designed the service for practice on a phone — on the go, on walks and while traveling.
- SEO: Took yki-testi.fi to the top 5 in Google for key queries, with €0 customer acquisition cost.
- GEO: Took yki-testi.fi to the top 1 in Copilot search; experimenting with ChatGPT recommendations.
- Cost optimization: Keep running costs at €0 through distributed audio storage and optimized API requests; paying only for database backups.
- Google Analytics: Track growth and retention — 250 new users a week, ~5% still active after 4 weeks.
- Feature-Sliced Design: Structured the front end with Feature-Sliced Design, split into functional modules.
- Internationalization: Made the site work in 4 languages.
- Theming: Built 2 color schemes for the site.
- Observability: Set up metrics and logging for all key processes, with read-only access for agents.
- EdTech: Built a language exam preparation service.
- Ownership: Own the product end to end — research, content, development, marketing.