· Pantelis Theodosiou · Projects  · 3 min read ·

0 views

DYPA Published a 30MB PDF - I Built a Search Engine for It in a Couple of Hours

When DYPA published results as a 30MB PDF, I built a fast search engine using Vue3, PocketBase, and Linux tools to help thousands find their results instantly. A real-world solution for digital public services.

When DYPA published results as a 30MB PDF, I built a fast search engine using Vue3, PocketBase, and Linux tools to help thousands find their results instantly. A real-world solution for digital public services.

When DYPA (the Greek Public Employment Service) released the results for their recent training program for unemployed and employed citizens, thousands of people rushed online to find out if they were accepted.

Except… there was a small problem.

Instead of a nice little search box, we got a 30MB PDF.

Yes. A single giant PDF file. No filters, no search. Just thousands of lines containing something called a KAYAS (ΚΑΥΑΣ – aka the submission code for your application). The only way to find out if you made it? Scroll. For minutes. Maybe hours.

I thought to myself: “Surely we can do better than this.”
So I built a tool.

👨‍💻 Code on GitHub

The idea

The goal was simple:
Give people a fast way to check if their KAYAS code is in the “accepted” or “rejected” list.

I didn’t want people to have to deal with the PDF madness. So I downloaded the massive document, and decided to break it down.

How I built it

The process:

  1. PDF slicing
    I split the original PDF into two:
    • One with all the accepted KAYAS codes
    • One with all the rejected ones
      This made it easier to work with.
  2. Text extraction with Linux tools
    Using the power of the terminal:
    pdftotext file.pdf - | grep -E '^[0-9]{10}$' > kayas.txt
    That helped extract all KAYAS codes from the text content.
  3. Pocketbase for storing the results
    A lightweight and fast backend, perfect for projects like this. I stored each KAYAS with a status: "accepted" or "rejected".
  4. The frontend which is a clean SPA
    Built using Vue3, PrimeVue for UI components and TailwindCSS for styling. The UI is simple as it has a search field for the KAYAS code, a table that presents the results and instant feedback on whether you made it or not.

Tech stack

  • Linux (Debian-based distro)
  • pdftotext, grep for parsing
  • Pocketbase – self-hosted, lightweight backend
  • Vue 3 + PrimeVue + TailwindCSS
  • Deployed here: brs-dypa.theodosiou.me

Why I made this

Let’s be honest: when a government platform gives you a 30MB PDF and says “Good luck”, it’s hard not to laugh.

But this isn’t just about DYPA. This is about how digital services should work in 2025.

Information should be:

  • Easy to access
  • Searchable
  • Fast
  • Mobile-friendly

So, this is my tiny contribution toward better digital public services. And hopefully, a helpful tool for anyone trying to find their result without getting lost in PDF purgatory.

Want to use or contribute?

Feel free to:

Let’s build better tools, even when we’re given… not-so-great ones.

If you enjoyed this post or the tool helped you, share it with a friend. Or with someone at DYPA 😅

Back to Blog

Related Posts

View All Posts »
State Management Showdown: Vuex vs Pinia

State Management Showdown: Vuex vs Pinia

A comprehensive comparison of Vuex and Pinia for Vue.js state management. Learn the key differences, code examples, and which library is best suited for your project based on API design, TypeScript support, and performance.

Comparing Vue and React in 2023: Pros and Cons

Comparing Vue and React in 2023: Pros and Cons

In-depth comparison of Vue and React frameworks for 2023. Learn about the pros and cons of each framework including learning curves, performance, ecosystems, and developer tooling to make an informed decision.

Vue 3 State to Your CSS with v-bind()

Vue 3 State to Your CSS with v-bind()

Learn how to bind Vue 3 component state directly to CSS properties using the v-bind() CSS function. Create dynamic styles with reactive state management in Vue 3 single-file components.